2012-10-17 84 views
2

好的,所以今天晚些時候我有一箇中期階段,我正在評估的項目之一是big-O。現在,我在當天完成了作業,並獲得了100%......但現在我找不到它,我不確定自己在做什麼。 Sooo有人可以給我一個解釋,說明我做錯了什麼,如果我做對了......也許你知道我爲什麼懷疑自己? 謝謝!大奧運計算(複習幫助)

此外,我記得之前我的作業是使用總結,我會從內到外工作。當我完成每一個總結時,我用一些「論壇」來計算最高的n,然後保留這個值並繼續下一個總和,等等等等,直到總和完成。

問題1.

sum = 0; 
for (i = 0; i < n; i++) 
    sum++; 

所以,因爲我忘了這整個求和方面,我的直覺告訴我,這是O(N),因爲最大的運行時間是N次...因爲它只是一個循環。

問題2.

sum = 0; 
for (i = 0; i < n; i++) 
    for (j = 0; j < n; j++) 
     sum++; 

對於這一個,我「覺得」這是最高的運行時間爲O(N^2),因爲這兩個循環都依賴於N,並且它可以在N個最大化*如果循環爲N

問題3

sum = 0; 
for (i = 0; i < n; i++) 
    for (j = 0; j < n * n; j++) 
     sum++; 

這是我卡住...我覺得我確實需要用公式一起使用的總和,佈局增加起來。最內層循環可以在n * n處最大化,所以n^2。最重要的是,它可以在N處再次最大化循環...所以我猜測0(N^3)。

問題4.

sum = 0; 
for (i = 0; i < n; i++) 
    for (j = 0; j < i; j++) 
     sum++; 

同樣,我更失去了在這一個。內循環可以最大化我的時間...這是依賴於我,但是,這是依賴於N ....所以...我看到三個最大化的變量,我真的不確定如何比較它們以找到最大化運行。 (我真的需要記住總結設置和公式)。

對於下一個問題同樣如此,不知道從哪裏開始,我寧願不去嘗試,因爲我不想在我腦海中錯誤地思考。一旦我再次看到該公式,它會立即點擊,因爲我之前得到了它......我只是以某種方式失去了它。 任何幫助表示讚賞!

問題5:

sum = 0; 
for (i = 0; i < n; i++) 
    for (j = 0; j < i * i; j++) 
     for (k = 0; k < j; k++) 
     sum++; 

問題6:

sum = 0; 
for (i = 1; i < n; i++) 
    for (j = 1; j < i * i; j++) 
     if (j % i == 0) 
      for (k = 0; k < j; k++) 
       sum++; 

回答

0

爲問題4到6,我會假設我j和k均爲整數,不同於n的是一個變量。我將如何處理這些問題將是:

例如問題4

內部循環 - 從0到(i-1)的迭代,它給我i次迭代。

外環 - N的總和

組合 - O(我* N)= O(n)的自i是整數。