Algorithm 用big-O表示法求算法的时间复杂度

Algorithm 用big-O表示法求算法的时间复杂度,algorithm,time-complexity,big-o,Algorithm,Time Complexity,Big O,这两个问题我都有答案,但我对自己的工作不是很有信心。有人能检查一下并改正错误吗 for (i = 1; i <= n; i++) { for (j = 2*i; j <= n; j++) { puts("hello"); } } (i=1;i)的 我的答案是O(N2) 这是正确的。j=2*i初始化跳到第一个索引的两倍,但是嵌套循环在总体复杂度上仍然是1 你的第二个答案也是正确的。虽然第三个嵌套循环增加了200次迭代,但这个数字是一个常数,因此它从b

这两个问题我都有答案,但我对自己的工作不是很有信心。有人能检查一下并改正错误吗

for (i = 1; i <= n; i++) {
    for (j = 2*i; j <= n; j++) {
        puts("hello");
    }
} 
(i=1;i)的

我的答案是O(N2)

这是正确的。
j=2*i
初始化跳到第一个索引的两倍,但是嵌套循环在总体复杂度上仍然是
1


你的第二个答案也是正确的。虽然第三个嵌套循环增加了200次迭代,但这个数字是一个常数,因此它从big-O渐近复杂性结果中得到了“分解”。

那么我的所有工作也都是正确的吗?你不必麻烦检查简化,只需检查设置。你是如何得出
1+(N+1)+N+N[1+((N+1)的+N+N[1])/2]
?在这种情况下,您通常会计算外循环
i
的每个值的内环
j
运行次数,这只会给出一系列值,例如(在这种情况下是2+4+…,但基本思想是相同的)我基本上找到了代码每个部分的值,所以I=1等于1,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);
        }
    }
}