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 截取 取出一部分的字符串方法
Mar 01 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
Python WSGI的深入理解
Aug 01 Python
Python使用sort和class实现的多级排序功能示例
Aug 15 Python
Pandas 缺失数据处理的实现
Nov 04 Python
python matplotlib拟合直线的实现
Nov 19 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 Python
新建文件时Pycharm中自动设置头部模板信息的方法
Apr 17 Python
Scrapy实现模拟登录的示例代码
Feb 21 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 Python
python垃圾回收机制原理分析
Apr 13 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
一个用mysql_odbc和php写的serach数据库程序
2006/10/09 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
php session的应用详细介绍
2017/03/22 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
如何实现JS函数的重载
2006/09/22 Javascript
几个高效,简洁的字符处理函数
2007/04/12 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
联想德国官网:Lenovo Germany
2018/07/04 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
EJB面试题
2015/07/28 面试题
四下基层实施方案
2014/03/28 职场文书
欢迎家长标语
2014/10/08 职场文书
升学宴答谢词
2015/01/05 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python