求解递归 T(n) = T(n/2) + lg n? [关闭]

Posted

技术标签:

【中文标题】求解递归 T(n) = T(n/2) + lg n? [关闭]【英文标题】:Solving the recurrence T(n) = T(n/2) + lg n? [closed] 【发布时间】:2013-01-18 17:48:57 【问题描述】:

我在如何解决重复关系方面遇到了一些问题。

T(n) = T(n/2) + log2(n), T(1) = 1,其中 n 是 2 的幂

这是一道作业题,所以不要只给我答案。我只是想知道如何开始这个问题。

在课堂上我们讨论了the Master theorem。但我认为这不是解决这种特殊关系的最佳方式。

我真的不知道如何开始这个问题......我应该去吗

T(n) = T(n/2) + log_base2(n)
T(n/2) = [T(n/4)+log_base2(n/2)]
  T(n) = [T(n/4)+log_base2(n/2)] + log_base2(n) 

然后继续努力得到一些我可以看到的东西构成一个基本方程?

【问题讨论】:

这个问题似乎是题外话,因为它不是一个编程问题。试试 math.stackexchange.com。 这个问题与 Stack Overflow 无关,因为它与编程无关。数学问题可以在Mathematics Stack Exchange 提问。 我投票结束这个问题,因为它是关于数学,而不是编程。 Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Mathematics Stack Exchange 会是一个更好的提问地点。 【参考方案1】:

此递归求解为 Θ((log n)2)。这里有两种查看方式。

一些替换

如果知道 n 是 2 的完美幂(即 n = 2k),则可以将递归式改写为

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

让我们定义一个新的递归 S(k) = T(2k)。然后我们就明白了

S(k) = S(k - 1) + k

如果我们扩展这个循环,我们就会得到它

S(k) = S(k - 1) + k

= S(k - 2) + (k - 1) + k

= S(k - 3) + (k - 2) + (k - 1) + k

= S(k - 4) + (k - 3) + (k - 2) + (k - 1) + k

...

= S(0) + 1 + 2 + 3 + ... + k

= S(0) + Θ(k2)

假设 S(0) = 1,则此递归求解为 Θ(k2)。

由于 S(k) = T(2k) = T(n),我们得到 T(n) = Θ(k2) = Θ(记录2 n)。

迭代循环

这里的另一个选择是扩展递归的几个术语,看看是否出现了任何好的模式。这是我们得到的:

T(n) = T(n / 2) + lg n

= T(n / 4) + lg (n / 2) + lg n

= T(n / 8) + lg (n / 4) + lg (n / 2) + lg n

...

最终,在 lg n 层之后,这种循环触底,我们只剩下这个表达式:

lg n + lg (n / 2) + lg (n / 4) + ... + lg (n / 2lg n)

利用对数的性质,我们可以将其重写为

lg n + (lg n - 1) + (lg n - 2) + (lg n - 3) + ... + (lg n - lg n)

或者,反过来写,就是总和

0 + 1 + 2 + 3 + ... + lg n

该总和是高斯对 lg n 的总和,其计算结果为 (lg n)(lg n + 1) / 2 = Θ((log n)2)。

希望这会有所帮助!

【讨论】:

您好先生,我无法在这里使用您的方法继续前进i.stack.imgur.com/6E3iB.png 不要在最后将所有日志术语组合在一起,而是将它们分开。使用 lg (n / 2^k) = lg n - k 的事实。 是的先生,我理解您的方法。您在上面的 qstn 中已经完成了 ..我只是想解决我给您图像的另一种方法 :) 感谢您的回复 哦,好的。分数的分子是 n^lg n。分母是 2^(lg n)(lg n + 1)/2。如果你然后应用对数的幂和商规则会发生什么? 先生,其实我得到了答案,谢谢:)【参考方案2】:

如果 n 是 2 的幂,那么您可以扩展递归并精确求解,使用 lg(a/b) = lg(a) - lg(b)。

T(n) = lg(n) + lg(n/2) + lg(n/4) + ... + lg(1) + 1
     = (lg(n) - 0) + (lg(n) - 1) .... + (lg(n) - lg(n)) + 1
     = lg(n)*lg(n) - lg(n)*(lg(n)+1)/2 + 1
     = lg(n)*lg(n)/2 - lg(n)/2 + 1

【讨论】:

【参考方案3】:

这可以通过 Akra-Bazzi 定理来完成。请参阅http://people.mpi-inf.mpg.de/~mehlhorn/DatAlg2008/NewMasterTheorem.pdf 中的第三个示例。

【讨论】:

【参考方案4】:

这可以通过Master theorem 解决。您的 a=1b=2f(n) = log(n)。然后c = log2(1) = 0。由于您的cf(n),您属于第二种情况(k=1)。

所以解是Θ(log2 n)

【讨论】:

以上是关于求解递归 T(n) = T(n/2) + lg n? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

求解递归:T(n)=2T(n/2)+n/logn

求解递归关系T(n)= T(n-1)+ n

通过替换求解递归 T(n) = 2T(n/2) + Θ(1)

T(n) = 2T(n/2) + n lg lg n 的渐近上限和下限是多少?

如何解决这个递归关系:T(n) = 4*T(sqrt(n)) + n

如何求解:T(n) = T(n/2) + T(n/4) + T(n/8) + (n)