我正在解决练习测验,并遇到了以下问题
记下与以下分而治之算法相对应的重复,准确标记每一个的分量:分割,征服和组合。
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)
我尝试回答。
设T(n)是Foo对p到r所做的工作,所以T(n)相当于Foo(p,r),其中n是r - p + 1。
< / LI>我得到以下递归T(n)= T(n - 1)+Θ(n)+Θ(1)
分割部分是常数Θ(1),对应于r-1操作。
征服部分是T(n - 1),它递归地解决了子问题。
对于T(n - 1)* s的乘法运算,组合部分是常数Θ(1)。
但这似乎不对,因为我没有提到Θ(n)。分割,征服,组合的哪一部分应该是第6,7行的Θ(n)落入?
答案 0 :(得分:1)
从p累积到r所以这似乎属于“组合”部分。所以我们有Θ(n)来自组合。
当我们将元素组合在一起时,我们基本上必须将这些元素拉回到n个元素上。