1. 程式人生 > 程式設計 >Python演算法中的時間複雜度問題

Python演算法中的時間複雜度問題

在實現演算法的時候,通常會從兩方面考慮演算法的複雜度,即時間複雜度和空間複雜度。顧名思義,時間複雜度用於度量演算法的計算工作量,空間複雜度用於度量算法佔用的記憶體空間。

本文將從時間複雜度的概念出發,結合實際程式碼示例分析演算法的時間複雜度。

漸進時間複雜度

時間複雜度是演算法運算所消耗的時間,因為不同大小的輸入資料,演算法處理所要消耗的時間是不同的,因此評估一個算執行時間是比較困難的,所以通常關注的是時間頻度,即演算法執行計算操作的次數,記為T(n),其中n稱為問題的規模。

同樣,因為n是一個變數,n發生變化時,時間頻度T(n) 也在發生變化,我們稱時間複雜度的極限情形稱為演算法的漸近時間複雜度,記為O(n),不包含函式的低階和首項係數。

我們以如下 例子來解釋一下:

如上例子中,我們根據程式碼上執行的平均時間假設,計算 run_time(n) 函式的時間複雜度,如下:

上述時間複雜度計算公式T(n) ,是我們對函式 run_time(n) 進行的時間複雜度的估算。當n 值非常大的時候,T(n)函式中常數項 time0 以及n的係數 (time1+time2+time3+time4) 對n的影響也可以忽略不計了,因此這裡函式run_time(n) 的時間複雜度我們可以表示為 O(n)。

因為我們計算的是極限狀態下(如,n非常大)的時間複雜度,因此其中存在以下兩種特性:

低階項相對於高階項產生的影響很小,可以忽略不計。 最高項係數對最高項的影響也很小,可以忽略不計。

根據上述兩種特性,時間複雜度的計算方法:

1.只取最高階項,去掉低階項。

2.去掉最高項的係數。

3.針對常數階,取時間複雜度為O(1)。

我們通過下面例子理解一下常見的時間複雜度,如下:

時間複雜度:常數階 O(1)

時間複雜度:線性階 O(n)

時間複雜度:線性階 O(n)

時間複雜度:平方階 O(n^2)

時間複雜度:平方階 O(n^2)

時間複雜度:平方階 O(n^2)

時間複雜度:立方階 O(n^3)

時間複雜度:對數階 O(logn)

隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低,時間複雜度排序如下:

練習一下

如下count_sort 函式實現了計數排序,列表中的數範圍都在0到100之間,列表長度大約為100萬。

如上count_sort 函式的 空間複雜度為 O(n),公式如下:

總結

以上所述是小編給大家介紹的Python演算法中的時間複雜度問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!