algorithm - 求解递归 T(n) = 2T(n/2) + n^4

标签 algorithm math recurrence big-o

我正在学习使用麻省理工学院课件和 CLRS 书算法导论。

我目前正在尝试解决复发问题(来自第107页)

T(n) = 2T(n/2) + n4

如果我创建一个循环树,我会得到:

Level 0: n4

Level 1 2(n/2)4

Level 2 4(n/4)4

Level 3 8(n/8)4

这棵树有 lg(n) 层。因此我认为复发应该是

T(n) = Θ(n4 lg n)

但是,如果我使用主定理,我就明白了

T(n) = Θ(n4)

显然这两种说法都不对。哪一个是正确的?我的推理哪里出了问题?

最佳答案

第二个看起来是正确的。请注意,您的循环树看起来像

n4 + 2(n/2)4 + 4(n/4)4 + ... + 2i (n / 2i)4

但是 2(n/2)4 ≠ n4,因为 (n/2)4 = n4/16,所以 2(n/2)4 = n4/8。事实上,如果你算出数学,你会得到第 i 级完成的工作由

n4 / (2-3i)

所以我们得到 (1 + 1/8 + 1/64 + 1/512 + ... ) n4,可以证明它小于 2n4。所以你的函数是 Θ(n4)。

关于algorithm - 求解递归 T(n) = 2T(n/2) + n^4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4600920/

相关文章:

algorithm - 在二进制搜索中计算中间值

algorithm - 在没有幂函数的情况下计算for循环中的小数指数

c# - 构建日历应用程序时,我应该在数据库中存储日期或重复规则吗?

algorithm - 如何找到无向图中从s(任意起始顶点)到v(任意顶点)的最短路径是否唯一?

PHP (OOP) - 从调用的函数中获取对象

C#:从字符串中删除常见的无效字符:改进此算法

java - 计算数组中值的总和

javascript - 如何检查一个数字是否位于数学级数的两个成员之间?例如A.P.、G.P.或任何其他进展

algorithm - 使用迭代方法求解递归关系

python - 有没有一种方法可以在没有 for 循环的情况下在 numpy 中实现递归?