【算法導論學習筆記】第3章:函數的增長


  原創博客,轉載請注明:

  http://www.cnblogs.com/wuwenyan/p/4982713.html 

 

  當算法的輸入n非常大的時候,對於算法復雜度的分析就顯得尤為重要,雖然有時我們能通過一定的方法得到較為精確的運行時間,但是很多時候,或者說絕大多數時候,我們並不值得去花精力求得多余的精度,因為精確運行時間中的倍增常量和低階項已經被輸入規模本身的影響所支配。我們需要關心的是輸入規模無限增加,在極限中,運行時間是如何隨着輸入規模增大而增加的,通常來說,在極限情況下漸進地更優的算法在除很小的輸入外的所有情況下將是最好的選擇。

    前提假設:本章定義的所有用在漸近記號中的函數均漸近非負(包括f(n),g(n))。

1. 漸近記號

1.1 Θ記號

  對於一個已知的函數g(n),我們定義Θ(g(n))如下:

  

  含義是:若存在常數c1和c2,使得對於足夠大的n,函數f(n)能夠"夾入"c1*g(n)和c2*g(n)之間,則f(n)屬於集合Θ(g(n))。我們稱g(n)為f(n)的一個漸近緊確界(asymptotially tight bound)。

  注意:Θ(g(n))是一個函數的集合,所以如果要表示f(n)是Θ(g(n))的一員,則需寫為f(n)∈Θ(g(n)),但是在很多教材中,通常使用f(n)=Θ(g(n))來表示相同的概念,這屬於對於等式的一個活用。

  下圖形象地表示了漸近緊確界的形式:

  

1.2 O記號

  對於一個已知的函數g(n),我們定義O(g(n))如下:

  

  含義是:對於足夠大的n,f(n)的值總小於或等於c*g(n)。我們稱g(n)為f(n)的一個漸近上界(asymptotic upper bound)。

  注意:在很多教材中,會發現用O(g(n))來表示一個漸近緊確界,即Θ(g(n))表示的含義,這是不准確的,在算法文獻中,標准的做法是區分漸近上界和漸近緊確界。

  下圖形象地表示了漸近上界的形式:

  

1.3 Ω記號

  對於一個已知的函數g(n),我們定義Ω(g(n))如下:

  

  含義是:對於足夠大的n,f(n)的值總大於或等於c*g(n)。我們稱g(n)為f(n)的一個漸近下界(asymptotic lower bound)。

  下圖形象地表示了漸近下界的形式:

  

1.4 相互關系

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

  插入排序復雜度分析舉例:插入排序最壞情況運行時間的界為Θ(n^2)(並不表示對每個輸入的運行時間界都為Θ(n^2))。首先,插入排序的運行時間為O(n^2),這意味着最壞的運行時間為O(n^2)。其次,插入排序的運行時間為Ω(n),這意味着最好的運行時間為Ω(n)(在輸入已經排序好的情況下)。

  所以,插入排序的運行時間介於Ω(n)和O(n^2)之間,且是一個盡可能緊確的界,例如,不能說插入排序的運行時間是Ω(n^2),因為存在一個輸入使得排序在Ω(n)內完成,然而這與插入排序最壞運行時間為Ω(n^2)(由最壞情況運行時間的界為Θ(n^2)所蘊涵)並不矛盾,因為存在一個輸入使得需要Ω(n^2)的時間。

1.5 o記號和ω記號

  對於一個已知的函數g(n),我們定義o(g(n))如下:

  

  含義可以類比於O(g(n)),表示一個非緊確的上界。

  對於一個已知的函數g(n),我們定義ω(g(n))如下:

  

  含義可以類比於Ω(g(n)),表示一個非緊確的下界。

2. 常用函數性質總結

  (1)對任意整數n,存在以下性質:

  (2)對於某個常量k,如果存在,則稱函數f(n)為多項式有界的。

  (3)多項式與指數的增長率可以通過以下事實相關聯。對於所有使得a>1的實常量a和b,有

  據此可知

  因此,任意底大於1的指數函數增長都比多項式函數快。

  (4)在(3)的第一個等式中,用lgn代替n,並用2^a代替a,可以使得多項式與多對數的增長相互關聯:

  可以得到,對於任意常量a>0,有

  因此,任意正的多項式函數都比任意多對數函數增長快。

  (5)階乘函數的弱上界為n!<=n^n,因為在n的階乘中,n的每項最多為n。斯特林近似公式給出了一個更緊確的上界和下界:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM