Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практические задания и программы / Методичка с материалом и заданиями (все вместе).doc
Скачиваний:
82
Добавлен:
11.02.2016
Размер:
2.19 Mб
Скачать

2. 2. Алгоритм полного перебора

Будем считать, что подмножества пронумерованы и таким образом упорядочены. Естественный метод перебора всех подмножеств строк таблицы покрытий строится так: пустое подмножество строк, подмножества из одной строки, из двух строк,…, из всех строк, т.е. всего подмножеств:

.

Словесное описание алгоритма:

0. Текущее подмножество ;

1. i=i+1. Запоминаем множество , как очередное построенное подмножество;

2. Находим наибольший номер j элемента ;

2.1. Если jn (n  количество подмножеств ), то переходим к п.3;

2.2. Если j = n, то удаляем изи если, то заканчиваем построение; если– находим наибольший номер j элемента и удаляемиз.

3. j=j+1. Вводим в элемент. Переходим к п.1.

2. 3. Алгоритм граничного перебора по вогнутому множеству

Данный алгоритм основан на генерации подмножеств и их целенаправленном отборе.

Алгоритм генерации подмножеств должен гарантировать, что при его последовательном применении можно построить, начиная с некоторого начального подмножества, все возможные подмножества; при этом не должно быть повторений и должен существовать критерий окончания перебора. В п.2.2 упорядочение перебора произведено сначала по числу i элементов, а затем для фиксированного i – по лексикографическому правилу относительно номеров подмножеств.

Более удобный для дальнейшего упрощения процесса решения алгоритм полного перебора заключается в следующем: сначала строятся все подмножества Di, содержащие , затем содержащие , но не содержащие; если построено подмножествоDi, то за ним строится подмножество Di+j, целиком содержащее Di (DiDi+j).

Во многих приложениях достаточно находить только безызбыточные покрытия (теорема 2.1), что естественным образом сокращает перебор. Однако не удаётся найти простой и эффективный алгоритм, не требующий построения всех избыточных покрытий. Идея улучшения алгоритма перебора (генерации) подмножеств заключается в следующем: если текущее подмножество  покрытие, то в это подмножество не нужно вводить новые элементы.

Теорема 2.2. Если P покрытие, то и P’, P’P, тоже покрытие, т.е. множество всех возможных покрытий вогнуто.

Безызбыточные покрытия – это граница вогнутого множества всех покрытий, поэтому модифицированный алгоритм носит название “Алгоритм граничного перебора по вогнутому множеству”.

Словесное описание алгоритма:

0. Текущее подмножество D={A1}, i=0. Выполняем п.4;

1. Находим наибольший номер j элемента в подмножестве D.

1.1. Если jn и – не покрытие, то выполняем п.3.

1.2. Если jn и – покрытие, то выполняем п.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).