Python算法中的时间复杂度问题


Posted in Python onNovember 19, 2019

在实现算法的时候,通常会从两方面考虑算法的复杂度,即时间复杂度和空间复杂度。顾名思义,时间复杂度用于度量算法的计算工作量,空间复杂度用于度量算法占用的内存空间。

Python算法中的时间复杂度问题

本文将从时间复杂度的概念出发,结合实际代码示例分析算法的时间复杂度。

渐进时间复杂度

时间复杂度是算法运算所消耗的时间,因为不同大小的输入数据,算法处理所要消耗的时间是不同的,因此评估一个算运行时间是比较困难的,所以通常关注的是时间频度,即算法运行计算操作的次数,记为T(n),其中n称为问题的规模。

同样,因为n是一个变量,n发生变化时,时间频度T(n) 也在发生变化,我们称时间复杂度的极限情形称为算法的渐近时间复杂度,记为O(n),不包含函数的低阶和首项系数。

我们以如下 例子来解释一下:

Python算法中的时间复杂度问题

如上例子中,我们根据代码上执行的平均时间假设,计算 run_time(n) 函数的时间复杂度,如下:

Python算法中的时间复杂度问题

上述时间复杂度计算公式T(n) ,是我们对函数 run_time(n) 进行的时间复杂度的估算。当n 值非常大的时候,T(n)函数中常数项 time0 以及n的系数 (time1+time2+time3+time4) 对n的影响也可以忽略不计了,因此这里函数run_time(n) 的时间复杂度我们可以表示为 O(n)。

因为我们计算的是极限状态下(如,n非常大)的时间复杂度,因此其中存在以下两种特性:

低阶项相对于高阶项产生的影响很小,可以忽略不计。 最高项系数对最高项的影响也很小,可以忽略不计。

根据上述两种特性,时间复杂度的计算方法:

1.只取最高阶项,去掉低阶项。

2.去掉最高项的系数。

3.针对常数阶,取时间复杂度为O(1)。

我们通过下面例子理解一下常见的时间复杂度,如下:

时间复杂度:常数阶 O(1)

Python算法中的时间复杂度问题

时间复杂度:线性阶 O(n)

Python算法中的时间复杂度问题

时间复杂度:线性阶 O(n)

Python算法中的时间复杂度问题

时间复杂度:平方阶 O(n^2)

Python算法中的时间复杂度问题

时间复杂度:平方阶 O(n^2)

Python算法中的时间复杂度问题

时间复杂度:平方阶 O(n^2)

Python算法中的时间复杂度问题

时间复杂度:立方阶 O(n^3)

Python算法中的时间复杂度问题

时间复杂度:对数阶 O(logn)

Python算法中的时间复杂度问题

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

Python算法中的时间复杂度问题

练习一下

如下count_sort 函数实现了计数排序,列表中的数范围都在0到100之间,列表长度大约为100万。

Python算法中的时间复杂度问题

如上count_sort 函数的 空间复杂度为 O(n),公式如下:

Python算法中的时间复杂度问题

总结

以上所述是小编给大家介绍的Python算法中的时间复杂度问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python 将字符串转换成字典dict
Mar 24 Python
python获取远程图片大小和尺寸的方法
Mar 26 Python
python中字符串前面加r的作用
Jun 04 Python
python更新列表的方法
Jul 28 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
python接口自动化测试之接口数据依赖的实现方法
Apr 26 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
用Python识别人脸,人种等各种信息
Jul 15 Python
python mysql中in参数化说明
Jun 05 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
python 使用openpyxl读取excel数据
Feb 18 Python
python​格式化字符串
Apr 20 Python
wxPython窗体拆分布局基础组件
Nov 19 #Python
Python解压 rar、zip、tar文件的方法
Nov 19 #Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
Nov 19 #Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 #Python
python flask搭建web应用教程
Nov 19 #Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 #Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 #Python
You might like
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
PHP浮点比较大小的方法
2016/02/14 PHP
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
python动态监控日志内容的示例
2014/02/16 Python
python控制台显示时钟的示例
2014/02/24 Python
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
Servlet方面面试题
2016/09/28 面试题
会计应聘求职信范文
2013/12/17 职场文书
文艺演出策划方案
2014/06/07 职场文书
学生顶撞老师的检讨书
2014/09/17 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
公司开业主持词
2015/07/02 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
pandas中对文本类型数据的处理小结
2021/11/01 Python