如何解决这个递归关系:T(n) = 4*T(sqrt(n)) + n

Posted

技术标签:

【中文标题】如何解决这个递归关系:T(n) = 4*T(sqrt(n)) + n【英文标题】:How to solve this recurrence relation: T(n) = 4*T(sqrt(n)) + n 【发布时间】:2017-10-10 19:42:17 【问题描述】:

我知道如何使用主方法解决递归关系。 我也知道如何解决以下重复问题:

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的幂

【问题讨论】:

我认为这属于理论上的 CS 堆栈交换站点 在任何情况下,您只需通过将原始方程代回 T() 并进行分布来“解开”递推关系。你这样做直到你观察到一个模式,然后你通常用“k”来定义那个模式。 我得到了模式,但我无法解决它......!! 我按照你建议的方式进行。 我投票结束这个问题,因为它属于maths。或 CS 站点之一。 【参考方案1】:

假设 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)。

【讨论】:

你真的可以在这里使用主定理吗?因为 S(k/2) 中的 2 在这种情况下不是恒定的?【参考方案2】:

我在解决这个问题时遇到了麻烦:T(n) = 4*T(sqrt(n)) + n

编辑:这里 n 是 2 的幂

这个编辑很重要。所以假设循环在 2 处停止。

所以现在的问题是递归树有多深。嗯,这是在 n 变得足够小(例如,小于 2)之前你可以取 n 的平方根的次数。如果我们写

n = 2lg n

然后在每次递归调用时,n 都会取其平方根。这相当于将上面的指数减半,所以在 k 次迭代后我们就有了

n1/(2k) = 2lg n/(2k)

我们想在小于 2 时停止,给出

2lg n/(2k) = 2

lg n/(2k) = 1

lg n = 2k

lg lg n = k

所以在平方根的 lg lg n 次迭代之后,递归停止。 (source)

对于每次递归,我们将有 4 个新分支,分支总数为 4 ^(树的深度),因此 4^(lg lg n)

编辑

Source

【讨论】:

【参考方案3】:
   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)

【讨论】:

【参考方案4】:
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)

【讨论】:

能否请您至少添加几句话来帮助解释您的答案?

以上是关于如何解决这个递归关系:T(n) = 4*T(sqrt(n)) + n的主要内容,如果未能解决你的问题,请参考以下文章

求解递归关系 T(n) = √n T(√n) + n [关闭]

求解递归 T(n) = T(n/2) + lg n? [关闭]

递归关系:求解 T(n-1) 的大 O

求解递归关系 T(n) = T(n-√n)+1

求解递归关系T(n)= T(n-1)+ n

计算递归关系 T(n)=T(n / log n) + Θ(1)