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 n
是c_crit = log_2(2) = 1
的关键指数,我认为是正确的。但对于 some c < 1
,log 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) + Θ(1)