【发布时间】:2015-12-08 08:54:45
【问题描述】:
我正在使用我朋友的 pdf (Algorithms Unlocked) 研究递归并试图解决有关递归的问题,但我还不清楚递归树的机制(我认为这是要使用的方法这个问题)以及如何使界限更紧密,例如我希望常数很小?
【问题讨论】:
标签: algorithm asymptotic-complexity recurrence big-theta
我正在使用我朋友的 pdf (Algorithms Unlocked) 研究递归并试图解决有关递归的问题,但我还不清楚递归树的机制(我认为这是要使用的方法这个问题)以及如何使界限更紧密,例如我希望常数很小?
【问题讨论】:
标签: algorithm asymptotic-complexity recurrence big-theta
尝试使用递归树来扩展递归。 你会有这样的东西:
看到每个级别都有一个非递归复杂度 = n 通过扩展 T(n),我们有 2 个不同高度的子树。 您可以看到 2 个高度 H1 和 H2。
现在 T(n) 受限于 2 个子树的复杂度: n * H1 >= T(n) >= n * H2
在哪里: H1 = 1+log_2(n) 和 H2 = 1+log_4(n)
所以解决方案将是 O(nlog_2(n))
【讨论】:
首先,看看here 给出的建议,并在发布问题之前尝试做一些事情。我回答这个只是因为我发现刷新我的技能很有趣。
解决方案是O(n log(n))。
所以你必须看到 Master theorem 在这里不起作用,但 Akra-Bazzi 会起作用。
所以这里是g(n) = n、a1 = 1、b1 = 1/2、a2 = 2、b2=1/4。解方程:a1*b1^p + a2*b2^p = 1 你得到p = 1。
现在解决从1 到x 的积分int(1/u)du,您将得到log(x)。所以复杂度是O(x(1+log(x)),也就是O(nlog(n)),其中 O 是一个紧界。
【讨论】: