python算法表示概念扫盲教程


Posted in Python onApril 13, 2017

本文为大家讲解了python算法表示概念,供大家参考,具体内容如下

常数阶O(1)

常数又称定数,是指一个数值不变的常量,与之相反的是变量

为什么下面算法的时间复杂度不是O(3),而是O(1)。

int sum = 0,n = 100; /*执行一次*/ 
sum = (1+n)*n/2; /*执行一次*/ 
printf("%d", sum); /*行次*/

这个算法的运行次数函数是f(n)=3。根据我们推导大O阶的方法,第一步就是把常数项3改为1。在保留最高阶项时发现,它根本没有最高阶项,所以这个算法的时间复杂度为O(1)。

另外,我们试想一下,如果这个算法当中的语句sum=(1+n)*n/2有10句,即:

int sum = 0, n = 100; /*执行1次*/ 
sum = (1+n)*n/2; /*执行第1次*/ 
sum = (1+n)*n/2; /*执行第2次*/ 
sum = (1+n)*n/2; /*执行第3次*/ 
sum = (1+n)*n/2; /*执行第4次*/ 
sum = (1+n)*n/2; /*执行第5次*/ 
sum = (1+n)*n/2; /*执行第6次*/ 
sum = (1+n)*n/2; /*执行第7次*/ 
sum = (1+n)*n/2; /*执行第8次*/ 
sum = (1+n)*n/2; /*执行第9次*/ 
sum = (1+n)*n/2; /*执行第10次*/ 
printf("%d",sum); /*执行1次*/

事实上无论n为多少,上面的两段代码就是3次和12次执行的差异。这种与问题的大小无关(n的多少),执行时间恒定的算法,我们称之为具有O(1)的时间复杂度,又叫常数阶。

注意:不管这个常数是多少,我们都记作O(1),而不能是O(3)、O(12)等其他任何数字,这是初学者常常犯的错误。 

推导大O阶方法

1.用常数1取代运行时间中的所有加法常数

2.在修改后的运行次数函数中,只保留最高阶项

3.如果最高阶项存在且不是1,则去除与这个项相乘的常数

对数阶O(log2n) 

对数

如果a的x次方等于N(a>0,且a不等于1),那么数x叫做以a为底N的对数(logarithm),记作x=logaN, 。其中,a叫做对数的底数,N叫做真数。
5^2 = 25 , 记作 2= log5 25
对数是一种运算,与指数是互逆的运算。例如

① 3^2=9 <==> 2=log<3>9;

② 4^(3/2)=8 <==> 3/2=log<4>8;

③ 10^n=35 <==> n=lg35。为了使用方便,人们逐渐把以10为底的常用对数记作lgN

对数阶

int count = 1; 
while (count < n) 
{  
count = count * 2; /* 时间复杂度为O(1)的程序步骤序列 */ 
}

由于每次count乘以2之后,就距离n更近了一分。

也就是说,有多少个2相乘后大于n,则会退出循环。

由2^x=n得到x=log2n。所以这个循环的时间复杂度为O(logn)。 

线性阶O(n)  

执行时间随问题规模增长呈正比例增长

data = [ 8,3,67,77,78,22,6,3,88,21,2]
find_num = 22
for i in data:
  if i == 22:
    print("find",find_num,i )

线性对数阶O(nlog2n)

平方阶O(n^2)

for i in range(100):
 
  for k in range(100):
    print(i,k)

立方阶O(n^3)
k次方阶O(n^k),
指数阶O(2^n)。

随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

 python算法表示概念扫盲教程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python抓取网页中的图片示例
Feb 28 Python
python中安装模块包版本冲突问题的解决
May 02 Python
Python文件和流(实例讲解)
Sep 12 Python
python3 线性回归验证方法
Jul 09 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
python实现名片管理器的示例代码
Dec 17 Python
python中if及if-else如何使用
Jun 02 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
使用Keras构造简单的CNN网络实例
Jun 29 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
Python pygame实现中国象棋单机版源码
Jun 20 Python
Python常用算法学习基础教程
Apr 13 #Python
视觉直观感受若干常用排序算法
Apr 13 #Python
python常见排序算法基础教程
Apr 13 #Python
python编程实现希尔排序
Apr 13 #Python
python实现解数独程序代码
Apr 12 #Python
python访问抓取网页常用命令总结
Apr 11 #Python
Python 登录网站详解及实例
Apr 11 #Python
You might like
php你的验证码安全码?
2007/01/02 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
jquery一句话全选/取消全选
2011/03/01 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
[58:23]LGD vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python opencv检测目标颜色的实例讲解
2018/04/02 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
小学教师的个人自我鉴定
2013/10/26 职场文书
2014婚礼司仪主持词
2014/03/14 职场文书
副总经理任命书
2014/06/05 职场文书
任命书格式
2014/06/05 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
中学社团活动总结
2015/05/07 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书