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 05 Python
Python多线程编程(二):启动线程的两种方法
Apr 05 Python
python计算对角线有理函数插值的方法
May 07 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
详解python调度框架APScheduler使用
Mar 28 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
python实现泊松图像融合
Jul 26 Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
python对Excel的读取的示例代码
Feb 14 Python
详解在OpenCV中如何使用图像像素
Mar 03 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制作静态网站的模板框架(四)
2006/10/09 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
python实现图片素描效果
2020/09/26 Python
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
师范应届生语文教师求职信
2013/10/29 职场文书
报关专员求职信范文
2014/02/22 职场文书
先进事迹演讲稿
2014/09/01 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
工厂无线对讲系统解决方案
2022/02/18 无线电