簡體   English   中英

怎樣做復發關系?

[英]How to do recurrence relations?

n因此,一天前我們被告知復發關系,並且我們得到了一些練習代碼:

int pow(int base, int n){

if (n == 0)

  return 1;

else if (n == 1)

  return base;

else if(n%2 == 0)

  return pow(base*base, n/2);

else

 return base * pow(base*base, n/2);

}

我要獲得其閉合形式的最遠距離是T(n)= T(n / 2 ^ k)+ 7k。 我不確定該如何走下去,因為提供給我們的示例很簡單,並沒有太大幫助。 您實際上如何解決此代碼的重復關系?

讓我們只計算對pow的調用中的乘數,表示為M(N) ,前提是它們支配了成本(現今是非常無效的假設)。

通過檢查代碼,我們看到:

M(0) = 0 (對於N = 0,不乘)

M(1) = 0 (對於N = 1不乘)

M(N) ,N> 1,N偶數= M(N/2) + 1 (對於偶數N,一乘后遞歸調用)

M(N) ,N> 1,N奇數= M(N/2) + 2 (對於奇數N,在一個乘法之后遞歸調用,然后進行第二個乘法)。

由於它處理偶數和奇數整數的事實使這種重復變得有些復雜。 我們將通過僅考慮偶數或奇數序列來解決此問題。

讓我們首先處理N是2的冪的情況。如果迭代公式,則得到M(N) = M(N/2) + 1 = M(N/4) + 2 = M(N/8) + 3 = M(N/16) + 4 我們很容易發現模式M(N) = M(N/2^k) + k ,因此解M(2^n) = n隨之而來。 我們可以寫成M(N) = Lg(N) (以2為底的對數)。

同樣, N = 2^n-1在除以2后將始終產生奇數。我們有M(2^n-1) = M(2^(n-1)-1) + 2 = M(2^(n-2)-1) + 4... = 2(n-1) M(N) = 2 Lg(N+1) - 2

一般N的確切解可以相當復雜,但是我們可以看到Lg(N) <= M(N) <= 2 Lg(N+1) - 2 因此M(N)O(Log(N))

暫無
暫無

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

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