问题描述
我的重复关系如下:
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)的复杂度可能更正确/更严格。