0

我想在 C++ 中比较 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

判断两个二维数组是否相等(不知道它们的组织)的唯一方法是比较每个元素。这应该有 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 列,您可以只使用一个循环。

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 回答