嵌套for循环的运行时

时间:2012-10-22 02:23:57

标签: for-loop runtime

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)。这让我觉得太高了,但我没有看到错误。

2 个答案:

答案 0 :(得分:2)

外循环执行n 2 次。下一个循环执行总共Σ i = 1 n 2 i 2 ,即O(n < SUP> 6 )。

最内层循环仅在ji的倍数时运行,i的每个值都会i次。最内层循环对jji2i等每个此类值执行3i次,直到i*i为止。因此,对于每个i,最内层循环执行Σ j = 1 i ij次,即O(i 3

因此,总运行时间为Σ i = 1 n 2 O(i 3 )+ O(n 6 ),即O(n 8 ),因为Σ i = 1 n 2 O(i 3 )= O(n 8 )。

(请注意,我假设第二个循环增加j++,而不是i++。如果它是i++),则答案会有所不同。

答案 1 :(得分:1)

所以:

i goes from 1 to n*n.
j goes from 1 to i*i

但最内层的循环只在我划分j时运行。在1和i * i之间确切存在i个数字,它们可以被i整除。因此,对于每个i,从1到n * n,最内层循环将运行i次。

到目前为止,这是n ^ 4。

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

所以是的,复杂性是O(n ^ 8)。