嵌套for循环的时间复杂度,内部迭代变量依赖于外部迭代变量

时间:2018-03-12 13:14:59

标签: algorithm loops for-loop time-complexity

这是循环结构:

for (int i = 1 ; i < n ; i++) {
    for (int j = 0 ; j < n ; j += i) {
        // do stuff
    }
}

我的猜测是O(nlogn)因为显然不能O(n^2),因为j的增量正在增加而且显然不能O(n sqrt(n)),因为增量不是那么高。但我不知道如何正式证明它。

1 个答案:

答案 0 :(得分:5)

每次内循环的复杂性都基于i n/i的值。因此,总时间为n + n/2 + n/3 + ... + n/n = n(1+1/2+1/3+...+1/n)。 我们知道1+1/2+1/3+...+1/n是一个和谐的sereis,渐近是log(n)。因此,该算法在O(nlog(n))中运行。