T(n)= 2T(n / 2)+ n * log(logn)的解

时间:2012-06-08 06:26:52

标签: recursion complexity-theory big-o

我正在努力解决这个问题。我得出结论,主定理不适用于这种情况所以我试图连续替换这些术语以解决这个等式,但不能继续。有人能告诉我解决这个问题的最佳方法是什么?

感谢名单

1 个答案:

答案 0 :(得分:1)

正如你推断的那样,由于情况三的条件失败,我们不能使用主定理。

但是首先我们有n ^(log_b a)= n(log_2 2)= n

现在n< n * log(log(n))

因此,与其他项n *(log(log n))相比,递归项2T(n / 2)的贡献继续减少....因此我们现在可以忘记这个术语......

现在考虑术语n(log(log n))

扩大复发但我们重视这个术语,我们有,

T(n)= 2 ^ k * T(n / 2 ^ k)+ n [log(log(n / 2 ^(k-1)))+ log(log(n / 2 ^(k-) 2)).....]

将2 ^ k设为n,

T(n)= 忽略第一项 + n [log(log(2))+ log(log(4))+ ..... + log(log(2 ^( k-1)))]

T(n)= 忽略第一项 + n [log(1)+ log(2)+ log(3)+ ...... + log(k-1)]

T(n)= 忽略第一项 + n [log((k-1)!)]

我们只需要一个上限,因此我们可以利用斯特林的近似,

N! < (N / E)^ n的

因此(k-1)! 〜((k-1)/ e)^(k-1)

因此log((k-1)!)=(k-1)[(log(k-1) - log(e)]

但是k = log n => [log((k-1)!)] =(log(n) - 1)[log(log(n)-1 - log(e)]

因此我们的术语n [log((k-1)!)] = n * log(n)* log(log(n))和一些我们可以忽略的低阶项。

因此答案是:O(n * log(n)* log(log(n)))

PS:我不确定这个答案,请检查并告诉我是否犯了一些错误!