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迭代器的使用方法实例
Nov 21 Python
python函数装饰器用法实例详解
Jun 04 Python
Python 获取当前所在目录的方法详解
Aug 02 Python
Python 3中print函数的使用方法总结
Aug 08 Python
Python 实现两个服务器之间文件的上传方法
Feb 13 Python
更新修改后的Python模块方法
Mar 03 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
python 爬取B站原视频的实例代码
Sep 09 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
我的群发邮件程序
2006/10/09 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
js 图片等比例缩放代码
2010/05/13 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
python代码制作configure文件示例
2014/07/28 Python
Python fileinput模块使用介绍
2014/11/30 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
python实现手机通讯录搜索功能
2018/02/22 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
Python中反射和描述器总结
2018/09/23 Python
使用numba对Python运算加速的方法
2018/10/15 Python
python安装本地whl的实例步骤
2019/10/12 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
总裁助理岗位职责
2014/02/17 职场文书
镇创先争优活动总结
2014/08/28 职场文书
音乐会主持人开场白
2015/05/28 职场文书
大国崛起英国观后感
2015/06/02 职场文书
乱世佳人观后感
2015/06/08 职场文书
2015元旦感言
2015/12/09 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
mysql的单列多值存储实例详解
2022/04/05 MySQL