假设T(1)和c是常数,求解递归2T(n ^ 1/2)+ c

时间:2015-05-12 09:21:57

标签: algorithm math recursion

获得'基本算法'考试,所以做了一些修改。 遇到这个问题并且不确定我的答案是否正确。

这个imgur链接有问题和我的工作 http://imgur.com/SfKUrQO

enter image description here

有人可以验证我是对吗?我出错的地方?

1 个答案:

答案 0 :(得分:0)

我无法按照您的笔迹指出您哪里出错了,但是我会怎样做:

T(n) = 2T(n^(1/2)) + c
     = 2(2T(n^(1/4)) + c)
     = ...
     = 2^kT(n^(1/2^k)) + 2^(k - 1)c

所以我们需要找到最小的k,以便:

n^(1/2^k) = 1 (considering the integer part)

我们可以对这个表达式应用对数:

1/(2^k) log n = 0 (remember we're considering integer parts)
=> 2^k >= log n | apply a logarithm again
=> k log 2 >= log log n
=> k = O(log log n) because log 2 is a constant

所以我们有:

2^O(log log n)T(1) + 2^O(log log n - 1)c
= O(2^log log n)
= O(log n)

我看到你有O(sqrt(n)),这也不错,因为log n < sqrt n,所以如果log n是上限,那么sqrt n也是如此。它不是一个紧张的界限。