Поскольку
maxal ввёл аппарат бинарных матриц, то приведу описание задачи через бинарные матрицы и операции с ними.
Пусть
- бинарная матрица размера
, где
, причём матрица
состоит из блоков — матриц
, где
, а размер блоков
, где
- биноминальный коэффициент.
Пример для n=3:
Столбец такой матрицы - это элемент покрытия множества
,
.
Бинарный вектор
- это выбор конкретного покрытия множества
.
Тогда мы можем сформулировать требования к вектору
:
1.
AND
- это требование "быть покрытием", а
-
-ая строка матрицы
2.
XOR
AND
- это требование "быть Т0-покрытием"
3. Для любых двух векторов-аксиом не существует такой перестановки строк матрицы
, что для любой строки матрицы
битовое AND до и после перестановки с одним и другим вектором-аксиомой равны друг другу.
Третье условие муторно записывать в математической нотации, пишу "заклинание".
Для того, чтобы уйти от полного перебора в п.3 заметим, что из всего класса эквивалентных аксиом нам нужно выбрать одного представителя по какому-то критерию. С учётом введенных обозначений таким критерием может быть минимальным числом, представленным двоичной записью вектора-аксиомы.
Будем представлять вектор-аксиому как набор n векторов-компонент
, соответствующих блокам матрицы
.
Тогда очевидно, что если [i+1..n] векторов-компонент пусты, а
-й вектор-компонент содержит
единиц (бит), то вид этого компонента будет
(младший разряд находится слева).
Такой подход к блочному представлению и поиску минимального числа - представления вектора-аксиомы позволяет немного "сэкономить" на переборах. Плюс разбивает задачу на поиск минимальных векторов - представителей класса эквивалентных аксиом - на подзадачи, где каждая подзадача определена кортежем из количества бит в каждом векторе-компоненте.
Если найден некоторый минимальный вектор с нулевыми [i+1..n] компонентами, то добавление i-ой компоненты с m битами также образует минимальный вектор. Но такой способ построения, по крайней мере, в однопроходном варинте, не даёт возможность построить все вектора-аксиомы — представителей классов эквивалентных векторов.
Однако мы можем ограничить число операций по проверке перестановок: мы можем проверять минимальность не всего вектора, а покомпонентно.
Пусть
- матрица
перестановок строк, а
- матрица
перестановок столбцов.
Тогда
, а
По условию поиска минимального элемента, перестановка
должна быть такой, чтобы старший ненулевой компонент вектора-аксиомы сохранял свою структуру:
.
Это означает, что
имеет блочный вид:
, где
- матрица
- матрица перестановки первых
столбцов для которых старший ненулевой вектор-компонент имеет 1.
Тогда
, где
- псевдообратная матрица к
Что можно сказать о структуре матрицы перестановки строк
?
Возможно ли в рамках изложенного сформулировать задачу динамического программирования, например?