有人可以在下面的练习中解释最坏情况下的运行时间是O(N)而不是O(N ^ 2)。循环有两个,对于每个我需要将j与i进行比较,求和,然后递增并再次重复操作直到达到N.
以下代码片段的最坏情况运行时间的增长顺序是多少? 作为N?
的函数int sum = 0;
for (int i = 1; i <= N; i = i*2)
for (int j = 0; j < i; j++)
sum++;
问题解释
答案是:N
内环的主体执行1 + 2 + 4 + 8 + ... + N~2N次。
答案 0 :(得分:2)
我想你已经在你的问题中说明了答案 - 内循环执行2N次,即O(N)。在渐近(或大O)表示法中,任何倍数都会被删除,因为对于非常非常大的值,2N的图形看起来就像N,所以它不被认为是重要的。在这种情况下,问题的复杂性等于“sum ++”被调用的次数,因为算法非常简单。这有意义吗?
答案 1 :(得分:0)
复杂性不取决于嵌套循环的数量
it is O(Nc):Time complexity of nested loops is equal to the number of times the
innermost statement is executed.
For example the following sample loops have O(N2) time complexity
for (int i = 1; i <=n; i += c) {
for (int j = 1; j <=n; j += c) {
// some O(1) expressions
}
}
for (int i = n; i > 0; i += c) {
for (int j = i+1; j <=n; j += c) {
// some O(1) expressions
}