2 演算法複雜度簡介

2021-10-06 12:19:35 字數 2073 閱讀 6343

時間複雜度和空間複雜度是衡量演算法效率的重要的指標,而現實中對時間複雜度尤為關心,面試經常會問。但是一問到空間複雜度就容易卡殼。其實在演算法設計中,在規定量級空間複雜度去設計演算法是件非常有趣的事。

時間複雜度:是指執行演算法所需要的計算工作量。(其實就是所耗費的時間,但是用量級形勢將其表示出來)

空間複雜度:執行這個演算法所需要的記憶體空間。(其實就是消耗儲存空間的大小)

理解p、np、npc這個比較難的問題之後,接下來來詳解時間複雜。在電腦科學中,時間複雜性,又稱時間複雜度,演算法的時間複雜度是乙個函式,它定性描述該演算法的執行時間。這是乙個代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,亦即考察輸入值大小趨近無窮時的情況。

常見的演算法時間複雜度由小到大依次為:ο(1)<ο(log2n)<ο(n)<ο(nlog2n)<ο(n2)<ο(n3)<…<ο(2n)<ο(n!),而多項式階為o(nk)。

1、常數時間

若對於乙個演算法,的上界與輸入大小無關,則稱其具有常數時間,記作時間。例子就是輸入乙個陣列,無論這個陣列多大,取出某個位置的數的指令都是乙個。所以說常數時間的演算法,它的執行時間的上限是與輸入無關的乙個值。即雖然被稱為「常數時間」,執行時間本身並不必須與問題規模無關,但它的上界必須是與問題規模無關的確定值。

2、對數時間

若演算法的t(n) =o(logn),則稱其具有對數時間。

常見的具有對數時間的演算法有二叉樹的相關操作和二分搜尋。

因為logn+1 - logn < logn - logn-1,對數時間的演算法是非常有效的,因為每增加乙個輸入,其所需要的額外計算時間會變小。所以二分的思想(後面會講分治思想)是我解決一些演算法基本的思想。

3、線性時間

如果乙個演算法的時間複雜度為o(n),則稱這個演算法具有線性時間,或o(n)時間。非正式地說,這意味著對於足夠大的輸入,執行時間增加的大小與輸入成線性關係。這個比較好理解,就是輸入數量級和演算法時間複雜度在同一數量級。

4、線性對數時間

若乙個演算法時間複雜度t(n) = o(nlog n),則稱這個演算法具有線性對數時間。這種複雜度一般是用普通演算法的時間複雜度為o(n^2),然後用二分的思想,將其優化成了o(nlog n)。

5、多項式時間

在計算複雜度理論中,指的是乙個問題的計算時間不大於問題大小的多項式倍數。(這個在上面解釋np問題是有解釋)

個演算法的空間複雜度s(n)定義為該演算法所耗費的儲存空間,它也是問題規模n的函式。

分析乙個演算法所占用的儲存空間要從各方面綜合考慮。如對於遞迴演算法來說,一般都比較簡短,演算法本身所占用的儲存空間較少,但執行時需要乙個附加堆疊,從而占用較多的臨時工作單元;若寫成非遞迴演算法,一般可能比較長,演算法本身占用的儲存空間較多,但執行時將可能需要較少的儲存單元。

乙個演算法的空間複雜度只考慮在執行過程中為區域性變數分配的儲存空間的大小,它包括為參數列中形參變數分配的儲存空間和為在函式體中定義的區域性變數分配的儲存空間兩個部分。而不是計算實際占用的空間。若乙個演算法為 [2] 遞迴演算法,其空間複雜度為遞迴所使用的堆疊空間的大小,它等於一次呼叫所分配的臨時儲存空間的大小乘以被呼叫的次數(即為遞迴呼叫的次數加1,這個1表示開始進行的一次非遞迴呼叫)。演算法的空間複雜度一般也以數量級的形式給出。如當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為o(1);當乙個演算法的空間複雜度與以2為底的n的對數成正比時,可表示為o(log2n);當乙個演算法的空間複雜度與n成線性比例關係時,可表示為o(n).若形參為陣列,則只需要為它分配乙個儲存由實參傳送來的乙個位址指標的空間,即乙個機器字長空間;若形參為引用方式,則也只需要為其分配儲存乙個位址的空間,用它來儲存對應實參變數的位址,以便由系統自動引用實參變數。

一般情況下,我們很少考慮空間複雜度。但是在一些特殊情況下,空間複雜度的重要性甚至於超過了時間複雜度。我也會看到很多演算法是犧牲空間換取時間,也有犧牲時間換取空間。所以了解空間複雜度也是很重要的。

總結:這一章就簡單介紹一下時間複雜度和空間複雜度,做乙個簡單了解。真正的想理解透,一篇文章是遠遠不夠,後續再一邊解析演算法同時,一邊學習怎樣計算,以及怎麼綜合考慮演算法有效性和合理性,包括最大最小和平均時間複雜度。大家一起,互相學習。

演算法複雜度簡介

時間複雜度與空間複雜度 一般演算法都可以轉化成乙個數學方程,表示的是乙個時間複雜度之和,而我們為了方便表達,會把對於影響比較小的式子省略掉,去掉不會變的常數,只留下乙個對於複雜度影響最大的函式 正文 對於乙個給定的演算法,第一是從數學上證明演算法的正確性,這一步主要用到形式化證明的方法及相關推理模式...

演算法複雜度簡介

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

2 演算法複雜度

演算法的目標 演算法複雜度 大o函式 常見大o函式 1 演算法的目標 演算法是對問題的解決方案,但乙個問題會有很多種演算法,通常乙個好的演算法需要具備以下目標 2 演算法複雜度 演算法複雜度用來衡量演算法的高效性,簡單的說就是 然而,執行時間和語言 機器 機器的狀態 資料量的大小都有關係,不好橫向比...