函數漸近界及漸近符號介紹


原文: 函數漸近界及漸近符號介紹
date: 2020-12-24 22:39:04


前言

在在在計算機算法設計和復雜性分析中, 函數漸近界與算法復雜度分析有著很多聯(lián)系.

比如我們在算法復雜度分析中最常見到的大O符號(Big O notation), 同時它在數學中是有著嚴謹的定義和證明

本節(jié)內容主要是引申到函數的漸近, 對其概念, 性質及一些分析行為做一些補充, 包括:

  • 函數漸近界和漸近符號的介紹
  • 非漸近緊確界的簡單介紹
  • O,Ω,Θ 漸近符號的性質及其等價性
  • 函數漸近比較的方式和示例
  • 求漸近界的方法及示例分析

漸近界介紹

定義

函數的漸近界通常用漸近符號來表達, 也稱漸近記號, 首先來看最為常見的三種:

O big-oh: upper bound 漸近上界

  • 函數f(n) = O(g(n)): 當且僅當存在正常數c, n0, 使得n>=n0時, 有 f(n) <= c*g(n)

Ω big-omega: lower bound 漸近下界

  • 函數f(n) = Ω(g(n)): 當且僅當存在正常數c, n0, 使得n>=n0時, 有 f(n) >= c*g(n)

Θ theta: average bound 平均界 || asymptotically tight bound 漸近緊確界(緊確/確: 表示嚴格) || 緊致界

  • 函數f(n) = θ(g(n)): 當且僅當存在正常數c1, c2, n0, 使得當n>=n0時, 有c1*g(n) < f(n) <= c2*g(n)

**注意: **

  • 有的漸近記號我用了多個中文描述或翻譯, 是因為很多時候中文叫法也不太相同, 所以不要搞混了
  • 當且僅當: “在辑莫,并且僅僅在這些條件成立的時候”的縮寫,在英語中的對應標記為iff

借助這張圖更為直觀的理解一下

漸近符號對比.png

O(g(n))是一個集合, 所以實際上 f(n) ∈ O(g(n))
通常我們記作 f(n) = O(g(n)) 以表達相同的概念, 其它幾個記號同理.

示例

舉個例子.png

看一個簡單的例子分析: f(n) = 2n+3 , 求它的漸近上界O

首先代入定義中的不等式, 即 2n+3 <= cg(n)

你可以代入數字一個一個去試, 但是比較簡單的方法是把左邊的低階項提高然后放到右邊

即: 2n + 3 <= 2n+3n ==> 2n + 3 <= 5n

  • 其中c=5, g(n)=n;

**因為: ** 存在正常數c=5, 當n>=(n0=1)時, 使得不等式 2n + 3 <= 5n 恒成立, 滿足O定義;

**所以: ** f(n)=O(n);

在這里可以看出, 對于不等式 2n+3 <= cg(n) 來說, 右邊的cg(n)不止只有 5n 才滿足定義

e.g. cg(n)可以是3n(c=3, n0=3), 100n(c=100, n0=1) 都是成立的.

甚至你可以寫它的高階 n^2(c=1, n0=3), 此時 f(n) = O(n^2) 這也是成立的, 所以只要滿足定義即可

Ω和θ也可以結合其定義用類似的方法得到:

  • f(n) = Ω(n)
  • f(n) = θ(n)

注意理解 f(n) = O(n) 這種寫法表達什么意思, 有時候還會描述成 2n+3=O(n) 這樣的寫法

可以簡單總結一下, 對于上述例子來說:


函數階.png
  1. n右邊的都可以說是f(n)的上界
  2. n左邊的都可以說是f(n)的下界
  3. 中間n就是平均界

你可以選擇更為高階的g(n)作為上界, 但那并不實用, 所以我們通常傾向于選擇最為接近的g(n)來作為上界; 下界的選擇同理.

分析

從上面這個梨子, 我們直觀感覺到, 似乎通過以下3步就能滿足漸近記號定義中的不等式:

  1. 去掉低階項并忽略高階項的系數
  2. O定義中的常量c取一個稍大于f(n)最高階項系數的值
  3. Ω定義中的常量c取一個稍小于f(n)最高階項系數的值

這種感覺是很實用的, 下面來用一個函數f(n)來驗證下: 從已知f(n)與θ反證定義中的c1, c2, n0

  • f(n) = 0.5n^2 - 3, f(n) = θ(n^2)

所以只要存在正常量c1, c2, n0, 使得所有n>n0時, 滿足:

  • c1n^2 <= 0.5n^2 - 3 <= c2n^2

這里假設取:

  • c1=0.25, n>(n0=12)
  • c2=0.5, n>(n0=0)

此時存在c1, c2, 使得當n > (n0=12) 時滿足不等式 0.25n^2 <= 0.5n^2 - 3 <= 0.5n^2

這里可以運用一些去通項來化簡不等式, 既而得到c1, c2, n0 (滿足存在即可, 并不是唯一)

這里用一個更直觀的方式看看:

xy圖.png

理解了簡單的漸近界的分析方法, 那么它們三個的關系就可以用下面這個定理來表達:

  • 對任意兩個函數f(n)和g(n), 我們有f(n)=θ(g(n)), 當且僅當f(n)=O(g(n))且f(n)=Ω(g(n))

例如: f(n)=an^2 + bn + c , f(n)=θ(n^2) ==> f(n)=O(n2)f(n)=Ω(n2)

需要注意的是并不是從漸近確界得出漸近上界和下界, 而通常是用漸近上界和下界來證明漸近確界

**哪個對我們更有用? **

一開始我會有這兩個疑問, 對于一個函數f(n)來說:

  • 是否需要把它的三種漸近界都求出 ?
  • 通常情況下我們更關注哪個更有用 ?

首先: 上面示例中的函數比較簡單, 所以三種界都可以得到, 而在實際中, 并不一定(下面有這樣的示例)

每當一個函數, 如果你能用Theta(θ)表達是最好的, 如過無法得到它, 那么可以用BigO或Omega(Ω)來表達上界或下界

原因也很簡單, 因為θ能夠表達一個相較O與Ω更緊密精確的界限

就像我在完全不懂手機價格行情的情況下要買一部手機,
它可以告訴我3000, 4000(市場平均)的價格, 也可以告訴我100(市場最低) 或是10w(市場最高)的價格.
雖然這幾種回答都是正確的, 但很明顯平均價對我來說更有用

所以: 在這3種描述記號中, 如果給到的是O與Ω, 那么對方就不會確定這是不是最為接近的表達,

因為它可能是一個接近的, 也可能是一個較大或較小的值, 所以如果能給到θ是最好的

非漸近緊確界

介紹

通過對上面漸近上界, 漸近下界, 漸近緊確界的了解, 非漸近緊確界的概念就很好理解了,

它也有對應的兩個漸近記號o(小o) 與 **ω(小歐米伽) **: 用來表示非漸近緊確的上界和下界

上面介紹的O漸近上界與Ω漸近下界, 可能是漸近緊確的也可能不是漸近緊確的

例如對函數 f(n)=2n^2來說 { Ω(n^2), Ω(n), Ω(logn) } 都符合其漸近下界Ω的定義

Tip: 通常我們都會選擇最接近的界, 因為它最實用

但是只有 Ω(n^2) 是漸近緊確的, 其余幾個都是非漸近緊確的

所以漸近上界和下界又可細分為: 漸近緊確的非漸近緊確的

定義

o: 非漸近緊確上界

  • 函數f(n) = o(g(n)): 對任意正常數c, 存在n0, 使得n>=n0時, 有f(n) <= c*g(n)

ω: 非漸近緊確上界

  • 函數f(n) = ω(g(n)): 對任意正常數c, 存在n0, 使得n>=n0時, 有f(n) >= c*g(n)

注意這里對正常數c的描述是"任意", 而不局限特定某個范圍, 這也是與O與Ω的最明顯區(qū)別

也可用極限函數來表述o與ω的定義:

o: \lim_{n \to +\infty} \frac{f(n)}{g(n)} = 0

  • 表示當n趨于無窮大時, f(n)相對g(n)來說非常非常非常小

ω: \lim_{n \to +\infty} \frac{f(n)}{g(n)} = \infty

  • 表示當n趨于無窮大時, f(n)相對g(n)來說非常非常非常大

此外: 還有一種表述: f(n)∈ω(g(n)) 當且僅當 g(n)∈o(f(n))

漸近符號性質

基本性質

主要是這幾個: 整體性, 自反性, 傳遞性, 對稱性, 轉置對稱性

1. 整體性

注: Ω, O, θ都成立

If f(n) is O(g(n)), Then af(n) is O(g(n))

e.g. f(n) = 2n^2 + 5 is O(n^2)==> 10f(n) = f(20n^2 + 50) is O(n^2)

2. 自反性

f(n) is O(f(n))

e.g. f(n) = n^2 ==> f(n) is O(n^2)

有點奇怪, 但也比較好想, 因為一個函數的上限可以是任意大于等于它的函數, 所以一個函數可以是它自己的上限

3. 傳遞性

If f(n) is O(g(n)) and g(n) is O(h(n)) Then f(n) is O(h(n))

用文字來描述就是當函數g是函數f的上限, 并且函數h是函數g的上限, 那么函數h也是函數f的一個上限函數

e.g. f(n) = n , g(n) = n^2 , h(n) = n^3

n is O(n^2) and n^2 is O(n^3)

then n is O(n^3)

4. 對稱性

注: 只在θ成立

If f(n) is θ(g(n)), Then g(n) is θ(f(n))

e.g. f(n) = n^2 , g(n) = n^2

Then: f(n) = θ(n^2), g(n) = θ(n^2)

5. 轉置對稱性

注: 只在Ω與O成立

If f(n) is O(g(n)), Then g(n) is Ω(f(n))

用文字描述就是: 如果函數f是函數g的上限, 那么b函數就是a函數的下限 (我是你哥哥, 你就是我弟弟)

e.g. f(n) = n , g(n) = n^2

Then n is O(n^2) and n^2 is Ω(n)

反之亦然: If f(n) = Ω(g(n)) Then g(n) is O(f(n))

其它性質

除此之外, 還有幾個重要的性質

  • If f(n) = O(g(n)) and f(n) = Ω(g(n)), Then f(n) = θ(g(n))

這個比較簡單, 之前已經有這樣的函數示例了

  • 兩個函數相加的界

If f(n) = O(g(n)) and d(n) = O(e(n)), Then f(n) + d(n) = O(Max(g(n), e(n)))

e.g. f(n) = n = O(n) , d(n) = n^2 = O(n^2)

Then f(n) + d(n) = n + n^2 = On^2()

  • 兩個函數相乘的界

If f(n) = O(g(n)) and d(n) = O(e(n)),

Then f(n) * d(n) = O((g(n) * e(n)))

因為這些性質的成立, 所以可以在兩個函數f與g的漸近比較中與實數a與b的比較之間做一種類比:

漸進界 類似于
f(n) = O(g(n)) a <= b
f(n) = Ω(g(n)) a >= b
f(n) = θ(g(n)) a == b
f(n) = o(g(n)) a < b
f(n) = ω(g(n)) a > b

例如: 若f(n) = O(g(n)), 則可稱f(n)的漸近小于等于g(n)

它們在范圍上類似的幾何描述

幾何描述.png

函數的漸近比較

方式 & 示例

通常有兩種方式來比較兩個漸近函數的大小:

  1. 代入法
  2. 兩邊套上log

代入法比較簡單了, 代入數值去比較就可以了, 但缺點是你要代入足夠多的數值才可以, 就不說了

示例: 比較 n^2n^3

這里為了書寫簡便, 就不寫函數的漸近表示了, 直接用函數表達式

所以來看下用套上log的方法, 用步驟來表示比較過程:

  1. n^2 —— n^3
  2. logn^2 —— logn^3
  3. 2logn —— 3logn

可得結果, 前者小于后者

兩邊log的方式在處理復雜函數時比較有用, 上面這兩個函數用肉眼就能判斷大小了, 所以看著不明顯

再來兩個比較復雜的函數:

示例一:

比較 f(n) = n^2*logng(n) = n* (logn)^10

  1. log[n^2logn] —— log[n(logn)^{10}]
  2. logn^2 + loglogn —— logn + log(logn)^{10}
  3. 2logn + loglogn —— logn + 10loglogn

可得前者 > 后者

示例二:

比較f(n)=3n^{\sqrt{n}}g(n)=2^{\sqrt{n}logn} (注: logn = log_2n)

  1. 3n^{\sqrt{n}} —— 2^{log_2^{n^\sqrt{n}}}
  2. 3n^{\sqrt{n}} —— (n^\sqrt{n})^{log_2^2} (注: log_2^2 = 1)
  3. 3n^{\sqrt{n}} —— \sqrt{n}

忽略系數后是一樣的, 所以就函數漸近程度比較來說兩者相同

常用log公式

補充一些常用的log公式:

  1. logab = loga + logb
  2. log\frac{a} = loga - logb
  3. loga^b = bloga
  4. a^{log_c^b} = b^{log_c^a}
  5. 如果a^b = n, 那么b = log_a^n

更多示例

幾個求O, Ω, Θ的例子來加深理解

Case 1: f(n) = 2n^2 + 3n + 4

  • 2n^2 + 3n + 4 <= ``2n^2 + 3n^2 + 4n^2
  • 2n^2 + 3n + 4 <= 9n^2

**∵ **此時存在c=9, 使得當n>(n0=1)時滿足不等式

f(n) = O(n^2)

同樣, 可以得到f(n) = Ω(n^2) 與 f(n) = θ(n^2), 方法類似, 不在贅述

Case 2: f(n) = n^2logn + n

  • 1*n^2logn <= n^2logn <= 10 * n^2logn

可以得到O, Ω, θ都是 n^2logn

Case 3: f(n) = n!

注: n! = n * (n-1) * (n-2) * ... * 3 * 2 * 1

  • 1 * 1 * 1 * ... * 1 <= n! <= n * n * n * ... * n
  • 1 <= n! <= n^n

可以得到f(n) = O(n^n) 與 f(n) = Ω(1), 無法得到θ

Case 4: f(n) = logn!

  • log(1 * 1 * 1 * ... * 1) <= logn! <= log(n * n * n * ... * n)
  • log1 <= logn! <= logn^n
  • log1 <= logn! <= nlogn

可以得到f(n) = O(nlogn) 與 f(n) = Ω(1), 無法得到θ

從Case 3 和 Case 4可以看出, 函數f中都是階乘函數, 只能得到上界和下界, 無法給出緊密界限

上面也說過, 能算出緊密界限當然是最好的, 當你不能用平均界限來表達一個函數時, 還可以描述它的上限或下限, 此時上限和下限就變得很有用了

總結

需要說明的是, 這個主題與函數一樣都來源于數學

只不過算法分析領域中運用到了這些數學的東西, 但是二者并不等同

所以不要將它與算法復雜度分析中的最好, 最壞, 平均情況混淆起來, 不然你可能會很困惑.

因為函數漸近界的性質在算法分析中有著重要應用, 所以了解這部分內容會對于理解漸近分析會有所幫助

對于這部分內容, 算是簡單的理解和總結, 更多細致的內容需要運用極限的理論給予嚴格的數學證明, 這里并不涉及

所以理解上面的理論定義和示例分析對我來說已完全足夠, 對通常的算法分析來說也已完全足夠,

甚至不了解這部分內容也不會對你做算法分析有什么大的影響.

摘自:

  • 部分內容來自《算法導論》第3章: 函數的增長
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末匈庭,一起剝皮案震驚了整個濱河市卿樱,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖涎永,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斯碌,死亡現場離奇詭異一死,居然都是意外死亡,警方通過查閱死者的電腦和手機傻唾,發(fā)現死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門投慈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人策吠,你說我怎么就攤上這事较屿÷荚瘢” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長践樱。 經常有香客問我,道長泌辫,這世上最難降的妖魔是什么叉跛? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮跋理,結果婚禮上择克,老公的妹妹穿的比我還像新娘。我一直安慰自己前普,他們只是感情好肚邢,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拭卿,像睡著了一般骡湖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峻厚,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天响蕴,我揣著相機與錄音,去河邊找鬼惠桃。 笑死浦夷,一個胖子當著我的面吹牛辖试,可吹牛的內容都是我干的。 我是一名探鬼主播劈狐,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼罐孝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了懈息?” 一聲冷哼從身側響起肾档,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辫继,沒想到半個月后怒见,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡姑宽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年遣耍,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炮车。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡舵变,死狀恐怖,靈堂內的尸體忽然破棺而出瘦穆,到底是詐尸還是另有隱情纪隙,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布扛或,位于F島的核電站绵咱,受9級特大地震影響,放射性物質發(fā)生泄漏熙兔。R本人自食惡果不足惜悲伶,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望住涉。 院中可真熱鬧麸锉,春花似錦、人聲如沸舆声。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媳握。三九已至碱屁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毙芜,已是汗流浹背忽媒。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工争拐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腋粥,地道東北人晦雨。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像隘冲,于是被迫代替她去往敵國和親闹瞧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容