分析一個時間的復雜度,推導大O的階
1.用常數(shù)1取代運行時間中的所有加法常數(shù)
2.在修改后的運行次數(shù)的函數(shù)中,只保存最高階項
3.如果最高階項存在且不是1 ,則去除與這個項相乘的常數(shù)
4.得到的最后結果就是大O階
判斷這個的時間復雜度
int i = 0 , n = 100;
while(i < n){
i = i *2;
}
由于2^x = n 得到 x = log(2)n ,所以這個循環(huán)的時間復雜度為O(logn).
int i, j ;
for(i = 0; i < n ; i++){
function(1);
}
void function( int count){
printf("%d", count);
}
函數(shù)體打印的這個參數(shù),function 函數(shù)的時間復雜度是O(1) ,所以整體的時間復雜度就是O(n)
void function(int count){
int j ;
for(j =count; j < n ; j++){
printf("%d",j);
}
}
function 的內部循環(huán)次數(shù)隨count的增加(接近n)而減少, 算法的時間復雜度為O(n^2)
n++;
function(n);
for(i =0; i < n; i++){
function(i);
}
for(i = 0; i < n ; i++){
for( j = i; j < n; j++){
printf("%d",j);
}
}
void function(int count){
int j ;
for(j =count; j < n ; j++){
printf("%d",j);
}
}
| 例子 | 時間復雜度 | 術語 |
|---|---|---|
| 521314 | O(1) | 常數(shù)階 |
| 3n+4 | O(n) | 線性階 |
| 3n^2+4n+5 | O(n^2) | 平方階 |
| 3log(2)n+4 | O(logn) | 對數(shù)階 |
| 2n+3log(2)n+14 | O(nlogn) | nlogn階 |
| n3+2n2+4n+6 | O(n^3) | 立方階 |
| 2^2 | O(2^n) | 指數(shù)階 |
常用的時間復雜度耗費的時間從小到大是
O(1) < O(logn)<(n) <O(nlogn) < O(n^2) < O(n^3) <O(2^n)<O(n!)<O(n*n)