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 相关文章推荐
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
Python实现统计单词出现的个数
May 28 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
python验证码识别教程之利用滴水算法分割图片
Jun 05 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
如何实现Django Rest framework版本控制
Jul 25 Python
python利用tkinter实现屏保
Jul 30 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
关于tf.nn.dynamic_rnn返回值详解
Jan 20 Python
Django choices下拉列表绑定实例
Mar 13 Python
Python telnet登陆功能实现代码
Apr 16 Python
Python 多进程、多线程效率对比
Nov 19 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
德生1994机评
2021/03/02 无线电
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
Javascript的闭包
2009/12/31 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
node使用request请求的方法
2019/12/20 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
Python实现二叉搜索树
2016/02/03 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
python中for用来遍历range函数的方法
2018/06/08 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
python里运用私有属性和方法总结
2019/07/08 Python
python如何实现单链表的反转
2020/02/10 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
三个Unix的命令面试题
2015/04/12 面试题
毕业生求职推荐信
2013/11/04 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
财务部绩效考核方案
2014/05/04 职场文书
团队队名口号大全
2014/06/06 职场文书
请假条应该怎么写?
2019/06/24 职场文书