【发布时间】:2025-12-11 11:35:03
【问题描述】:
两个未嵌套的 for 循环的大 O 表示法是什么?
例子:
for(int i=0; i<n; i++){
System.out.println(i);
}
for(int j=0; j<n; j++){
System.out.println(j);
}
【问题讨论】:
标签: algorithm loops big-o time-complexity
两个未嵌套的 for 循环的大 O 表示法是什么?
例子:
for(int i=0; i<n; i++){
System.out.println(i);
}
for(int j=0; j<n; j++){
System.out.println(j);
}
【问题讨论】:
标签: algorithm loops big-o time-complexity
这将是 O(2n),因为您运行 n+n = 2n 次迭代。
O(2n) 本质上等同于 O(n),因为 2 是一个常数。
【讨论】:
线性
O(n) + O(n) = 2*O(n) = O(n)
不管你有多少非嵌套循环(如果这个数字是一个常数并且不依赖于n),复杂性将是线性的,并且等于循环中的最大迭代次数。
【讨论】:
O(n^2) 时,您应该将它们分成 2 个单循环以获取 O(n) 以牺牲一些内存为代价?
m 次,第二个循环迭代n 次n>>m。
m 不是n 的函数,那么没关系。
O(n) 或 O(m+n) 或 O(m)*O(n) ? m 是 n 是独立的。 m不是n的函数。
O(max(m,n))
从技术上讲,这个算法仍然在 O(n) 时间内运行。
虽然n 每增加一次迭代次数就会增加 2,但所用时间仍以 线性 速率增加,因此在 O(n) 时间内。
【讨论】:
它将是O(n) + O(n) ==> 实际上是O(n),因为我们不保持恒定值。
【讨论】:
假设一个场景,每个循环最多运行 n
所以我们可以说每个 for 循环的复杂度是O(n),因为每个循环都会运行 n 次。
所以你指定这些循环没有嵌套在 第一个循环 O(n)+ 第二个循环 O(n)+ 第三个循环 O(n) 的线性场景中,这会给你3O(n) .
现在,由于我们主要关注复杂性的可变部分,我们将排除常量部分,并在这种情况下说它是 O(n)。
但在实际情况下,我建议您记住,常数因素也将发挥至关重要的作用,因此永远不要排除它们。
例如,考虑从整数数组中找到最小整数的时间复杂度,任何人都会说它是O(n),但要找到同一数组中的第二大或最小整数将是 O(2n)。
但大多数答案会说它是O(n),实际上忽略了常数。
考虑一下如果数组的大小是 1000 万,那么这个常量就不能被忽略。
【讨论】: