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

时间:2013-10-06 22:48:23

标签: math big-o code-analysis recurrence asymptotic-complexity

我正在尝试解决重复T(n) = T(n/8) + T(n/2) + T(n/4)

我认为首先尝试使用递归树方法,然后将其用作我对替换方法的猜测是个好主意。

对于树,由于没有在非叶级别进行任何工作,我认为我们可以忽略它,所以我试图想出叶子的上限,因为这是唯一相关的东西这里。

我认为树的高度是T(n/2)的最长路径,其高度为log2(n)。然后我假设树是完整的,所有级别都已填满(即我们有3T(n/2)),因此我们在每个级别都有3^i个节点,因此n^(log2(3))离开。{{1那么就是T(n)

不幸的是,我认为这是一个不合理的上限,我想我已经让它有点太高了......关于如何解决这个问题的任何建议?

2 个答案:

答案 0 :(得分:7)

这里可以使用的一个技巧是根据另一个变量重写重复。我们假设你写n = 2 k 。然后复发简化为

  

T(2 k )= T(2 k-3 )+ T(2 k-2 )+ T(2 < SUP> K-1 )。

设S(k)= T(2 k )。这意味着您可以将此重复重写为

  

S(k)= S(k-3)+ S(k-2)+ S(k-1)。

假设基本情况是S(0)= S(1)= S(2)= 1,只是为了简单起见。鉴于此,您可以使用各种方法来解决此问题。例如,annihilator method(链接的第5部分)在这里可以很好地解决这种重现,因为它是线性重复。如果你在这里使用消灭器方法,你就得到了

  

S(k) - S(k - 1) - S(k - 2) - S(k - 3)= 0

     

S(k + 3) - S(k + 2) - S(k + 1) - S(k)= 0

     

(E 3 - E 2 - E - 1)S(k)= 0

如果你找到方程式E 3 - E 2 - E - 1的根,那么你可以将重复的解作为这些的线性组合根源提升到k的力量。在这种情况下,事实证明重现is similar to that for the Tribonacci numbers,如果你解决了所有问题,你会发现复发解决了O(1.83929 k )形式的东西。

现在,既然知道2 k = n,我们知道k = lg n。因此,复发解决了O(1.83929 lg n )。我们让a = 1.83929。然后解决方案的形式为O(a lg n )= O(a (log a n)/ log a 2) )= O(n 1 / log a 2 )。这大约为O(n 0.87914 ...... )。您的初始上限O(n lg 3 )= O(n 1.584962501 ...... )明显弱于此。

希望这有帮助!

答案 1 :(得分:2)

有一种比@template提出的更简单的方法。除了Master's定理之外,还有一个Akra-Bazzi method可以让你解决这种类型的再现:

enter image description here

这正是你所拥有的。因此,您的g(x) = 0a1 = a2 = a3 = 1b1 = 1/2b2 = 1/4b3= 1/8。所以现在你必须解决这个等式:1/2^p + 1/4^p + 1/8^p = 1

解决它p约为0.879。您甚至不需要求解积分,因为它等于0。因此,您的总体复杂度为O(n^0.879)