![](/user_photo/2706_HbeT2.jpg)
- •2. Алгоритмы покрытия
- •2.1. Постановка задачи покрытия
- •2. 2. Алгоритм полного перебора
- •2. 3. Алгоритм граничного перебора по вогнутому множеству
- •2.4. Алгоритмы, использующие сокращение таблицы покрытий
- •1. Для случая построения одного кратчайшего покрытия
- •2. В случае построения минимального покрытия
- •3. При условии построения всех безызбыточных покрытий
- •2.5. Алгоритм приближенного решения задачи о покрытии
- •2.6. Задачи для самостоятельной работы
2. 2. Алгоритм полного перебора
Будем
считать, что подмножества
пронумерованы
и таким образом упорядочены. Естественный
метод перебора всех
подмножеств
строк таблицы покрытий строится так:
пустое подмножество строк, подмножества
из одной строки, из двух строк,…, из
всех строк, т.е. всего
подмножеств:
.
Словесное описание алгоритма:
0.
Текущее подмножество
;
1.
i=i+1.
Запоминаем множество
,
как очередное построенное подмножество
;
2.
Находим наибольший номер j
элемента
;
2.1.
Если j
n
(n
количество подмножеств
),
то переходим к п.3;
2.2.
Если
j
= n,
то удаляем
из
и если
,
то заканчиваем построение; если
–
находим
наибольший номер
j
элемента
и удаляем
из
.
3.
j=j+1.
Вводим в
элемент
.
Переходим к п.1.
2. 3. Алгоритм граничного перебора по вогнутому множеству
Данный алгоритм основан на генерации подмножеств и их целенаправленном отборе.
Алгоритм генерации подмножеств должен гарантировать, что при его последовательном применении можно построить, начиная с некоторого начального подмножества, все возможные подмножества; при этом не должно быть повторений и должен существовать критерий окончания перебора. В п.2.2 упорядочение перебора произведено сначала по числу i элементов, а затем для фиксированного i – по лексикографическому правилу относительно номеров подмножеств.
Более
удобный для дальнейшего упрощения
процесса решения алгоритм полного
перебора заключается в следующем:
сначала строятся все подмножества Di,
содержащие
,
затем
содержащие
,
но не содержащие
;
если построено подмножествоDi,
то за ним строится подмножество Di+j,
целиком содержащее Di
(Di
Di+j).
Во многих приложениях достаточно находить только безызбыточные покрытия (теорема 2.1), что естественным образом сокращает перебор. Однако не удаётся найти простой и эффективный алгоритм, не требующий построения всех избыточных покрытий. Идея улучшения алгоритма перебора (генерации) подмножеств заключается в следующем: если текущее подмножество покрытие, то в это подмножество не нужно вводить новые элементы.
Теорема 2.2. Если P покрытие, то и P’, P’ P, тоже покрытие, т.е. множество всех возможных покрытий вогнуто.
Безызбыточные покрытия – это граница вогнутого множества всех покрытий, поэтому модифицированный алгоритм носит название “Алгоритм граничного перебора по вогнутому множеству”.
Словесное описание алгоритма:
0. Текущее подмножество D={A1}, i=0. Выполняем п.4;
1. Находим наибольший номер j элемента в подмножестве D.
1.1.
Если
j
n
и
– не покрытие, то выполняем п.3.
1.2.
Если j
n
и
– покрытие, то выполняем п.2.
1.3.
Если j
= n,
то удаляем
из
,
и если
,
то выполняем п. 5,
иначе
– снова находим наибольший номер j
элемента в D
и выполняем п.2.
2.
Удаляем элемент
из
.
3.
j=j+1.
Вводим элемент
в
D.
4.
Выясняем, является ли
покрытием.
4.1.
Если
очередное построение в
– покрытие, то удаляемпо
очереди из
ранее построенных покрытий те, которые
поглощают
,
т.е. избыточные покрытия, соответственно
уменьшаяi
каждый
раз на 1,
и запоминаем
D
как
покрытие
Переходим к п.1;
4.2. Если построение в D не является покрытием, то выполняем п.1;
5. Заканчиваем построение всех безызбыточных покрытий.
Из полученных безызбыточных покрытий можно выбрать покрытия с минимальным количеством строк (кратчайшее покрытие) либо покрытие с минимальной ценой (минимальной покрытие) в соответствии с (2.2).