Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何求解这个递推关系:T(n)=4*T(sqrt(n))+;N_Algorithm_Recurrence - Fatal编程技术网

Algorithm 如何求解这个递推关系:T(n)=4*T(sqrt(n))+;N

Algorithm 如何求解这个递推关系:T(n)=4*T(sqrt(n))+;N,algorithm,recurrence,Algorithm,Recurrence,我知道如何用Master方法解决递归关系。 我还知道如何解决以下复发问题: T(n)=sqrt(n)*T(sqrt(n))+n T(n)=2*T(sqrt(n))+lg(n) 在上述两个递归中,递归树的每一级都有相同的工作量。递归树中总共有logn个级别 我很难解决这个问题: T(n)=4*T(sqrt(n))+n 编辑: 这里n是2的幂我很难解决这个问题:T(n)=4*T(sqrt(n))+n 编辑:这里n是2的幂 这个编辑很重要。假设循环在2停止 现在的问题是递归树有多深。这就是在n变得足够

我知道如何用Master方法解决递归关系。 我还知道如何解决以下复发问题:

T(n)=sqrt(n)*T(sqrt(n))+n

T(n)=2*T(sqrt(n))+lg(n)

在上述两个递归中,递归树的每一级都有相同的工作量。递归树中总共有logn个级别


我很难解决这个问题: T(n)=4*T(sqrt(n))+n

编辑:
这里n是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时,我们要停止,给

2lgn/(2k)=2

lgn/(2k)=1

lgn=2k

lg n=k

因此,经过lgn次平方根迭代后,递归停止。()

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

编辑


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

编辑:这里n是2的幂

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

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

n=2lg n

然后,在每个递归调用上,n将取其平方根。这相当于将上述指数减半,因此在k次迭代之后,我们得到

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

当这小于2时,我们要停止,给

2lgn/(2k)=2

lgn/(2k)=1

lgn=2k

lg n=k

因此,经过lgn次平方根迭代后,递归停止。()

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

编辑


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

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

我认为这属于理论上的CS堆栈交换位置。在任何情况下,您只需通过将原始方程替换回T()并进行分布来“解开”递归关系。你这样做直到你观察到一个模式,然后你通常用“k”来定义这个模式。我得到了这个模式,但我无法解决它。。。!!我按照你建议的方式进行。我投票决定把这个问题作为离题来结束,因为它属于主题。或者其中一个CS站点。我认为这属于理论上的CS堆栈交换站点。在任何情况下,您只需通过将原始方程替换回T()并分布来继续“解开”递归关系。你这样做直到你观察到一个模式,然后你通常用“k”来定义这个模式。我得到了这个模式,但我无法解决它。。。!!我按照你建议的方式进行。我投票决定把这个问题作为离题来结束,因为它属于主题。或者一个CS站点。你真的能在这里使用主定理吗,因为在这种情况下S(k/2)中的2不是常数?你真的能在这里使用主定理吗,因为S(k/2)中的2在这种情况下不是常数吗?请你至少加上几句话来解释你的答案好吗?请你至少加上几句话来解释你的答案好吗?
   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)