2015-10-18 15 views
0

在這裏的時間緊縮下工作。努力瞭解這個問題到底在問什麼。任何幫助或指針在正確的方向將不勝感激!先謝謝了。 原始問題基於該給定的信息:嵌套,依賴於循環:求和公式和Big-O符號

for (int k = 0; k < 2*n; k++) { 
    cout << k << endl; 
    for (int i = k+1; i < n; i++) 
     { 
      m[i][j] = a[i][j] + b[i][j]; 
      cout << m[i][j] << endl; 
     } 
    cout << i * k << endl; 
} 

對於T(N)= http://www4c.wolframalpha.com/Calculate/MSP/MSP63941h503ff0a609230100002eieg6bhfe5gi70g?MSPStoreType=image/gif&s=23&w=167.&h=49

這裏是我的問題:

  1. 修改上面的代碼中找到發生的基本操作的次數(即有多少次它走在內部for循環?)。

包括

使用命名空間std;

int main() 
{ 
    int count = 0; 
    int n = 10; 
    for (int k = 0; k < 2*n; k++) { 
     cout << "outer: " << k << endl; 
     for (int i = k+1; i < n; i++) { 
      cout << "\tinner: " << i << endl; 
      count++; 
     } 
    } 
    cout << count << endl; 
} 
  • 收件基於步驟1

  • 的在此基礎上的輸出的總和,爲T(n)的相當於爲O(n)或O( n^2)

  • 我很困惑,具體是什麼第2部分要求。但我發現:

    http://www4c.wolframalpha.com/Calculate/MSP/MSP4561hgb5f47a07e05g00000112a53ahh0670che?MSPStoreType=image/gif&s=30&w=109.&h=49

    對我來說這看起來像O(N^2)?

    我很抱歉格式化。我在手機上。

    回答

    0

    讓我看看,如果我指導: 1.我覺得應該算在裏面是這樣的:

    int main() { 
        int count = -1; 
        int n = 10; 
        for (int k = 0; k < 2*n; k++) { 
         count = 0; 
         cout << "outer: " << k << endl; 
         for (int i = k+1; i < n; i++) { 
          cout << "\tinner: " << i << endl; 
          count++; 
         } 
         cout << count << endl; //<<<here 
        } 
    } 
    
  • 現在收集輸出(@here標記)並形成總和的公式。我認爲這是任務2。

  • 根據你的公式(或求和),你將能夠概括出它的o(n)或o(n^2)。

  • 這絕對不是線性的。

    enter image description here