递归关系:求解 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 / 2) + O(1)? [关闭]