Algorithm 求解一个递归:T(n)=3T(n/2)和#x2B;N

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

我需要找到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^{log_2(3)})=O(n^{1.58})

这些类型的复发最容易通过算法分析的主定理解决,其解释如下:

设a为大于或等于1的整数,b为大于1的实数,c为正实数。给出了形式的一个循环-

T(n)=a*T(n/b)+nc,其中n>1,则对于n a,b的幂,如果

  • Logba
  • Logba=c,T(n)=Θ(nc*logn)
  • Logba>c,T(n)=Θ(nlogba)

  • 您的定期报告的英文翻译

    在主定理中要理解的最关键的东西是递归中提到的常数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)
    ,我认为这是错误的。