精華區beta Math 關於我們 聯絡資訊
※ 引述《SiriusJinn (假斯汀)》之銘言: : wiki裡有一段不太懂意思 : http://zh.wikipedia.org/wiki/%E5%A4%A7O%E7%AC%A6%E5%8F%B7 : ============================================================================== : 大O符號在分析演算法效率的時候非常有用。舉個例子,解決一個規模為 n 的問題所花費 : 的時間(或者所需步驟的數目)可以被求得:T(n) = 4n2 - 2n + 2。 : 當 n 增大時,n2 項將開始占主導地位,而其他各項可以被忽略——舉例說明:當 n = : 500,4n2 項是 2n 項的1000倍大,因此在大多數場合下,省略後者對錶達式的值的影響 : 將是可以忽略不計的。 : 進一步看,如果我們與任一其他級的表達式比較,n2 項的係數也是無關緊要的。例如一 : 個包含 n3 或 2n 項的表達式,即使 T(n) = 1,000,000n2 ,假定 U(n) = n3 ,一旦 : n 增長到大於1,000,000,後者就會一直超越前者(T(1,000,000) = 1,000,0003 = : U(1,000,000))。 : ============================================================================== : 有人可以幫忙白話一點說明嗎? : 謝謝! 我試試看:) 我們回過頭來看 Big-O Notation 的定義, 假設 f(x)、g(x) 是兩個已知函數, 那麼我們稱「在 x 趨近於無限大時,f(x) = O(g(x)),若且唯若存在正實數 M, x[0], 使得對所有 x>x[0] 皆滿足 |f(x)| ≦ M|g(x)|」 注意上式 f(x) = O(g(x)) 中的等號, 是單向性的,我們不可以寫 O(g(x)) = f(x)。 回過頭來, 看看上面那段鬼話, 第一段他要說的是, 「為什麼這個多項式 T(n) = 4n^2 - 2n + 2 可以寫成 O(n^2)」 我們從定義開始說明~ 對所有 n>n[0]=1 |4n^2 - 2n + 2|≦4n^2 + 2n + 2 |4n^2 - 2n + 2|≦4n^2 + 2n^2 + 2n^2 |4n^2 - 2n + 2|≦8n^2 |4n^2 - 2n + 2|≦8|n^2| → T(n) = O(n^2) (這裡取 M = 8, x[0] = 1) 從這個例子中, 很清楚的說明了為什麼:) 而第二段要說的是, 「為什麼 T(n) = 1,000,000n^2 成長的比 U(n) = n^3 ,即使 T(n) 的係數是這麼大」 我想這應該是很好說明的~ 只要 U(n) 的領導項次數比 T(n) 高, 那我們總能找到一個夠大的 n ,使得 U(n)>T(n) ,是吧? 事實上同樣的道理還可以比較 O(2^n) 和 O(n!), 哪個成長比較快呢?O(n!) EDIT: 我想版主看到的應該是關於誤差用的 O() , 請看這個條目^^ Big O Notation - Infinitesimal asymptotics http://en.wikipedia.org/wiki/Big_O_notation#Infinitesimal_asymptotics 如果有不正確的地方, 歡迎指正^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.224.172.20 ※ 編輯: gba356 來自: 61.224.172.20 (12/03 21:29)