[英]Asymptotic time complexity O(sqrt(n)log(n)n)
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)
。外部的兩個循環(在i
和j
)的邊界取決於n
,但內部循環(在k
)受j
限制,而不是n
。
請注意,內部循環迭代了j
次; 假設f()
是O(1)
,內部循環的成本是O(j)
。
盡管中間循環(在j
)迭代了O(log n)
次,但j
的實際值是一個以n
開頭的幾何級數。 因為這個幾何級數 ( n + n/4 + n/16 + ...
) 總和為4/3*n
,所以中間循環的成本是O(n)
。
由於外循環迭代sqrt(n)
次,這使得總成本O(n^(3/2))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.