我知道如何使用主方法解决递归关系。我也知道如何解决以下重复问题:
T(n) = sqrt(n)*T(sqrt(n)) + n
T(n) = 2*T(sqrt(n)) + lg(n)
在上述两个递归中,递归树的每一层都有相同的工作量。并且递归树中总共有 log log n 个级别。
我在解决这个问题时遇到了麻烦:T(n) = 4*T(sqrt(n)) + n
编辑: 这里 n 是 2 的幂
我知道如何使用主方法解决递归关系。我也知道如何解决以下重复问题:
T(n) = sqrt(n)*T(sqrt(n)) + n
T(n) = 2*T(sqrt(n)) + lg(n)
在上述两个递归中,递归树的每一层都有相同的工作量。并且递归树中总共有 log log n 个级别。
我在解决这个问题时遇到了麻烦:T(n) = 4*T(sqrt(n)) + n
编辑: 这里 n 是 2 的幂
假设 n = 2^k。我们有 T(2^k) = 4*T(2^(k/2)) + 2^k。令 S(k) = T(2^k)。我们有 S(k) = 4S(k/2) + 2^k。通过使用 Mater 定理,我们得到 S(k) = O(2^k)。由于 S(k) = O(2^k) 且 S(k) = T(2^k),T(2^k) = O(2^k) 这意味着 T(n) = O(n)。
我在解决这个问题时遇到了麻烦:T(n) = 4*T(sqrt(n)) + n
编辑:这里 n 是 2 的幂
这个编辑很重要。因此,假设重复在 2 处停止。
所以现在的问题是递归树有多深。嗯,这就是在 n 变得足够小(例如,小于 2)之前,您可以取 n 的平方根的次数。如果我们写
n = 2 lg n
然后在每次递归调用时,n 都会取其平方根。这相当于将上述指数减半,所以在 k 次迭代之后,我们有
n 1/(2 k ) = 2 lg n/(2 k )
我们想在小于 2 时停止,给出
2 lg n/(2 k ) = 2
lg n/(2 k ) = 1
lg n = 2 k
lg lg n = k
因此,在平方根的 lg lg n 次迭代之后,递归停止。(来源)
对于每个递归,我们将有 4 个新分支,因此分支总数为 4 ^(树的深度)4^(lg lg n)
。
编辑:
T(n) = 4 T(sqrt(n)) + n
4 [ 4 T(sqrt(sqrt(n) + n ] + n
4^k * T(n^(1/2^k)) +kn because n is power of 2.
4^k * T(2^(L/2^k)) +kn [ Let n = 2^L , L= logn]
4^k * T(2) +kn [ Let L = 2^k, k = logL = log log n]
2^2k * c +kn
L^2 * c + nloglogn
logn^2 * c + nloglogn
= O(nloglogn)
T(n) = 4T(√n) + n
suppose that (n = 2^m) . so we have :
T(2^m) = 4T(2^(m/2)) + (2^m)
now let name T(2^m) as S(m):
S(m) = 4S(m/2) + m . now with master Method we can solve this relation, and the answer is :
S(m) = Θ(m^2)
now we step back to T(2^m):
T(2^m) = Θ((2^m)^2)
now we need m to solve our problem and we can get it from the second line and we have :
n = 2^m => m=lgn
and the problem solved .
T(n) = Θ((2^lgn)^2)
T(n) = Θ(n^2)