小聲音算法
big-O notation and its relatives-concepts that belong in the vocabulary of every serious programmer and computer scientist.編程
爲何要研究它編程語言
漸進表示法是算法分析裏的基本術語,當聽到別人說某段代碼以"n的大O時間"運行,而另外一段代碼以"n平方的大O時間 運行",你須要知道背後的含義。3d
當某個問題能夠用不一樣的算法解決時,須要用一個東西進行比較哪一個算法好。漸進表示算法就能夠幫助區分。blog
High Levelci
一句話歸納漸進算法,就是: 忽略常數因子和低階項。數學
漸進法還有更多的含義,可是10年後能記得的就是上面這個歸納,它很精妙。it
爲何要忽略常數因子?io
常數因子通常很依賴於環境的細節,咱們的算法分析是不想固定某種特定的編程語言,計算機體系結構,因此忽略常數因子是合理的。class
爲何要忽略低階項?
當咱們的輸入很大的時候,低階項的做用很微小,而咱們算法關注的就是大規模的輸入。
大O符號
標準的數學公式以下定義:
T(n)=O(f(n))當且僅當T(n)最後的上界是f(n)的一個常數積。
因此只須要找的到c和n0,使得當n>=n0的時候不等式知足,就表示T(n)=O(f(n))。
用圖來表示就是
這裏的n0就是指'最後的',3就是指'常數倍',當n>n0的時候,知足T(n)<=3f(n),因此T(n)=O(f(n))。
大Omega符號
它的數學表示以下:
它的定義和大O的定義是平行的,當且僅當T(n)最後的下界是f(n)的一個常數積。用圖來表示就是:
當n>=n0時,T(n)>=1/4f(n),因此
大theta符號
能夠把它類比爲"等於",同時知足上面兩個條件,即:
和
至關於T(n)最後被夾在了f(n)的兩個不一樣的常數積之間。數學定義以下:
參考書:Algorithms Illuminated