计算递归使用重复展开
Posted
技术标签:
【中文标题】计算递归使用重复展开【英文标题】:Calculate the recurrence use repeated unfolding 【发布时间】:2018-03-25 19:25:57 【问题描述】:我正在尝试计算 T (n) = 2 T (n/2) + n (log n)^2。 按照我得到的步骤:
=2^kT(n/2^k)+ nlog2 (n/2^(k-1))+ nlog2 (n/2^(k-2))+…+ n(log (n/2))^2 + n (log2 n)^2
当 n=2^k 我得到:
但我不知道如何简化求和公式并获得 Θ() 表示法。 任何人都可以帮忙吗?非常感谢
【问题讨论】:
提示:闭式级数解在索引i
中是二次的。扩展它以给出三个系列并使用整数幂求和的标准公式
对数幂求和的标准公式是什么(不是整数)?
如果您使用对数规则,您会发现实际上是对整数幂而不是对数本身求和,后者是“系数”。我会尽快发布答案
好的,谢谢
【参考方案1】:
你的总结在我看来不太正确。让我们重新推导它:
...在m
迭代之后。假设停止条件为n = 1
(不失一般性):
... 我们使用了两个对数规则。如您所见,总和实际上是“免费索引”而不是日志本身。使用以下整数幂和:
...我们得到:
为了评估 Θ-notation,最高阶项是:
【讨论】:
非常感谢!您能在 m 次迭代后解释为什么要删除 2^m*T() 吗?我可以使n = 2 ^ m吗?例如,如果 T (n) 是 n 这就是“停止条件”的意思——满足后不再递归。您可以使用 n=2^m 以另一种方式进行,但我认为自上而下的方法更直观 非常感谢,迁移后为什么要删除“2^mT()”的问题?应该是nC(C是常数) 不确定您所说的“迁移”是什么意思?通常在停止条件下,函数只返回一个常量,无论如何都可以忽略。 是的,我的意思是 T(n/2^m) 可以忽略,但也许可以将 2^m 解释为 n?【参考方案2】:如果你看过Master theorem,你会发现你问的问题其实是Master Theorem
的2nd
案例(参考上面的链接)。
所以,这里是a=2
、b=2
和f(n) = 0[n^(c_crit)(log n)^k]
,其中k=2
和c 称为c_crit
= log a to base b
= 1
。
所以,根据主定理,T(n) = 0[(n^c_crit)(log k)^(k+1)]
= 0[n(log n)^3]
【讨论】:
@flower 如果您想接触更多此类问题,请查看此处 (dei.unipd.it/~geppo/DA2/DOCS/recurrences.pdf)。如果您参考该链接,可能您的大部分疑问都会得到解决。 非常感谢,但您知道对数幂(不是整数)求和的标准公式吗?因为对于这个我想尝试没有主定理。只需这最后一步,我就能得到它。在这种情况下,只需证明总和为 (logn)^3。 @flower 你想要哪种日志功率!因为泛化它是非常困难的。对于整数,不管它有多长和多复杂,你仍然可以找出来。对数,不容易!!以上是关于计算递归使用重复展开的主要内容,如果未能解决你的问题,请参考以下文章