簡體   English   中英

T(n) = 2T(n/2) +O(1) 的時間復雜度是多少

[英]what the Time Complexity of T(n) = 2T(n/2) +O(1)

我想知道我的遞歸方法的時間復雜度是多少:T(n) = 2T(n/2) + O(1) 我看到一個結果說它是 O(n) 但我不知道為什么,我解決它是這樣的:

T(n) = 2T(n/2) + 1
T(n-1) = 4T(n-1/4) + 3
 T(n-2) = 8T(n-2/8) + 7
......  …………..  ..
T(n) = 2^n+1 T (n/2^n+1) + (2^n+1 - 1) 

考慮n=2^m ,它允許你寫

T(2^m)=2T(2^(m-1))+O(1)

或通過表示S(m):= T(2^m)

S(m)=2 S(m-1) + O(1),

2^m S(m)=2 2^(m-1)S(m-1) + 2^(m-1) O(1)

最后,

R(m) = R(m-1) + 2^(m-1) O(1).

現在通過歸納,

R(m) = R(0) + (2^m-1) O(1),

T(n) = S(m) = 2^(1-m) T(2^m) + (2 - 2^(m-1)) O(1) = 2/n T(n) + (2 - n/2) O(1).

我認為您對遞歸關系有錯誤的看法。 你可以這樣思考:

如果 T(n) 表示函數 T() 在 input = n 處的值,則該關系表示輸出是當前輸入一半處的值的兩倍。 因此,對於輸入 = n-1 輸出,即 T(n-1) 將是該輸入一半處的值的兩倍多,即 T(n-1) = 2*T((n-1)/2) + 1

上面那種遞歸關系應該按照 Yves Daoust 的回答來解決。 有關遞歸關系的更多示例,您可以參考這個

您可能需要記住一些規則。 如果你能記住這些簡單的規則,那么主定理很容易解決遞推方程。 以下是需要記住的基本規則

case 1) If n^(log b base a) << f(n) then T(n) = f(n)
case 2) If n^(log b base a) = f(n) then T(n) = f(n) * log n
case 3) 1) If n^(log b base a) >> f(n) then T(n) = n^(log b base a)

現在,讓我們使用上述方程求解遞歸。

a = 2, b = 2, f(n) = O(1)
n^(log b base a) = n = O(n)

這是上述等式中的情況 3)。 因此 T(n) = n^(log b base a) = O(n)。

暫無
暫無

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

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