当涉及2个算法时如何进行大O分析

时间:2010-07-31 04:31:46

标签: big-o

我对如何针对以下问题进行大O分析感到困惑 -

从整数数组中查找元素。 (一个示例问题)

我的解决方案

  1. 使用冒泡排序(n ^ 2)
  2. 对数组进行排序
  3. 在数组上搜索给定元素(logn)
  4. 现在这个大O是n ^ 2还是n ^ 2 + logn?我们应该只考虑更高的术语吗?

4 个答案:

答案 0 :(得分:3)

问题的Big-O是针对问题存在的最佳算法的。由两个步骤(如你的)组成的算法确实是两者中最高的,因为例如。

O(n^2) == O(n^2 + log n)

但是,您不能说O(n^2)对于您的示例问题是正确的O,而不能证明不存在更好的算法(当然不是这种情况)在示例中; - )。

答案 1 :(得分:1)

只有更高阶的术语。复杂性始终是最高期限的复杂性。

答案 2 :(得分:0)

你这样做的方式是O(n ^ 2),因为对于大n,n ^ 2>>> LOGN

答案 3 :(得分:0)

为了进行分析,更实际地(如果您愿意,粗略地)比Alex更好,添加的 log n 对结果没有明显的影响。考虑在具有一百万个输入的实际系统中进行分析,每个输入需要一毫秒进行排序,一毫秒进行搜索(这是一个高度假设的例子)。给定O(n ^ 2),排序需要三十多年。搜索需要额外的0.014秒。你关心改进哪个部分? :)

现在,您将看到以 O(n ^ 2 x logn)为时钟的算法。将 n ^ 2 乘以 log n 的效果使 log n 显着 - 在我们的示例中,它看到了我们的三十年并且提升了我们四个世纪