2019-04-21判断程序的时间复杂度

时间复杂度:

(1)用大O标记法来表示时间复杂度 

    当n趋近于无穷大时,如果lim(T(n)/f(n))的值为不等于0的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),简称大O标记法。

(2)时间频度 

       一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。

       n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。

(3)时间复杂度

      一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。 

时间复杂度的计算:

1. 计算出基本操作的执行次数T(n)

基本操作即算法中的每条语句(以;号作为分割),语句的执行次数也叫做语句的频度。在做算法分析时,一般默认为考虑最坏的情况。

2. 计算出T(n)的数量级

求T(n)的数量级,只要将T(n)进行如下一些操作:

忽略常量、低次幂和最高次幂的系数

令f(n)=T(n)的数量级。

3. 用大O来表示时间复杂度

当n趋近于无穷大时,如果lim(T(n)/f(n))的值为不等于0的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n))。

举例:

一个示例: 

int num1, num2;

for(int i=0; i<n; i++){ 

     num1 += 1;

     for(int j=1; j<=n; j++){ 

         num2 += num1;

     }

分析:

1.

语句int num1, num2;的频度为1;

语句i=0;的频度为1;

语句i<n; i++; num1+=1; j=1; 的频度为n;

语句j<=n; j++; num2+=num1;的频度为n*n;

T(n) = 2 + 4n + 3n*n

2. n趋近于无穷大时

忽略掉T(n)中的常量、低次幂和最高次幂的系数

f(n) = n*n = n^2 ; T(n) = O(n^2)

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

相关阅读更多精彩内容

友情链接更多精彩内容