在我的算法课程中,我们学习了复发,但我完全迷失了,不知道该怎么做。我从Bowdoin Solving Recurrences with the Iteration/Recursion-tree找到了这个pdf,它解释得有点好,但提供的例子并不包括Big Oh。我有下面列出的问题之一。我们如何操纵递归迭代树以合并O(n ^ 2)?如果有人能够解释在涉及复发的Big Oh的情况下该做什么,我将不胜感激。谢谢
T(n) = T(n−4)+O(n^2)
答案 0 :(得分:0)
您可以将big-O视为任何函数,然后尝试解决重复问题。在这种情况下,你可以做
T(n) = T(n-4) + O(n²)
T(n-4) = T(n-8) + O(n²)
T(n-8) = T(n-12) + O(n²)
.
.
.
T(0) = 0
请注意,O(n²)
与O((n - 4)²)
基本相同。
所以通过替换你到达 p>
T(n) = O(n²) + O(n²) + O(n²) + ... + 0
您可以轻松地显示此总和有n/4
个字词。所以这是
T(n) = ¼n * O(n²) = O(n³)
或者,请记住f(n) = c*n²
格式中的任何函数均为O(n²)
。因此,您也可以使用其中一个函数替换O(n²)
,并使用以下不等式渐近地工作:
T(n) ≤ T(n-4) + c*n²
其余部分遵循相同的想法。
答案 1 :(得分:0)
我想通过陈述以下内容来跟进其他答案:
在一般情况下,你不能简单地将出现次数乘以每次出现的复杂性。
安全的做法是精确评估复发 - 即没有O符号,并且重新应用"最后只通过领先的订单期限的O符号。
让我们看看这个例子。定义一个函数S(n)
,它计算精确的系列值:
我们假设递归在n <= 0
时停止,然后在扩展系列中有floor(n / 4)
个术语:
在步骤(*)中,我们使用standard formulae来求和自然数的幂(正整数),在最后一步中,我们收集了与n^3
成比例的所有项,这是领先的权力。因此,我们可以安全地得出 T(n) = O(S(n)) = O(n^3)
的结论。
天真的方法可能在哪里失败?请考虑以下示例:
其中N
是一个等于n
的初始值的参数,即:
现在,我们可以在天真的方法中做出什么假设?
n = N
开始,假设复杂性的 lower 界限只是假设n = N
为所有 {{1}条款。但是这给了0!log
时,最大的术语也是最后一个 - n = 1
。整个总和中显然有log N
个术语,因此最终的复杂性为N
。(2)似乎合理,但这是正确的吗?
让我们使用上述程序:
我们在(1)(2)中使用了一些对数规则,在(3)中使用了Stirling's approximation。因此,最终的复杂性O(N log N) = O(n log n)
是:
正如您所看到的,天真的乘法方法给出了T(n)
而不是O(n log n)
的错误结果。
为什么我选择这个相当深奥的反例来为你烦恼(道歉!)? Because I have seen this mistake made before