Remove ads
来自维基百科,自由的百科全书
大O符號(英語:Big O notation),又稱為漸近符號,是用於描述函數漸近行為的數學符號。更確切地說,它是用另一個(通常更簡單的)函數來描述一個函數數量級的漸近上界。在數學中,它一般用來刻畫被截斷的無窮級數尤其是漸近級數的剩餘項;在計算機科學中,它在分析算法複雜性的方面非常有用。
大O符號是由德國數論學家保羅·巴赫曼在其1892年的著作《解析數論》(Analytische Zahlentheorie)首先引入的。而這個記號則是在另一位德國數論學家愛德蒙·蘭道的著作中才推廣的,因此它有時又稱為蘭道符號(Landau symbols)。代表「order of ...」(……階)的大O,最初是一個大寫希臘字母「Ο」(omicron),現今用的是大寫拉丁字母「O」。
大O符號在分析算法效率的時候非常有用。舉個例子,解決一個規模為的問題所花費的時間(或者所需步驟的數目)可以表示為:。當增大時,項將開始占主導地位,而其他各項可以被忽略。舉例說明:當,項是項的1000倍大,因此在大多數場合下,省略後者對表達式的值的影響將是可以忽略不計的。
進一步看,如果我們與任一其他級的表達式比較,項的係數也是無關緊要的。例如:一個包含或項的表達式,即使,假定,一旦增長到大於1,000,000,後者就會一直超越前者()。
這樣,針對第一個例子,大O符號就記下剩餘的部分,寫作:
或
並且我們就說該算法具有階(平方階)的時間複雜度。
大O也可以用來描述數學函數估計中的誤差項。例如的泰勒展開:
這表示,如果足夠接近於0,那麼誤差的絕對值小於的某一常數倍。
註:泰勒展開的誤差餘項是關於一個高階無窮小量,用小o來表示,即:=,也就是
給定兩個定義在實數某子集上的關於的函數和,當趨近於無窮大時,存在正實數,使得對於所有充分大的,都有的絕對值小於等於乘以的絕對值,那麼我們就可以說,當時,
也就是說,假如存在正實數和實數0,使得對於所有的,均有:成立,我們就可以認爲,。
在很多情況下,我們會省略「當趨近於無限大時」這個前提,而簡寫爲:
此概念也可以用於描述函數在接近實數時的行爲,通常。當我們說,當時,有,也就相當於稱,當且僅當存在正實數和實數,使得對於所有的,均有成立。
如果當和足夠接近時,的值仍不爲0,這兩種定義就可以統一用上極限來表示:
在具體的運用中,我們不一定使用大O符號的標準定義,而是使用幾條簡化規則來求出關於函數的大O表示:
比如,使,我們想要用大O符號來簡化這個函數,來描述接近無窮大時函數的增長情況。此函數由三項相加而成,,和。由於增長最快的是這一項(因為階最高,在x接近無窮大時,其對和的影響會大大超過其餘兩項),應用第一條規則,保留它而省略其他兩項。對於,由兩項相乘而得,和;應用第二條規則,是無關x的常數,所以省略。最後結果為,也即。故有:
我們可以將上式擴展為標準定義形式:
可以(粗略)求出和的值來驗證。使:
故可以為13。故兩者都存在。
下面是在分析算法的時候常見的函數分類列表。所有這些函數都處於趨近於無窮大的情況下,增長得慢的函數列在上面。是一個任意常數。
大O是最經常使用的比較函數的漸近符號。
符號 | 定義 |
---|---|
漸近上限 | |
Asymptotically negligible漸近可忽略不計() | |
漸近下限(當且僅當) | |
Asymptotically dominant漸近主導(當且僅當) | |
Asymptotically tight bound漸近緊約束(當且僅當且) |
大O符號經常被誤用:有的作者可能會使用大O符號表達大Θ符號的含義。因此在看到大O符號時應首先確定其是否為誤用。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.