算法复杂度

1 时间复杂度

以算法中基本操作的重复执行次数作为算法的时间复杂度。一般不必精确计算出算法的时间复杂度,只要大致计算出相应的数量级即可。

1.1 大 O 复杂度表示法

大 O 时间复杂度实际上并不具体表示代码真正的执行时间,而是表示
代码执行时间随数据规模增长的变化趋势,所以,也叫作'渐进时间复杂度'
简称'时间复杂度'

当 n 很大时公式中的低阶、常量、系数三部分并不左右增长趋势,所以都可以忽略。我们只需要记录一个最大量级就可以了。

1.2 如何分析时间复杂度

大 O 复杂度表示无穷大渐近,因此是一种变化趋势的表现,通常会忽略掉
公式中的常量、低阶、系数,只需要记录一个最大阶的量级就可以了,因此
分析一个算法、一段代码的时间复杂度的时候,也只关注'循环执行次数最多'的
那一段代码就可以了

1.2.1 数列知识

累加法:递推关系式为an+1−an=f(n)an+1−an=f(n)采用累加法。
累乘法:递推关系式为an+1an=f(n)an+1an=f(n)采用累乘法。
构造法:递推关系式为(1)aa+1=pan+qaa+1=pan+q,(2)aa+1=pan+qnaa+1=pan+qn,都可以通过恒等变形,构造出等差或等比数列,利用等差或等比数列的定义进行解题,其中的构造方法可通过待定系数法来进行。
和化项法:递推公式为Sn=f(n)Sn=f(n)或Sn=f(an)Sn=f(an)一般利用
an={S1,Sn−Sn−1,当n=1当n>=2
an={S1,当n=1Sn−Sn−1,当n>=2
用特征方程求解递推方程(感觉比较生僻,不做解释)
迭代法: 从原始递推方程开始,反复将对于递推方程左边的函数用右边的等式代入,直到得到初值,然后将所得的结果进行化简。
例如在调用归并排序mergeSort(a,0,n-1)对数组a[0...n−1]a[0...n−1]排序时,执行时间T(n)T(n)的递推关系式为:
T(n)={O(1),2T(n2)+O(n),当n=1当n>=2
T(n)={O(1),当n=12T(n2)+O(n),当n>=2

其中,O(n)O(n)为merge()所需要的时间,设为cncn(c为正常量)。因此:
T(n)=2T(n2)+cn=2(2T(n4)+cn2)+cn=22T(n4)+2cn=23T(n8)+3cn=...=2kT(n2k)+kcn=nO(1)+cnlog2n=O(nlog2n),(假设n=2k,则k=log2n)

2 空间复杂度

算法在运行过程中临时占用的存储空间的大小,一般以数量级的形式给出。

3 参考

https://www.geeksforgeeks.org/analysis-algorithms-big-o-analysis/

https://blog.csdn.net/so_geili/article/details/53444816

https://www.cnblogs.com/reposkeeper-wx/p/suan-fa-xi-lie-zhi-liu-suan-fa-shi-jian-fu-za-du-j.html

https://www.kancloud.cn/cyyspring/python_leetcode/1317163

https://www.cnblogs.com/nwnu-daizh/p/8652285.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文部分摘抄于此算法复杂度分为时间复杂度和空间复杂度。时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执...
    苏州丸子阅读 1,643评论 0 11
  • 对于一个给定的算法,我们要做两项分析。第一是从数学上证明算法的正确性,而在证明算法是正确的基础上,第二部就是分析算...
    一个人在路上走下去阅读 2,032评论 1 7
  • 时间、空间复杂度:衡量算法执行小路的指标,数据结构与算法离不开时间、空间复杂度分析,复杂度分析是算法的精髓。 为什...
    涉川gw阅读 1,299评论 0 2
  • 如何计算一个算法的时间复杂度? 算这个时间复杂度实际上只需要遵循如下守则: 用常数1来取代运行时间中所有加法常数;...
    birdhsy阅读 592评论 0 0
  • 数据结构与算法之美专栏笔记 1. 为什么要学习数据结构和算法 数据结构和算法本身解决的是“快”和“省”的问题,让代...
    ssas_阅读 274评论 0 0

友情链接更多精彩内容