MIT演算法導論 第二講 漸進符號,遞迴及解法

2021-07-08 09:33:59 字數 1843 閱讀 7902

θ符號,f(n) = θ(g(n)),表示f(n)的複雜度既大於等於*g(n)的複雜度,又小於等於g(n)的複雜度,即於g(n)的複雜度相當*。

o符號,f(n) = o(g(n)),表示f(n)的複雜度最多與g(n)乙個數量級,即小於等於

ω符號,f(n) = ω(g(n)),f(n)的複雜度最少與g(n)乙個數量級,即大於等於

o符號,f(n) = o(g(n)),表示f(n)的複雜度要比g(n)的數量級小,即小於

例如2n = o(n^2) ,但是2n^2 != o(n^2)

ω符號,f(n) = ω(g(n)),表示f(n)的複雜度要比g(n)的數量級大,即大於

演算法設計中經常會用到遞迴,利用遞迴式的方法可以清晰地顯示演算法的整個過程,而對於分析演算法的複雜度,解遞迴式就有了用處。

利用數學歸納法證明遞迴式的時間複雜度是否符合上界或下界

例如 t(n)= 4t(n/2) +n , [t(1) = o(1)]

假設t(k) ≤ ck

^3(k

t(n) ≤

4c(n/2)

^3+ n = 1/

2cn^3+n = cn

^3-(1/

2cn3-n)≤cn

^3

這樣就得到了乙個上界o(n^3)。

假設t(k) ≤ ck

^2(k

t(n) ≤

4c(n/2)

^2+ n =cn

^2+n= cn

^2-(-n)

因此這裡無法得到t(n) ≤cn^2,也就是說o(n^2)不是t(n)的上界。

在遞迴樹中,每乙個結點都代表乙個子代價,每層的代價是該層所有子代價的總和,總問題的代價就是所有層的代價總和。

所以,我們利用遞迴樹求解代價,需要知道,乙個是每一層的代價,乙個是樹的高度

如下面的例子所示:

得最後的θ(n)= n^2。

主定理方法的證明

如下圖所示,最後的葉節點數量為 a^(logbn) = n^(logba),因此o(n)的取值和f(n)以及葉節點數量有關。

1,整個遞迴樹的權重從根節點到葉節點一直增加,所以整個遞迴樹的權重主要在葉子節點上;

2,(k = 0)遞迴樹每層的權重大致相同,總共h層,所以整個遞迴樹的權重將各層的權重加起來即可;

3,則與case 1的情況正好相反,所以整個遞迴樹的權重主要在根節點上。

演算法導論第二章

插入排序原始碼 1 include 2 include 3 4using namespace std 56 void insert sort inta 7 17 a i 1 key 18 19 2021 intmain 22view code 逆序輸出 1 include 2 include 3 4...

演算法導論 第三章 掌握漸進符號O和

本篇文章基於麻省理工學院的公開課第二講。首先從純數學的角度上來理解。exam1 f n o g n 代表存在常數c和n0,使得n n0時,滿足0 f n c g n 比如2 n 2 o n 3 這裡n 2代表n的平方,n 3代表n的三次方,用過matlab的應該很好理解。這裡套用o的定義可知,即存在...

演算法 排序演算法第二講 選擇排序

前面我們已經介紹過排序演算法的歸類以及插入排序 鏈結戳這裡 選擇排序分為選擇排序和堆排序。選擇排序的思想是先讓最大數和最小數都為陣列第乙個數,遍歷陣列記錄每一趟最大或最小數與第乙個數進行比較。void selectsort int a,size t n swap a min a left if ma...