【问题标题】:how to use binary search in two dimensional array?如何在二维数组中使用二分查找?
【发布时间】:2012-04-28 03:56:02
【问题描述】:

我想在 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";

【问题讨论】:

    标签: c++ arrays data-structures binary-search quicksort


    【解决方案1】:

    判断两个二维数组是否相等(不知道它们的组织)的唯一方法是比较每个元素。这应该有 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;
    }
    

    【讨论】:

    • 但我的实际需要是我必须将 arr1 中每一行的第 3 rd 4 列与 arr2 进行比较,例如 arr[0][3]==arr1[0][3]..直到最后一行?
    【解决方案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;
      }      
    }
    

    【讨论】:

      【解决方案3】:

      不,您不能使用二进制搜索。您必须使用 2 个循环并逐个元素地比较数组。包括二分搜索在内的大多数搜索算法都使用关键字在数组中搜索。数组是二维的还是一维的

      【讨论】:

        猜你喜欢
        • 2020-02-27
        • 2017-07-22
        • 1970-01-01
        • 2021-08-22
        • 1970-01-01
        • 2010-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多