我正在学习使用麻省理工学院课件和 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/