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列出目录下指定文件与子目录的方法
Jul 03 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
python生成验证码图片代码分享
Jan 28 Python
如何用python整理附件
May 13 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 Python
对python读取CT医学图像的实例详解
Jan 24 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
Python笔记之工厂模式
Nov 20 Python
flask实现验证码并验证功能
Dec 05 Python
jupyter 添加不同内核的操作
Feb 06 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
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
Python中return self的用法详解
2018/07/27 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
python自动识别文本编码格式代码
2019/12/26 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
Python定义一个Actor任务
2020/07/29 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
啦啦队口号大全
2014/06/16 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
《绝招》教学反思
2016/02/20 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js