获得'基本算法'考试,所以做了一些修改。 遇到这个问题并且不确定我的答案是否正确。
这个imgur链接有问题和我的工作 http://imgur.com/SfKUrQO
有人可以验证我是对吗?我出错的地方?
答案 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
也是如此。它不是一个紧张的界限。