我在如何解决递归关系方面遇到了一些问题。
T(n)= T(n / 2)+ log2(n),T(1)= 1,其中n是2的幂
这是一个家庭作业问题,所以不要只给我答案。我只是想知道如何解决问题。
在课堂上我们过了the Master theorem。但我认为这不是解决这种特殊关系的最佳方式。
我真的不知道如何解决这个问题......我应该去吗
T(n) = T(n/2) + log_base2(n)
T(n/2) = [T(n/4)+log_base2(n/2)]
T(n) = [T(n/4)+log_base2(n/2)] + log_base2(n)
只是继续努力让我能看到的东西成为一个基本的等式?
答案 0 :(得分:4)
这种复发解决了Θ((log n) 2 )。这有两种方法可以看到这一点。
如果你知道n是2的完美幂(即n = 2 k ),你可以将重现重写为
T(2 k )= T(2 k-1 )+ k
让我们定义一个新的重现S(k)= T(2 k )。然后我们得到了
S(k)= S(k-1)+ k
如果我们扩大这种复发,我们就会得到
S(k)= S(k-1)+ k
= S(k-2)+(k-1)+ k
= S(k-3)+(k-2)+(k-1)+ k
= S(k - 4)+(k - 3)+(k - 2)+(k - 1)+ k
...
= S(0)+ 1 + 2 + 3 + ... + k
= S(0)+Θ(k 2 )
假设S(0)= 1,则此递归求解为Θ(k 2 )。
由于S(k)= T(2 k )= T(n),我们得到T(n)=Θ(k 2 )=Θ( log 2 n)。
这里的另一个选择是扩展一些重复的术语,看看是否出现任何好的模式。这是我们得到的:
T(n)= T(n / 2)+ lg n
= T(n / 4)+ lg(n / 2)+ lg n
= T(n / 8)+ lg(n / 4)+ lg(n / 2)+ lg n
...
最终,在lg n层之后,这种重复发生在最低点,我们留下了这个表达式:
lg n + lg(n / 2)+ lg(n / 4)+ ... + lg(n / 2 lg n)
使用对数属性,我们可以将其重写为
lg n +(lg n - 1)+(lg n - 2)+(lg n - 3)+ ... +(lg n - lg n)
或者,反过来说,这就是总和
0 + 1 + 2 + 3 + ... + lg n
该和是高斯的总和达到lg n,其求值为(lg n)(lg n + 1)/ 2 =Θ((log n)2)。
希望这有帮助!
答案 1 :(得分:1)
如果n是2的幂,那么你可以使用lg(a / b)= lg(a) - lg(b)来扩展重复并精确求解。
T(n) = lg(n) + lg(n/2) + lg(n/4) + ... + lg(1) + 1
= (lg(n) - 0) + (lg(n) - 1) .... + (lg(n) - lg(n)) + 1
= lg(n)*lg(n) - lg(n)*(lg(n)+1)/2 + 1
= lg(n)*lg(n)/2 - lg(n)/2 + 1
答案 2 :(得分:0)
这可以用Akra-Bazzi定理来完成。请参阅http://people.mpi-inf.mpg.de/~mehlhorn/DatAlg2008/NewMasterTheorem.pdf中的第三个示例。
答案 3 :(得分:0)
这可以通过Master theorem来解决。您的a=1
和b=2
以及f(n) = log(n)
。然后是c = log2(1) = 0
。由于您的c
和f(n)
属于第二种情况(k=1
)。
所以解决方案是Θ(log 2 n)