演算法符號......
某些原則適用於任何計算機語言的優化,Python 也不例外。不要隨意優化 :編寫程式而不考慮可能的優化,而是集中精力確保程式碼清晰,正確且易於理解。如果它在你完成時太大或太慢,那麼你可以考慮優化它。
記住 80/20 規則 :在許多領域,你可以得到 80%的結果和 20%的努力(也稱為 90/10 規則 - 這取決於你與誰交談)。每當你要優化程式碼時,使用分析來找出 80%執行時間的去向,以便你知道在哪裡集中精力。
始終執行之前和之後基準測試 :你如何知道你的優化實際上有所作為?如果你的優化程式碼僅比原始版本稍微更快或更小,請撤消更改並返回原始的清晰程式碼。
使用正確的演算法和資料結構:當有 O(n log n)快速排序可用時,不要使用 O(n2)
氣泡排序演算法對一千個元素進行排序。同樣,當你可以使用 O(log n)二叉樹或 O(1)
Python 雜湊表時,不要在需要 O(n)
搜尋的陣列中儲存一千個專案。
有關更多資訊,請訪問以下連結… Python 加速
以下 3 種漸近符號主要用於表示演算法的時間複雜度。
-
Θ表示法 :theta 表示法從上方和下方界定函式,因此它定義了精確的漸近行為。獲取表示式的 Theta 表示法的一種簡單方法是刪除低階項並忽略前導常量。例如,請考慮以下表示式。3n3 + 6n2 + 6000 =Θ(n3)下降低階項總是很好,因為總是有一個 n0,之後Θ(n3)的值高於Θn2,而不管所涉及的常數如何。對於給定函式
g(n)
,我們表示Θ(g(n)
)遵循一組函式。Θ(g(n)
)= {f(n)
:存在正常數 c1,c2 和 n0,使得 0 <= c1g(n)
<=f(n)
<= c2g(n)
對於所有 n> = n0}上述定義意味著,如果f(n)
是 g(n)的θ,那麼值f(n)
總是在 c1g(n)
和 c2 之間對於大的 n 值(n> = n0),g(n)
。θ的定義還要求對於大於 n0 的 n 值,f(n)
必須是非負的。 -
Big O 表示法 :Big O 表示法定義演算法的上限,它僅從上面繫結一個函式。例如,考慮插入排序的情況。在最佳情況下需要線性時間,在最壞情況下需要二次時間。我們可以有把握地說插入排序的時間複雜度是 O(n ^ 2)。注意,O(n ^ 2)也包括線性時間。如果我們使用Θ表示法來表示插入排序的時間複雜度,我們必須使用兩個語句來表示最佳和最差情況:
-
插入排序的最壞情況時間複雜度是Θ(n ^ 2)。
-
插入排序的最佳案例時間複雜度是Θ(n)。
當我們只有演算法的時間複雜度的上限時,Big O 表示法很有用。很多時候,我們只需簡單地檢視演算法即可輕鬆找到上限。O(g(n)
)= {f(n)
:存在正常數 c 和 n0,使得對於所有 n> = n0,0 <= f(n)
<= cg(n)
- Ω表示法 :正如 Big O 表示法在函式上提供漸近上界,Ω表示法提供漸近下界。當我們具有演算法的時間複雜度的下限時,Ω表示法<可能是有用的。正如前一篇文章中所討論的,演算法的最佳案例效能通常沒有用,Omega 符號是三者中使用最少的符號。對於給定函式
g(n)
,我們用Ω(g(n)
)表示函式集。Ω(g(n)
)= {f(n)
:存在正常數 c 和 n0,使得對於所有 n> = n0},0 <=cg(n)
<=f(n)
。讓我們在這裡考慮相同的插入排序示例。插入排序的時間複雜度可寫為Ω(n),但它不是一個關於插入排序的非常有用的資訊,因為我們通常對最壞情況感興趣,有時在平均情況下感興趣。