求解递归 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=1
和 b=2
和 f(n) = log(n)
。然后c = log2(1) = 0
。由于您的c
和f(n)
,您属于第二种情况(k=1
)。
所以解是Θ(log2 n)
【讨论】:
以上是关于求解递归 T(n) = T(n/2) + lg n? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
通过替换求解递归 T(n) = 2T(n/2) + Θ(1)
T(n) = 2T(n/2) + n lg lg n 的渐近上限和下限是多少?