java—查找以下代码的大o复杂性

mec1mxoz  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(341)
int sum = 0;
for(int i=1;i<n;i++)
    for(int j=1;j<i*i;j++)
for(int k=1;k<j;k++)
    if (j % i==1)
        sum++;

第一个语句是常量。第一个for循环需要n次。第二个for循环需要n^2次。第三个for循环需要n次。if语句需要固定的时间。最后陈述需要固定的时间。
因此,最终的复杂度是n×n^2×n×n=o(n^4)
我的理解和最终答案正确吗?

8fq7wneg

8fq7wneg1#

第三个循环的时间复杂度是o(n^2),因为它是 k<j 以及 j 将等于 i*i ( n*n ). 但是这个例子的复杂度是o(n^3),因为如果时间复杂度是嵌套的,那么你只需要乘以时间复杂度。否则,对于顺序发生的事物,它们的时间复杂度应该加上o(1+n^3+n^2),这被简化为最高阶o(n^3)的项,因为对于非常大的数字,这将是唯一重要的项。
请看这篇文章获得更详细的答案,那里也有更多的资源。

int sum = 0;                  O(1)

for(int i=1;i<n;i++)          O(n)  
    for(int j=1;j<i*i;j++)    O(n^2)
                            = O(n^3)

for(int k=1;k<j;k++)          O(n^2)
    if (j % i==1)             O(1) 
        sum++;                O(1)
                            = O(n^2)

= O(1 + n^3 + n^2)
= O(n^3)

相关问题