復雜度
本篇基本上是原作的翻譯。轉載請保留本段文字。
復雜度通常會使用大 O 記號來表示,比如快速排序的平均時間復雜度是 𝑂(𝑛log(𝑛))O(nlog(n))。雖然我是「理解派」,但是雖然每個算法/數據結構都理解了,不時仍有可能忘記具體某個算法/數據結構的復雜度(特別是在最好、最壞和平均情形下的復雜度)。因此制作一個速查表是蠻有必要的。
動手前先看看是否已經有輪子是一個好習慣,果不其然,我找到了原作。
時間復雜度
一個算法的時間復雜度反映了程序運行從開始到結束所需要的時間。把算法中基本操作重復執行的次數(頻度)作為算法的時間復雜度。
沒有循環語句,記作 O(1)
,也稱為常數階。只有一重循環,則算法的基本操作的執行頻度與問題規模n呈線性增大關系,記作 O(n)
,也叫線性階。
時間復雜度只關注最高數量級,且與之系數也沒有關系。
若不同算法的時間頻度不一樣,但他們的時間復雜度卻可能是一樣的。比如:T(n)=n2+2n+4 與 T(n)=4n2+n+8,他們的時間頻度顯然不一樣,但他們的時間復雜度卻是一樣的,均為O(n2)
空間復雜度
空間復雜度是對一個算法在運行過程中臨時占用存儲空間大小的量度。
通常來說,只要算法不涉及到動態分配的空間以及遞歸、棧所需的空間,空間復雜度通常為0(1)。
算法的空間復雜度並不是計算實際占用的空間,而是計算整個算法的輔助空間單元的個數,與問題的規模沒有關系。