使用递归方法解决这种关系?

时间:2018-03-16 13:49:00

标签: algorithm recurrence

我不知道如何继续这种复发因为我没有看到任何模式,任何帮助??

T(n) = 2n + T(n/2)
     = 3n + T(n/4)
     = 7n/2 + T(n/8)
     = 15n/4 + T(n/16)
     and so on...

3 个答案:

答案 0 :(得分:0)

据我所知,这只是简单的重复。

T(n) = 2n + T(n/2)

你的记谱法可以让别人有所不同。对我来说应该是:

T(n) = 2n + T(n/2)                                    ....(1)
T(n/2) = 2(n/2) + T(n/2/2) = n + T(n/4)
T(n) = 2n + n + T(n/4) = 3n + T(n/4)                  ....(2)
T(n/4) = 2(n/4) + T(n/4/2) = n/2 + T(n/8)
T(n) = 2n + n + n/2 + T(n/8) = 7n/2 + T(n/8)          ....(3)
T(n/8) = 2(n/8) + T(n/8/2) = n/4 + T(n/16)
T(n) = 2n + n + n/2 + n/4 + T(n/16) = 15n/4 + T(n/16) ....(4)
T(n/16) = 2(n/16) + T(n/16/2) = n/8 + T(n/32)
T(n) = 15n/4 + n/8 + T(n/32) = 31n/4 + T(n/32)        ....(5)
and so on...

答案 1 :(得分:0)

这是一种常见的复发关系 - 如果你是CS学生,你很快就会知道结果。

如果您想手动查找结果,请从重复出现几何总和:

T(n) = 2n + n + n/2 + ... + n/2^(k+1) + T(0)
     = 2n(1 + 1/2+ ... + 1/2^(k+2)) + T(0)

k = INT(log2(n))

您可以看到一般术语1/2出现的几何总和

1 + 1/2 + ... + 1/2^(k+2) = (1 - 1/2^(k+3)) / (1 - 1/2)

观察2^(k+2) = 8 * 2^(log2(n)) = 8n并简化

T(n) = 4n + T(0) - 1/2 = Theta(4n)

答案 2 :(得分:0)

除了Alexandre Dupriez所展示的直到T(0)方式的扩展系列之外,您还可以应用主定理来解决它

对于递推方程

T(n) = 2n + T(n/2)

主定理:

对于表格的重复,

T(n) = a T(n/b) + f(n)

where a >= 1 and b > 1

如果f(n)是O(n c )那么

  1. 如果c < log b a,然后T(n)= O(n * log b a)
  2. 如果c = log b a,则T(n)= O(n c * log n)
  3. 如果c> log b a,然后T(n)= O(n c
  4. 我们有a = 1,b = 2,c = 1且c> 1。 log b a(case 3)[as c = 1 and log 1(any base)= 0]

    因此,T(n)= O(n 1

      

    T(n)= O(n)