時間復雜度On和空間復雜度O1是什么意思?


(1)、把輸入規模看成x軸,所花時間/空間看成y軸

O(n)就是y=x,y隨x的增長而線性增長。也就是成正比,一條斜線。

O(1)就是y=1,是一個常量,不管x怎么變,y不變,一條與x軸平行的線。

(2)、舉個簡單的例子,要從0加到n,我們會這么寫:

int sum = 0;
for(int i = 0;i<=n;++i) {
    sum + = i;  
}

一共算了n次加法,那么就說這個時間復雜度是O(n)。當然O(n)的精確的概念是,是n的最高次方,比如,某個計算共計算了3n+2次,那么這個時間復雜度也是O(n),因為3n+2中的最高次方是n。

如果代碼這么寫:

int sum = 0;
for(int i = 0;i<= n;i++) {
        for(int j = 0;j<= n;j++) {
               sum + = (i + j);         
          }
}

  

很明顯一共算了n^2次加法,那么就說這個時間復雜度是O(n^2),和這個上面的類似,如果某個算法計算了3*n^2+n+1次,其時間復雜度仍然是O(n^2),因為3*n^2+n+1中的最高的次方是n^2,所謂O1就是計算的次數是常量,我們還以上面從0到n的例子來說,如果我們用等差數列的公式,那么,代碼可以這么寫:

int sum = n*(n+1)/2

不管n有多大(當然不能溢出了),通過上面的公式只需要計算一次,也就是說計算的次數是不變的,這種情況的時間復雜度就可以說成O(1),再比如這個計算,不管其他條件如何變化,均只計算5次就能計算出結果,那么這種情況就是時間復雜度,也就是O(1)。

(3)、

要在hash表中找到一個元素就是O(1)

要在無序數組中找到一個元素就是O(n)

訪問數組的第n個元素是O(1)

訪問鏈表的第n個元素是O(n)

也就是說:

如果實現中沒有循環就是O(1)

 如果實現中有一個循環就是O(n)

(4)、算法復雜度:算法復雜度分為時間時間復雜度和空間復雜度。其作用是:時間復雜度是度量算法執行時間的長短;而空間復雜度是指算法所需存儲空間的大小。


免責聲明!

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



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