繁体   English   中英

Big-O表征问题-Java

[英]Big-O characterization questions - java

嗨,我正在解决这个问题,但是我很想选择哪个是正确的答案。 所以,我正在努力寻求你们的帮助。

这是代码:

 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的复杂处理时间为n ^ 2

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

在最坏的情况下,我应该如何总结复杂性? 仅对于loop3会是((n + 1)(n + 2))/ 2吗? 或((n + 1)(n + 2))/ 2 for loop2和loop3

我的最终答案是这样的

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

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

哪一个是正确的? 还是我都错了?

ps请注意loop3是0到j,而不是0到j-1

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

看到

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

大八岁的孩子?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM