本程序的运行时

时间:2015-11-10 21:18:43

标签: runtime asymptotic-complexity

我目前正在参加Java课程并学习期中考试。我遇到了这个问题:

public void wug() {
    int j = 0;
    for (int i = 0; i < N; i += 1) {
        for (; j < M; j += 1) {
            if (bump(i, j))
                break;
        }
    }
}

N和M是微不足道的,并且在其他地方提供。

解决方案表示运行时如果theta(M + N)表示最坏的情况,而theta(N)表示最佳情况。我理解最好的情况,但我认为最坏的情况是theta(N * M)。有人可以解释为什么最坏的情况是theta(M + N)?我对算法的复杂性非常不满意。谢谢!

2 个答案:

答案 0 :(得分:1)

请注意,j永远不会重置,因此内部循环最多迭代M次。要获得N*M次迭代,您必须在循环开始时将迭代器重置为零。

答案 1 :(得分:0)

请注意,j在内循环中未初始化,因此内循环的每次执行都会从前一循环退出的地方继续执行。想一想如何在程序执行时改变j所采用的不同值。

您可以通过在调试器中设置并单步执行此代码来更好地理解此代码。这是因为您已经看到了您认为代码正在做什么,而不是实际发生了什么。单步执行代码可以帮助您专注于产生差异的细节。