

75. Исчерпывающий перебор. Задачи коммивояжера. Задача о назначениях.
Исчерпывающий перебор – генерация всех вариантов из области определения задачи, выбор тех, которые удовлетворяют ограничениям и последующий поиск нужного варианта решения.
Задача коммивояжера: найти кратчайший путь по заданным n городам, чтобы каждый город посещался только один раз и конечным пунктом оказался город, с которого начали движение.
Зададим граф, вершины – города, ребра между ними – пути, вес графа – расстояние от города до города. Обход: V1 – V2 - …… - V1. Пример:
Обходы:
a -> b -> c -> d -> a = 18 (2 + 8 + 1 +8); a -> b -> d -> c -> a = 11;
a -> c -> d -> b -> a = 11; a -> c -> b -> d -> a = 23; a -> d -> c -> b -> a = 18; a -> d -> c -> b -> a = 23.
Выч. сложность O(n!) - n кол-во «городов».
Задача о назначениях:
Имеется n работников, которые должны выполнить n заданий, стоимость выполнения заданий разными работниками различна. Необходимо распределить все задания так, чтобы они были выполнены с наименьшей стоимостью. Один работник не может выполнять две работы. Пример:
|
Задание 1 |
Задание 2 |
Задание 3 |
Задание 4 |
|
|
|
|
|
Работник 1 |
9 |
2 |
7 |
8 |
|
|
|
|
|
Работник 2 |
6 |
4 |
3 |
7 |
|
|
|
|
|
Работник 3 |
5 |
8 |
1 |
8 |
|
|
|
|
|
Работник 4 |
7 |
6 |
9 |
4 |
|
|
|
|
|
Переборы вариантов: (выбранная последовательность заданий для 4 работников = полученная стоимость)
1, 2, 3, 4 = 9+4+1+4 = 18; 1,2,4,3 = 9+4+8+9 = 30; 1,3,2,4 = 9+3+8+4 = 24; 1,3,4,2 = 26; 1,4,2,3 = 33;
и т.д. Сложность алгоритма = O(n!) .