解决方案的递归关系

时间:2017-06-09 04:37:36

标签: time-complexity recurrence

我有一个测验,要求我找出一个程序的递归关系的解决方案:

算法采用的时间量T(n)通常是大小的函数, n,输入数据。假设您编写了一个显示以下时间重现的程序:

  

T(n)= T(n / 2)+ a,如果n> 1

     

T(n)= b,如果n = 1

以下是我的尝试:

  

T(n / 2)= T(n / 4)+ a   T(n / 4)= T(n / 8)+ a

所以:

  

T(n)= T(n / 4)+ 2 * a = T(n / 8)+ 3 * a = T(n / K)+ 3 * a

到此为止,我想让程序终止的T(n)= 1,所以我做

  

n / K = 1 - > K = n

我得到了:

  

T(n / n)+ 3 * a = b + 3a

然而答案显示该程序具有对数复杂度,解决方案应为T(n)= a * log2(n)+ b

我不明白如何获得上述解决方案,任何人都可以帮助我吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

这样想。在每次迭代中,你将问题大小n减半:从n到n / 2到n / 4,依此类推。你可以想象一下"树",通常你有一个像T(n)= a * T(n / b)+ f(n)的公式然后在你的树中每个节点都有度a和问题大小在每个节点处除以b。在您的情况下,树在每个级别的问题大小的一半,但树节点的程度保持一个。

n/2: a
     \
n/4:  a
      \
n/8:   a
       \
        ...
        \
n/n:     b + a

我假设你看到这棵树有多深,以及如何达到你所描述的解决方案的复杂程度。

另一种查看它的方法,更接近您的具体练习:在每次迭代中,您添加a对吗?您多久添加一次a