2012-04-27 89 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