NP-полнота задач о гамильтоновом цикле и пути в графах — различия между версиями
Артем (обсуждение | вклад) (→Доказательство принадлежности к NPH) |
Артем (обсуждение | вклад) (→Доказательство принадлежности к NPH) |
||
Строка 29: | Строка 29: | ||
На рисунке 1б показана структура графа в целом. Каждый шестиугольник представляет один подграф, построенный для переменной (его структура показана на рисунке 1а). Шестиугольники расположены циклически, и из нижнего узла каждого подграфа дуга ведет в верхний узел следующего. | На рисунке 1б показана структура графа в целом. Каждый шестиугольник представляет один подграф, построенный для переменной (его структура показана на рисунке 1а). Шестиугольники расположены циклически, и из нижнего узла каждого подграфа дуга ведет в верхний узел следующего. | ||
− | [[Файл:Picture_aho_graph1.png]] | + | [[Файл:Picture_aho_graph1.png]] [[Файл:Picture_aho_graph2.png]] [[Файл:Picture_aho_graph3.png]] |
Допустим, граф на рисунке 1б имеет ориентированный гамильтонов цикл. Не ограничивая общности, можно считать, что этот цикл начинается в <math>a_1</math>. Если затем он переходит в <math>b_{10},</math>, то на следующем шаге он обязательно перейдет в <math>c_{10}</math> (иначе <math>c_{10}</math> не появится в цикле). В самом деле, если цикл переходит из <math>a_{1}</math> в <math>b_{10}</math>, а затем - в <math>c_{11}</math>, то <math>c_{10}</math> никогда не появится в цикле, поскольку оба его предшественника (<math>a_{0}</math> и <math>b_{10}</math>) уже содержатся в нем. | Допустим, граф на рисунке 1б имеет ориентированный гамильтонов цикл. Не ограничивая общности, можно считать, что этот цикл начинается в <math>a_1</math>. Если затем он переходит в <math>b_{10},</math>, то на следующем шаге он обязательно перейдет в <math>c_{10}</math> (иначе <math>c_{10}</math> не появится в цикле). В самом деле, если цикл переходит из <math>a_{1}</math> в <math>b_{10}</math>, а затем - в <math>c_{11}</math>, то <math>c_{10}</math> никогда не появится в цикле, поскольку оба его предшественника (<math>a_{0}</math> и <math>b_{10}</math>) уже содержатся в нем. | ||
Строка 40: | Строка 40: | ||
<math>a_1, c_{10}, b_{10}, c_{11}, b_{11}, ..., d_1</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>c</math> к <math>b</math>, можно трактовать как приписывание переменной, соответствующей данному подграфу, значения "истина", а порядок, при котором спуск совершается от <math>b</math> к <math>c</math>, соответствует приписыванию этой переменной значения "ложь". | ||
Строка 48: | Строка 46: | ||
В дальнейшем это позволит нам считать, что выбор перехода из <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> переменных. | В дальнейшем это позволит нам считать, что выбор перехода из <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> (доказательство этого утверждения см. в книге "Введение в теорию автоматов, языков и вычислений", Дж. Хопкрофт, Р. Мотвани, Дж. Ульман). | Однако на рисунке 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> (доказательство этого утверждения см. в книге "Введение в теорию автоматов, языков и вычислений", Дж. Хопкрофт, Р. Мотвани, Дж. Ульман). |
Версия 23:32, 19 марта 2010
Содержание
- 1 Определения
- 2 Формулировка задачи о гамильтоновом цикле в графе
- 3 Доказательство NP-полноты задачи об ориентированном гамильтоновом цикле в графе (HAM)
- 4 Доказательство NP-полноты задачи о гамильтоновом цикле в графе (UHAM)
- 5 Формулировка задачи о гамильтоновом пути в графе
- 6 Доказательство NP-полноты задачи об ориентированном гамильтоновом пути в графе (HAMP)
- 7 Доказательство NP-полноты задачи о гамильтоновом пути в графе (UHAMP)
Определения
Определение 1
Гамильтоновым путем в графе
называется упорядочение всех узлов , , ..., , при котором для каждого существует ребро из в .Ориентированным гамильтоновым путем называется то же самое для ориентированного графа (должна существовать дуга из
в ).Определение 2
Гамильтоновым циклом в графе
называется упорядочение всех узлов , , ..., , при котором для каждого существует ребро из в , а также существует ребро из в .Ориентированным гамильтоновым циклом называется то же самое для ориентированного графа (должна существовать дуга из
в и дуга из в ).Формулировка задачи о гамильтоновом цикле в графе
В задаче об (ориентированном) гамильтоновом цикле в графе ([U]HAM) в качестве входных данных выступает (ориентированный) граф
. Требуется выяснить, есть ли в заданном (ориентированном) графе (ориентированный) гамильтонов цикл.Доказательство NP-полноты задачи об ориентированном гамильтоновом цикле в графе (HAM)
Для доказательства того, что HAMP NPC, необходимо доказать два факта:
Доказательство принадлежности к NP
В качестве сертификата возьмем ориентированный гамильтонов цикл в графе
. Очевидно, он удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом, работает за полиномиальное от размера входа время.Доказательство принадлежности к NPH
Доказательство взято из книги [1]
Сведем задачу о выполнимости булевых формул вида 3-КНФ (3CNF SAT) к HAM. Начнем построение экземпляра HAM по булевой формуле в 3КНФ. Пусть формула имеет вид
, где каждое - дизъюнкт, представляющий собой сумму трех литералов, скажем, . Пусть - переменные в формуле . Для всех дизъюнктов и переменных строятся подграфы, как показано на рисунке 1.Для каждой переменной
строится подграф , структура которого показана на рисунке 1а. Здесь - большее из чисел вхождений и в . Узлы и , расположенные в двух столбцах, соединены между собой дугами в обоих направлениях. Кроме того, каждое имеет дугу, ведущую в , расположенное на ступеньку ниже, т.е., если , то имеет дугу, ведущую в . Аналогично для . Наконец, есть верхний узел , из которого дуги ведут в и , и нижний узел , в который ведут дуги из и .На рисунке 1б показана структура графа в целом. Каждый шестиугольник представляет один подграф, построенный для переменной (его структура показана на рисунке 1а). Шестиугольники расположены циклически, и из нижнего узла каждого подграфа дуга ведет в верхний узел следующего.
Допустим, граф на рисунке 1б имеет ориентированный гамильтонов цикл. Не ограничивая общности, можно считать, что этот цикл начинается в
. Если затем он переходит в , то на следующем шаге он обязательно перейдет в (иначе не появится в цикле). В самом деле, если цикл переходит из в , а затем - в , то никогда не появится в цикле, поскольку оба его предшественника ( и ) уже содержатся в нем.Таким образом, если начало цикла имеет вид
, , то далее он должен спускаться "лесенкой", переходя из стороны в сторону:.
Если начало цикла имеет вид
, , то в лесенке меняется порядок предшествования и ..
Решающим пунктом в доказательстве является то, что порядок, при котором спуск совершается от
к , можно трактовать как приписывание переменной, соответствующей данному подграфу, значения "истина", а порядок, при котором спуск совершается от к , соответствует приписыванию этой переменной значения "ложь".Закончив обход подграфа
, цикл должен перейти в , где снова возникает выбор следующего перехода - в или в . Однако в силу тех же аргументов, которые приведены для , после того, как сделан выбор направления вправо или влево от , путь обхода уже зафиксирован. Вообще, при входе в каждый , есть выбор перехода влево или вправо, но никакого другого. Иначе некоторый узел обречен быть недоступным, т.е. он не сможет появиться в ориентированном гамильтоновом цикле, поскольку все его предшественники появились в нем ранее.В дальнейшем это позволит нам считать, что выбор перехода из
в означает приписывание переменной значения "истина", а перехода в - значения "ложь". Поэтому граф на рисунке 1б имеет ориентированных гамильтоновых циклов, соответствующих возможным подстановкам для переменных.Однако на рисунке 1б изображен лишь скелет графа, порождаемого по формуле
, находящейся в 3-КНФ. Каждому дизъюнкту ставится в соответствие подграф (рисунок 1в). Он обладает тем свойством, что если цикл входит в , то должен выходить из . Аналогично для и (доказательство этого утверждения см. в книге "Введение в теорию автоматов, языков и вычислений", Дж. Хопкрофт, Р. Мотвани, Дж. Ульман). В завершение построения графа для формулы соединяем подграфы и следующим образом. Допустим, у дизъюнкта первым литералом является , переменная без отрицания. Выберем некоторый узел , где от 0 до - 1, ранее не использованный для соединения с подграфами . Введем дуги, ведущие из в и из в . Если же первым литералом дизъюнкта является отрицание , то нужно отыскать неиспользованный узел , а затем соединить с и сДля второго и третьего литералов
граф дополняется точно так же, за одним исключением. Для второго литерала и используются узлы и , а для третьего - и . Таким образом, каждый имеет три соединения с подграфами типа , которые представляют переменные, присутствующие в дизъюнкте . Если литерал не содержит отрицания, то соединение выходит из -узла и входит в -узел, расположенный ниже, а если содержит - то наоборот.Мы утверждаем, что построенный таким образом граф
имеет ориентированный гамильтонов цикл тогда и только тогда, когда формула выполнима.Доказательство достаточности
Предположим, существует подстановка
, удовлетворяющая формуле . Построим ориентированный гамильтонов цикл следующим образом.- Вначале выберем путь, обходящий только подграфы (т.е. граф, изображенный на рисунке 1б) в соответствии с подстановкой . Таким образом, если , то цикл переходит из в , а если , то он переходит из в .
- Однако цикл, построенный к данному моменту, может содержать дугу из в , причем у есть еще одна дуга в один из подграфов в , который пока не включен в цикл. Тогда к циклу добавляется "крюк", который начинается в , обходит все шесть узлов подграфа и возвращается в . Дуга из в исключается из цикла, но узлы на ее концах остаются в нем.
- Аналогично, если в цикле есть дуга из в и у есть еще одна дуга в один из , пока не включенных в цикл, то к циклу добавляется "крюк", проходящий через все шесть узлов .
Тот факт, что
удовлетворяет формуле , гарантирует, что исходный путь, построенный на шаге 1, будет содержать, по крайней мере, одну дугу, которая на шаге 2 или 3 позволит включить в цикл подграф для каждого дизъюнкта . Таким образом, цикл включает в себя все подграфы и является ориентированным гамильтоновым.Доказательство необходимости
Предположим, что граф
имеет ориентированный гамильтонов цикл, и покажем, что формула выполнима. Напомним два важных пункта из предыдущего анализа.- Если гамильтонов цикл входит в некоторый в узле , или , то он должен выходить из него в узле , или соответственно.
- Таким образом, рассматривая данный гамильтонов цикл как обход подграфов типа , можно характеризовать "экскурсию", совершаемую в некоторое , как переход цикла по дуге, "параллельной" одной из дуг или .
Если игнорировать экскурсии в подграфы
, то гамильтонов цикл должен быть одним из циклов, которые возможны с использованием только подграфов и соответствуют выборам переходов из либо в , либо в . Каждый из этих выборов соответствует приписыванию значений переменным из . Если один из них дает гамильтонов цикл, включающий подграфы , то подстановка, соответствующая этому выбору, должна удовлетворять формуле .Причина в том, что если цикл переходит из
в , то экскурсия в может быть совершена только тогда, когда -й дизъюнкт содержит в качестве одного из литералов. Если цикл переходит из в , то экскурсия в может быть совершена только тогда, когда является литералом в -ом дизъюнкте. Таким образом, из того, что все подграфы могут быть включены в граф, следует, что при данной подстановке хотя бы один из литералов в каждом дизъюнкте истинен, т.е. формула выполнима.Доказательство NP-полноты задачи о гамильтоновом цикле в графе (UHAM)
Для доказательства того, что UHAM NPC, необходимо доказать два факта:
Доказательство принадлежности к NP
В качестве сертификата возьмем гамильтонов цикл в графе
. Очевидно, он удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом, работает за полиномиальное от размера входа время.Доказательство принадлежности к NPH
Сведем задачу о гамильтоновом цикле (HAM) к UHAM. Пусть дан ориентированный граф
. Построим по нему неориентированный граф . Для этого каждой вершине из графа поставим в соответствие 3 вершины в графе , соединив в ребром первую получившуюся со второй, а вторую - с третьей. Для каждой дуги, инцидентной исходной вершине в поставим в соответствие ребро в . В случае, если дуга исходит из этой вершины, то соединим ребро с последней из получившихся вершин в , а если она входит в вершину, то соединим с первой из получившихся. Таким образом, в построенном графе гамильтонов путь будет тогда и только тогда, когда в исходном графе будет ориентированный гамильтонов путь.Формулировка задачи о гамильтоновом пути в графе
В задаче об (ориентированном) гамильтоновом пути в графе ([U]HAMP) в качестве входных данных выступает (ориентированный) граф
. Требуется выяснить, есть ли в заданном (ориентированном) графе (ориентированный) гамильтонов путь.Доказательство NP-полноты задачи об ориентированном гамильтоновом пути в графе (HAMP)
Для доказательства того, что HAMP NPC, необходимо доказать два факта:
Доказательство принадлежности к NP
В качестве сертификата возьмем ориентированный гамильтонов путь в графе
. Очевидно, он удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом, работает за полиномиальное от размера входа время.Доказательство принадлежности к NPH
Сведем задачу об ориентированном гамильтоновом цикле (HAM) к HAMP. Пусть дан граф
. Выберем произвольную вершину графа и раздвоим ее, и входящие дуги направим в одну из полученных вершин, а исходящие пустим из другой. Теперь, если в исходном графе был ориентированный гамильтонов цикл, то в полученном будет ориентированный гамильтонов путь. В обратную сторону, если в полученном графе будет ориентированный гамильтонов путь, то на первом и последнем местах в этом пути окажутся новые вершины, соответствующие раздвоенной, поскольку ни одна из них не может оказаться в середине пути (у неё есть либо входящие, либо исходящие дуги). Таким образом, если в полученном графе будет гамильтонов путь, то в исходном графе был гамильтонов цикл.Доказательство NP-полноты задачи о гамильтоновом пути в графе (UHAMP)
Для доказательства того, что UHAMP NPC, необходимо доказать два факта:
Доказательство принадлежности к NP
В качестве сертификата возьмем гамильтонов путь в графе
. Очевидно, он удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом, работает за полиномиальное от размера входа время.Доказательство принадлежности к NPH
Сведем задачу о гамильтоновом цикле (HAMP) к UHAMP. Пусть дан ориентированный граф . Построим по нему неориентированный граф . Для этого каждой вершине из графа поставим в соответствие 3 вершины в графе , соединив в ребром первую получившуюся со второй, а вторую - с третьей. Для каждой дуги, инцидентной исходной вершине в поставим в соответствие ребро в . В случае, если дуга исходит из этой вершины, то соединим ребро с последней из получившихся вершин в , а если она входит в вершину, то соединим с первой из получившихся. Таким образом, в построенном графе гамильтонов путь будет тогда и только тогда, когда в исходном графе будет ориентированный гамильтонов путь.- ↑ [Ахо, Альфред, В., Хопкрофт, Джон, Ульман, Джеффри, Д. Структуры данных и алгоритмы = Data Structures and Algorithms. — Издательский дом «Вильямс», 2000. — С. 384. — ISBN 5-8459-0122-7 (рус.) / ISBN 0-201-00023-7 (англ.)]