2017-01-24 9 views
-4

Q2。以下のコードフラグメント(a)、(b)、(c)を考えてみましょう。ここでnはデータ のサイズを指定する変数で、Cは定数です。 それぞれのケースでnの点でビッグ・オア時間の複雑さは何ですか?すべて表示 必要な手順。それぞれの場合にnの観点からビッグ・オア時間の複雑さを計算するにはどうすればよいですか?

(A)

for (int i = 0; i < n; i = i + C) for (int j = 0; j < 10; j++) Sum[i] += j * Sum[i];

(B)

for (int i = 1; i < n; i = i * C) 
     for (int j = 0; j < i; j++) 
      Sum[i] += j * Sum[i]; 

(C)

for (int i = 1; i < n; i = i * 2) 
    for (int j = 0; j < n; j = j + 2) 
      Sum[i] += j * Sum[i]; 
+3

これで評価されていますか? – shmosel

+0

アルゴリズム101だと思っていますが、覚えているように(漠然と)、a:O(n)、b:O(n^2)、c:O(n log(n)) – Shiping

+0

@シッピング#2は間違いなくO n^2)(それもまた対数です) – zerkms

答えて

0
 1.   for (int i = 0; i < n; i = i + C) 
    2.    for (int j = 0; j < 10; j++) 
    3.     Sum[i] += j * Sum[i]; 

` 

Line 1: int i=0, takes constant time of 1 so O(1) 
     i<n, takes n+1 time so O(n) 
     i=i+C, takes n time so O(n) 



     Total time: 1+(n+1)+n= 2n+2 


Line 2: 
     int j=0, takes constant time of 1 so O(1) 
     j<10, loops through 10 times and takes n time so O(n) 
     i=i+C, loops through 10 times and takes n time so O(n) 



     Total time: 1+(10+10)n= 1+20n 

Line 3: 


     Sum[i]=Sum[i]+j*Sum[i]; 

     Addition and Multiplication takes constant time of 2 and plus 1 to store 
     or assign the value, and it loops through n times. 


      Total time:3n 

T(n)=(2n+2)+(1+20n)+3n= 25n+3 is O(n) right? 
関連する問題