我的问题是 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 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
很简单的:
因为做类似 (a) 1 x (b) 1000 万……只需要 1000 万个“时隙”。
而 (n) 1000 万 x (n) 1000 万……好吧,那总是 n*n,不是吗。
换句话说:O(ab) 表示您有两个决定复杂性的参数。O(n^2) 表示您的复杂性仅取决于一个参数。
翻翻过去那场雪
TA贡献2065条经验 获得超13个赞
为什么 O(n^2) 与 O(ab) 不同?
O(n^2)
转化为O(n*n)
,其复杂度仅取决于 1 个变量。您的示例取决于 2 个独立变量,因此复杂性不一定是这两个变量中的任何一个的二次方。例如,如果您有一个非常小b
和一个非常高的a
,那么您的复杂度几乎与 a 成线性关系。
这两个表达式相等的唯一情况是 when n = a = b
, thenO(n^2) = O(a*b)
将适用。
添加回答
举报
0/150
提交
取消