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使用urllib2提交http post请求的方法
May 26 Python
python实现下载整个ftp目录的方法
Jan 17 Python
利用python模拟sql语句对员工表格进行增删改查
Jul 05 Python
python实现类之间的方法互相调用
Apr 29 Python
在Python中增加和插入元素的示例
Nov 01 Python
基于Python函数和变量名解析
Jul 19 Python
Python小白不正确的使用类变量实例
May 29 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 Python
python性能测试工具locust的使用
Dec 28 Python
pyqt5打包成exe可执行文件的方法
May 14 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
python实现机器人行走效果
2018/01/29 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
利用Python实现kNN算法的代码
2019/08/16 Python
python numpy存取文件的方式
2020/04/01 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
多个python文件调用logging模块报错误
2020/02/12 Python
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
VC++笔试题
2014/10/13 面试题
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
this关键字的作用
2016/01/30 面试题
标准化管理实施方案
2014/02/25 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
挂靠协议书
2015/01/27 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
Python中常见的导入方式总结
2021/05/06 Python
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP