使用主定理求解 T (n) = √2*T(n/2) + log n

Posted

技术标签:

【中文标题】使用主定理求解 T (n) = √2*T(n/2) + log n【英文标题】:Solving T (n) = √2*T(n/2) + log n using master theorem 【发布时间】:2015-07-14 09:11:12 【问题描述】:

问题是:

T(n) = √2*T(n/2) + log n

我不确定主定理是否在这里有效,并且有点卡住了。

【问题讨论】:

【参考方案1】:

这看起来更像 Akra-Bazzi 定理:http://en.wikipedia.org/wiki/Akra%E2%80%93Bazzi_method#The_formula 与 k=1h=0g(n)=log na=(2)^1/2b=1/2。在这种情况下,p=1/2 并且您需要评估积分 \int_1^x log(u)/u^3/2 du。您可以使用按部分积分或符号积分器。 Wolfram Alpha 告诉我不定积分是-2(log u + 2)/u^1/2 + C,所以定积分是4 - 2(log x + 2)/x^1/2。加上1并乘以x^1/2,我们得到T(x) = \Theta(5x^1/2 - 2 log x - 4)

【讨论】:

【参考方案2】:

根据主定理,f(n) 应该是多项式,但在这里

f(n) = logn

这不是多项式,因此不能按照规则通过主定理求解。我也在某处读到了第四个案例。我也必须提到这一点。

这里也有讨论: Master's theorem with f(n)=log n

但是,主定理有一个有限的“第四种情况”,它可以应用于多对数函数。

如果

 f(n) = O(nlogba logk n), then T(n) = O(nlogba log k+1 n).

换句话说,假设你有 T(n) = 2T (n/2) + n log n。 f(n) 不是多项式,而是 f(n)=n log n,并且 k = 1。因此,T(n) = O(n log2 n)

有关更多信息,请参阅此讲义:http://cse.unl.edu/~choueiry/S06-235/files/MasterTheorem-HandoutNoNotes.pdf

【讨论】:

【参考方案3】:

Master theorem 仅对您的 ab 有约束,这适用于您的情况。 a 是不合理的事实,您将 log(n) 作为您的 f(n) 与它无关。

所以在你的情况下你的c = log2(sqrt(2)) = 1/2。由于n^c 的增长速度比您的 log(n) 快,因此递归的复杂度为O(sqrt(n))

P.S. Danyal 的解决方案是错误的,因为复杂性不是 nlogn,而 Edward Doolittle 的解决方案是正确的,在这种简单的情况下也是矫枉过正。

【讨论】:

以上是关于使用主定理求解 T (n) = √2*T(n/2) + log n的主要内容,如果未能解决你的问题,请参考以下文章

在 T(n) = T(n/2) + n 上应用主定理

用 log n 求解主定理:T(n) = 2T(n/4) + log n

关于主定理的几点注记

如何解决以下复发?

在虚构的归并排序示例中使用主定理进行渐近分析

当存在三个术语时应用主定理?