我正在为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)
我不完全确定这是否正确,但我陷入困境并需要一些帮助。谢谢!
答案 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)
由于这个问题已经得到解答,让我在如何找到复发的复杂性背后添加一些直觉。
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)