Big-O特征问题 - java

时间:2018-01-29 05:27:52

标签: java big-o

嗨,我正在解决这个问题,但我有点坚持选择哪一个是正确的答案。所以,我试图得到你们的帮助。

以下是代码:

 for (int i=0; i < n; i++) { // loop1 from 0 to n-1
    int total = 0;
    for (int j=0; j < n; j++) // loop2 from 0 to n-1
        for (int k=0; k <= j; k++) // loop3 from 0 to j
        total += first[k];
    if (second[i] == total) count++;
} return count;

从上面的代码中,loop1和loop2有n次n,其具有n ^ 2个复杂的处理时间

但问题是loop3,我真的不想说n次也是因为循环的限制是j而不是n。

在最糟糕的时间内,我应该如何总结复杂性?对于loop3,它会是((n + 1)(n + 2))/ 2吗?或((n + 1)(n + 2))/ 2表示loop2和loop3

我的最终答案是这样的

第一种情况:n * n *(((n + 1)(n + 2))/ 2)= O(n ^ 4)

第二种情况:n *(((n + 1)(n + 2))/ 2)= O(n ^ 3)

哪一个是正确的?或者我错了两个?

P.S。请注意,loop3是0到j,而不是0到j-1

1 个答案:

答案 0 :(得分:1)

从问题中不清楚你关注的是什么不同的案例。在讨论Big O时,我们只关心复杂性中最重要的部分。根据第二个循环,第三个循环中的 j 可以达到 n 。因此,在计算总复杂度时,用 n 替换它是没有问题的。由于共有3个循环,所有循环都直接或间接依赖于 n ,因此复杂度为O(n^3)。此外,您可以忽略常量,因此n-1可以简单地视为n

https://stackoverflow.com/a/487278/945214

Big-O for Eight Year Olds?