C++ 时间复杂度详解


注意定义的方式与细节!!!


定义:

      一条语句的频度是指该语句在算法中被重复执行的频率而算法中所有语句的频度之和记做T(n),它是该算法问题规模 n 的函数,而时间复杂度主要就是分析 T(n) 的数量级算法中基本运算(就是指最深层的循环内的语句)与T(n) 同数量级,所以通常采用算法中基本运算的频度 f(n) 来分析算法的时间复杂度。我们将 f(n) 中随 n 增长最快的项的系数置为1作为时间复杂度的度量。f(n) = a*n^3+b*n^2+c; 时间复杂度为O(n^3)


公式表达:

      算法的时间复杂度记为:T(n) = O(f(n)) ;

其中 'O' 的含义为T(n)的数量级,其严格的数学定义为:若 f(n) 和 T(n) 是定义在正整数集合上的两个函数,则存在正常数C和m,使得当n>=m时,都满足0<=T(n)<=C*f(n)


复杂度分类:

      算法的时间复杂度不仅依赖于问题的规模n,还依赖于待输入数据的性质,如下代码:

i = n-1;
while(i>=0 && (A[i] != K))
i--;
return i;

如上看出,当输入的数据 A[i] 中没有与 K 相等的数据,则第三条语句的频度为 f(n) = n;当输入数据 A[i] 都等于K时,第三条语句的频度为0;

      所以就有了:最坏时间复杂度;平均时间复杂度:所有输入的实例在等概率的情况下出现,算法的期望时间;最好时间复杂度;之说,一般情况下,我们总是考虑最坏时间复杂度,以保证算法的运行时间不会比它更长


运算规则:

加法:T(n) = T1(n) +T2(n) = O(f(n))+O(g(n)) = O(max(f(n),g(n)))

乘法:T(n) = T1(n)*T2(n) = O(f(n))*O(g(n)) = O(f(n)*g(n))

常见的时间复杂度:O(1) < O(logn) <  O(n) <  O(nlogn) <  O(n^2) <  O(n^3) <  O(2^n) <  O(n!) <O(n^n)


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com