解决复发:T(n)= 2T(n/2)+ n/logn

Sae*_*deh 4 time complexity-theory recurrence

我可以找到每一行的总和,(n/log n-i)也可以绘制它的递归树,但我无法计算其行的总和.

T(n)=2T(n/2)+n/logn
Run Code Online (Sandbox Code Playgroud)

T(1) = 1

Sal*_*ali 7

当您开始展开递归时,您将获得:

在此输入图像描述

你的基本情况是T(1) = 1,所以这意味着n = 2^k.代替你会得到:

在此输入图像描述

第二个和与谐波系列的行为相同,因此可以近似为log(k).现在k = log(n)答案是:

在此输入图像描述

  • @博士。只要把和写成k-1个元素的实际总和就很明显了。 (3认同)

Tap*_*pan 7

遵循下面的扩展大师定理。

使用扩展大师定理T(n)=2T(n/2)+n/logn可以很容易地解决如下。这里的n/log n部分可以重写为n * (logn)^-1,有效地使 p=-1 的值。现在扩展大师定理可以很容易地应用,它将与扩展大师定理的情况2b相关。

T(n)= O(nloglogn)
Run Code Online (Sandbox Code Playgroud)

请关注此以获得更详细的解释

https://www.youtube.com/watch?v=Aude2ZqQjUI


Dan*_*sky 6

假设n = 2 ^ k;

我们知道谐波系列(欧拉公式):

Sum[i = 1 to n](1/i) ~= log(n) [n -> infinity]

t(n) = 2t(n/2) + n/log(n)
     = 2(2t(n/4) + n/2/log(n/2)) + n/log(n)
     = 4t(n/4) + n/log(n/2) + n/log(n)
     = 4(2t(n/8) + n/4/log(n/4)) + n/log(n/2) + n/log(n)
     = 8t(n/8) + n/log(n/4) + n/log(n/2) + n/log(n)
     = 16t(n/16) + n/log(n/8) + n/log(n/4) + n/log(n/2) + n/log(n)
     = n * t(1) + n/log(2) + n/log(4) + ... + n/log(n/2) + n/log(n)
     = n(1 + Sum[i = 1 to log(n)](1/log(2^i)))
     = n(1 + Sum[i = 1 to log(n)](1/i))
     ~= n(1 + log(log(n)))
     = n + n*log(log(n)))
     ~= n*log(log(n)) [n -> infinity]
Run Code Online (Sandbox Code Playgroud)