[英]How to solve this recurrence relation: T(n) = 2T(n/2) + 1
我對此遞歸關系感到麻煩。
T(n)= 2T(n / 2)+ 1
誰能幫助我解釋如何解決這個問題以獲得O(n)
的答案?
為簡單起見,我們假設n
是2的冪。例如,如果n = 8
且基本情況T(0) = 0
則遞歸調用樹如下所示:
1 n = 8, depth 0
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
1 1 n = 4, depth 1
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
1 1 1 1 n = 2, depth 2
/ \ / \ / \ / \
/ \ / \ / \ / \
1 1 1 1 1 1 1 1 n = 1, depth 3
/ \ / \ / \ / \ / \ / \ / \ / \
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 n = 0, depth 4
該樹具有log(n) + 1
級別(不計算最低級別),因為此級別中的每個節點的成本為0
。 為了計算T(n)
,在這種情況下為T(8)
,您必須將樹中的所有值相加。
注意,在深度i
上有2^i
節點,每個節點的成本等於1
。
因此,樹中的總和的公式為:
sum [from i = 0 to log(n)] 2^i
這是a_1 = 1
且q = 2
的幾何級數,您想知道第一個log(n) + 1
值的總和。 這由公式給出:
(1 - 2^(log(n) + 1)) / (1 - 2) = 2n - 1
因此,對於n = 8
,結果為15
。
我希望這可以幫助你。
在Cormen等人的“算法介紹”中對這種關系做了很好的解釋。 那本書中的主定理4.1對待所有遞歸關系,形式為T(n)= aT(n / b)+ f(n)。 對於f,a和b的各種組合。 該定理中的一種情況,即情況2,可以應用於您的示例,給出O(n)估計。 因此,要回答您的問題,您不能僅僅通過執行一些常規計算以漸近線的形式解決此類關系,而是觀察到您的情況屬於存在估計的關系類。
使用Master定理可解決這種遞歸問題。
在您的情況下, a = 2
, b = 2
且f(n) = 1
。 因此c = log2(2) = 1
且O(n^1) > O(1)
,這意味着我們屬於第三種情況,因此復雜度為O(n)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.