不确定我的复杂性分析是否正确
Unsure if my complexity analysis is correct
正在尝试找到此代码块的 Big-O 估计:
int a[][] = new int[m][n];
int w = 0;
for (int i = 0; i<m; i++) {
for(int j = 0; j<n; j++) {
if ( a[i][j]%2 == 0) {
w++;
}
}
}
我做了一个估算和简化:O(m)O(n)O(1) => O(mn)
看起来所有情况都是 O(mn),因为 O(1) 操作是否执行并不重要,这是正确的吗?还是有 best/worst/average 例?
感谢任何见解!
谢谢
这里是 O(mn)
因为有 2 个循环(其中一个嵌套在另一个循环中)。 O(1) 在这里没有意义。 if
不算数。它没有中断,所以它不会影响两个循环的整个遍历。这里没有最好或更差,同样是因为 if
不会改变流程,也不会增加 w 影响循环。
是的,这将始终是 O(mn),因为如果您将测试条件算作操作,那么主体是否执行并不重要。
它只会是常数 O(mn*1/2) 但因为 1/2 只是常数所以你可以忽略它。
在您提供的这段代码中,嵌套循环没有上限,因此您没有使用 big-O 复杂度函数,而是使用 big-Theta 来描述时间复杂度,在您的情况下,是的,它是 θ(nm) 意味着你的算法总是需要 θ(nm) 的时间,这里没有 best/average/worst 的情况。
正在尝试找到此代码块的 Big-O 估计:
int a[][] = new int[m][n];
int w = 0;
for (int i = 0; i<m; i++) {
for(int j = 0; j<n; j++) {
if ( a[i][j]%2 == 0) {
w++;
}
}
}
我做了一个估算和简化:O(m)O(n)O(1) => O(mn)
看起来所有情况都是 O(mn),因为 O(1) 操作是否执行并不重要,这是正确的吗?还是有 best/worst/average 例?
感谢任何见解!
谢谢
这里是 O(mn)
因为有 2 个循环(其中一个嵌套在另一个循环中)。 O(1) 在这里没有意义。 if
不算数。它没有中断,所以它不会影响两个循环的整个遍历。这里没有最好或更差,同样是因为 if
不会改变流程,也不会增加 w 影响循环。
是的,这将始终是 O(mn),因为如果您将测试条件算作操作,那么主体是否执行并不重要。
它只会是常数 O(mn*1/2) 但因为 1/2 只是常数所以你可以忽略它。
在您提供的这段代码中,嵌套循环没有上限,因此您没有使用 big-O 复杂度函数,而是使用 big-Theta 来描述时间复杂度,在您的情况下,是的,它是 θ(nm) 意味着你的算法总是需要 θ(nm) 的时间,这里没有 best/average/worst 的情况。