描述鸿沟,征服,组合分而治之算法的各个部分

时间:2011-11-17 17:15:00

标签: algorithm divide-and-conquer

我正在解决练习测验,并遇到了以下问题

  

记下与以下分而治之算法相对应的重复,准确标记每一个的分量:分割,征服和组合。

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)

我尝试回答。

  1. 设T(n)是Foo对p到r所做的工作,所以T(n)相当于Foo(p,r),其中n是r - p + 1。

    < / LI>
  2. 我得到以下递归T(n)= T(n - 1)+Θ(n)+Θ(1)

  3. 分割部分是常数Θ(1),对应于r-1操作。

  4. 征服部分是T(n - 1),它递归地解决了子问题。

  5. 对于T(n - 1)* s的乘法运算,组合部分是常数Θ(1)。


  6. 但这似乎不对,因为我没有提到Θ(n)。分割,征服,组合的哪一部分应该是第6,7行的Θ(n)落入?

1 个答案:

答案 0 :(得分:1)

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

当我们将元素组合在一起时,我们基本上必须将这些元素拉回到n个元素上。