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中用函数作为返回值和实现闭包的教程
Apr 27 Python
python递归计算N!的方法
May 05 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
May 14 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
May 22 Python
通过Pandas读取大文件的实例
Jun 07 Python
python中pika模块问题的深入探究
Oct 13 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
python 提高开发效率的5个小技巧
Oct 19 Python
Python读写锁实现实现代码解析
Nov 28 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
php中批量替换文件名的实现代码
2011/07/20 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
javascript的数组和常用函数详解
2014/05/09 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
python引用DLL文件的方法
2015/05/11 Python
python多线程方式执行多个bat代码
2016/06/07 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
python读写csv文件实例代码
2019/07/05 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
简单了解python元组tuple相关原理
2019/12/02 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
标准毕业生自荐信范文
2013/11/04 职场文书
某同学的自我鉴定范文
2013/12/26 职场文书
老人祝寿主持词
2014/03/28 职场文书
金融管理专业求职信
2014/07/10 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
争做文明公民倡议书
2019/06/24 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技