【问题标题】:Solving recurrence T(n) = T(n/2) + 2T(n/4) + n?求解递归 T(n) = T(n/2) + 2T(n/4) + n?
【发布时间】:2015-12-08 08:54:45
【问题描述】:

我正在使用我朋友的 pdf (Algorithms Unlocked) 研究递归并试图解决有关递归的问题,但我还不清楚递归树的机制(我认为这是要使用的方法这个问题)以及如何使界限更紧密,例如我希望常数很小?

【问题讨论】:

    标签: algorithm asymptotic-complexity recurrence big-theta


    【解决方案1】:

    尝试使用递归树来扩展递归。 你会有这样的东西:

    Recursive tree for T(n)

    看到每个级别都有一个非递归复杂度 = 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))

    【讨论】:

    • 感谢您非常简单准确的回复!
    • 遗憾的是,这不能算作证明。这在数学中称为handwaving :-)
    【解决方案2】:

    首先,看看here 给出的建议,并在发布问题之前尝试做一些事情。我回答这个只是因为我发现刷新我的技能很有趣。


    解决方案是O(n log(n))

    所以你必须看到 Master theorem 在这里不起作用,但 Akra-Bazzi 会起作用。

    所以这里是g(n) = na1 = 1b1 = 1/2a2 = 2b2=1/4。解方程:a1*b1^p + a2*b2^p = 1 你得到p = 1

    现在解决从1x 的积分int(1/u)du,您将得到log(x)。所以复杂度是O(x(1+log(x)),也就是O(nlog(n)),其中 O 是一个紧界。

    【讨论】:

    • 感谢您的帮助。我想知道递归树方法是否可以解决这个问题?因为在书中只有替换,递归树和主定理在递归课程中。谢谢
    • 是的,递归展开会起作用,我只是想练习 Akra-Bazzi,因为我今天已经展开了两个递归。
    • 我明白了,我只是想问你是否可以使用递归树方法,以便我可以了解正在发生的事情,因为我不熟悉 Akra-Bazzi,我目前正在学习递归树方法。非常感谢
    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多