
- •Виды графов
- •Изоморфизм
- •Матричное задание графа
- •Свойства матрицы смежности
- •Операции над графами
- •Достижимость и связность
- •Матрицы достижимости и контрдостижимости
- •Нахождение сильных компонент
- •Конденсация графа
- •Базы и антибазы
- •Построение компонент связности в неориентированном графе
- •Построение компонент связности в ориентированном графе
- •Система независимых циклов
- •Дерево. Остов граф
- •Процесс восстановления дерева по набору
- •Алгоритм построения произвольного остова
- •Определение минимального остова
- •Алгоритм построения системы независимых циклов графа
- •Определение кратчайшего пути на графе методом Дейкстры
- •Модификация Форда
- •Алгоритмы поиска всех кратчайших путей
- •Алгоритм Флойда
- •Алгоритм Флойда
- •Алгоритм Данцига
- •Алгоритм Данцига
- •Раскраска
- •Метод построения функции Гранди на графе
- •Свойства хроматического числа
- •Гамильтоновы пути, контуры и задача Коммивояжера
- •Метод Роберта и Флореса (перебор-метод для орграфов)
- •Применение метода ветвей и границ к решению задачи Коммивояжера.
- •Потоковые алгоритмы
- •Алгоритм поиска увеличивающего пути
- •Алгоритм поиска максимального потока
- •Алгоритм Форда и Фалкерсона
- •Модификация алгоритма поиска максимального потока при нескольких источниках и стоках
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритм поиска потока минимальной стоимости
- •Алгоритмы построения покрывающих деревьев
- •Алгоритм построения покрывающего дерева славик?!! последняя :-(
Применение метода ветвей и границ к решению задачи Коммивояжера.
Будем считать, что задача
Коммивояжера задана в виде матрицы
.
Для конкретного случая пусть матрица
имеет вид:
Нам требуется найти Гамильтонов контур
минимальной длины.
Для получения оценки
снизу длин множества всех Гамильтоновых
контуров осуществим приведение матрицы
расстояний по строкам и столбцам. Данное
приведение заключается в том, что из
элементов i-ой
строки вычитается наименьший элемент
этой строки, обозначаемый
,
при этом длины сразу всех Гамильтоновых
контуров уменьшаются на сумму вычтенных
из каждой строки чисел, то есть на
величину
,
оставаясь неотрицательными. Это
происходит потому, что в каждый Гамильтонов
контур входит только по одному элементу
из каждой строки и из каждого столбца
матрицы расстояний. Величина
дает
некоторую оценку снизу всех Гамильтоновых
контуров. Эту сумму можно улучшить путем
приведения полученной матрицы еще и по
столбцам. Эта операция проводится
аналогично приведению по строкам.
Минимальный элемент
j-го
столбца обозначим
.
Теперь оценку снизу длин Гамильтоновых
контуров можно определить как
.
Для данного примера:
1 2 3 4 5
1 2 3 4 5
0 0 1 0 0
После приведения по строкам и столбцам исходная матрица имеет вид:
1 2 3 4 5
Множество всех
Гамильтоновых контуров
=8
Рассмотрим способ разбиения множества Гамильтоновых контуров на два подмножества.
Возьмем любую дугу графа
.
К первому подмножеству отнесем все
Гамильтоновы контуры, в которые эта
дуга входит -
.
Ко второму подмножеству отнесем все
Гамильтоновы контуры, в которые эта
дуга не входит -
.
Матрицу расстояний для первого подмножества получаем путем вычеркивания из исходной матрицы i-ой строки и j-го столбца, так как включение ¤ -ой дуги исключает включение других дуг, стоящих в i-ой строке или j-ом столбце. (Размеры матрицs расстояний уменьшатся на 1).
Матрицу расстояний для
второго подмножества получаем, полагая
.
(при этом размер матрицы сохраняется прежним). Таким образом, и содержат различное число Гамильтоновых контуров.
Общее число Гамильтоновых
контуров равно
Подмножество
:
Подмножество
:
-
=
То есть при
,
будет содержать большее число элементов,
чем множество
.
Так как множество с меньшим числом элементов исследовать проще, то дугу следует выбрать такой, чтобы множество имело меньшую оценку, чем , при чем из множества всех дуг, удовлетворяющих этому условию, следует выбирать ту, которая дает наибольшую разницу в этих оценках.
Если взять такую дугу
,
для которой приведена матрица
(элемент),
то оценка для
снизу возрастет на величину
.
Так как дуга входит во все Гамильтоновы контуры множества , оценка может еще возрасти, если допускается дальнейшее приведение.
А для множества ( ) матрица расстояний не приводится и поэтому оценка остается прежней, поэтому меньшее значение оценки будет для , что нежелательно.
Поэтому выбирают дугу
,
чтобы для приведенной таблицы было
.
Таких дуг в приведенной
матрице может быть несколько, поэтому
берут среди них ту, для которой увеличение
оценки для множества
будет наибольшим, что, в свою очередь,
увеличит разницу в оценках множеств
и
.
Обозначим увеличение
оценки для
через
.
Значение величины
получаем путем сложения наименьших
чисел в i-ой
строке и j-ом
столбце.
1 2 3 4 5
Дугу
включаем в Гамильтонов контур.
Множество всех
Гамильтоновых контуров
8
6
5
Рис. 56
Вычеркиваем 4 строку и 1 столбец матрицы.
1 2 3 4 5
2 3 4 5
После построения новой матрицы необходимо следить, чтобы не получить контуров, не являющихся Гамильтоновыми, запрещая соответствующие дуги.
2 3 4 5
2 3 4 5
надо поставить в полуматрице запрет ×
(означает
).
0
0 3 0
2 3 4 5
Дугу
включаем в Гамильтонов контур.
Множество всех
Гамильтоновых контуров 8
6
5
0 2
Рис. 57
Первую строку и пятый столбец вычеркиваем.
2 3 4 5
2 3 4
2 3 4
0 0
0
2 3 4
Вычеркиваем
и
.
3
Дуги и включаем в гамильтонов контур.
Множество всех
Гамильтоновых контуров 8
5
6
0 2
0
Рис. 58
Получили Гамильтонов контур
,
длина которого 8+5+0=13