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遍历C盘dll文件的方法
May 06 Python
老生常谈python的私有公有属性(必看篇)
Jun 09 Python
Django中Model的使用方法教程
Mar 07 Python
使用requests库制作Python爬虫
Mar 25 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
Python常用数据类型之间的转换总结
Sep 06 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
django orm模块中的 is_delete用法
May 20 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
用Python实现屏幕截图详解
Jan 22 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
杏林同学录(六)
2006/10/09 PHP
服务器端解压缩zip的脚本
2006/12/22 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
php 高性能书写
2010/12/11 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
Element Rate 评分的使用方法
2020/07/27 Javascript
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
简单介绍Python中的round()方法
2015/05/15 Python
Python+Wordpress制作小说站
2017/04/14 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
Python日期的加减等操作的示例
2017/08/15 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
风险评估实施方案
2014/03/09 职场文书
市场营销毕业生自荐信范文
2014/04/01 职场文书
超市活动计划书
2014/04/24 职场文书
环境卫生标语
2014/06/09 职场文书
机械工程师岗位职责
2014/06/16 职场文书
学校安全管理制度
2015/08/06 职场文书
2015团员个人年度总结
2015/11/24 职场文书