前言
在學習電腦演算法時,知道插入排序的時間複雜度是O(n2),那O記號到底是什麼意思呢?本文主要介紹幾個演算法分析時用到的記號。
大O記號
定義:O(g(n)) = { f(n) : 存在正常數c和n0 ,使對所有的n >= n0,都有 0 <= f(n) <= cg(n) }。大O記號給出函數的漸進上界。
, 則可以表示為 f(n) = O(n2)。證明:
要使得 0 <= f(n) <= cg(n)
存在c = 9/2 ,n0 = 1,使得對所有的n >= n0都有 0 <= f(n) <= cg(n)。
O(g(n) 以及後面講到的記號表示的都是集合,而f(n) = O(n2)的實際意義 是 f(n) ∈ O(n2)。
假設有 ,
則 g(n) = O(n2) , f(n) = O(n2)
大Ω記號
定義:Ω(g(n)) = { f(n) : 存在正常數c和n0 ,使對所有的n >= n0,都有 0 <= cg(n) <= f(n) }。大Ω記號給出函數的漸進下界。
假設有 ,
則 g(n) = Ω(n) , f(n) = Ω(n)
大Θ記號
定義:Θ(g(n)) = { f(n) : 存在正常數c1和c2和n0 ,使對所有的n >= n0,都有 0 <= c1g(n) <= f(n) <= c2g(n) }。大Θ記號給出函數的漸進確界。
假設有 ,
則 g(n) = Θ(n) , f(n) =Θ(n2)
小O記號
定義:o(g(n)) = { f(n) : 對任意正常數c,存在n0 ,使對所有的n >= n0,都有 0 <= f(n) <= cg(n) }。小o記號給出函數的非漸進緊確的上界。
假設有 ,
則 g(n) = o(n2) , f(n) O(n2)
小記號
定義:(g(n)) = { f(n) : 對任意正常數c,存在n0 ,使對所有的n >= n0,都有 0 <= cg(n) <= f(n) }。小記號給出函數的非漸進緊確的下界。
假設有 ,
則 g(n) (n) , f(n) = (n)
總結
並不是所有的函數都可以漸進比較的,如果 的極限值不存在(不等於0,常數以及無窮大)。比如
的極限就不存在而且不等於無窮大。