演算法複雜度

2021-05-10 14:42:58 字數 1608 閱讀 1564

好文章就要收藏,學習,文章講的很精闢!

計算機最核心的資源就是cpu與儲存器,任何程式的執行都離不開二者。任何程式的執行都要進行計算,這就會消耗cpu;任何程式的執行也都需要進行資料的處理,cpu中是無法儲存資料的,必須借助儲存器來儲存資料。如果程式的cpu消耗過大會導致程式的執行時間變長;如果占用的儲存空間太大會使得系統能夠執行的程式數量變少。因此如何保證程式占用的cpu和占用的儲存空間都較小就成為重點,任何系統的調優也都是以此為目標的。

2.1.1空間與時間的概念與度量

通俗的講,乙個演算法的空間消耗指的是這個演算法執行所需要的儲存空間大小,而時間消耗指的是演算法執行所

需要時間。乙個演算法執行時所消耗的空間與時間通常與執行環境有關,同乙個演算法在配置不同的計算機上執行的時間消耗和空間消耗也不同。比如對於乙個儲存空間需求極大的演算法,如果可用的儲存空間不夠,在執行的時候就要頻繁的進行內外存的交換,這樣需要執行的時間就會變長;可用空間足夠大,但是cpu執行速度較慢的話,就會導致演算法佔據儲存空間的時間變長,從而導致占用的儲存空間的總體值上公升。因此必須找到一種不依賴於軟硬體條件的對空間與時間進行度量的方法,而演算法的複雜性與具體的執行環境無關,所以通過比較演算法的複雜性來評價演算法是比較合理的。

演算法的複雜性分為空間複雜度和時間複雜度。空間複雜度是指當問題的規模以某種單位從1增加到n時,解決這個問題的演算法在執行時間所占用的儲存空間也以某種單位從1增加到f(n),那麼就稱此演算法的空間複雜度為f(n);時間複雜度是指當問題的規模以某種單位從1增加到n時,解決這個問題的演算法在執行時間所消耗的時間也以某種單位從1增加到f(n),那麼就稱此演算法的時間複雜度為g(n)。空間單位一般規定為乙個工作單元所占用的儲存空間的大小,時間單位一半規定為乙個程式步。

我們需要一種方式來把空間複雜度和時間複雜度的度量弄的更精確一些,人們提出了一種標準的記法,被稱為「大o記法」。在這種記法中使用的基本引數是n,也就是問題的規模,把複雜度表示為n的函式。這裡的「o」是英文「order」的縮寫,此處的「order」不是「順序」的意思,而是代表「數量級」。比如說「陣列遍歷是o(n)的」,意思就是說「通過o(n)量級的步驟去遍歷乙個陣列」。

2.1.2空間與時間的背反

我們總是追求程式通過占用最少的儲存空間以最快的速度(即最少的cpu時間占用)來完成任務,但是這兩者常常是此消彼漲的:當乙個程式改進到能夠占用更少儲存空間的時候,它消耗的cpu時間就會增加;當乙個程式改進到占用較少的cpu時間的時候,它占用的儲存空間通常又會上公升。

比如,計算高精度的pi值是非常消耗系統cpu時間的,而其占用的儲存空間則相對較小。為了防止每次計算都消耗漫長的cpu時間,可以在一次計算以後把計算結果儲存到儲存器中,這樣下次計算的時候直接從儲存器中讀取就可以了,這樣占用的cpu時間就非常短了,但是佔據的儲存空間就增加了。

資料庫的索引也是乙個明顯的例子。為了提高資料檢索的速度,常常需要對資料表的字段建立索引,這樣就可以用更少的cpu消耗來檢索到需要的資料了,但索引是要佔據儲存空間,這就導致了儲存空間的上公升。

既然空間與時間的占用存在著這種背反性,那麼必須在空間與時間的優化上找到乙個平衡點。現代的計算機的儲存器容量非常大,而且**也非常低廉,而cpu則屬於比較寶貴的資源,所以現代的程式設計更多的是以空間換取時間,也就是用較高的儲存空間占用來換取較少的cpu時間。

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...

演算法複雜度 時間複雜度和空間複雜度

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...

演算法複雜度 時間複雜度和空間複雜度

演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...