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 相关文章推荐
Saltstack快速入门简单汇总
Mar 01 Python
Python定时器实例代码
Nov 01 Python
Python OpenCV对本地视频文件进行分帧保存的实例
Jan 08 Python
python爬虫之自制英汉字典
Jun 24 Python
Python循环结构的应用场景详解
Jul 11 Python
python的一些加密方法及python 加密模块
Jul 11 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
Python 限定函数参数的类型及默认值方式
Dec 24 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
关于python 跨域处理方式详解
Mar 28 Python
python有几个版本
Jun 17 Python
通过实例解析python and和or使用方法
Nov 14 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截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
使用php shell命令合并图片的代码
2011/06/23 PHP
YII框架关联查询操作示例
2019/04/29 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
js数组去重的方法总结
2019/01/18 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Python数组并集交集补集代码实例
2020/02/18 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
python 检测图片是否有马赛克
2020/12/01 Python
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
外语专业毕业生自我评价分享
2013/10/05 职场文书
见习期自我鉴定
2013/11/07 职场文书
小区物业门卫岗位职责
2014/04/10 职场文书
移风易俗倡议书
2014/04/15 职场文书
运动会演讲稿50字
2014/08/25 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书