Аноним

Метрическая задача коммивояжера: различия между версиями

Материал из WEGA
нет описания правки
Нет описания правки
Строка 22: Строка 22:


== Основные результаты ==
== Основные результаты ==
Простой 2-аппроксимацией метрической задачи коммивояжера является алгоритм удвоения дерева. Он использует минимальные остовные деревья для вычисления гамильтоновых обходов. [[Остовное дерево]] T графа G = (V, E, w) представляет собой связный ациклический подграф G, содержащий все вершины E. Вес w(T) такого остовного дерева равен сумме весов его ребер, т.е. w(T) = Pe2T w(e). Остовное дерево является минимальным, если его вес минимален среди всех остовных деревьев G. Можно эффективно вычислить минимальное остовное дерево, например, при помощи алгоритмов Прима или Крускала (см., например, [5]).
Простой 2-аппроксимацией метрической задачи коммивояжера является алгоритм удвоения дерева. Он использует минимальные остовные деревья для вычисления гамильтоновых обходов. [[Остовное дерево]] T графа G = (V, E, w) представляет собой связный ациклический подграф G, содержащий все вершины E. Вес w(T) такого остовного дерева равен сумме весов его ребер, т.е. <math>w(T) = \sum_{e \in TH} w(e) \;</math>. Остовное дерево является минимальным, если его вес минимален среди всех остовных деревьев G. Можно эффективно вычислить минимальное остовное дерево, например, при помощи алгоритмов Прима или Крускала (см., например, [5]).




Строка 28: Строка 28:




Дано: полный неориентированный граф без циклов G = (V, E, w) с взвешенными ребрами и весовая функция w: E ! Q>o, удовлетворяющая неравенству треугольника.
  Дано: полный неориентированный граф без циклов G = (V, E, w) с взвешенными ребрами и весовая функция <math>w: E \to \mathbb{Q}_{ \ge 0}</math>, удовлетворяющая неравенству треугольника.
 
 
Требуется: найти гамильтонов обход для G, являющийся 2”-аппроксимацией.
  Требуется: найти гамильтонов обход для G, являющийся 2”-аппроксимацией.
 
 
1: Вычислить минимальное остовное дерево T графа G.
  1: Вычислить минимальное остовное дерево T графа G.
2: Продублировать каждое ребро T и получить эйлеров мультиграф T’.
  2: Продублировать каждое ребро T и получить эйлеров мультиграф T’.
3: Вычислить эйлеров обход для T (например, при помощи поиска в глубину по T). При посещении вершины эйлерова обхода, которая ранее уже была посещена, эта вершина пропускается, и мы переходим к следующей непосещенной вершине эйлерова обхода. (Этот процесс называется сокращением обхода.) Вернуть полученный гамильтонов обхода H.
  3: Вычислить эйлеров обход для T (например, при помощи поиска в глубину по T). При посещении вершины эйлерова обхода, которая ранее уже была посещена, эта вершина пропускается, и мы переходим к следующей непосещенной вершине эйлерова обхода. (Этот процесс называется сокращением обхода.) Вернуть полученный гамильтонов обхода H.


Алгоритм 1. Алгоритм удвоения дерева
Алгоритм 1. Алгоритм удвоения дерева
Строка 41: Строка 41:
Лемма 1. Пусть T – минимальное остовное дерево G = (V, E, w). Тогда w(T) < OPT.
Лемма 1. Пусть T – минимальное остовное дерево G = (V, E, w). Тогда w(T) < OPT.


Доказательство. Если удалить любое ребро гамильтонова обхода G, получим остовное дерево G.
Доказательство. Если удалить любое ребро гамильтонова обхода G, получим остовное дерево G.




4551

правка