我目前正在参加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)?我对算法的复杂性非常不满意。谢谢!
答案 0 :(得分:1)
请注意,j
永远不会重置,因此内部循环最多迭代M
次。要获得N*M
次迭代,您必须在循环开始时将迭代器重置为零。
答案 1 :(得分:0)
请注意,j在内循环中未初始化,因此内循环的每次执行都会从前一循环退出的地方继续执行。想一想如何在程序执行时改变j所采用的不同值。
您可以通过在调试器中设置并单步执行此代码来更好地理解此代码。这是因为您已经看到了您认为代码正在做什么,而不是实际发生了什么。单步执行代码可以帮助您专注于产生差异的细节。