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