簡體   English   中英

此函數“循環”的復雜度/大O是多少?

[英]what is the complexity/BIG O of this function “loops”

void mystery2 (int n)
{
  int i;
 for (i = 1; i <= n; i++) {
   double x = i;
   double delta = 1 / (double)i;
   while ( x > 0 )
     x -= delta;
  }
return 0;
}

為什么是BIG O,此函數的時間復雜度是O(n ^ 3)而不是O(n ^ 2)?

我所做的是,當i = 1 ==> 1次迭代,i = 2 ==> 2次迭代(同時)時,i = 3 ==> 3次迭代........ i = n ==> n次迭代,如果我們將所有迭代求和,則得到1 + 2 + 3 + 4 .... + n = n *(n + 1)/ 2。 所以我在這里想念什么?

這是因為內部循環是這樣運行的。

For i=1, inner loop runs 1 time,
For i=2, inner loop runs 4 time,
 //because x=2 and delta=0.5 so for x to become 0 it has to iterate 4 time 
For i=3, inner loop runs 9 time
 //because x=3 and delta=0.33 so for x to become 0 it has to iterate 9(atleast) time 
and so on..

因此,內循環運行了i^2次,方程變為1^2+2^2+3^2+...+n^2=n(n+1)(2n+1)/6 ,等於O (n ^ 3)復雜度。

我認為您將其視為標准的整數遞減循環,我也曾做過,但是數量是雙精度的,並且delta不是1而是實際上是1 / (double)i ,因此需要進行內部循環迭代的次數充分減量x不呈線性增加為n增加,但更明顯,因為delta變小為n變大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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