不确定我的复杂性分析是否正确

时间:2016-09-22 20:58:09

标签: time-complexity big-o asymptotic-complexity code-complexity

试图找到此代码块的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)=&gt; O(MN)

看起来所有情况都是O(mn),因为如果执行O(1)操作并不重要,这是否正确?或者有最佳/最差/平均情况?

欣赏任何见解!

谢谢

3 个答案:

答案 0 :(得分:0)

这里是O(mn)因为2个循环(其中一个嵌套在另一个循环中)。 O(1)在这里没有意义。 if不计算在内。它没有中断,所以它不会影响两个循环的整个遍历。这里没有最好或者更糟,再次因为if不会改变流量,也不会增加w会影响循环。

答案 1 :(得分:0)

是的,这将始终为O(mn),因为如果将测试条件计算为操作,那么是否执行主体并不重要。

它只是常数O(mn * 1/2),但因为1/2只是常数,你可以忽略它。

答案 2 :(得分:0)

在你提供的这段代码中,嵌套循环没有上限,所以你不要使用big-O复杂功能,而是使用big-Theta来描述时间复杂度,在你的情况下,是的是θ(nm)意味着你的算法总是需要θ(nm)时间,并且这里没有最佳/平均/最差情况。