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服务器与android客户端socket通信实例
Nov 12 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
5分钟 Pipenv 上手指南
Dec 20 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
如何通过命令行进入python
Jul 06 Python
容易被忽略的Python内置类型
Sep 03 Python
python数据处理之Pandas类型转换
Apr 28 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容易忘记的知识点分享
2013/04/30 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
基于python的列表list和集合set操作
2019/11/24 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
全球在线商店:BerryLook
2019/04/14 全球购物
船舶专业个人求职信范文
2014/01/02 职场文书
七年级历史教学反思
2014/02/05 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
房屋产权证明书
2014/10/15 职场文书
会议室使用管理制度
2015/08/06 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
PyMongo 查询数据的实现
2021/06/28 Python
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android