T(n) = 2T(n/2) + log n 的解

Posted

技术标签:

【中文标题】T(n) = 2T(n/2) + log n 的解【英文标题】:Solution to T(n) = 2T(n/2) + log n 【发布时间】:2021-02-09 07:40:13 【问题描述】:

所以我的递归方程是T(n) = 2T(n/2) + log n

我使用了主定理,发现 a = 2, b =2 和 d = 1。

这是情况2。所以解决方案应该是O(n^1 log n),即O(n log n)

我在网上查了一下,有人发现它是 O(n)。我很困惑

谁能告诉我这不是 O(n log n) 吗?

【问题讨论】:

让我看到python的角度。 【参考方案1】:

这不应该是案例 2,而是案例 1。

你发现T(n) = 2T(n/2) + log nc_crit = log_2(2) = 1 的关键指数,我认为是正确的。但对于 some c < 1log n 肯定是 O(n^c),即使是所有 0 < c < 1,所以情况 1 适用,整个事情都是 O(n^c_crit) = O(n^1) = O(n)

【讨论】:

【参考方案2】:

我不熟悉主定理中的d。主定理上的wikipedia article 表明您需要找到关键指数c = log_b a。这里是c = 1。案例 2 要求我们有 f(n) = Theta(n log n),但实际上我们有 f(n) = log n。相反,这个问题属于第一种情况(看看你能不能找出原因!),这意味着T(n) = Theta(n),正如你在其他地方找到的那样。

【讨论】:

我不明白如何将 log n 写为 n^of something 请记住,函数为O(n) 表示该函数的边界是n 的常数倍数。 log n 是否以n 的常数倍数为界?尝试在desmos.com/calculator 上绘制它们。

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

如何计算该函数的增长率:T(n)= 2T(n ^(1/2))+ 2(n ^(1/2))

问题总结

求解递归:T(n)=2T(n/2)+n/logn

通过替换求解递归 T(n) = 2T(n/2) + Θ(1)

T(n) = T(3n/4) + 2T(n/2) + n 的复杂度是多少? [关闭]

T(n) = 2T(n/2) + n lg lg n 的渐近上限和下限是多少?