for(int i=1; i*i <= n; i = i+1) {
for(int j = n; j >= 1; j/4) {
for(int k = 1; k <= j; k=k+1) {
f();
}
}
}
为什么此函数O(n^{3/2})
的渐近复杂性?我认为应该是O(sqrt(n)log(n)n)
。 O(sqrt(n)n)
是否相同?然后就是O(n^{3/2})
..
O(sqrt(n))
。 O(log(n))
。O(n)
。答案 0 :(得分:0)
外部两个循环(在i
和j
上的边界取决于n
,但是内部循环(在k
上)的边界由{{1 }},而不是j
。
请注意,内部循环迭代n
次;假设j
为f()
,则内部循环的成本为O(1)
。
尽管中间循环(遍历O(j)
)迭代了j
次,但O(log n)
的实际值是一个geometric series,以j
开头。由于此几何级数(n
)总计为n + n/4 + n/16 + ...
,因此中间循环的成本为4/3*n
。
由于外部循环迭代O(n)
次,因此总费用为sqrt(n)