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

Posted

技术标签:

【中文标题】递归关系:求解 T(n-1) 的大 O【英文标题】:Recurrence Relation: Solving Big O of T(n-1) 【发布时间】:2011-03-14 13:07:12 【问题描述】:

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

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

对于以上内容,我很容易找到大 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)

我不完全确定这是否正确,但我遇到了困难,需要一些帮助。谢谢!

【问题讨论】:

【参考方案1】:

既然问题已经回答了,让我在如何找到递归的复杂性背后添加一些直觉。

主定理仅适用于分而治之类型的递归,例如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】:

假设 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)

【讨论】:

@AndreasJansson 我在前两个步骤中没有遵循您的代数。您声称 $T(n-1) + 2 = (T(n-2) + 2) + 2$ 但我不明白您是如何得出这个结论的。问题中没有任何迹象表明这一点,那么你怎么能做出这个假设呢?如果 $T(2) = 10000000000000000$ 我们不知道怎么办,你怎么能假设它不是呢? @ripDaddy69 如果我们将 (n-1) 代入原始 T(n) 中,我们得到 T(n-1) = T(n-2) + 2。对吗?现在,如果我们将第一行的 T(n-1) 替换为 T(n-2)+2,我们将得到第二行。【参考方案3】:

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

所以 T(n) = 2*n 这意味着 O(n)

【讨论】:

以上是关于递归关系:求解 T(n-1) 的大 O的主要内容,如果未能解决你的问题,请参考以下文章

求解递归关系T(n)= T(n-1)+ n

使用主定理求解递归 T(n) = T(n / 2) + O(1)? [关闭]

具有三个递归调用的递归函数的时间复杂度

求解递归关系 T(n) = √n T(√n) + n [关闭]

如何求解:T(n) = T(n - 1) + n

求解递归 T(n) = T(n/2) + lg n? [关闭]