复杂度分析

空间复杂度S(n)

根据算法写成的程序在执行时占用存储单元的长度。这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。

时间复杂度T(n)

根据算法写成的程序在执行时耗费的时间长度。这个长度往往也与输入数据的规模有关。时间复杂度过高的抵消算法可能导致我们在有生之年都等不到运行结果。

复杂度分析

在分析一般的算法效率时,一般关注两种复杂度

最坏情况复杂度T w o r s t ( n ) T_{worst}(n)Tworst(n)
平均复杂度T a v g ( n ) T_{avg}(n)Tavg(n)

若两段算法分别有复杂度T 1 ( n ) = O ( f 1 ( n ) ) T_1(n)=O(f_1(n))T1(n)=O(f1(n))T 2 ( n ) = O ( f 2 ( n ) ) T_2(n)=O(f_2(n))T2(n)=O(f2(n)),则
T 1 ( n ) + T 2 ( n ) = m a x ( O ( f 1 ( n ) ) , O ( f 2 ( n ) ) T_1(n)+T_2(n)=max(O(f_1(n)),O(f_2(n))T1(n)+T2(n)=max(O(f1(n)),O(f2(n))
T 1 ( n ) ∗ T 2 ( n ) = O ( f 1 ( n ) ∗ f 2 ( n ) ) T_1(n)*T_2(n)=O(f_1(n)*f_2(n))T1(n)T2(n)=O(f1(n)f2(n))
若T(n)是关于n的k阶多项式,那么在这里插入图片描述

一个for循环的时间复杂度等于循环次数乘以循环体代码的复杂度

if-else结构的复杂度取决于if的条件判断 复杂度和两个分支部分的复杂度,总体复杂度取三者中最大


版权声明:本文为yjf0725原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。