我的问题是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++) {
}
}
答案 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)。