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