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进行稳定可靠的文件操作详解
Dec 31 Python
python将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
用Python实现将一张图片分成9宫格的示例
Jul 05 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
使用pandas库对csv文件进行筛选保存
May 25 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
Oct 15 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 25 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 组件化编程技巧
2009/06/06 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
jquery异步调用页面后台方法‏(asp.net)
2011/03/01 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
python网络编程学习笔记(一)
2014/06/09 Python
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
谈谈Python中的while循环语句
2019/03/10 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
小学毕业寄语大全
2014/04/03 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
新学期开学标语2015
2015/07/16 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL