1. 程式人生 > >分析演算法執行時間的一些通用規則

分析演算法執行時間的一些通用規則

1、迴圈:每一次執行時間*迴圈次數

//迴圈n次

for(i=1;i<=n;i++)
    m = m + 2; //時間常數c

總時間 = c * n = cn = O(n)。

2、巢狀迴圈:從內到外進行分析,總的執行時間是所有迴圈規模的乘積

//外層迴圈n次

for(i=1; i<=n; i++){
    for(j=1; j<=n; j++){
        k= k+1;  //時間常數
    }
}

總時間 = cnn=cn2=O(n2)

3、順序執行語句:每條語句的執行時間相加

x = x + 1;//時間常數
//執行n次
for(i=1; i<=n; i++){
    m = m + 2
; //時間常數 } //外層迴圈執行n次 for(i=1; i<=n; i++){ //內層迴圈執行n次 for(j=1; j<=n; j++){ k = k + 1;//時間常數 } }

總時間 = c0+c1n+c2n2=O(n2)

4、if-then-else條件語句:最壞情況下的執行時間為,條件判斷的時間+最大值(then部分的語句執行時間或else部分的語句執行時間)

//條件:常數
if(length() == 0){
    return false;//then部分:常數
}
else {//else部分:(常數+常數)* n
    for(int
n=0; n<length(); n++){ //條件:常數 if(!list[n].equals(otherList.list[n])) return false;//then部分:常數 } }

總時間 = c0+c1+(c2+c3)n=O(n)

5、對數級時間複雜度:
如果演算法可以在常數時間把問題的規模按照某個分數(一般是1/2)分解,那麼該演算法的複雜度為O(logn),遞推如下:

for(i = 1; i <= n;)
    i = i*2;

以上的變數i,每次都是倍增的,1,2,4,8,…,2n,即
2

k=n ,兩邊同時取對數,得
log(2k)=logn
klog2=logn
k=logn假設基數是2
總時間 = O(logn)
典型問題二分查詢