簡體   English   中英

如何使用遞歸樹求解 T(n) = 2*T(n/2) + n*log(n)?

[英]How to solve T(n) = 2*T(n/2) + n*log(n) using recursive tree?

我有一個遞歸關系,如下所示:

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

我正在使用遞歸樹方法來解決這個問題。 最后,我想出了以下等式:

n ( log(n/2^0) + log(n/2^1) + log(n/2^2) + .......+ log(n/2^(log n))) *

在求解這個方程時,我得到了n(log n)^2 的時間復雜度,但是通過使用大師定理,我得到了n(log(log n)) 的時間復雜度,請幫助我找到我的錯誤。

讓我們來看看你在這里的等式:

n(log(n/2 0 ) + log(n/2 1 ) + log(n/2 2 ) + ... + log(n/2 log n ))

現在,讓我們使用對數的屬性將 log(n / 2 k ) 重寫為 log n - log 2 k 這給了我們

n((log n - log 2 0 ) + (log n - log 2 1 ) + (log n - log 2 2 ) + ... + log n - (log 2 log n ))

對數的另一個屬性告訴我們 log 2 k = k log 2。這里沒有指定對數基數,因此為簡單起見,我將假設它們是基數 2 的對數。 這意味着 log 2 k = k。 這意味着我們有這個表達式:

n((log n - 0) + (log n - 1) + (log n - 2) + ... + (log n - log n))

= n(log n + (log n - 1) + (log n - 2) + ... + 2 + 1 + 0)。

您可能會將此內部總和識別為高斯總和:0 + 1 + 2 + 3 + ... + k = k(k+1) / 2。這意味着該總和簡化為

n (log n)(1 + log n) / 2

= Θ(n log 2 n)

這與主定理所說的相符。 這真是個好消息!

你錯了。 你也將 git n log^2(n) = n * log(n) * log(n) (seocnd 情況)。 在此處查看更多詳細信息(案例 2a)。

我們知道a = b = 2這意味着c_crit = 1 因此f(n) = n log(n) = Theta(n log(n)) ,這意味着k = 1 > -1

主定理不適用於此循環,因為合並的成本,即循環中的 n * Log(n),必須是 n 的冪。

但是,如果將 n * Log(n) 設為 n 2 的上限,則可以應用主定理。 在這種情況下,它將產生 n 2 Log(n) 的復雜度。

此外,由於我們對合並成本采取了更寬松的限制,因此這種復雜性也更寬松。 您的 n * Log 2 (n) 的復雜性可能更正確/更嚴格。

暫無
暫無

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

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