Как мне найти решение бинарного матричного уравнения AX = B?

Для заданной двоичной матрицы m*n A, двоичной матрицы m*p B, где n > m, какой эффективный алгоритм для вычисления X такой, что AX=B?

Например:

A = 
1  1  0  0  1  1  0  1  0  0  
1  1  0  0  1  0  1  0  0  1  
0  1  1  0  1  0  1  0  1  0  
1  1  1  1  1  0  0  1  1  0  
0  1  1  0  1  0  1  1  1  0 

B = 
0  1  0  1  1  0  1  1  0  1  0  0  1  0  
0  0  1  0  1  1  0  0  0  1  0  1  0  0  
0  1  1  0  0  0  1  1  0  0  1  1  0  0  
0  0  1  1  1  1  0  0  0  1  1  0  0  0  
1  0  0  1  0  0  1  0  1  0  0  1  1  0  

Обратите внимание, что когда я говорю двоичная матрица, я имею в виду матрицу, определенную над полем Z_2, то есть где вся арифметика - это мода 2.

Если это представляет какой-либо интерес, с этой проблемой я сталкиваюсь при создании подходящих матриц для кода случайного исправления ошибок.

1 ответ

Решение

Вы можете сделать это с уменьшением строки: поместите B справа от A, а затем поменяйте местами (в целом), чтобы получить 1 в строке 0, col 0; затем зафиксируйте эту строку в любой другой строке, которая имеет "1" в столбце 0, так что у вас есть только один 1 в столбце 0. Затем перейдите к следующему столбцу; если [1,1] равно нулю, то поменяйте местами строку 1 с более поздней строкой, в которой есть 1, затем добавьте в строку xor строки, чтобы сделать ее единственной 1 в столбце. Предполагая, что "A" является квадратной матрицей, и решение существует, тогда вы в конечном итоге конвертировали A в единицу, и B заменяется решением Ax=B. Если n > m, у вас есть система с большим количеством неизвестных, чем уравнений, так что вы можете решить для некоторых из неизвестных, и установить другие на ноль. Во время сокращения строки, если в столбце нет значений, которые должны использовать "1" (ниже уже уменьшенных строк), вы можете пропустить этот столбец и сделать соответствующий неизвестный ноль (вы можете сделать это самое большее в нм).

Другие вопросы по тегам