Algorithm 描述分治算法的分治、合并部分

Algorithm 描述分治算法的分治、合并部分,algorithm,divide-and-conquer,Algorithm,Divide And Conquer,我在做一个练习题,遇到了以下问题 写下与下面的分治算法对应的循环,准确地标记出每种算法的组件:分治、征服和合并 我试图回答 设T(n)是Foo对p到r所做的功,因此T(n)等价于Foo(p,r),其中n是r-p+1 我得到以下递推T(n)=T(n-1)+Θ(n)+Θ(1) 分割部分将是一个常数Θ(1),它对应于r-1操作 克服的部分将是递归求解子问题的T(n-1) 组合部分是T(n-1)*s的乘法运算的常数Θ(1) 但这似乎是错误的,因为我没有提到Θ(n)。第6行、第7行的Θ(n)应该属于划

我在做一个练习题,遇到了以下问题

写下与下面的分治算法对应的循环,准确地标记出每种算法的组件:分治、征服和合并


我试图回答

  • 设T(n)是Foo对p到r所做的功,因此T(n)等价于Foo(p,r),其中n是r-p+1

  • 我得到以下递推T(n)=T(n-1)+Θ(n)+Θ(1)

  • 分割部分将是一个常数Θ(1),它对应于r-1操作

  • 克服的部分将是递归求解子问题的T(n-1)

  • 组合部分是T(n-1)*s的乘法运算的常数Θ(1)



  • 但这似乎是错误的,因为我没有提到Θ(n)。第6行、第7行的Θ(n)应该属于划分、征服、合并的哪一部分?

    s从p累积到r,因此这似乎属于“合并”部分。所以我们有来自组合的Θ(n)


    当我们将这些元素重新组合在一起时,我们基本上必须将备份压缩到n个元素之上。

    嗯,在上面的代码中,“Theta”来自哪里?或者“T”?@JimClay我指的是渐近符号的θ,编辑我的帖子试图澄清我所指的T(n)哇,现在甚至被1除(只称自己一次)也可以称为“分而治之”…@KennyTM+1 LOL你是对的,这是一个分而治之的很糟糕的例子。。。算法本身也没有任何意义,对于Foo(p,r),它计算乘积r(r-1)^2(r-2)^3。。。p^(r-p+1)。。。这为什么有用?该算法的速度也和简单的迭代实现一样快,因此这里的“分而治之”没有任何好处
    1. Foo (p, r):
    2.     if p = r
    3.          return (1)
    4.     else
    5.         s ← 1
    6.         for i = p to r
    7.             s ← s * i
    8.         q ← Foo(p, r − 1) * s
    9.     return (q)