三重嵌套循环的时间复杂度?

时间:2013-02-01 21:50:10

标签: c for-loop time-complexity nested-loops

for(i=0; i<n; i++)
{
    a[i]=0;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            a=3;
        }
    }
}

这是一个三重嵌套循环。我的书指出,运行时间是: O(N)+ O(N ^ 2)= O(N ^ 2)

不应该是O(N ^ 3)吗?所有3个循环都相互依赖。它将运行N * N * N次。

3 个答案:

答案 0 :(得分:6)

这是因为循环#1和循环#2在比较期间使用相同的计数变量i

在使用i的第二个循环结束时,i的值为 n ,这使得它也会脱离外部循环。 那里的一个循环完全是多余的。


#include <stdio.h>
int main(){
    int x = 0;
    int n = 20;
    int i, j;
    for(i=0; i<n; i++) //this loop runs once
    {
        for(i=0; i<n; i++) //this loop runs n times
        {
            for(j=0; j<n; j++) //this loop also runs n times
            {
                x++;
            }
        }
    }
    printf("%d", x);
}

整个正在运行O(N^2)时间。

<强> Example

答案 1 :(得分:1)

我不认为这是你书中的错误。你必须更深入地看待你的代码: 两个第一个循环对循环使用相同的变量,因此会发生以下情况:

在第一个括号后,i等于0,然后进入第二个循环。当第二个循环结束时,第一个循环将结束,因为两个循环都使用条件i

实际上我没有看到O(N)的来源,但全局复杂性应该是O(N ^ 2)

答案 2 :(得分:1)

这不是n ^ 3,因为变量i在内部循环中重复使用,使其成为n ^ 2。不知道这本书在哪里获得了O(n)。