簡體   English   中英

如何用替換法解決這個重復的 function?

[英]How to solve this recurrence function with substition method?

我有一個非常奇怪的 function 看起來像這樣:

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

我需要用替換方法來解決這個問題,但我無法得出任何決定性的答案。

我需要解決方案步驟和大 O

面對log時,像n = 2^k ( k = log2(n) ) 這樣的變化通常是一種出路:

n = 2^k

所以我們有

T(2^k) = 2 * T(2^(k - 1)) + k * 2^k

讓我們看看它是什么意思:

T(2^k) = 2 * T(2^(k - 1)) + k * 2^k =
       = 2 * (2 * T(2^(k - 2)) + (k - 1) * 2^(k - 1)) + k * 2^k =
       = 4 * T(2^(k - 2)) + (k - 1) * 2^k + k * 2^k =
       = 4 * (2 * T(2^(k - 3)) + (k - 2) * 2^(k - 2)) + (k - 1) * 2^k + k * 2^k = 
       = 8 * T(2^(k - 3)) + (k - 2) * 2^k + (k - 1) * 2^k + k * 2^k = 
         ...
       = 2^k * T(0) + 2^k + 2 * 2^k + ... + k * 2^k =
       = 2^k * T(0) + 2^k (1 + 2 + ... + k) =
       = 2^k * T(0) + 2^k * k * (k + 1) / 2 =
       = 2^k * (T(0) + k * (k + 1) / 2) 

返回n的時間, n = log2(k)

T(n) = n * (T(0) + log2(n) * (log2(n) + 1) / 2)

O(n)而言,我們有

O(T(n)) = O(n * (T(0) + log2(n) * (log2(n) + 1) / 2)) =
        = O(n * (const + log2(n)^2 / 2 + log2(n) / 2) =
        = O(n * log2(n)^2 / 2) =
        = O(n * log2(n)^2) =
        = O(n * log(n)^2) 

所以,答案是

O(T(n)) = O(n * log(n)^2)

請注意,由於log2(n) == log(n, b) / log(2, b)對於任意基數b > 1 ,我們可以使用log(n)而不是log2(n)

暫無
暫無

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

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