怎么計算時間復雜度?


時間復雜度計算方法

1. 理論知識點

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

2.一般情況下,算法的基本操作重復執行的次數是變量 n 的某一個函數f(n),因此,算法的時間復雜度記做:T(n)=O(f(n))。隨着變量 n 的增大,算法執行的時間的增長率和f(n)的增長率成正比,所以f(n)越小,算法的時間復雜度越低,算法的效率越高。在計算時間復雜度的時候,先找出算法的基本操作,然后根據相應的各語句確定它的執行次數,再找出T(n)的同數量級(它的同數量級有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=該數量級,若T(n)/f(n)求極限可得到一常數c,則時間復雜度T(n)=O(f(n))。

2. 案例

for(i=1;i<=n;++i)  # n
  {
     for(j=1;j<=n;++j)  # n^2
     {
         c[ i ][ j ]=0;  // 該步驟屬於基本操作 執行次數:n^2
          for(k=1;k<=n;++k)  # n^3
               c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ];  //該步驟屬於基本操作 執行次數:n^3
     }
  }
  則有 T(n)= 2n^2+2n^3+n,根據上面括號里的同數量級,我們可以確定 n^3為T(n)的同數量級
  則有f(n)= n^3,
  然后根據T(n)/f(n)求極限可得到常數c
  則該算法的 時間復雜度:T(n)=O(n^3)

3. 總結

根據程序的執行步驟次數得出T(n): T(n)= 2n^2 + 2n^3 + n

取最高階部分,去掉常數系數得f(n):f(n) = n^3

驗證n^3是否是程序的時間復雜度:T(n)/f(n):2n ^2 + 2n^3 + n/n^3 = 2

END


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM