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中os操作文件及文件路径实例汇总
Jan 15 Python
Python自动化构建工具scons使用入门笔记
Mar 10 Python
Python中最常用的操作列表的几种方法归纳
Apr 24 Python
python数组过滤实现方法
Jul 27 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
Python smtplib实现发送邮件功能
May 22 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
Python实现某论坛自动签到功能
Aug 20 Python
python中删除某个元素的方法解析
Nov 05 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
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
linux下php上传文件注意事项
2016/06/11 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
PHP7 windows支持
2021/03/09 PHP
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
2016/08/31 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
微信小程序实现图片滚动效果示例
2018/12/05 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python遍历pandas数据方法总结
2018/02/09 Python
python实现图片彩色转化为素描
2019/01/15 Python
python支付宝支付示例详解
2019/08/22 Python
Python bytes string相互转换过程解析
2020/03/05 Python
关于Django Models CharField 参数说明
2020/03/31 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
农民工工资发放承诺书
2014/03/31 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
信用卡催款律师函
2015/05/27 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
2016小学新学期寄语
2015/12/04 职场文书