用 log n 求解主定理:T(n) = 2T(n/4) + log n
Posted
技术标签:
【中文标题】用 log n 求解主定理:T(n) = 2T(n/4) + log n【英文标题】:Solving master theorem with log n: T(n) = 2T(n/4) + log n 【发布时间】:2015-09-08 08:07:13 【问题描述】:我目前正在尝试解决与主定理的关系:
T(n) = 2T(n/4) + log n
我已经知道 a = 2 和 b = 4,但我对 log n 感到困惑。
我的脚本说:c(n)(这里是 log n)是 Big O(n^d) 的元素。
如果我能在这里算出我的 d,我会比较 a 和 b^d 以找出我的主定理案例。
但是,由于它在这里是 log n,我不确定它的大 O 表示法。
我的意思是我可能会说它是 O(n1/2) 的元素,这将导致情况二,其中 a 和 b^d 相同,但它也是 O(n1/2) 的元素O(n1),然后又是另一种情况。
【问题讨论】:
这里是否需要使用主定理,或者您可以通过其他方式解决这个问题吗? 我其实是需要使用它的,是的。 在情况 2(至少在 Wikipedia 中的编号中),您需要log n=Θ(n^1/2log^k (n))
。在第 3 种情况下,您需要log n=Ω(n^1/2)
。两者都不是真的。
【参考方案1】:
一个有用的事实是,对于任何 ε > 0,我们都知道
log n = O(nε).
我们也知道
log n = Ω(1)
让我们看看这是否能告诉我们什么。我们知道,对于任何 ε > 0,您的重复周期都受此约束:
S(n) = 2S(n / 4) + nε
让我们在这里使用主定理。我们有 a = 2、b = 4 和 d = ε。我们需要推理 logb a = log4 2 = 1/2 以及它与 d = ε 的关系。让 ε 变小 - 比如说,让我们选择 ε = 0.000001。然后我们有 logb a
O(nlogb a) = O(n1/2)。
接下来,考虑这个递归关系:
R(n) = 2R(n / 4) + 1
此重复周期会降低您的重复周期。使用主定理告诉我们,R(n) = Ω(n1/2) 也是如此。
总体而言,我们看到您的重复周期为 O(n1/2) 和 Ω(n1/2)越来越大的复发。因此,即使主定理在这里不适用,您仍然可以使用主定理声称运行时间将为 Θ(n1/2)。
希望这会有所帮助!
【讨论】:
以上是关于用 log n 求解主定理:T(n) = 2T(n/4) + log n的主要内容,如果未能解决你的问题,请参考以下文章
使用主定理求解递归 T(n) = T(n / 2) + O(1)? [关闭]
求解 T(n) = 2T(n/2) + log n [关闭]