在实现算法的时候,通常会从两方面考虑算法的复杂度,即时间复杂度和空间复杂度。顾名思义,时间复杂度用于度量算法的计算工作量,空间复杂度用于度量算法占用的内存空间。

本文将从时间复杂度的概念出发,结合实际代码示例分析算法的时间复杂度。

渐进时间复杂度

时间复杂度是算法运算所消耗的时间,因为不同大小的输入数据,算法处理所要消耗的时间是不同的,因此评估一个算运行时间是比较困难的,所以通常关注的是时间频度,即算法运行计算操作的次数,记为T(n),其中n称为问题的规模。

同样,因为n是一个变量,n发生变化时,时间频度T(n) 也在发生变化,我们称时间复杂度的极限情形称为算法的渐近时间复杂度,记为O(n),不包含函数的低阶和首项系数。

我们以如下 例子来解释一下:

如上例子中,我们根据代码上执行的平均时间假设,计算 run_time(n) 函数的时间复杂度,如下:

上述时间复杂度计算公式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)

时间复杂度:线性阶 O(n)

时间复杂度:线性阶 O(n)

时间复杂度:平方阶 O(n^2)

时间复杂度:平方阶 O(n^2)

时间复杂度:平方阶 O(n^2)

时间复杂度:立方阶 O(n^3)

时间复杂度:对数阶 O(logn)

随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低,时间复杂度排序如下:

练习一下

如下count_sort 函数实现了计数排序,列表中的数范围都在0到100之间,列表长度大约为100万。

如上count_sort 函数的 空间复杂度为 O(n),公式如下:

总结

以上所述是小编给大家介绍的Python算法中的时间复杂度问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

时间: 2019-11-18

python冒泡排序时间复杂度_Python算法中的时间复杂度问题相关推荐

  1. 排序算法中平均时间复杂度_操作系统中的作业排序(算法,时间复杂度和示例)...

    排序算法中平均时间复杂度 作业排序 (Job sequencing) Job sequencing is the set of jobs, associated with the job i wher ...

  2. python冒泡排序函数_python冒泡排序-Python,冒泡排序

    arr = [ 7 , 4 , 3 , 67 , 34 , 1 , 8 ] . def bubble_sort : 最近在学习Python,下面是我的一些笔记 冒泡排序 实现思路: 使用双重for循环 ...

  3. 时间复杂度(算法的渐进时间复杂度)

    0.时间复杂度:算法执行的次数(或者程序运行所需要的时间) 1.时间=执行次数 2.定义:程序T(n)随着问题规模n的增加,确定f(n)的数量级,记做 T(n)=O(f(n)),增长率(看程序潜在能力 ...

  4. python 聚类_聚类算法中的四种距离及其python实现

    欧氏距离 欧式距离也就是欧几里得距离,是最常见也是最简单的一种距离,再n维空间下的公式为: 在python中,可以运用scipy.spatial.distance中的pdist方法来实现,但需要调整其 ...

  5. python排序算法的时间复杂度_Python算法的时间复杂度和空间复杂度(实例解析)

    算法复杂度分为时间复杂度和空间复杂度. 其作用: 时间复杂度是指执行算法所需要的计算工作量: 而空间复杂度是指执行这个算法所需要的内存空间. (算法的复杂性体现在运行该算法时的计算机所需资源的多少上, ...

  6. python count函数时间复杂度_Python(算法)-时间复杂度和空间复杂度

    时间复杂度 算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,时间复杂度常用"O"表述,使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况 时间 ...

  7. js算法中的时间复杂度

    大O表示法,是通过类比的方式来描述计算机算法的效率 常见的有 符号 名称 O(1) 常数 O(log(n)) 对数 O(n) 线性 O(nlog(n)) 线性和对数乘积 O(n²) 平方 O(2^n) ...

  8. python编程模式_Python编程中的反模式

    原标题:Python编程中的反模式 这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题. 本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段. 对 ...

  9. python npv 计算公式_Python numpy 中常用的数据运算

    Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.--<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...

最新文章

  1. 自定义控件详解(六):Paint 画笔MaskFilter过滤
  2. java12章_【有书共读】java核心技术卷1--第12章
  3. android里Conversion to Dalvik format failed with error 1错误的解决
  4. 车品觉 | 大数据的价值:找到别人的“集体智慧”
  5. python接口测试覆盖率统计_从 jacoco 报告数据分析,python 脚本实现增量覆盖率统计...
  6. 利用VSCode阅读OpenFOAM源代码及其调试Debug【终极总结篇】
  7. 记一次 Oracle无法连接 问题分析
  8. [WCF安全系列]绑定、安全模式与客户端凭证类型:NetNamedPipeBinding、NetTcpBinding与NetMsmqBinding...
  9. LeetCode 792. 匹配子序列的单词数(Number of Matching Subsequences)
  10. 惠普Teradici PCoIP 受OpenSSL 漏洞影响,波及1500万个端点
  11. python机器学习案例系列教程——最小生成树(MST)的Prim算法和Kruskal算法
  12. centos7,关闭mysql。出现mysql启动不了的情况
  13. 项目回顾-RecyclerView和CheckBox错乱问题
  14. javascript及css实现居中效果
  15. 2. mirth connect探索------------ cs模式客户端登录
  16. 海思SDK学习(5)海思媒体处理软件平台MMP(4)VO视频输出
  17. 在原有产品的基础上建立软件产品线的方式
  18. Z 字形变换(Python)
  19. dp专题 神奇的口袋
  20. Unity3d插件分享之Assetbundle工具2021最好用工具没有之一

热门文章

  1. Java通讯录管理系统使用线性表任务台程序
  2. 基于JAVA+SpringBoot+Mybatis+MYSQL的校园招聘管理系统
  3. 基于JAVA+SpringMVC+MYSQL的数码商城
  4. 基于JAVA+SpringBoot+Mybatis+MYSQL的酒店管理系统
  5. MySQL还是h5储存数据_h5中五大存储方式
  6. 内存映射处理大文件[转载]
  7. PTA-1021—— Deepest Root(最后两组数据错误)
  8. 二维数组中的查找(java)
  9. Project 'king.commons' is missing required library: 'lib/plweb.jar' Build path Build Path Problem
  10. a href='NewsShow.aspx?id=%#Eval(id) %' class=red%#Eval(title) %/a页面传值