大 Θ記號、大 Ω記號、空間復雜度、時間復雜度


  • 最壞情況:以大O記號形式表示的時間復雜度,給出了一個算法的最壞情況,即--對於規模為n的任意輸入,算法的運行時間都不會超過O(f(n))
  • 最好情況 :大 Ω記號-->如果存在正的常數c和函數g(n),對任意n>>2,有T(n) > c * g(n),即認為:在n足夠 大后,g(n)給出了T(n)的一個下界,記為:
                                                                                                         T(n) =Ω (g(n))
  • 大 Θ記號-->存在正的常數c1和c2,以及函數h(n),對任意n>>2,有 c1*h(n) < T(n) < c2 * h(n),即認為:在n足夠大后,h(n)給出了T(n)的一個確界,記為:
                                                                                                          T(n) =Θ (g(n))
                        
  • 空間復雜度:
    • 空間復雜度通常不計入原始輸入本身所占用的空間
    • 由於:
      • 任意算法的任何一次運行過程中所消耗的存儲空間,都不會多於其間所執行基本操作的累積次數;
      • 每次基本操作所涉及的存儲空間都不會超過常數規模;
      • 即使每次基本操作所占用或訪問的存儲空間都是新開辟的,整個算法所需的空間總量,也不過與基本操作的次數同階;
                    故:時間復雜度本身就是空間復雜度的一個天然上界
    • 當然,由時間復雜度確定的平凡上界不能令人滿意,則可更為精細地考察不同算法的空間
  • 復雜度分析:
    • O(1):常數時間復雜度算法
      • 不含轉向(循環調用、遞歸等)必順序執行,即使O(1),反之則不一定
    • O(logn):對數時間復雜度
      • 常底數無所謂:
      • 常數次冪無所謂:
    • 考慮問題:對於任意非負整數,統計其二進制中數位1的總是
      • 一般方法:
    int countOnes (unsinged int n) {
        int ones = 0;
        while (n > 0) {
            if (1 & n) {
                ones += 1;
            }
            n = n >> 1;
        }         
        return ones;
    }
 
由右移位運算性質,n縮減至0,需要
次運算,即該算法的時間復雜度為:
                                         

 

                                                                                   
      • 對數多項式復雜度:凡運行時間可以表示和度量為

         

        (其中c>0),則 稱為“對數多項式時間復雜度的算法”


免責聲明!

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



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