Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсачправ.docx
Скачиваний:
7
Добавлен:
09.02.2015
Размер:
95.04 Кб
Скачать

1.3 Решении задачи с помощью метода покрытия булевой матрицы.

Точный метод нахождения кратчайшего покрытия представляет собой обход дерева поиска. Данный метод разработал Закревский Аркадий Дмитриевич, он предложил довольно эффективный и простой способ нахождения малой величины покрытия булевой матрицы (так называемое разложение по минимальному столбцу и минимальной строке).

У данного метода экспоненциальная сложность , тогда как у «жадного» алгоритма полиномиальная . Текущая ситуация, соответствующая некоторой вершине дерева поиска, представляется переменной матрицей Х, которая показывает, какие столбцы еще не покрыты и какие строки можно использовать для их покрытия. В этой ситуации выбирается первая из строк с минимальным числом единиц – так минимизируется число вариантов продолжения поиска. Очередной шаг процесса состоит в выборе покрывающего столбца для этой строки и пробном включении ее в получаемое решение. Таким образом, вершины дерева поиска соответствуют некоторым строкам исходной матрицы, а дуги – выбираемым для их покрытия столбцам.

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

1. Если столбец k имеет единицы везде, где имеет единицы столбец l, то столбец k можно удалить. Любая строка, покрывающая столбец l, покрывает также столбец k. Поэтому при поиске покрытия столбец k можно не рассматривать. Достаточно, чтобы в покрытие была включена какая-либо из строк, покрывающих столбец l.

2. Если строка i имеет единицы везде, где имеет единицы строка j, то строку j можно удалить. Действительно, пусть в некотором кратчайшем покрытии имеется строка j. Очевидно, данное покрытие останется кратчайшим, если в нем строку j заменить строкой i.

  1. Дано:

,

,

  1. Введем булевы переменные

  1. Задаем матрицу

,

– i-ая строка

- j-ый столбец

Данный столбец и все покрытые им строки исключаются из таблицы

Рисунок 3

Получаем матрицу:

1

1

0

0

1

1

1

1

1

0

1

1

0

1

1

1

0

1

0

0

1

1

0

0

1

1

0

0

1

1

1

1

1

0

1

1

  1. 1) Проводим редукцию строк и столбцов:

1

1

0

0

1

1

1

0

0

1

1

1

0

0

1

1

2)

выбираем покрываем данную строку, любой столбец, где есть 1 в этой строке, данный столбец и все покрытые им строки исключаются из таблицы:

1

1

1

0

1

1

3) Проводим редукцию строк и столбцов:

1

1

0

1

4)

выбираем покрываем данную строку, любой столбец, где есть 1 в этой строке, данный столбец и все покрытые им строки исключаются из таблицы:

В итоге получилась полностью покрытая таблица.

  • Мы получаем оптимальное покрытие (рисунок 3):

Рисунок 4.

  1. 1) Проводим редукцию строк и столбцов:

1

1

0

0

1

1

1

0

0

1

1

1

0

0

1

1

2)

выбираем покрываем данную строку, любой столбец, где есть 1 в этой строке, данный столбец и все покрытые им строки исключаются из таблицы:

0

1

1

3) Проводим редукцию строк и столбцов:

0

1

4)

выбираем покрываем данную строку, любой столбец, где есть 1 в этой строке, данный столбец и все покрытые им строки исключаются из таблицы:

В итоге получилась полностью покрытая таблица.

  • Мы получаем оптимальное покрытие (рисунок 3):

Рисунок 5.

  1. 1) Проводим редукцию строк и столбцов:

1

1

0

0

1

1

1

0

0

1

1

1

0

0

1

1

2)

выбираем покрываем данную строку, любой столбец, где есть 1 в этой строке, данный столбец и все покрытые им строки исключаются из таблицы:

1

1

0

3) Проводим редукцию строк и столбцов:

1

0

4)

выбираем покрываем данную строку, любой столбец, где есть 1 в этой строке, данный столбец и все покрытые им строки исключаются из таблицы:

В итоге получилась полностью покрытая таблица.

  • Мы получаем оптимальное покрытие (рисунок 3):

Рисунок 6.

  1. 1) Проводим редукцию строк и столбцов:

1

1

0

0

1

1

1

0

0

1

1

1

0

0

1

1

2)

выбираем покрываем данную строку, любой столбец, где есть 1 в этой строке, данный столбец и все покрытые им строки исключаются из таблицы:

1

1

0

1

1

1

3) Проводим редукцию строк и столбцов:

1

0

1

1

4)

выбираем покрываем данную строку, любой столбец, где есть 1 в этой строке, данный столбец и все покрытые им строки исключаются из таблицы:

В итоге получилась полностью покрытая таблица.

  • Мы получаем оптимальное покрытие (рисунок 3):

Рисунок 7.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]