2012-04-27 67 views
0

所以我一直試圖得到大哦計算的句柄。我覺得我已經掌握了一些基礎知識,但很難理解這個計算方法。所以如果下面的計算有一個很大的O(n log n)哦(我真的希望我至少得到了這個權利),那麼改變循環順序是否會影響複雜性呢?非常感謝您的時間。大哦對數(ish)複雜度計算

int ONLogN(int N) //O(n log n) 
    { 
     int iIterations = 0; 
     for (int i = 0; i < N; ++i) 
     { 
      ++iIterations; 
      for (int j = 1; j < N + 1; j *= 2) 
       ++iIterations; 
     } 
     return iIterations; 
    } 
    int WhatBigOhIsThis(int N) //??? 
    { 
     int iIterations = 0; 
     for (int j = 1; j < N + 1; j *= 2) 
     { 
      ++iIterations; 
      for (int i = 0; i < N; ++i)     
       ++iIterations; 
     } 
     return iIterations; 
    } 
+4

您認爲它是什麼?外循環是* O(log N)*,內循環是* O(N)*所以我讓你猜測組合結果。 – 2012-04-27 16:50:59

+0

這幾乎就像「如果a * b = x',什麼是'b * a'?問題:) – dasblinkenlight 2012-04-27 16:51:57

+0

我會認爲O(n日誌n),但我懷疑自己,因爲在本週之前我沒有做過任何與大哦。 – user1361473 2012-04-27 16:56:22

回答

1

兩個循環上的索引變量是獨立的,因此得到的複雜度必然相同。

+0

非常感謝。我很欣賞簡單的確認。 – user1361473 2012-04-27 17:05:40

0

你仍然循環迭代次數相同。更改環路的順序對複雜性沒有影響

+0

它們可能具有相同的複雜度,但對於輸入32來說,第一個函數產生了224次迭代,而第二個198. – user1361473 2012-04-27 17:09:28

+0

Big-Oh表示法並不關注實際數字。例如,你可以有兩個不同的常量偏移量,複雜度仍然是n log(n)。其實,這就是符號本身的要點。 – 2012-04-27 17:13:39

+0

我開始明白這一點。再次感謝! – user1361473 2012-04-27 17:14:47