看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《assassin88 (AI)》之銘言: : T(n) = 2T(n/2) + lgn : = 4T(n/4) + 3lgn - 2 : = ... : = 2^kT(n/2^k) + (2^k-1)lgn + ??? : 後面常數像求不出closed form..不知道該怎麼求..麻煩指導一下,感謝。 --- 這類遞迴式我都用湊的  =.= 型如 T(n) = aT(n/2) + k(n) , a 屬於R 想法就是先設法湊成 [T(n) - f(n)] = a[T(n/2) - f(n/2)] 的型態 所以只要找出 f(n) , 就能解得 T(n) 可是若展開後比較係數, 會發現: f(n) - af(n/2) = k(n) 這個式子剛好就是我們欲求的 XD 所以正常來說, T(n) 只能根據 k(n) 的型態   case by case 的去解它 ---    T(n) = 2T(n/2) + log(n) (令底為2) 不防先假設 T(n) + a*log(n) = 2*[ T(n/2) + a*log(n/2) ] ___(1) → T(n) = 2T(n/2) + alog(n) - 2a 這時會發現比較係數後 a=1 但卻多了常數項 -2a = -2 , 無法消除    所以就大膽假設 "特解" 也有常數項 即重令: T(n) + a*log(n) + b = 2*[ T(n/2) + a*log(n/2) + b] → T(n) = 2T(n/2) + alog(n) - 2a + b 比較係數後可知: ┌ a = 1 → ┌ a = 1             └ -2a + b = 0     └ b = 2 所以原式可改寫成: T(n) + f(n) = 2*[T(n/2) + f(n/2)] with f(n) = log(n) + 2 ---- 有了上式,就能導出一般式: 不仿令 n = 2^r 所以 T(n) + f(n) = 2*[T(n/2) + f(n/2)] = 2^(r) * [T(1) + f(1)] = n[T(1) + 2] 即 T(n) = n[T(1) + 2] - f(n) = T(1)*n + 2n-log(n) - 2 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.141.151