Задачи на взвешенных графах Тема 12
Формулировка основных задач o Задача о нахождении кратчайшей сети (длиннейшей) n Цель: построить остов минимального (максимального) веса o Задача коммивояжера n Цель: обойти все вершины графа кратчайшим способом o Задача о минимальном паросочетании n Цель: выбрать максимальное количество несмежных ребер с минимальным суммарным весом o Задача китайского почтальона n Цель: обойти все ребра графа кратчайшим способом.
Нахождение кратчайшей сети. Алгоритм Крускала o Алгоритм prima o Взять изолированный подграф o Взять изолированный T G, k = 0 T G o Для всех vi V: o Упорядочить список ребер графа n ai – ближайшая вершина к vi ej по возрастанию веса, k = 0 n bi – вес (vi, ai) o Взять очередное ej из списка o ej = (vi, ai) = Добавление ej в Т o Добавление ej в Т уменьшает число связных компонент? компонент? n Да: добавить ej в Т и к п. 5 n Нет: к п. 3 n Нет: к п. 2 o k=k+1 o k=k+1, k = n – 1? o k = n – 1? n Да: вывод Т – это остов o Нет: к п. 2 o Нет: к п. 3
Пример o Найти кратчайшую сеть для графа со следующей матрицей весов:
Задача коммивояжера Для гамильтоновых графов задача решается: o Полным перебором всех гамильтоновых циклов (поиск в ширину) o С помощью жадного алгоритма: n Берется изолированный подграф T G n В Т добавляются все ek = (vi, vj): (vi) = 2 или (vj) = 2 n Т достраивается до остова (алгоритмом Крускала или prima) n Полученный остов T модифицируется с целью достижения всеми вершинами степеней 2 или 1 (см. пример) o Если полученный остов T может быть замкнут, цель достигнута, подсчитывается суммарный вес гамильтонова цикла, если нет – остов, полученный в п. 4 снова модифицируется o По результатам решения задачи коммивояжера решается задача о минимальном паросочетании путем перебора ребер результирующего цикла: n 2 варианта при четном количестве вершин графа n и N вариантов при N вершинах
Задача коммивояжера o В случае отсутствия гамильтоновых циклов граф необходимо свести к гамильтонову: n вершины, мешающие существованию гамильтонова цикла, дублируются (фактически, тем самым обеспечивается их повторный проход) n между исходной и дублированной вершиной имеется ребро весом 0 n дублированные вершины наследуют все ребра, соединяющие исходную вершину с другими.
Задача китайского почтальона o Для эйлеровых графов решением является любой эйлеров цикл. o В неэйлеровых графах применяется следующий алгоритм: n Выделяется множество {vj} c (vj) % 2 = 1 n Строится сужение G* графа G по {vj} n G* достраивается до полного графа, вес несуществующего ребра (vk, vl) принимается равным минимальному расстоянию d(vk, vl) в G* n В G* выделяется паросочетание минимального веса EН = {ej} n В граф G добавляются все ребра {ej} (тем самым обеспечивается их повторный проход) n Ищется Эйлеров цикл в G, подсчитывается его вес (см. пример)
Пример o Решить задачу китайского почтальона для графа со следующей матрицей весов: