簡體   English   中英

漸近時間復雜度 O(sqrt(n)log(n)n)

[英]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)

外部的兩個循環(在ij )的邊界取決於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM