時間複雜度三道簡單計算

    以下算法的時間複雜度爲 O(log₂n)

    void fun(int n){
        int i=1;
        while(i<n)
            i=i*2;
    }


   /*基本運算(執行頻率最高的語句)i=i*2(每次執行一次i*2),又2^i≤n;
    設執行次數爲t,則判斷條件可理解爲2^t=n,
    即t=log₂n,則T(n)=O(log₂n)*/
設n是描述問題規模的負整數,下面的程序片段複雜度是O(log₂n)
    x=2;
    while(x<n/2)
    x=2*x;

/*基本運算(執行頻率最高的語句)爲x=x8x,每執行一次x乘2,
設執行次數爲t,則有2^(t+1)<n/2,所以t<log₂(n/2)-1=log₂n-2,
得T(n)=O(log₂n)*/
下列函數的時間複雜度是O(n^(1/2))
    int func(int n){
        int i=0,sum=0;
        while(sum<n) sum+= ++i;
        return i;
    }
/*基本運算sum+= ++i,它等價於++i;sum=sum+i,每執行一次i自增1.
i=1時,sum=0+1;
i=2時,sum=0+1+2;
i=3時,sum=0+1+2+3,
以此類推得出sum=0+1+2+3+...+i=(1+i)*i/2,
可知循環次數t滿足(1+t)*t/2<n,
因此時間複雜度爲O(n^(1/2))*/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章