1. 程式人生 > >一、演算法時間複雜度分析

一、演算法時間複雜度分析

    參考書目:《資料結構與演算法 (java語言班)》 P25

    評價演算法的執行時間是通過分析在一定規模下演算法的基本操作完成的,並且我們只對大規模問題的執行時間感興趣。O、Ω、Θ分別定義了時間複雜度的上界、下界、精確階

    計算時間複雜度,最簡單的方式就是計算出所有基本操作的執行次數。但是更多的時候,這種方式過於複雜而不可取。所以不存在固定的方法,但是有一些常用的分析技術可以使用。

一、計算迴圈次數

  • 基本步驟:

1、假設迴圈次數為k,計算迴圈總數;2、列出迴圈退出時以及退出前前一次迴圈,k與n滿足的不等式;3、確定精確階。

  • 例1.1  

輸入:正整數n;輸出:迴圈執行總次數;

程式碼:

public int function(int n){
    int i=1,count = 0;
    while(i<n){i = i*2;count++;}
    return count;
}

分析:設迴圈執行了k次,i在執行迴圈過程中的取值為:1,2...2^k,最後一次i = 2^k,所以n滿足2^(k-1)<=n<2^k,k=[logn]+1 ,從而T(n)=Θ(logn)。

  • 例1.2

輸入:正整數n;輸出:迴圈執行總次數;

程式碼:

public int function(int n){
    int i=1,count=0;
    while(i<=n){
        for(int j=0;j<1;j++){
            count++;
        }
        i=i*2;
    } return count;
}

分析:假設while迴圈執行了k次,for迴圈每次執行i次,而i在while迴圈中的變化趨勢為 1,2,3,4...2^k,在第k次執行完畢之後i=2^k,所以迴圈的總執行次數為:

1+2+...+2^(k-1) = 2^k-1

k=[logn] + 1    (見例1.1)

故    T(n) = Θ(2^k-1)=Θ(2^([logn]+1))=Θ(n).

二、分析最高頻度的基本操作:略