这是循环结构:
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))
,因为增量不是那么高。但我不知道如何正式证明它。
答案 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))
中运行。