求出递归T(n)= T(n / 2)+ 2T(n / 4)+ n?

时间:2015-12-08 08:54:46

标签: algorithm asymptotic-complexity recurrence big-theta

我正在研究使用我朋友的pdf(Algorithms Unlocked)重现并尝试解决有关递归的问题,我还不清楚递归树的机制(我假设这是要使用的方法)这个问题)以及如何使边界紧,例如我希望常数变小?

2 个答案:

答案 0 :(得分:0)

首先,看看here给出的建议,并在发布问题之前尝试做点什么。我回答这个问题只是因为我发现刷新技能很有意思。

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

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

所以g(n) = na1 = 1b1 = 1/2a2 = 2b2=1/4。求解等式:a1*b1^p + a2*b2^p = 1得到p = 1

现在解决从int(1/u)du1的积分x,您将获得log(x)。因此,复杂度为O(x(1+log(x)),即O(nlog(n)),其中O是紧束缚。

答案 1 :(得分:0)

尝试使用递归树扩展您的恢复。 你会得到这样的东西:

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))