Изменения

Перейти к: навигация, поиск

NP-полнота задачи о гамильтоновом пути в графе

8435 байт добавлено, 15:57, 13 марта 2010
Доказательство принадлежности к NPH
Таким образом, если начало цикла имеет вид <math>a_{1}</math>, <math>b_{10}</math>, то далее он должен спускаться "лесенкой", переходя из стороны в сторону:
 
<math>a_1, b_{10}, c_{10}, b_{11}, c_{11}, ..., d_1</math>.
 
Если начало цикла имеет вид <math>a_{1}</math>, <math>c_{10}</math>, то в лесенке меняется порядок предшествования <math>c</math> и <math>b</math>.
 
<math>a_1, c_{10}, b_{10}, c_{11}, b_{11}, ..., d_1</math>.
 
Решающим пунктом в доказательстве является то, что порядок, при котором спуск совершается от <math>c</math> к <math>b</math>, можно трактовать как приписывание переменной, соответствующей данному подграфу, значения "истина", а порядок, при котором спуск совершается от <math>b</math> к <math>c</math>, соответствует приписыванию этой переменной значения "ложь".
 
Закончив обход подграфа <math>H_1</math>, цикл должен перейти в <math>a_2</math>, где снова возникает выбор следующего перехода - в <math>b_{20}</math> или в <math>c_{20}</math>. Однако в силу тех же аргументов, которые приведены для <math>H_1</math>, после того, как сделан выбор направления вправо или влево от <math>a_{2}</math>, путь обхода <math>H_{2}</math> уже зафиксирован. Вообще, при входе в каждый <math>H_{i}</math>, есть выбор перехода влево или вправо, но никакого другого. Иначе некоторый узел обречен быть недоступным, т.е. он не сможет появиться в ориентированном гамильтоновом цикле, поскольку все его предшественники появились в нем ранее.
 
В дальнейшем это позволит нам считать, что выбор перехода из <math>a_{i}</math> в <math>b_{i0}</math> означает приписывание переменной <math>x_{i}</math> значения "истина", а перехода в <math>c_{i0}</math> - значения "ложь". Поэтому граф на рисунке 1б имеет <math>2^n</math> ориентированных гамильтоновых циклов, соответствующих <math>2^n</math> возможным подстановкам для <math>n</math> переменных.
 
Однако на рисунке 1б изображен лишь скелет графа, порождаемого по формуле <math>E</math>, находящейся в 3-КНФ. Каждому дизъюнкту <math>e_{i}</math> ставится в соответствие подграф <math>I_{j}</math> (рисунок 1в). Он обладает тем свойством, что если цикл входит в <math>r_{j}</math>, то должен выходить из <math>u_{j}</math>. Аналогично для <math>s, v</math> и <math>t, w</math> (доказательство этого утверждения см. в книге "Введение в теорию автоматов, языков и вычислений", Дж. Хопкрафт, Р. Мотвани, Дж. Ульман).
В завершение построения графа <math>G</math> для формулы <math>E</math> соединяем подграфы <math>I</math> и <math>H</math> следующим образом. Допустим, у дизъюнкта <math>e_i</math> первым литералом является <math>x_i</math>, переменная без отрицания. Выберем некоторый узел <math>c_{ip}</math>, где <math>p</math> от 0 до <math>m_{i}</math> - 1, ранее не использованный для соединения с подграфами <math>I</math>. Введем дуги, ведущие из <math>c_{ip}</math> в <math>r_{j}</math> и из <math>u_{j}</math> в <math>b_{i,p+1}</math>. Если же первым литералом дизъюнкта <math>e_j</math> является отрицание <math>\bar{x_i}</math>, то нужно отыскать неиспользованный узел <math>b_{ip}</math>, а затем соединить <math>b_{ip}</math> с <math>r_{j}</math> и <math>u_{j}</math> с <math>c_{i,p+1}</math>
 
Для второго и третьего литералов <math>e_{j}</math> граф дополняется точно так же, за одним исключением. Для второго литерала и используются узлы <math>s_{j}</math> и <math>v_{j}</math>, а для третьего - <math>t_{j}</math> и <math>w_{j}</math>. Таким образом, каждый <math>I_{j}</math> имеет три соединения с подграфами типа <math>H</math>, которые представляют переменные, присутствующие в дизъюнкте <math>e_{j}</math>. Если литерал не содержит отрицания, то соединение выходит из <math>c</math>-узла и входит в <math>b</math>-узел, расположенный ниже, а если содержит - то наоборот.
 
Мы утверждаем, что построенный таким образом граф <math>G</math> имеет ориентированный гамильтонов цикл тогда и только тогда, когда формула <math>E</math> выполнима.
 
====Доказательство достаточности====
Предположим, существует подстановка <math>T</math>, удовлетворяющая формуле <math>E</math>. Построим ориентированный гамильтонов цикл следующим образом.
# Вначале выберем путь, обходящий только подграфы <math>H</math> (т.е. граф, изображенный на рисунке 1б) в соответствии с подстановкой <math>T</math>. Таким образом, если <math>T(x_{i}) = 1</math>, то цикл переходит из <math>a_{i}</math> в <math>b_{i0}</math>, а если <math>T(x_{i}) = 0</math>, то он переходит из <math>a_i</math> в <math>c_{i0}</math>.
#Однако цикл, построенный к данному моменту, может содержать дугу из <math>b_{ip}</math> в <math>c_{i,p+1}</math>, причем у <math>b_{ip}</math> есть еще одна дуга в один из подграфов в <math>I_{j}</math>, который пока не включен в цикл. Тогда к циклу добавляется "крюк", который начинается в <math>b_{ip}</math>, обходит все шесть узлов подграфа <math>I_{j}</math> и возвращается в <math>c_{i,p+1}</math>. Дуга из <math>b_{ip}</math> в <math>c_{i,p+1}</math> исключается из цикла, но узлы на ее концах остаются в нем.
#Аналогично, если в цикле есть дуга из <math>c_{ip}</math> в <math>b_{i,p+1}</math> и у <math>c_{ip}</math> есть еще одна дуга в один из <math>I_{j}</math>, пока не включенных в цикл, то к циклу добавляется "крюк", проходящий через все шесть узлов <math>I_{j}</math>.
 
Тот факт, что <math>T</math> удовлетворяет формуле <math>E</math>, гарантирует, что исходный путь, построенный на шаге 1, будет содержать, по крайней мере, одну дугу, которая на шаге 2 или 3 позволит включить в цикл подграф <math>I_j</math> для каждого дизъюнкта <math>e_i</math>. Таким образом, цикл включает в себя все подграфы <math>I_j</math> и является ориентированным гамильтоновым.
==Формулировка задачи о гамильтоновом пути в графе==
Анонимный участник

Навигация