Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm cặp hàng trong ma trận nhị phân có độ chênh lệch bit tối đa trong C ++

Giả sử chúng ta có một ma trận nhị phân; chúng ta phải tìm cặp hàng trong ma trận đã cho có độ chênh lệch bit tối đa.

Vì vậy, nếu đầu vào giống như ma trận, thì đầu ra sẽ là [2,3] vì chênh lệch bit giữa hàng 2 và hàng 3 là 4, đây là mức tối đa.

  • Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định cấu trúc Trie, với giá trị và hai phần tử con.

  • Xác định một hàm get_max_bit_diff (), hàm này sẽ lấy gốc của một bộ ba, ma trận, n, row_index,

  • temp:=root, count:=0

  • để khởi tạo i:=0, khi i

    • nếu con [matrix [row_index, i]] của tạm thời không phải là NULL, thì -

      • temp:=child [matrix [row_index, i]] of temp

    • ngược lại khi con [1 - matrix [row_index, i]] của tạm thời không phải là NULL, thì -

      • temp:=child [1- matrix [row_index, i]] of temp

      • (tăng số lượng lên 1)

  • leaf_index:=lá nhiệt độ

  • temp_count:=0, temp:=root

  • để khởi tạo i:=0, khi i

    • nếu con [1 - matrix [row_index, i]] của tạm thời không phải là NULL, thì -

      • temp:=child [1- matrix [row_index, i]] of temp

      • (tăng temp_count lên 1)

    • ngược lại khi con [matrix [row_index, i]] của tạm thời không phải là NULL, thì -

      • temp:=child [matrix [row_index, i]] of temp

  • P =if temp_count> count sau đó tạo một cặp bằng cách sử dụng (temp_count, leaf of temp) nếu không tạo một cặp bằng cách sử dụng (count, leaf_index)

  • trả lại P

  • Từ phương thức chính, thực hiện như sau -

  • root =a TrieNode mới

  • chèn hàng thứ 0 vào thư mục gốc

  • max_bit_diff:=-inf

  • Xác định một cặp pr và một cặp nhiệt độ khác

  • để khởi tạo i:=1, khi i

    • temp:=get_max_bit_diff (root, mat, m, i)

    • nếu max_bit_diff <đầu tiên của tạm thời, thì -

      • max_bit_diff:=temp.first

      • pr:=tạo một cặp bằng cách sử dụng (temp.second, i + 1)

    • chèn hàng thứ i vào thư mục gốc

  • cặp hiển thị pr

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

 #include  using namespace std; const int MAX =100; class TrieNode {public:int leaf; TrieNode * con [2]; TrieNode () {lá =0; con [0] =con [1] =NULL; }}; void insert (TrieNode * root, int matrix [] [MAX], int n, int row_index) {TrieNode * temp =root; for (int i =0; i  child [matrix [row_index] [i]] ==NULL) temp-> child [matrix [row_index] [i]] =new TrieNode ( ); temp =temp-> con [matrix [row_index] [i]]; } temp-> leaf =row_index +1; } cặp  get_max_bit_diff (TrieNode * root, int matrix [] [MAX], int n, int row_index) {TrieNode * temp =root; int count =0; for (int i =0; i  child [matrix [row_index] [i]]! =NULL) temp =temp-> child [matrix [row_index] [i]]; else if (temp-> child [1 - matrix [row_index] [i]]! =NULL) {temp =temp-> child [1- matrix [row_index] [i]]; tính ++; }} int leaf_index =temp-> leaf; int temp_count =0; temp =gốc; for (int i =0; i  child [1 - matrix [row_index] [i]]! =NULL) {temp =temp-> child [1- matrix [row_index] [ tôi] ]; temp_count ++; } else if (temp-> child [matrix [row_index] [i]]! =NULL) temp =temp-> child [matrix [row_index] [i]]; } cặp  P =temp_count> đếm? make_pair (temp_count, temp-> leaf):make_pair (count, leaf_index); return P;} void get_max_diff (int mat [] [MAX], int n, int m) {TrieNode * root =new TrieNode (); insert (root, mat, m, 0); int max_bit_diff =INT_MIN; cặp  pr, temp; for (int i =1; i  

Đầu vào

 {{1, 1, 1, 1}, {1, 0, 1, 1}, {0, 1, 0, 0}, {1, 0, 0, 0}}, 4,4  

Đầu ra

 (2,3)