0

C ++で2つの2次元配列(特定の要素)を比較したい arr1[][]arr[][]ですが、forループを使用してそれらを比較していますが、時間がかかりました。

二分探索やクイックなどの検索アルゴリズムを使用してこれを実装できますか? どうすればこれを実装できますか?

これまでの私のコードは次のとおりです。

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

3 に答える 3

4

両方の 2 次元配列が等しいかどうかを確認する唯一の方法 (構成について何も知らなくても) は、すべての要素を比較することです。これには、O(mn) の実行時間が必要です。ここで、m= 行数、n= 列数です。余分なループを書いたようです。それが実行が遅すぎると思われる理由かもしれません。比較を書くとこうなります。

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;
}
于 2012-04-27T05:28:07.267 に答える
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;
  }      
}
于 2012-04-27T06:18:26.967 に答える
0

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

于 2012-04-27T07:21:13.637 に答える