Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дискретка_Экзамен_Ответы / комб / 2 Комбинаторные объекты и задачи выбора

.docx
Скачиваний:
66
Добавлен:
11.03.2015
Размер:
15.47 Кб
Скачать

2.12. Использование алгоритмов порождения комбинаторных

объектов при проектировании полнопереборных

алгоритмов решения задач выбора

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

В общем случае, в постановке задачи выбора может потребоваться:

1) определить, существует ли решение;

2) найти все решения задачи;

3) определить значение функционала “лучшего ” решения;

4) найти одно или все “лучшие ” решения.

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

1) определение класса комбинаторных объектов, содержащих решение задачи;

2) определение способа вычисления функционала;

3) определение способа распознавания решения по значению функционала.

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

Рассмотрим примеры задач выбора и способы их решения.

Пример 2. Задача. На предприятии работают n рабочих. В выездной бригаде должны находиться рабочие, которые все вместе владеют заданными специальностями. Множество специальностей, которыми владеет каждый рабочий - известно. Необходимо сформировать бригаду из минимального числа рабочих.

Решение. Бригада из минимального числа рабочих представляет собой подмножество множества всех рабочих, поэтому траекториями данной задачи являются подмножества выбранных рабочих. Учитывая то, что требуется сформировать бригаду из минимального числа рабочих, целесообразно порождать подмножества в порядке увеличения мощности. Это можно сделать, применяя алгоритм порождения сочетаний. Сначала будем порождать сочетания из n по 1 (мажет быть, один из рабочих владеет всеми необходимыми специальностями), затем - сочетания из n по 2 и т.д. до порождения сочетаний из n по n.

Функционалом будет являться множество МS специальностей, которыми владеет множество из k выбранных рабочих. Обозначим М - множество заданных специальностей, Si – множество специальностей, которыми владеет i-ый рабочий, С – сочетание из n по k, записанное в возрастающем порядке. Алгоритм вычисления функционала может быть следующим:

1. MS:=

2. Для всех i от 1 до k выполнить MS:=MSSCi

Если при обработке очередного сочетания окажется, что M является

подмножеством MS, то бригада из минимального числа рабочих соответствует этому сочетанию, решение найдено. Если же MMS будет ложным для всех порождённых подмножеств, то это означает, что сформировать бригаду из имеющихся рабочих, владеющих совместно всеми заданными специальностями, невозможно, задача не имеет решения.

Дополнение

О неэффективности полнопереборных алгоритмов.

Полнопереборные алгоритмы решения задач выбора с использованием алгоритмов порождения комбинаторных объектов являются универсальными, достаточно простыми для проектирования и программирования, но время их выполнения может быть очень велико даже при небольших размерностях задачи (количестве исходных данных), причём

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