条件为假的 for 循环的大 O
Big O of a for loop with a false condition
对于这个 Big O 问题,我只需要一些说明或帮助。我不知道我是否解释正确,但我注意到 for 循环有一个错误条件,所以这意味着它根本不会循环。我的教授说仍然可以确定循环的 运行 时间。所以我在想的是:
1 + (n - 1 - n) * (n) = 1 + 1 * n = 1 + n = O(n)
说明:1为循环外操作。 (n - 1 - n) 是外循环的迭代,n 是内循环的迭代。
注:我还在学习Big O,所以如果我的逻辑有任何错误,请指正。
int total = 0;
for (int i = n; i < n - 1; i++) {
for (int j = 0; j < n; j++) {
total = total + 1
}
}
Big O分析中不应该有任何负数。对于负 运行 时间没有意义。此外,(n - 1 - n)
不仅仅是 O(1)
的顺序。您的外循环甚至不会进入一次迭代。因此,循环中任何语句的时间复杂度都无关紧要。
总结一下,运行时间是1 + 1 = O(1)
。
用于描述函数渐近行为的大 O 符号。基本上,它告诉您函数增长或增长的速度
拒绝
例如,在分析某些算法时,可能会发现完成大小为 n 的问题所需的时间(或步数)由
给出
T(n) = 4 n^2 - 2 n + 2
如果我们忽略常量(这是有道理的,因为它们取决于程序 运行 所在的特定硬件)和增长较慢的项,我们可以说 "T(n)" 以 n^ 的顺序增长2 " 和 write:T(n) = O(n^2)
对于正式定义,假设f(x) 和g(x) 是定义在实数的某个子集上的两个函数。我们写
f(x) = O(g(x))
(或 f(x) = O(g(x)) for x -> infinity 更精确)当且仅当存在常数 N 和 C 使得
|f(x)| <= C|g(x)| for all x>N
直觉上,这意味着 f 的增长速度并不比 g
如果a是实数,我们写
f(x) = O(g(x)) for x->a
当且仅当存在常数 d > 0 和 C 使得
|f(x)| <= C|g(x)| for all x with |x-a| < d
所以对于你的情况,它是 O(n^2) 作为 |f(x)| > C|g(x)|
引用自http://web.mit.edu/16.070/www/lecture/big_o.pdf
int total = 0;
for (int i = n; i < n - 1; i++) { // --> n loop
for (int j = 0; j < n; j++) { // --> n loop
total = total + 1; // -- 1 time
}
}
}
Big O Notation 给出了一个假设,当值非常大时,外循环将 运行 n 次,而内循环是 运行ning n 次
假设 n -> 100
比总数 n^2 10000 运行 次
对于这个 Big O 问题,我只需要一些说明或帮助。我不知道我是否解释正确,但我注意到 for 循环有一个错误条件,所以这意味着它根本不会循环。我的教授说仍然可以确定循环的 运行 时间。所以我在想的是:
1 + (n - 1 - n) * (n) = 1 + 1 * n = 1 + n = O(n)
说明:1为循环外操作。 (n - 1 - n) 是外循环的迭代,n 是内循环的迭代。
注:我还在学习Big O,所以如果我的逻辑有任何错误,请指正。
int total = 0;
for (int i = n; i < n - 1; i++) {
for (int j = 0; j < n; j++) {
total = total + 1
}
}
Big O分析中不应该有任何负数。对于负 运行 时间没有意义。此外,(n - 1 - n)
不仅仅是 O(1)
的顺序。您的外循环甚至不会进入一次迭代。因此,循环中任何语句的时间复杂度都无关紧要。
总结一下,运行时间是1 + 1 = O(1)
。
用于描述函数渐近行为的大 O 符号。基本上,它告诉您函数增长或增长的速度 拒绝
例如,在分析某些算法时,可能会发现完成大小为 n 的问题所需的时间(或步数)由
给出T(n) = 4 n^2 - 2 n + 2
如果我们忽略常量(这是有道理的,因为它们取决于程序 运行 所在的特定硬件)和增长较慢的项,我们可以说 "T(n)" 以 n^ 的顺序增长2 " 和 write:T(n) = O(n^2)
对于正式定义,假设f(x) 和g(x) 是定义在实数的某个子集上的两个函数。我们写
f(x) = O(g(x))
(或 f(x) = O(g(x)) for x -> infinity 更精确)当且仅当存在常数 N 和 C 使得
|f(x)| <= C|g(x)| for all x>N
直觉上,这意味着 f 的增长速度并不比 g
如果a是实数,我们写
f(x) = O(g(x)) for x->a
当且仅当存在常数 d > 0 和 C 使得
|f(x)| <= C|g(x)| for all x with |x-a| < d
所以对于你的情况,它是 O(n^2) 作为 |f(x)| > C|g(x)|
引用自http://web.mit.edu/16.070/www/lecture/big_o.pdf
int total = 0;
for (int i = n; i < n - 1; i++) { // --> n loop
for (int j = 0; j < n; j++) { // --> n loop
total = total + 1; // -- 1 time
}
}
}
Big O Notation 给出了一个假设,当值非常大时,外循环将 运行 n 次,而内循环是 运行ning n 次
假设 n -> 100 比总数 n^2 10000 运行 次