2017-03-19 52 views
0

所以我有這個算法,我試圖確定算法分析問題的基本操作。這個給定算法的「基本操作」究竟是什麼

這裏是代碼:

median(int array[]){ 
int k = array.length(); 
int n = k/2; 
    for(int i = 0; i < k; i++){ 
    int numsmaller = 0; 
    int numequal = 0; 
     for(int j = 0; j < k; k++){ 
     if(array[j] < array[i]){ 
     numsmaller++; 
     }else 
     if(array[j] == array[i]){ 
     numequal++; 
     } 
if(numsmaller < n && n <= (numsmaller + numequal){ 
return array[i] 
} 
            }//inner loop 
           }//outter loop 
}//end of function 

我目前的印象是,這個算法的基本操作是兩個,如果函數的內環內的語句。 令我困惑的是,我不確定基本操作是否是每次迭代都會執行的布爾表達式本身,以檢查array [j] < array [i]以及array [j]是否等於array [i] 。或者,天氣的基本操作是當任何if語句爲真時發生的代碼執行。有人可以給我一個解釋固體中的算法分析方面該算法的基本操作會是什麼:)請和,不勝感謝

+0

我認爲這是,當任何一個陳述是真實的 –

回答

0

基本操作可能會之類的東西:

  • 數組索引
  • 條件語句,即if (x == y)
  • 分配,即x = 10
  • 甚至基本的數學運算,即y + 2

請注意,這不是一個詳盡無遺的清單。還要注意,某些代碼的最壞情況需要執行最大數量的基本操作;所以在下面的代碼中,你會在最差的情況下看到三個的基本操作。

if (variable == true) { 
    int x = y + 2; 
} 

...這是因爲我們真的只是組成了上述幾個項目。我們不得不執行第一個條件(一個基本操作),但在此之後,「最壞情況」是variable = true,因爲我們繼續執行任務。當然,爲了計算x將通過賦值假設的非顯而易見的值,我們必須執行另一個基本操作(在y和2之間的算術),這給我們總共三個基本操作。

所以你的情況,在內部循環的基本操作是條件句,給出的條件之一的變量的遞增(基本任務),並且這兩個條件語句加運算在

完成
if(numsmaller < n && n <= (numsmaller + numequal) 

line。

希望這會有所幫助。