數據結構時間複雜度計算總結

1:概念:時間複雜度是總運算次數表達式中受n的變化影響最大的那一項(不含係數)算法

5*n^5+10000000的時間複雜度是n^5
數組

2:計算方法時間複雜度就是一個算法中的語句執行次數最多的一個。函數

1.一個算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但咱們不可能也沒有必
要對每一個算法都上機測試,只需知道哪一個算法花費的時間多,哪一個算法花費的時間少就能夠了。而且一個算法花費
的時間與算法中語句的執行次數成正比例,哪一個算法中語句執行次數多,它花費時間就多。

2:
2.通常狀況下,算法的基本操做重複執行的次數是模塊n的某一個函數f(n),所以,算法的時間複雜度記作
:T(n)=O(f(n))。隨着模塊n的增大,算法執行的時間的增加率和f(n)的增加率成正比,因此f(n)越小,
算法的時間複雜度越低,算法的效率越高。
3:定義:
:若是一個問題的規模是n,解這一問題的某一算法所須要的時間爲T(n),它是n的某一函數 T(n)稱爲這一算法的「時間複雜性」。

當輸入量n逐漸加大時,時間複雜性的極限情形稱爲算法的「漸近時間複雜性」。

咱們經常使用大O表示法表示時間複雜性,注意它是某一個算法的時間複雜性。大O表示只是說有上界,由定義若是f(n)=O(n),那顯然成立f(n)=O(n^2),它給你一個上界,但並非上確界,但人們在表示的時候通常都習慣表示前者。

此外,一個問題自己也有它的複雜性,若是某個算法的複雜性到達了這個問題複雜性的下界,那就稱這樣的算法是最佳算法。

「大O記法」:在這種描述中使用的基本參數是 n,即問題實例的規模,把複雜性或運行時間表達爲n的函數。這裏的「O」表示量級 (order),好比說「二分檢索是 O(logn)的」,也就是說它須要「經過logn量級的步驟去檢索一個規模爲n的數組」記法 O ( f(n) )表示當 n增大時,運行時間至多將以正比於 f(n)的速度增加。

這種漸進估計對算法的理論分析和大體比較是很是有價值的,但在實踐中細節也可能形成差別。例如,一個低附加代價的O(n2)算法在n較小的狀況下可能比一個高附加代價的 O(nlogn)算法運行得更快。固然,隨着n足夠大之後,具備較慢上升函數的算法必然工做得更快。

O(1)

Temp=i;i=j;j=temp;                    

以上三條單個語句的頻度均爲1,該程序段的執行時間是一個與問題規模n無關的常數。算法的時間複雜度爲常數階,記做T(n)=O(1)。若是算法的執行時間不隨着問題規模n的增長而增加,即便算法中有上千條語句,其執行時間也不過是一個較大的常數。此類算法的時間複雜度是O(1)。

O(n^2)2.1. 交換i和j的內容     sum=0;                 (一次)     for(i=1;i<=n;i++)       (n次 )        for(j=1;j<=n;j++) (n^2次 )         sum++;       (n^2次 )解:T(n)=2n^2+n+1 =O(n^2)2.2.       for (i=1;i<n;i++)    {        y=y+1;         ①           for (j=0;j<=(2*n);j++)               x++;        ②          }         解: 語句1的頻度是n-1          語句2的頻度是(n-1)*(2n+1)=2n^2-n-1          f(n)=2n^2-n-1+(n-1)=2n^2-2          該程序的時間複雜度T(n)=O(n^2).         O(n)                                                            2.3.    a=0;    b=1;                   
相關文章
相關標籤/搜索