用 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 的解

求解 T(n) = 2T(n/2) + log n [关闭]

什么时候可以实际应用主定理?

如何求解递归 T(n) = 2T(n^(1/2)) + log n? [关闭]

具有常数的主定理