为什么O(n ^ 2)与O(ab)不同?

时间:2019-08-13 13:51:04

标签: java algorithm

我的问题是O(n ^ 2)与O(ab)之间有什么区别。嵌套的for循环中有两个不同的N个数组。从CTCI,我读到它不是O(N ^ 2)而是O(ab),因为它具有不同的输入。

for (int i = 0; i < arrayA.length; i++) {
    for (int j = 0; j < arrayB.length; j++) {

    }
}

4 个答案:

答案 0 :(得分:4)

非常简单:

因为做类似(a)1 x(b)1000万的事情……只需要一千万个“时隙”。

而(n)1000万x(n)1000万……嗯,总是n * n,不是吗。

换句话说:O(ab)表示您具有确定复杂性的两个参数。 O(n ^ 2)表示您的复杂度取决于一个参数。

答案 1 :(得分:2)

  

为什么O(n ^ 2)与O(ab)不同?

O(n^2)转换为O(n*n),其复杂度仅取决于1个变量。您的示例取决于2个独立变量,因此复杂度不一定是这两个变量中任何一个的平方。例如,如果您的b很小而a很高,则复杂度几乎取决于a。

这两个表达式相等的唯一情况是在n = a = b时适用O(n^2) = O(a*b)

答案 2 :(得分:1)

如果a和b的长度相同,则为O(n ^ 2),否则为O(ab)

答案 3 :(得分:0)

因为它取决于应用程序/输入的属性。

如果a或b保持较低或恒定,则O(ab)像O(n)那样缩放,而不是O(n ^ 2)。