如何找到此递归的复杂性?
T(n)= 2 T(n 1/2 )+ O(lg n)
答案 0 :(得分:2)
(来自https://stackoverflow.com/a/3956416/395857)
T(n)= 2T(n ^(1/2))+ O(lg n)
设m = log 2 n;
=> T(2 m )= 2T(2 m / 2 )+ O(m)
现在重命名K(m)= T(2 m )=> K(m)= 2K(m / 2)+ O(m)
然后使用Master theorem代替K.总结一下,O(T)~O(lg K)。
答案 1 :(得分:1)
有一种经典方法可以解决这些递归关系,其中n
项的值取决于p
指数\次方小于n
(此处为p = n^(1/2) = exp(1/2*log(n))
})。
将变量n
更改为exp(k)
并定义函数F
,以便
F(k) = T(exp(k))
第一步给你
T(exp(k)) = 2 T(exp(k/2)) + O(k)
第二步给你
F(k) = 2F(k/2) + O(k)
众所周知(对于此证明搜索)O(klog(k))
。
现在只需n = exp(k) => k = log(n)
,你终于获得了
T(n) = O(log(n) * log(log(n)))