Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кр одмита.doc
Скачиваний:
181
Добавлен:
24.02.2016
Размер:
6.17 Mб
Скачать

8.4. Методы комбинаторного поиска

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

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

Довольно общим средством повышения эффективности процесса решения задачи является редуцирование, т. е. упрощение текущей ситуации, сокращающее объем вычислений, проводимых при анализе множества вытекающих из нее вариантов. Способы редуцирования определяются особенностями конкретной задачи и исходных данных.

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

8.5. Задача о кратчайшем покрытии и методы ее решения

8.5.1. Постановка задачи

Многие комбинаторные оптимизационные задачи сводятся к задаче о кратчайшем покрытии, которая ставится следующим образом. Пусть даны некоторое множество А = {a1a2, …, an} и совокупность его подмножеств В1В2, …, Вт, т. е. Bi  A, i = 1, 2, …, m, причем В1  В2  …  Вт = А. Требуется среди данных подмножеств выделить такую совокупность , … ,с минимальнымk, чтобы каждый элемент из А попал хотя бы в одно из (j = 1, 2, …, k), т. е. .

Одной из интерпретаций этой задачи является задача о переводчиках. Из некоторого коллектива переводчиков, число которых т и каждый из которых владеет несколькими определенными языками, требуется скомплектовать минимальную по числу членов группу, такую, чтобы она смогла обеспечить перевод с любого из заданного множества языков, число которых п. Здесь А – множество языков, перевод с которых требуется обеспечить, а Вi – множество языков, которыми владеет i-й переводчик.

Удобно рассматривать матричную формулировку данной задачи, при которой совокупность В1В2, …, Вт задается в виде булевой матрицы, строки которой соответствуют подмножествам из данной совокупности, а столбцы – элементам множества А. Элемент i-й строки и j-го столбца имеет значение 1, если и только если aj  Bi. В этом случае говорят, что i-я строка покрывает j-й столбец. Требуется найти такое множество строк данной матрицы, чтобы каждый ее столбец имел единицу хотя бы в одной строке из этого множества, и при этом мощность выбранного множества должна быть минимальной.