以下算法的运行时间?

时间:2017-04-04 23:02:11

标签: algorithm runtime time-complexity complexity-theory

分而治之算法通过将大小为n的问题解决为2来解决问题 子问题,每个大小为n-1,并花费O(n)时间来组合他们的解决方案。这个算法的运行时是什么?

我不太确定如何构造这种递归关系并确定运行时是什么。以下关系是否正确?

T(n)= 2T(n-1)+ O(n)

如果是这样,我如何从中获取运行时?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

是的,您的重复关系正确描述了您的问题。为了使事情具体化,我们假设递归关系是:T(n) = 2T(n-1) + n+n而不是+O(n)

然后,伸缩递归关系(假设T(0)= 0)。

T(n) = n + 2(n-1) + 4(n-2) + 8(n-3) + ... + 2^n(n-n)
     = (1 + 2 + 4 + ... + 2^n)n - (0*2^0 + 1*2^1 + ... + n*2^n)
     = n*(2^(n+1)-1) - 2(n*2^n-2^n+1)
     = 2^(n+1) - n - 2

检查这是正确的:

2T(n-1) + n
     = 2(2^n - (n-1) - 2) + n
     = (2^(n+1) - 2n + 2 - 4) + n
     = 2^(n+1) - n - 2
     = T(n)