Задачи о покрытии множеств. Поиск минимальных разбиений, страница 3


Затем выбираются строка 10  и  столбец  d,             а  матрица           сокращается до

Следующий выбор строки 2 и столбца g приводит к получению покрытия {d, f, g}. В данном случае оно оказывается кратчайшим.

Гарантия того, что полученное покрытие действительно будет кратчайшим, может быть выдана лишь алгоритмом комбинаторного поиска, организующим некоторый достаточный для этого перебор, который может оказаться весьма трудоемким. Существенное сокращение этого перебора обеспечивается на основе формулируемых ниже правил редуцирования переменной матрицы X, характеризующей текущую ситуацию. Данные правила применимы в тех ситуациях, когда некоторые два столбца или две строки матрицы Х находятся в отношении поглощения. Это отношение определяется следующим образом: булев вектор а поглощает булев векторb, если каждая пара одноименных компонент ai и bi удовлетворяет условию ai >= bi, т. е. не может быть, чтобы ai = 0 и bi = 1.

Правило удаления строки. Из матрицы Х удаляется строка xi , если она поглощает некоторую другую строку  xj .

Правило удаления столбца. Из матрицы Х удаляется столбец хi , если он поглощается некоторым другим столбцомxj .

Первое из этих правил универсально в следующем смысле: требования, предъявляемые к покрытию со стороны строки xi , будут полностью удовлетворены при удовлетворении требований строки xj . Следовательно, строка xi оказывается излишней.

Второе правило имеет более частный характер. Удаляя столбец хi мы тем самым отказываемся включать ею в искомое покрытие. Этот отказ оправдывается следующим рассуждением: если существует некоторое кратчайшее покрытие со столбцом xi то, заменив xi на xj , мы получим другое покрытие, которое также будет, кратчайшим. Таким образом, удаляя из рассмотрения столбец xi мы не теряем возможности найти одно из кратчайших покрытий. Возможность нахождения некоторых из кратчайших покрытий при этом теряется, но это не должно нас волновать, так как для нас достаточно найти лишь одно из них.

Наряду с актами редуцирования матрицы Х в число элементарных шагов включаются приращения конструируемого покрытия.

Правило приращения покрытия. Если некоторая строка xi матрицы Х имеет лишь один элемент xij со значением 1, то столбец xj включается в конструируемое покрытие.

Естественно, что включаемые в покрытие столбцы удаляются из матрицы Х вместе со всеми покрываемыми ими строками, в которых они содержат единицы.

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

Правило расщепления. В матрице Х отыскивается минимальная (по числу единиц) строка и поочередно рассматриваются варианты, связанные с включением в конструируемое покрытие столбцов, имеющих в этой строке единицу.

Дополнительное сокращение перебора обеспечивается следующим правилом ограничения, или правилом возврата.

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

Рассмотрим работу сформулированных правил на старом примере.


Демонстрация алгоритма. В исходной ситуации принимается, что Хo=С, а конструируемое покрытие пока пустое. В матрице Х удаляется строка 1, поскольку она поглощает строку 9, и строка 3, поглощающая строку 10. В полученном миноре выбрасывается столбец а, так как он поглощается столбцом d. Получается не упрощаемый далее минор