algorithm - 如何计算三个嵌套依赖循环的时间复杂度?

标签 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++;
            }
}

我们如何计算上述具有三个嵌套依赖循环的代码片段的时间复杂度?

我觉得 i 将运行到 n, j 到 i2 或 n2kj 或 n2

所以根据我的说法,时间复杂度应该是 O(n*n2*n2) 或 O(n5)。但我知道它的 O(n4)。我哪里错了?

最佳答案

这一行: 如果 (j % i == 0) 正在发挥作用。 例如,对于 i=3 , j 将运行 9 次。

and (j % i == 0) 只有 3 次为真。因此,k 循环不会运行 9 次,而只会运行 3 次。

关于algorithm - 如何计算三个嵌套依赖循环的时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48336836/

相关文章:

c - 这个快速排序有什么问题吗?

c++ - 函数给出错误的结果

java - 以下程序的时间复杂度是多少?

algorithm - 打印从根到节点的所有路径的时间复杂度

java - 如何衡量该算法的时间复杂度(Big-O)?

java - 具有多重递归的java方法的成本

arrays - 测量阵列连续性

algorithm - 我该如何解决这个动态规划问题?

algorithm - 递归函数的运行时

algorithm - 嵌套 For 循环的运行时间