算法復雜度速查表


復雜度

本篇基本上是原作的翻譯。轉載請保留本段文字。

復雜度通常會使用大 O 記號來表示,比如快速排序的平均時間復雜度是 𝑂(𝑛log(𝑛))O(nlog⁡(n))。雖然我是「理解派」,但是雖然每個算法/數據結構都理解了,不時仍有可能忘記具體某個算法/數據結構的復雜度(特別是在最好、最壞和平均情形下的復雜度)。因此制作一個速查表是蠻有必要的。

動手前先看看是否已經有輪子是一個好習慣,果不其然,我找到了原作

時間復雜度

一個算法的時間復雜度反映了程序運行從開始到結束所需要的時間。把算法中基本操作重復執行的次數(頻度)作為算法的時間復雜度。

沒有循環語句,記作 O(1),也稱為常數階。只有一重循環,則算法的基本操作的執行頻度與問題規模n呈線性增大關系,記作 O(n),也叫線性階。

時間復雜度只關注最高數量級,且與之系數也沒有關系。

若不同算法的時間頻度不一樣,但他們的時間復雜度卻可能是一樣的。比如:T(n)=n2+2n+4 與 T(n)=4n2+n+8,他們的時間頻度顯然不一樣,但他們的時間復雜度卻是一樣的,均為O(n2)

空間復雜度

空間復雜度是對一個算法在運行過程中臨時占用存儲空間大小的量度。

通常來說,只要算法不涉及到動態分配的空間以及遞歸、棧所需的空間,空間復雜度通常為0(1)。

算法的空間復雜度並不是計算實際占用的空間,而是計算整個算法的輔助空間單元的個數,與問題的規模沒有關系。

圖例

image-20190920164141544

抽象數據結構的操作復雜度

Snipaste_2019-09-20_17-16-14

數組排序

image-20190920164408891

圖操作

image-20190920164509533

堆操作

image-20190920164555772

常見遞歸算法時間復雜度

image-20190920175238411

大-O 復雜度曲線

big_O_chart

image-20190920170026540

轉自 https://liam.page/2016/06/20/big-O-cheat-sheet/


免責聲明!

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



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