Algorithm 求解一个递归:T(n)=3T(n/2)和#x2B;N
我需要找到n的递归解,如果n>1,T(n)=3T(n/2)+n,则为2的幂,否则为T(n)=1 使用替换n=2^m,S(m)=T(2^(m-1))我可以得出:Algorithm 求解一个递归:T(n)=3T(n/2)和#x2B;N,algorithm,time-complexity,computer-science,recurrence,Algorithm,Time Complexity,Computer Science,Recurrence,我需要找到n的递归解,如果n>1,T(n)=3T(n/2)+n,则为2的幂,否则为T(n)=1 使用替换n=2^m,S(m)=T(2^(m-1))我可以得出: S(m)=2^m+3*2^(m-1)+3^2*2^(m-2)+⋯+3^(m-1)2^1+3^m 但我不知道如何简单地做到这一点。请看第60页 也许你应该在这里问一下像这样的问题可以用计算机来解决 在您的情况下,a=3,b=2和f(n)=n 因此c=log_b(a)=log_2(3),大于1,因此属于第一种情况。因此,您的复杂性是: O(n
S(m)=2^m+3*2^(m-1)+3^2*2^(m-2)+⋯+3^(m-1)2^1+3^m
但我不知道如何简单地做到这一点。请看第60页
也许你应该在这里问一下像这样的问题可以用计算机来解决 在您的情况下,
a=3
,b=2
和f(n)=n
因此c=log_b(a)=log_2(3)
,大于1,因此属于第一种情况。因此,您的复杂性是:
O(n^{log_2(3)})=O(n^{1.58})这些类型的复发最容易通过算法分析的主定理解决,其解释如下: 设a为大于或等于1的整数,b为大于1的实数,c为正实数。给出了形式的一个循环- T(n)=a*T(n/b)+nc,其中n>1,则对于n a,b的幂,如果
您的定期报告的英文翻译 在主定理中要理解的最关键的东西是递归中提到的常数a、b和c。让我们以您自己的递归-T(n)=3T(n/2)+n-为例 这个循环实际上是说它所代表的算法是这样的 (解决大小为n的问题所需的时间)=(解决大小为n/2的3个问题所需的时间)+n 最后的n是合并这3个n/2大小问题的结果的成本
现在,凭直觉你可以理解:
- 如果“解决3个大小为n/2的问题”的成本比“n”的权重更大,则第一项将决定总体复杂性李>
- 如果成本“n”的权重大于“解决3个大小为n/2的问题”,则第二项将确定总体复杂性;以及
- 如果两个部分的权重相同,则解决子问题并合并它们的结果将具有一个总的复合权重
在您的示例中,a=3、b=2和c=1。因此,在案例3中,它下降为Logba=Log23,大于1(c的值)
因此,复杂性很简单-Θ(nlogba)=Θ(nlog23)您可以使用Masters定理解决此问题,但也可以通过以下方式打开递归树:
- 在递归树的根上,您将有一个n
- 在第二阶段,树被分成三个部分,每个部分的工作量为n/2
- 继续走,直到你到达树叶。当:n=2^k时,整个工作页将为:O(1)=O(n/2^k)
- 请注意,在每个步骤中,m有3^m个拆分
- 现在我们将使用几何级数和对数规则将所有步骤组合在一起。最后,您将获得: T(n)=3T(n/2)+n=2n^(log3)-2n
(3/2)^logN
减少到N^log(3/2)
,我认为这是错误的。