Изменения

Перейти к: навигация, поиск
м
tex
==Задача о гамильтоновом цикле в графе==
{{Определение
|definition = '''<math>\mathrm{[U]HAM}</math>''' - задача нахождения (ориентированного) [[Гамильтоновы графы#Основные определения|гамильтонова цикла]] в заданном графе.
}}
===Доказательство NP-полноты для неориентированного графа===
Для доказательства того, что <math>\mathrm{HAM }</math> <math>\in</math> [[NPC|<math>\mathrm{NPC}</math>]], необходимо доказать два факта:*<math>\mathrm{HAM }</math> <math>\in</math> [[NP|<math>\mathrm{NP}</math>]] *<math>\mathrm{HAM }</math> <math>\in</math> [[NPH|<math>\mathrm{NPH}</math>]]
====Доказательство принадлежности к NP====
В качестве сертификата возьмем ориентированный гамильтонов цикл в графе <math>G</math>. Очевидно, он удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом, работает за полиномиальное от размера входа время.
[[Файл:HAM_fig1.png|200px|thumb|right|Рисунок 1]] [[Файл:HAM_fig2.png|200px|thumb|right|Рисунок 2‎]] [[Файл:HAM_fig3.png|200px|thumb|right|Рисунок 3‎]] [[Файл:HAM_fig4.png|200px|thumb|right|Рисунок 4]]
Сведем задачу о выполнимости булевых формул вида [[3CNFSAT | <math>\mathrm{3-КНФ}</math>]] к <math>\mathrm{HAM}</math>. Начнем построение экземпляра <math>\mathrm{HAM }</math> по булевой формуле в 3КНФ. Пусть формула имеет вид <math>E = e_1 \land e_2 \land... \ldots \land e_k</math>, где каждое <math>e_i</math> - дизъюнкт, представляющий собой сумму трех литералов, скажем, <math>e_i = (\alpha_{i1} + \alpha_{i2} + \alpha_{i3})</math>. Пусть <math>x_1, x_2, ...\ldots, x_n</math> - переменные в формуле <math>E</math>. Для всех дизъюнктов и переменных строятся подграфы, как показано на рисунках.
Для каждой переменной <math>x_i</math> строится подграф <math>H_i</math>, структура которого показана на рисунке 1. Здесь <math>m_i</math> - большее из чисел вхождений <math>\bar{x_i}</math> и <math>x_i</math> в <math>E</math>. Узлы <math>c_{ij}</math> и <math>b_{ij}</math>, расположенные в двух столбцах, соединены между собой дугами в обоих направлениях. Кроме того, каждое <math>b</math> имеет дугу, ведущую в <math>c</math>, расположенное на ступеньку ниже, т.е., если <math>j < m_i</math>, то <math>b_{ij}</math> имеет дугу, ведущую в <math>c_{i,j+1}</math>. Аналогично для <math>c_{ij}</math>. Наконец, есть верхний узел <math>a_i</math>, из которого дуги ведут в <math>b_{i0}</math> и <math>c_{i0}</math>, и нижний узел <math>d_i</math>, в который ведут дуги из <math>b_{im_i}</math> и <math>c_{im_i}</math>.
Таким образом, если начало цикла имеет вид <math>a_{1}</math>, <math>b_{10}</math>, то далее он должен спускаться "лесенкой", переходя из стороны в сторону:
<math>a_1, b_{10}, c_{10}, b_{11}, c_{11}, ...\ldots, 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}, ...\ldots, d_1</math>.
Решающим пунктом в доказательстве является то, что порядок, при котором спуск совершается от <math>c</math> к <math>b</math>, можно трактовать как приписывание переменной, соответствующей данному подграфу, значения "истина", а порядок, при котором спуск совершается от <math>b</math> к <math>c</math>, соответствует приписыванию этой переменной значения "ложь".
В дальнейшем это позволит нам считать, что выбор перехода из <math>a_{i}</math> в <math>b_{i0}</math> означает приписывание переменной <math>x_{i}</math> значения "истина", а перехода в <math>c_{i0}</math> - значения "ложь". Поэтому граф на рисунке 2 имеет <math>2^n</math> ориентированных гамильтоновых циклов, соответствующих <math>2^n</math> возможным подстановкам для <math>n</math> переменных.
Однако на рисунке 2 изображен лишь скелет графа, порождаемого по формуле <math>E</math>, находящейся в <math>\mathrm{3-КНФ}</math>. Каждому дизъюнкту <math>e_{i}</math> ставится в соответствие подграф <math>I_{j}</math> (рисунок 3). Он обладает тем свойством, что если цикл входит в <math>r_{j}</math>, то должен выходить из <math>u_{j}</math><ref>Хопкрофт Дж., Мотвани Р., Ульман Дж. Введение в теорию автоматов, языков и вычислений. 2-е издание. {{---}} М.: Издательский дом "Вильямс", 2002. {{---}} 528 с. {{---}} ISBN 5-8459-0261-4 (рус.)</ref>. Аналогично для <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>
===Доказательство NP-полноты для ориентированного графа===
Для доказательства того, что <math>\mathrm{UHAM }</math> <math>\in</math> [[NPC|<math>\mathrm{NPC}</math>]], необходимо доказать два факта:*<math>\mathrm{UHAM }</math> <math>\in</math> [[NP|<math>\mathrm{NP}</math>]] *<math>\mathrm{UHAM }</math> <math>\in</math> [[NPH|<math>\mathrm{NPH}</math>]]
====Доказательство принадлежности к NP====
В качестве сертификата возьмем гамильтонов цикл в графе <math>G</math>. Очевидно, он удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом, работает за полиномиальное от размера входа время.
====Доказательство принадлежности к NPH====
Сведем задачу о гамильтоновом цикле (<math>\mathrm{HAM) }</math> к <math>\mathrm{UHAM}</math>. Пусть дан ориентированный граф <math>G</math>. Построим по нему неориентированный граф <math>H</math>. Для этого каждой вершине из графа <math>G</math> поставим в соответствие 3 вершины в графе <math>H</math>, соединив в <math>H</math> ребром первую получившуюся со второй, а вторую - с третьей. Для каждой дуги, инцидентной исходной вершине в <math>G</math> поставим в соответствие ребро в <math>H</math>. В случае, если дуга исходит из этой вершины, то соединим ребро с последней из получившихся вершин в <math>H</math>, а если она входит в вершину, то соединим с первой из получившихся (см. рисунок 4). Таким образом, в построенном графе <math>H</math> гамильтонов путь будет тогда и только тогда, когда в исходном графе <math>G</math> будет ориентированный гамильтонов путь.
==Задача о гамильтоновом пути в графе==
{{Определение
|definition = '''<math>\mathrm{[U]HAMP}</math>''' - задача нахождения (ориентированного) [[Гамильтоновы графы#Основные определения|гамильтонова пути]] в заданном графе.
}}
===Доказательство NP-полноты для ориентированного графа===
Для доказательства того, что <math>\mathrm{HAMP }</math> <math>\in</math> [[NPC|<math>\mathrm{NPC}</math>]], необходимо доказать два факта:*<math>\mathrm{HAMP }</math> <math>\in</math> [[NP|<math>\mathrm{NP}</math>]] *<math>\mathrm{HAMP }</math> <math>\in</math> [[NPH|<math>\mathrm{NPH}</math>]]
====Доказательство принадлежности к NP====
В качестве сертификата возьмем ориентированный гамильтонов путь в графе <math>G</math>. Очевидно, он удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом, работает за полиномиальное от размера входа время.
====Доказательство принадлежности к NPH====
Сведем задачу об ориентированном гамильтоновом цикле (<math>\mathrm{HAM}</math>) к <math>\mathrm{HAMP}</math>. Пусть дан граф <math>G</math>. Выберем произвольную вершину графа <math>G</math> и раздвоим ее, и входящие дуги направим в одну из полученных вершин, а исходящие пустим из другой. Теперь, если в исходном графе был ориентированный гамильтонов цикл, то в полученном будет ориентированный гамильтонов путь. В обратную сторону, если в полученном графе будет ориентированный гамильтонов путь, то на первом и последнем местах в этом пути окажутся новые вершины, соответствующие раздвоенной, поскольку ни одна из них не может оказаться в середине пути (у неё есть либо входящие, либо исходящие дуги). Таким образом, если в полученном графе будет гамильтонов путь, то в исходном графе <math>G</math> был гамильтонов цикл.
===Доказательство NP-полноты для неориентированного графа===
Для доказательства того, что <math>\mathrm{UHAMP }</math> <math>\in</math> [[NPC|<math>\mathrm{NPC}</math>]], необходимо доказать два факта:*<math>\mathrm{UHAMP }</math> <math>\in</math> [[NP|<math>\mathrm{NP}</math>]] *<math>\mathrm{UHAMP }</math> <math>\in</math> [[NPH|<math>\mathrm{NPH}</math>]]
====Доказательство принадлежности к NP====
В качестве сертификата возьмем гамильтонов путь в графе <math>G</math>. Очевидно, он удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом, работает за полиномиальное от размера входа время.
====Доказательство принадлежности к NPH====
Сведем задачу о гамильтоновом цикле (<math>\mathrm{HAMP}</math>) к <math>\mathrm{UHAMP}</math>. Пусть дан ориентированный граф <math>G</math>. Построим по нему неориентированный граф <math>H</math>. Для этого каждой вершине из графа <math>G</math> поставим в соответствие 3 вершины в графе <math>H</math>, соединив в <math>H</math> ребром первую получившуюся со второй, а вторую - с третьей. Для каждой дуги, инцидентной исходной вершине в <math>G</math> поставим в соответствие ребро в <math>H</math>. В случае, если дуга исходит из этой вершины, то соединим ребро с последней из получившихся вершин в <math>H</math>, а если она входит в вершину, то соединим с первой из получившихся. Таким образом, в построенном графе <math>H</math> гамильтонов путь будет тогда и только тогда, когда в исходном графе <math>G</math> будет ориентированный гамильтонов путь.
==См. также==
* [[NP]]
* [[NPH]]
* [[NPC]]
* [[Классы NP и Σ₁]]
* [[3CNFSAT]]
97
правок

Навигация