如何使用递归树求解Tn= 2 * Tn / 2+ n * logn?

问题描述

我的重复关系如下:

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 ))

对数的另一个属性告诉我们,对数2 k = k log2。此处未指定对数底数,因此为了简单起见,我将假定它们是基于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)(第二种情况)。查看更多详细信息here(案例2a)。

我们知道a = b = 2,它的意思是c_crit = 1。因此为f(n) = n log(n) = Theta(n log(n)),表示k = 1 > -1

,

Master Theorem不适用于此重复发生,因为合并成本为n *重复发生的Log(n),必须为n的幂。

但是,如果将n * Log(n)设为n 2 的上限,则可以应用主定理。在这种情况下,它将产生n 2 Log(n)的复杂度。

此外,由于我们对合并成本的约束较宽松,因此这种复杂性也较宽松。您n * Log 2 (n)的复杂度可能更正确/更严格。