2012-04-27 9 views
0

私は2、2次元配列(いくつかの特定の要素)arr1[][]arr[][]をC++で比較したいと思います。それらを比較するためにforループを使用していますが、時間がかかりました。2次元配列のバイナリ検索の使い方は?

検索アルゴリズムを使用して、バイナリ検索やクイック検索などを実装できますか?これをどのように実装できますか?

これは、これまでの私のコードです:

for (k = 0; k < MAXROW; k++) 
{ 
    for (m = 0; m < MAXROW; m++) 
    { 
    for(j=0;j<MAXCOL;j++) 
    { 
     if(arr[k][3] ==arr1[m][3]) 
     { 
      if((arr[k][1] ==arr1[m][1] && arr[k][2] ==arr1[m][2])) 
      { 
      cout<<" \n same element"; 
      } 
      else 
      cout<<"\n inner different elements"; 
     } 
     else 
      cout<<"\n different elements"; 

答えて

4

両方の2次元配列は、(自分の組織については何も知らずに)等しいかどうかを伝えるための唯一の方法は、すべての要素を比較することです。これには、m =行数とn =列数のうち、O(mn)の実行時間が必要です。あなたは余分なループを書いているように見えます。なぜなら、それが遅すぎると思われる理由かもしれません。ここで私は比較を書きます方法は次のとおりです。

bool are_equal = true; 
for (int i = 0; i < MAX_ROWS; ++i) { 
    for (int j = 0; j < MAX_COLS; ++j) { 
    if (arr1[i][j] != arr2[i][j]) { 
     are_equal = false; 
     break; 
    } 
    } 
} 
if (are_equal) { 
    std::cout << "The arrays are equal." << std::endl; 
} else { 
    std::cout << "The arrays differ by at least one element." << std::endl; 
} 

だけに3番目と4番目の列(または列の任意のサブセット)を比較:

int columns_to_check[] = {2, 3}; // Remember that these are 0-indexed 
const int NUM_COLS = sizeof(columns_to_check)/sizeof(int); 

bool are_equal = true; 
for (int i = 0; i < MAX_ROWS; ++i) { 
    for (int j = 0; j < NUM_COLS; ++j) { 
    int col = columns_to_check[j]; 
    if (arr1[i][col] != arr2[i][col]) { 
     are_equal = false; 
     break; 
    } 
    } 
} 
if (are_equal) { 
    std::cout << "The arrays are equal." << std::endl; 
} else { 
    std::cout << "The arrays differ by at least one element." << std::endl; 
} 
+0

私の実際の必要性は、arr1の各行の3番目の列をarr2 [3] == arr1 [0] [3]のようにarr2と比較する必要があります。最後の行まで? –

+0

編集した応答を参照してください。 – JKD

2

あなたが唯一の3番目と4番目の列を比較したい場合は、あなたがすることができますただ1つのループを使用してください。

bool are_equal = true; 
for (int i = 0; i < MAX_ROWS; ++i) { 
    if (arr1[i][2] != arr2[i][2] || arr1[i][3] != arr2[i][3]) {  
    are_equal = false; 
    break; 
    }  
} 
0

いいえ、バイナリ検索は使用できません。 2つのループを使用し、配列要素を要素ごとに比較する必要があります。バイナリ検索を含む検索アルゴリズムのほとんどは、キーを使用して配列内を検索します。アレイが2Dか1Dかどうか