簡體   English   中英

給定一個遞歸算法可以解決遞歸關系,並給出最壞情況下的時間復雜度,對嗎?

[英]Given a recursive algorithm solve the recurrence relation and give the time complexity in worst case, this is correct?

在最壞的情況下,根據n = 2N,N> = 0求出時間復雜度。

找到遞歸關系並解決它。

 public static void xpto(v, n){
    if (n <= 1) 
        return;
    n=n/2;
    for(i=0;i<n;i=i+1) 
        v[i] = v[2i] + v[2i +1];
    xpto(v, n);
}

T(1) = 1

遞歸方程式:

T(n) = 1 + 1 + (n + 1) + n + T(n/2)

T(n) = 3 + 2n + T(n/2)

T(n/2) = 3(2) + 2n(2) + T(n/4)

T(n/4) = 3(3) + 2n(3) + T(n/8)

T(n/8) = 3(4) + 2n(4) + T(n/16)

找到圖案

T(n/8) = 3(4) + 2n(4) + T(n/2^4)

以k表示的一般復發:

T(n) = 3(k) + 2n(k) + T(n/2^k)

if T(1) = 1 and T(n/2^k) we need to change 2^k by n, this means:

2^k = n

T(n) = 3(log n) + 2n(log n) + 1

遞歸關系已解決。

時間復雜度,在最壞的情況下是O(log(n))

問題:

  • 我這樣做對嗎?
  • n = 2N的什么函數,N> = 0表示什么?

我不確定您如何獲得這些常數,但是為了簡單起見,我們假設操作v[i] = v[2i] + v[2i +1]; 的成本是1,其他一切都是免費的。 (可以輕松調整它,而不會損害以下計算的概念)。

基於此,

T(n) = n/2 + T(n/2)

基於此,我們可以使用主定理案例1,其中c=1, a=1,b=2 ,並得出T(n)Theta(n^1)=Theta(n)結論

首先,如果您得到: T(n) = 3(log n) + 2n(log n) + 1作為最終解決方案,那么由於該項,最壞情況下的復雜度不是log n而是n(log n) 2n(log n)

根據您的初始遞歸關系: T(n) = 3 + 2n + T(n/2)我執行了以下操作:

Assume n = 2^k and g(k) = T(n) such that:
g(k) = g(k-1) + 2*2^k + 3 (from simply substituting n=2^k and change of function)
g(k) = sum(i=1 to k) of (2*2^i + 3)
g(k) = 2 * (sum(i=1 to k) of (2^i)) + 3k

Using geometric progression, common ratio = 2:
g(k) = 2 * (2(1-2^k) / (1-2)) + 3k
g(k) = -4 + 4*2^k + 3k

Since we initially assumed n = 2^k, this means k = log n:
T(n) = -4 + 4n + 3(log n)
Hence the worst case complexity is O(n)

對於問題的第二部分:

n = 2N,其中N> = 0只是意味着n是一組偶數,因為任何正整數乘以2都將是偶數。

暫無
暫無

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

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