時間複雜度與空間複雜度的計算

2021-10-10 12:12:32 字數 1159 閱讀 2255

演算法(algorithm)是指用來運算元據、解決程式問題的一組方法。

區分演算法好壞的標準:

時效(演算法的執行時間)和儲存(演算法執行需要的儲存空間)

「 大o符號表示法 」,即 t(n) = o(f(n))。

其中 n 表示資料規模 ,o(f(n))表示執行演算法所需要執行的指令數,和f(n)成正比。當規模增加時,增長最快起主導性作用的函式 o(f(n))

比如有乙個演算法的 t(n) = 2n^2+ 2n + 1000,當 n 為 10 或者 20 的時候,常數 1000 看起來對 t(n) 起著決定性的作用。但是當 n 為 1000 或者 10000 或者更大呢?n^2 起到了主要的作用。實際上,當 n 非常大時,後面兩項對於最終的結果來說已經是無足輕重了。與上面求和函式的例子很相似,當 n 越來越大的時候,我們就可以忽略其它項,只關注用 2n^2 來代表 t(n) 的近似值。同樣的是,係數 2 的作用也會隨著 n 的增大,作用變得越來越小,從而也可以忽略。我們這時候就會說 t(n) 的數量級 f(n) = n^2,即 o(n^2)。

有時候演算法的執行時間還取決於具體資料而不僅僅是問題的規模大小

一般我們所算的時間複雜度是最壞情況下的時間複雜度,因為,它提供了一種保證,這個保證執行時間將不會再壞了

o(1):與資料的規模大小 n 無關,執行時間恆定的演算法我們就叫它具有 o(1) 的時間複雜度.

計算時間複雜度時,以最大的主導為準,並且可以省略係數。

一般情況下,我們的程式在機器上執行時,刨去需要儲存程式本身的輸入資料等之外,還需要儲存對資料操作的「儲存單元」。如果輸入資料所佔空間和演算法無關,只取決於問題本身,那麼只需要分析演算法在實現過程中所佔的「輔助單元」即可。如果所需的輔助單元是個常數,那麼空間複雜度就是 o(1)。

因為當今硬體的儲存量級比較大,一般不會為了稍微減少一點兒空間複雜度而大動干戈,更多的是去想怎麼優化演算法的時間複雜度。所以我們在日常寫**的時候就衍生出了用「空間換時間」的做法,並且成為常態。

參考鏈結

計算時間複雜度與空間複雜度

如何衡量乙個演算法的好壞?複雜度 空間複雜度 時間複雜度 事後統計法 就是在演算法的程式執行結束後,根據實際執行結果衡量演算法好壞 事前估計法 就是在程式執行之前,先按照程式 來預估演算法的好壞 時間複雜度 用基本指令的執行次數而不是執行時間代表時間複雜度,同乙個程式在不同配置的機器下的執行時間不一...

時間複雜度與空間複雜度

空間複雜度 space complexity 是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s n o f n 比如直接 插入排序 的時間複雜度 是o n 2 空間複雜度是o 1 而一般的 遞迴演算法就要有o n 的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法...

時間複雜度與空間複雜度

本文是對時間複雜度以及空間複雜度的乙個理解 時間複雜度 由於環境的不同,同樣的 執行所需要的時間是不同的,所以是不能拿來比較的 而函式中執行的次數確實一樣的 所以時間複雜度就是 程式每個迴圈中的語句總共會執行的次數 時間複雜度的表示方法 大o漸進表示法 o f n 這裡的f n 是什麼呢?void ...