需要解释迭代程序的时间复杂度

时间:2019-05-17 07:49:46

标签: data-structures

以下迭代程序的时间复杂度是多少?

void function(int n) {
    int count = 0; 
    for (int i=0; i<n; i++) 
        for (int j=i; j< i*i; j++) 
            if (j%i == 0) 
            { 
                for (int k=0; k<j; k++) 
                    printf("*"); 
            } 
}

1 个答案:

答案 0 :(得分:0)

(n * n * n ^ 2)使三个循环的复杂度为O(n ^ 4)。

当我= 5时,

这意味着总的复杂性,

for (int j=5; j< 25; j++)  
     if (j%i == 0) // runs O(i) times
     {
      // runs j times when j = 5, 10, 15, 20
            for (int k=0; k<j; k++) {
                printf("*"); // runs j times when j =  5(1 + 2 + 3+ 4)
               // runs  j times which is i*i*(i*(i-1)/2) times
               // runs i^4 times
            }
     }

这意味着总复杂度为O(n ^ 4)。 请记住,big-O表示法用于给出一段代码的运行时间上限,因此,如果运行时实际上是O(n4),则说运行时为O(n5)并不是错误;只是不紧。