簡體   English   中英

使用主定理解決分而治之的遞歸問題

[英]Solving recurrence of divide and conquer using master theorem

T(n) = 3T(n/2) + c T(1)=0 可以用主定理求解嗎? 如果是的話,我現在正在努力理解主定理,有人能告訴我它屬於哪種情況以及為什么。

主定理有不同的可能方法。 我喜歡 Cormen 等人提出的那個。 在他們的《算法導論》一書中。

  1. 如果 f(n) = O(n^(log b (ae))) 對於某個常數 e>0,則T(n) = Θ(n^(log b (a)))
  2. 如果f(n) = Θ(n^(log b (a))),則T(n) = Θ(n^(log b (a)).lg n)
  3. 如果 f(n) = Ω(n^(log b (a+e))) 對於某個常數 e>0,如果 af(n/b) < c.f(n) 對於某個常數 c<1 和所有n 足夠大,則T(n) = Θ(f(n))

現在我們需要比較f(n)n^(log b (a))

  • 如果f(n)多項式小於n^(log b (a)) ,則屬於第一種情況
  • 如果n^(log b (a))多項式上小於f(n) ,則屬於第三種情況
  • 如果f(n)n^(log b (a))大小相同,則屬於第二種情況

請注意,這三種情況並未涵蓋 f(n) 的所有可能性。 當 f(n) 小於n^(log b (a))但不是多項式更小時,情況 1 和情況 2 之間存在差距。 類似地,當 f(n) 大於n^(log b (a))但不是多項式更大時,情況 2 和情況 3 之間存在差距。 如果 function f(n) 落入其中之一,或者情況 3 中的正則性條件不成立,則無法使用 master 方法求解遞歸。

現在要解決有問題的復發......

a=3, b=2, f(n) = c = n^0

所以我們有 n^(log2(3)) ≈ n^(1.58) 多項式大於 n^0,屬於第一種情況。 那么時間復雜度就是T(n) = Θ(n^(log b (a))) --> T(n) = Θ(n^1.58)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM