演算法導論Lecture 2 解遞迴

2021-08-30 21:03:47 字數 2998 閱讀 2741

這個lecture包括了clrs中的chapter3-chapter4兩章內容:漸近性標記和解遞迴。erik demaine主講。gee! 每次看到erik的一頭「秀髮」跟leiserson教授的光頭就想笑笑,別誤會,erik's a man...

解遞迴

解遞迴常用的有三種方法:替換法(substitution method),遞迴樹法(recursion tree),主方法(master method)。

替換法guess the form of the solution.

verify by induction.

solve for constants.

[ex]. t(n) = 4t(n/2) + n

--guess: t(n) = o(n^3)

--assume: t(k) <= ck^3 for k < n

--t(n) <= 4*c(n/2)^3 + n

= cn^3/2 = cn^3 - (cn^3/2 - n)  // cn^3 is what we want, (cn^3/2 - n) is the residual, 餘項

<= cn^3 if cn^3/2 - n >=0, e.g c>=1

another guess:

--guess: t(n) = o(n^2)

--assume: t(k) <= c1*k^2 - c2*k for k < n

--t(n) = 4t(n/2) + n

<= 4(c1*n^2/4 - c2*n/2) + n

= c1*n^2 - 2c2*n + n

= c1*n^2 - c2*n - (c2 - 1)*n   // c1*n^2 - c2*n is what we want, residual is (c2 - 1)*n

< c1*n^2 - c2*n if (c2 - 1) * n >= 0, e.g c2 >= 1

(c1由初始值t(1)決定,t(1) = theta(1) = c, c>0, t(1) <= c1 - c2, c1 >= c + c2)

遞迴樹法 lecture 1中已經講過。

主方法master method只能應用於某一類的遞迴式,形如: t(n) = at(n/b) + f(n), a>= 1, b > 1, 且f(n)是漸近正(asymptotically positive)的。這個遞迴式描述的是某演算法將大小為n的問題分成a個子問題,每個子問題大小為b。這a個子問題遞迴的解決,每乙個需要時間t(n/b)。而問題的分割(devide)與結果的合併(combine)的花費由函式f(n)描述。

主方法由主定理來描述,共有三種情況,每一種情況都將f(n)與n^log_b(a)進行比較:

如果f(n) = o(n^(log_b(a) - e),e > 0,那麼t(n) = theta(n^log_b(a))。

如果f(n) = theta(n^(log_b(a)),那麼t(n) = theta(n^log_b(a) lg(n))。

如果f(n) = omega(n^(log_b(a) + e)),e > 0,並且af(n/b) <= cf(n),c < 1。那麼t(n) = theta(f(n))。

[ex]. t(n) = 4t(n/2) + n, a = 4, b = 2, f(n) = n

n = o(n^2),  //  case 1

=> t(n) = theta(n^2)

[ex]. t(n) = 4t(n/2) + n^2, a = 4, b = 2, f(n) = n^2

n^2 = theta(n^2), // case 2

=> t(n) = theta(n^2 lg(n))

[ex]. t(n) = 4t(n/2) + n^3, a = 4, b = 2, f(n) = n^3

n^3 = omega(n^(2+1)), e = 1 > 0,  // case 3

=> t(n) = theta(n^3)

notes on chapter 3 and chapter 4.

這個筆記不想再別寫一篇了,直接放在這裡...

第三章中的漸近性標記有幾個值得注意的地方,首先是這些標記容易引起爭議的地方,比如漸近性標記是定義在自然數集上的,但是在漸近性標記的操作過程中很直接地就擴充套件到實數域上,或者只限定在自然數集的子集上。雖然備受爭議,我們應該理解漸近性標記的準確含義,這樣才能不誤用這些標記。

另一點就是漸近性標記表示的實質上是一類函式的集合,雖然我們寫成f(n)=theta(g(n)),其實際意義卻是f(n)屬於theta(g(n)),theta(g(n))是乙個函式集合。這裡的等於號(=)可以理解為「是」而不是真正的「等於」,因為「等於」是對稱的(a=b => b=a),而「屬於」是不對稱的!

在漸近性標記的定義中,對常數的要求是存在即可,證明中只要能找到滿足條件的常數即可。

對這些漸近性標記可以有乙個直觀的模擬(analogy):

f(n) = o(g(n))             => a <= b

f(n) = omega(g(n))  => a >= b

f(n) = theta(g(n))     = > a = b

f(n) = o(g(n))            => a < b

f(n) = omega(g(n))    => a > b

這一章的chapter notes中提到了knuth與graham,patashnik合著的"concrete mathematics", 這本書包含了大量cs中用到的離散數學的內容,機工的英文版買了一本,字太小了,印刷差的一糊啊...

第四章,習題4.1-6

解遞迴式t(n) = 2t(sqrt(n)) + 1,可以用變數替換,令m = lg n,t(n) = 2t(sqrt(n)) + 1 化成t(2^m) = 2t(2^(m/2))+1,再令s(m) = t(2^m),式子可以寫成s(m) = 2s(m/2) + 1,解得s(m) = theta(lg(m)),也就是t(n) = t(2^m) = s(m) = theta(lg(m)) = theta(lg(lg(n)))。

Lecture 2 矩陣消元

高斯消元的矩陣變換理解 現在有矩陣 a begin 1 2 1 3 8 1 0 4 1 end 需要將其變換為階梯形矩陣 u 首先,第二行減去第一行的三倍。begin 1 0 0 3 1 0 0 0 1 end begin 1 2 1 3 8 1 0 4 1 end begin 1 2 1 0 2 ...

演算法導論Lecture 4 Quicksort

第四課80多分鐘,好長啊.內容很多,但是leiserson教授講得既快又好!快速排序 quicksort 是c.a.r.hoare於1960年發明,當時他正在莫斯科大學 soviet union,前蘇聯吧 作訪問學生。在乙個國家物理實驗室的機器翻譯專案裡,為了能更快的匹配乙個已排序的俄英字典,他開發...

將矩陣轉為一行 Lecture 2 矩陣消元

01 elimination 消元高斯消元法是求解方程組最有效的途徑之一,也是我們中學裡使用最多的一種方法。以上述ax b為例,我們可以在消元時不去考慮xyz,因為消元中實際發生變化的是它們的係數。接著從主元二開始,要將2下面的4消成0,最後得到了乙個矩陣u,這個u矩陣是乙個上三角矩陣。消元的基本方...