我对两者都有答案,但我对自己的工作不太自信。有人可以检查一下并纠正任何错误吗?
for (i = 1; i <= n; i++) {
for (j = 2*i; j <= n; j++) {
puts("hello");
}
}
我的回答:1+(N + 1)+ N + N [1 +((N + 1)+ N + N [1])/ 2] = 3 / 2N ^ 2 + 7 / 2N + 2 = O(N ^ 2)
它说j = 2 *的部分我真的把我抛弃了,我的思考过程是在j = 2 * i之后,其余的代码只执行了一半,因为它会比N快两倍,相比之下如果j等于i的话。
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++) {
for (k = 1; k <= 200; k++) {
printf("%d %d\n", i, j);
}
}
}
我的答案:1+(N + 1)+ N + N [1+(N + 1)+ N + N [1 + 201 + 200 + 200 [1]]] = 604N ^ 2 + 4N + 2 = O(N ^ 2)
我觉得这应该是O(N ^ 3),因为它是一个三重嵌套循环,但我也认为它可能是O(N ^ 2)因为最后一个循环大约200次,而不是N次。
答案 0 :(得分:1)
我的回答[是] O(N 2 )
这是对的。 j = 2*i
初始化会跳过第一个索引的两倍,但嵌套循环仍然需要1
才能获得整体N 2 复杂度。
你的第二个答案也是正确的。虽然第三个嵌套循环增加了200次迭代,但这个数字是一个常量,因此它从big-O渐近复杂性结果中“被排除”。