计算最复杂的大罢工

时间:2018-02-16 20:49:12

标签: algorithm recursion big-o recurrence

在我的算法课程中,我们学习了复发,但我完全迷失了,不知道该怎么做。我从Bowdoin Solving Recurrences with the Iteration/Recursion-tree找到了这个pdf,它解释得有点好,但提供的例子并不包括Big Oh。我有下面列出的问题之一。我们如何操纵递归迭代树以合并O(n ^ 2)?如果有人能够解释在涉及复发的Big Oh的情况下该做什么,我将不胜感激。谢谢

T(n) = T(n−4)+O(n^2)

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)²)基本相同。

所以通过替换你到达

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),它计算精确的系列值:

enter image description here

我们假设递归在n <= 0时停止,然后在扩展系列中有floor(n / 4)个术语:

enter image description here

在步骤(*)中,我们使用standard formulae来求和自然数的幂(正整数),在最后一步中,我们收集了与n^3成比例的所有项,这是领先的权力。因此,我们可以安全地得出 T(n) = O(S(n)) = O(n^3) 的结论。

天真的方法可能在哪里失败?请考虑以下示例:

enter image description here

其中N是一个等于n初始值的参数,即:

enter image description here

现在,我们可以在天真的方法中做出什么假设?

  1. n = N开始,假设复杂性的 lower 界限只是假设n = N所有 {{1}条款。但是这给了0!
  2. 假设停止条件是log时,最大的术语也是最后一个 - n = 1。整个总和中显然有log N个术语,因此最终的复杂性为N
  3. (2)似乎合理,但这是正确的吗?

    让我们使用上述程序:

    enter image description here

    我们在(1)(2)中使用了一些对数规则,在(3)中使用了Stirling's approximation。因此,最终的复杂性O(N log N) = O(n log n)是:

    enter image description here

    正如您所看到的,天真的乘法方法给出了T(n)而不是O(n log n)的错误结果。

    为什么我选择这个相当深奥的反例来为你烦恼(道歉!)? Because I have seen this mistake made before