找不到这个C代码的时间复杂度?

时间:2016-02-13 11:41:16

标签: c runtime big-o time-complexity

我很难弄清楚如何计算某些代码的时间复杂度。我知道Big O的基础知识,虽然我不能完全理解如何计算。

这是一个我无法解决的例子。希望你能:

void f(int n) {
    int j, s;
    for (j = 0, s = 1; s < n; j++, s*=2)
        printf(“!”);
    double values[j];
    for (int k = 0; k < j; k++)
        values[k] = 0;
    while (j--)
        for (int k = 1; k < j; k++)
            values[k] += 1.0 / k;
}

运行时间是什么?我想要一个解释:)

1 个答案:

答案 0 :(得分:2)

第一个循环迭代log2(n)次,计算jn的最高位的顺序。复杂性O(log(n))

第二个循环初始化一个大小为j的数组:时间和空间复杂度O(log(n))

第三个循环是一个嵌套循环,迭代j次,嵌套循环迭代j1次,总共j * (j - 1) / 2次。时间复杂度为O(log(n)^2),并且在前几个阶段占主导地位。

此函数的总体时间复杂度为O(log(n)^2),而空间复杂度为O(log(n))