以下迭代程序的时间复杂度是多少?
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("*");
}
}
答案 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)并不是错误;只是不紧。