For loop 嵌套for循环的运行时 (i=1;i

For loop 嵌套for循环的运行时 (i=1;i,for-loop,runtime,For Loop,Runtime,我的解决方案尝试: j迭代到i*i=n^4。对于“k”循环,我们有从1到n^4的k之和,即n^4(n^4-1)/2。所以运行时是O(n^8)。这让我觉得太高了,但我看不出有错误 所以: for(i = 1; i < n*n; i++){ for(j = 1; j < i*i; j++){ if(j % i == 0){ for(k=0; k < j; k++){ count++;

我的解决方案尝试:

j迭代到i*i=n^4。对于“k”循环,我们有从1到n^4的k之和,即n^4(n^4-1)/2。所以运行时是O(n^8)。这让我觉得太高了,但我看不出有错误

所以:

for(i = 1; i < n*n; i++){
    for(j = 1; j < i*i; j++){
        if(j % i == 0){
            for(k=0; k < j; k++){
                count++;
            }
        }
    }
}
但最内部的循环只有在我除以j时才运行。在1和i*i之间正好有i个数,可以被i整除。因此,最内部的循环将为从1到n*n的每个i运行i次

到目前为止,这是n^4

但是现在j最多可以是i*i,所以最多可以是n^4

是的,复杂度是O(n^8)。

外部循环执行n2次。下一个循环总共执行∑i=1n2 i2,即O(n6)

只有当
j
i
的倍数时,最里面的循环才会运行,对于
i
的每个值,都会发生
i
次。对于
j
的每个这样的值,
i
2i
3i
,最里面的循环执行
j
次,依此类推,直到
i*i
。因此,执行最内部的循环∑对于每个
i
,j=1i ij次,即O(i3)

因此,总运行时间为∑i=1n2 O(i3)+O(n6),这是O(n8),因为∑i=1n2 O(i3)=O(n8)


(请注意,我假设第二个循环的增量是
j++
,而不是
I++
。如果是
I++
,答案就大不相同了。)

第二个循环的增量是
I++
j++
?是的,第二个循环的增量是j++,我编辑了原始帖子
i goes from 1 to n*n.
j goes from 1 to i*i