2012-04-27 5 views
0

C++에서 2, 2 차원 배열 (특정 요소) arr1[][], arr[][]을 비교하고 싶습니다. for 루프를 사용하여 비교하지만 긴 시간이 걸렸습니다.2 차원 배열에서 이진 검색을 사용하는 방법?

검색 알고리즘을 사용하여 이진 검색 또는 빠른 검색을 구현할 수 있습니까? 어떻게 구현할 수 있습니까?

이 지금까지 내 코드입니다 :

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

하지만 실제로 필요한 것은 arr1의 각 행의 3 번째 열을 arr [0] [3] == arr1 [0] [3]과 (과) 비교해야합니다. 마지막 행까지? –

+0

편집 된 응답을 참조하십시오. – JKD

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이든

관련 문제