Algorithm 如何计算三个嵌套依赖循环的时间复杂度?
以代码为例:Algorithm 如何计算三个嵌套依赖循环的时间复杂度?,algorithm,time-complexity,asymptotic-complexity,Algorithm,Time Complexity,Asymptotic Complexity,以代码为例: void foo(int n){ int s = 0; for (i=1; i<=n; i++) for(j=1;j<=i*i;j++) if (j % i == 0){ for (k=1; k<=j; k++) s++; } } void foo(int n){ int s=0; 对于(i=1;i这条线: 如果
void foo(int n){
int s = 0;
for (i=1; i<=n; i++)
for(j=1;j<=i*i;j++)
if (j % i == 0){
for (k=1; k<=j; k++)
s++;
}
}
void foo(int n){
int s=0;
对于(i=1;i这条线:
如果(j%i==0)
他正在发挥作用。
对于例如,对于i=3,j将运行9次
和(j%i==0)将仅为真3次。因此,k循环将不会运行9次,而只运行3次。每当j
是i
的倍数时,将执行最里面的循环。
在这个循环中,j
将是i
,i
的倍数
现在我们考虑每一个<代码> i>代码>迭代。只有<代码> I-1 < /代码>时间,我们将执行<代码>,如果只检查。然后休息时间,我们将运行内环:<代码> ij>代码>倍(我们也做了循环检查)。
i
迭代的工作将是i+ij
j
不同于1..i
,因此结果将是i^2+(i^2*(i+1)/2)
现在如果我们考虑外部循环,它将是<代码> i=1…n /代码>代码>求和(i ^ 2 +(i ^ 2 *(i+1)/2))~O(n^ 4)< /代码>。< /p>您忘记了if语句。最内环不会为每个j运行,而是只有每n^ 2 /n=n时间。