C 内循环以j=2开始时的时间复杂度

C 内循环以j=2开始时的时间复杂度,c,time-complexity,C,Time Complexity,我将^2 logn作为以下代码的输出。但我不明白为什么 int unknown(int n) { int i, j, k = 0; for (i = n / 2; i <= n; i++) for (j = 2; j <= n; j = j * 2) k = k + n / 2; return k; } 固定不变的起点在复杂性方面对内部循环没有影响 从2开始而不是1将意味着少迭代一次,但比率仍然是对数的 想想当你翻倍n

我将^2 logn作为以下代码的输出。但我不明白为什么

int unknown(int n) {
    int i, j, k = 0;
    for (i = n / 2; i <= n; i++)
        for (j = 2; j <= n; j = j * 2)
            k = k + n / 2;
    return k;
}

固定不变的起点在复杂性方面对内部循环没有影响

从2开始而不是1将意味着少迭代一次,但比率仍然是对数的

想想当你翻倍n时会发生什么。这将向该循环添加一个以上的迭代,而不管您是从一个还是两个开始。因此,这是一个非常复杂的问题


但是,您应该记住,外循环是一个ON-one,因为迭代次数与N成正比。这使得函数作为一个整体出现在log N上,而不是您假定的ON2 log N上。

您将^2 logn作为以下代码的输出是什么意思?谁给你的输出?