使用big-O表示法查找算法的时间复杂度

时间:2018-01-27 23:51:25

标签: algorithm time-complexity big-o

我对两者都有答案,但我对自己的工作不太自信。有人可以检查一下并纠正任何错误吗?

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次。

1 个答案:

答案 0 :(得分:1)

  

我的回答[是] O(N 2

这是对的。 j = 2*i初始化会跳过第一个索引的两倍,但嵌套循环仍然需要1才能获得整体N 2 复杂度。

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