[英]Solving the following recurrence: T(n) = T(n/3) + T(n/2) + sqrt(n)
我正在嘗試解決以下重復問題:T(n)= T(n / 3)+ T(n / 2)+ sqrt(n)我目前已經執行了以下操作,但不確定是否在正確的軌道上:
K = log2(n)並且高度為2 ^ k,所以2 ^(log2(n))但:
我不確定如何將2 ^(log2(n))的結果與sqrt(n)部分相結合。
一個很好的初始嘗試是確定時間復雜度函數的上限和下限 。 這些是由:
這兩個函數比T(n)
本身更容易解決。 考慮稍微更一般的功能:
我們什么時候停止遞歸? 我們需要一個停止條件 。 由於沒有給出,因此可以假設它為n = 1
而不會失去一般性(希望您會看到如何)。 因此,項數m
由下式給出:
因此,我們可以獲得T(n)
上下限:
我們可以做得更好嗎? 即獲得
n
和T(n)
之間的確切關系?
從我以前的答案在這里 ,我們可以推導出二項式求和公式T(n)
哪里
C
使得n = C
是T(n)
的停止條件。 如果沒有給出,我們可以假設C = 1
而不會失去一般性。
在您的示例中, f(n) = sqrt(n), c1 = c2 = 1, a = 3, b = 2
。 因此:
我們如何評估內部和? 考慮具有正指數m
的二項式展開的標准公式:
因此,我們將x, y
替換為公式中的相應值,並得到:
我們使用標准幾何級數公式和對數規則到達了最后兩個步驟。 請注意,該指數與我們之前發現的范圍一致。
一些數值測試可以確認這種關系:
N T(N)
--------------------
500000 118537.6226
550000 121572.4712
600000 135160.4025
650000 141671.5369
700000 149696.4756
750000 165645.2079
800000 168368.1888
850000 181528.6266
900000 185899.2682
950000 191220.0292
1000000 204493.2952
log T(N)
對於log N
:
這樣的圖m
的梯度使得T(N) ∝ N^m
,我們看到m = 0.863
,這非常接近理論值0.861
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.