1. 程式人生 > >算法分析| 集3(漸近符號)

算法分析| 集3(漸近符號)

www. 線性 兩個 height 表示法 alt size href 界定

前面三篇文章中,我們討論了漸近分析最差,平均和最佳算法案例

漸近分析的主要思想是對不依賴於機器特定常數的算法的效率進行測量,並且不需要執行算法和程序進行比較的時間。

漸近符號是用於表示漸近分析的算法的時間復雜度的數學工具。

以下3個漸近符號主要用於表示算法的時間復雜度。

技術分享

1)Θ表示法: θ符號界定上下一個函數,因此它定義了精確的漸近行為。
獲取表達式的Theta符號的一個簡單方法是降低低階項,忽略頂點常量。

例如,考慮以下表達式。

3n3 + 6n2 + 6000 = Θ(n3)

刪除低階項總是很好,因為不管所涉及的常數的情況下,總是會有一個N0,在Θ(n 3)具有比θ(n 2)更大的值。
對於給定的函數g(n),我們表示Θ(g(n))是以下函數集合

Θ(g(n))= {f(n)):存在正常數c1,c2和n0等 
                 對於所有n> = n0,0 <= c1 * g(n)<= f(n)<= c2 * g(n)

上述定義意味著,如果f(n)是g(n)的Θ,則對於大的n(n> = n0),值f(n)總是在c1 * g(n)和c2 * g N0)。θ的定義還要求對於n大於n0的值,f(n)必須是非負的。

技術分享

2)大O表示法:大O表示法定義了算法的上限,它僅從上面界定了一個函數。

例如,考慮插入排序的情況。

在最壞情況下,在最佳情況和二次時間內需要線性時間。我們可以安全地說,插入排序的時間復雜度是O(n ^ 2)。

請註意,O(n ^ 2)也包括線性時間。
如果我們使用Θ表示法來表示插入排序的時間復雜度,我們必須使用兩個語句來實現最佳和最差情況:
1.插入排序最差的時間復雜度為Θ(n ^ 2)。
插入排序的最佳情況時間復雜度為Θ(n)。

當我們只有一個算法的時間復雜度上限時,大O符號是有用的。

很多時候,我們很容易找到一個上限,只需簡單地看一下算法。

O(g(n))= {f(n)):存在正常常數c和 
                  n0,使得0 <= f(n)<= cg(n) 
                  全部n> = n0}

技術分享

3)Ω符號:正如大O表示法在函數上提供漸近上界,Ω表示法提供漸近下界。

當我們對算法的時間復雜度有較低的限制時,可以使用Ω表示法。

如前一篇文章所討論的,算法最佳情況一般不是很有用,所以這三種算法中使用的符號最小。

對於給定的函數g(n),我們用Ω(g(n))表示函數集合。

Ω(g(n))= {f(n)):存在正常常數c和
                  n0,使得0 <= cg(n)<= f(n)
                  所有n> = n0}。

讓我們在這裏考慮相同的插入排序示例。插入排序的時間復雜度可以寫為Ω(n),但它不是關於插入排序的非常有用的信息,

因為我們通常對最壞情況感興趣,有時在平均情況下有興趣。

練習:
下列哪些語句是有效的?
1.快速排序的時間復雜度是Θ(N ^ 2)
2.快速排序的時間復雜度是O(n ^ 2)
3.對於任何兩個函數f(n)和G(N),我們已經F(N)=Θ (g(n))當且僅當f(n)= O(g(n))和f(n)=Ω(g(n)))。
4.所有的計算機算法時間復雜度可被寫為Ω(1)

算法分析| 集3(漸近符號)