簡體   English   中英

如何解決此遞歸關系:T(n)= 2T(n / 2)+1

[英]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 = 1q = 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 = 2b = 2f(n) = 1 因此c = log2(2) = 1O(n^1) > O(1) ,這意味着我們屬於第三種情況,因此復雜度為O(n)

暫無
暫無

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

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