其實,只要講到資料結構與演算法,就一定離不開時間、空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。
1.時間複雜度分析
對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個:o(2n) 和 o(n!)。當資料規模 n 越來越大時,非多項式量級演算法的執行時間會急劇增加,求解問題的執行時間會無限增長。所以,非多項式時間複雜度的演算法其實是非常低效的演算法。
2.空間複雜度分析
時間複雜度的全稱是漸進時間複雜度,表示演算法的執行時間與資料規模之間的增長關係。模擬一下,空間複雜度全稱就是漸進空間複雜度(asymptotic space complexity),表示演算法的儲存空間與資料規模之間的增長關係。
3. 最好,最壞,平均,均攤時間複雜度
3.1 複雜度分析的4個概念
• 最壞情況時間複雜度:**在最理想情況下執行的時間複雜度。
• 最好情況時間複雜度:**在最壞情況下執行的時間複雜度。
• 平均時間複雜度:用**在所有情況下執行的次數的加權平均值表示。
• 均攤時間複雜度:在**執行的所有複雜度情況中絕大部分是低階別的複雜度,個別情況是高階別複雜度且發生具有時序關係時,可以將個別高階別複雜度均攤到低階 別複雜度上。基本上均攤結果就等於低級別複雜度。
3.2 為什麼要引入這4個概念?
• 同一段**在不同情況下時間複雜度會出現量級差異,為了更全面,更準確的描述**的時間複雜度,所以引入這4個概念。
• **複雜度在不同情況下出現量級差別時才需要區別這四種複雜度。大多數情況下,是不需要區別分析它們的。
3.3 如何分析平均、均攤時間複雜度?
• 平均時間複雜度:**在不同情況下複雜度出現量級差別,則用**所有可能情況下執行次數的加權平均值表示。
• 均攤時間複雜度:兩個條件滿足時使用:1)**在絕大多數情況下是低階 別複雜度,只有極少數情況是高階別複雜度;2)低級別和高階別複雜度出現具有時序規律。均攤結果一般都等於低級別複雜度.
4.內容小結
複雜度也叫漸進複雜度,包括時間複雜度和空間複雜度,用來分析演算法執行效率與資料規模之間的增長關係,可以粗略地表示,越高階複雜度的演算法,執行效率越低。常見的複雜度並不多,從低階到高階有:o(1)、o(logn)、o(n)、o(nlogn)、o(n2 )。
複雜度分析 時間複雜度 空間複雜度
執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...
時間複雜度和空間複雜度分析
演算法是指用來運算元據 解決程式問題的一組方法。對於同乙個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。那麼我們應該如何去衡量不同演算法之間的優劣呢?主要還是從演算法所占用的 時間 和 空間 兩個維度去考量。接下來主要介紹時間複雜度和空間複雜度的計算...
時間複雜度和空間複雜度分析
如何評價一段 或演算法的效能和好壞?目前衡量 質量的指標主要有兩個 分別為時間複雜度和空間複雜度。其中時間複雜度指的是執行當前演算法所消耗的時間,空間複雜度指的是指執行當前演算法需要占用多少記憶體空間。有的時候時間和空間是不可兼得的,需要從中去取乙個平衡點。下面簡單描述一下如何計算時間複雜度和空間複...