递归关系:求解T(n-1)的大O

时间:2010-07-11 18:44:37

标签: big-o recurrence

我正在为Big O解决一些递归关系问题,到目前为止,直到这一点只遇到了涉及这种形式的递归关系:

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

对于上述内容,我很容易找到Big O表示法。但我最近抛出了一个曲线球,其中包含以下等式:

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

我不太确定如何为Big O解决这个问题。我实际上已尝试插入等式,如下所示:

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

我不完全确定这是否正确,但我陷入困境并需要一些帮助。谢谢!

3 个答案:

答案 0 :(得分:17)

假设T(1)= 0

T(n) = T(n-1) + 2
 = (T(n-2) + 2) + 2
 = T(n-2) + 4
 = (T(n-3) + 2) + 4
 = T(n-3) + 6
 = T(n-k) + 2k

将k设为n-1,你有

T(n) = 2n - 2

因此,它是O(n)

答案 1 :(得分:1)

由于这个问题已经得到解答,让我在如何找到复发的复杂性背后添加一些直觉。

  • Master定理仅适用于除法和征服类型的重复,例如T(n) = a*T(n/b) + f(n),其中a是子问题的数量,每个子问题的大小都是1/b原始问题。但是,重复T(n) = T(n-1) + 2在技术上并没有划分"将问题转化为子问题。所以主定理在这里不适用。
  • 如果我们仔细查看重复,很明显它会超过n个步骤,每个步骤都需要一个恒定的时间,在这种情况下为2。因此复杂性为O(n)

我特别发现第二种直觉对大多数复发很有帮助(可能不是全部)。例如,您可以针对类似的重复T(n) = T(n-1) + n尝试相同的操作,其复杂性当然是O(n^2)

答案 2 :(得分:0)

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

因此T(n)= 2 * n意味着O(n)