算法時間復雜度的定義及運算規則


1、Big O

  • 需要定義算法的時間復雜度
    • 不必非常精確
    • 通常只需要了解其上界,相對簡單

定義

  • \(f(n) = O(g(n)), \ if \ \exists \ c > 0:c * g(n) \geq f(n)\)
  • \(f(n) = \Omega (g(n)), \ if \ \exists \ c > 0:c * g(n) \leq f(n)\)
  • \(f(n) = \Theta (g(n)), \ if \exists \ c_1 > 0, \ c_2 > 0:c_1 * g(n) \leq f(n) \leq c_2 * g(n)\)

注:\(f(n) = \Theta (g(n)), \ if \ and \ only \ if \ f(n) = O(g(n)) \ and \ f(n) = \Omega (g(n))\)

2、復雜度函數的運算規則

  • \(o(T_1(n) + T_2(n)) = max(O(T_1(n)), \ O(T_2(n)))\)
  • 如果 \(T(n)\) 是階數為 \(k\) 的任意多項式,則 \(O(T(n)) = O(n^k)\)
  • \(O(T_1(n) * T_2(n)) = O(T_1(n)) * O(T_2(n))\)
  • \(O(dominant \ terms \ + \ others) = O(dominant \ terms)\) (dominant terms:主項)
  • \(O(T_1(n) - T_2(n)) = unknown\)

3、O 和 =

  • 對多項式 \(f_1(n) = 3n^2 - 1000n + 25\),有 \(f_1(n) = O(n^2)\)

  • 同樣,對 \(f_2(n) = 2n^2 + 5\),有 \(f_2(n) = O(n^2)\)

    然而,這是否意味着 \(f_1(n) = f_2(n)\) ?     答案顯然是“否”

  • 顯然,如果 \(x = y\)\(y = z\),則 \(x = z\)

  • 對於用O表示的復雜度,結合律不成立,= 等價於 \(\in\)

4、O 表示中的常數

  • 常系數無關緊要,可以丟棄
  • 低階項無關緊要,可以不要
  • 以常數為底的對數函數中的常數指數也可以省略
  • 能否去掉所有的指數?   \(O(n) \equiv O(n^2)\) ?   顯然不對!


免責聲明!

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



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