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 相关文章推荐
关于Django显示时间你应该知道的一些问题
Dec 25 Python
一道python走迷宫算法题
Jan 22 Python
python 实现倒排索引的方法
Dec 25 Python
Python3标准库总结
Feb 19 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
给Python学习者的文件读写指南(含基础与进阶)
Jan 29 Python
python实现简单颜色识别程序
Feb 19 Python
python对XML文件的操作实现代码
Mar 27 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
基于Python实现下载网易音乐代码实例
Aug 10 Python
python基于opencv实现人脸识别
Jan 04 Python
Keras保存模型并载入模型继续训练的实现
Feb 20 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
PHP实现的策略模式示例
2019/03/20 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
python获取远程图片大小和尺寸的方法
2015/03/26 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
python中PIL安装简单教程
2016/04/21 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
鸡毛信观后感
2015/06/11 职场文书
军训通讯稿范文
2015/07/18 职场文书
七一表彰大会简报
2015/07/20 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers