2012-04-27 101 views
0

我想比较2,二维阵列(某些特定元素)arr1[][],在C++ 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

告诉两个2-d阵列是否相等(不知道他们的组织的任何东西),唯一的方法是每个元素进行比较。这应该有O(mn)运行时间,其中m =行数和n =列数。你似乎写了一个额外的循环,这可能是你认为它运行速度太慢的原因。这是我会怎么写的比较:如果你想只比较第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

但我的实际需要为i必须在与ARR1比较ARR2第三4的每一行的第n列像ARR [0] [3] == ARR1 [0] [3] ..直到最后一行? – 2012-04-27 05:54:20

+0

请参阅编辑的回复。 – JKD 2012-04-27 19:51:24

2

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列(或列的任何子集)只使用一个循环。

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