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通过ElementTree操作XML获取结点读取属性美化XML
Dec 02 Python
利用Python的Django框架中的ORM建立查询API
Apr 20 Python
python实现黑客字幕雨效果
Jun 21 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
Python实现的简单计算器功能详解
Aug 25 Python
Python利用itchat库向好友或者公众号发消息的实例
Feb 21 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
Feb 16 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
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
PHP实现验证码校验功能
2017/11/16 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
19个很有用的 JavaScript库推荐
2011/06/27 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
Python构造函数及解构函数介绍
2015/02/26 Python
python通过floor函数舍弃小数位的方法
2015/03/17 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
python分布式编程实现过程解析
2019/11/08 Python
python Timer 类使用介绍
2020/12/28 Python
校运会广播稿100字
2014/01/27 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
安全生产承诺书范文
2014/05/22 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
平遥古城导游词
2015/02/03 职场文书
新闻稿件写作范文
2015/07/18 职场文书
关爱空巢老人感想
2015/08/11 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
如何在C++中调用Python
2021/05/21 Python
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技