NP-полнота задачи о раскраске графа — различия между версиями
Alant (обсуждение | вклад) |
Alant (обсуждение | вклад) |
||
Строка 10: | Строка 10: | ||
=== Доказательство принадлежности задачи классу NPH === | === Доказательство принадлежности задачи классу NPH === | ||
Сведем задачу 3CNFSAT к данной.<br/> | Сведем задачу 3CNFSAT к данной.<br/> | ||
− | Пусть дана формула <math> \varphi = (a_1 \lor b_1 \lor c_1) \land (a_2 \lor b_2 \lor c_2) \land ... \land (a_m \lor b_m \lor c_m) </math>, где <math>a_i</math>, <math>b_i</math> и <math>c_i</math> | + | Пусть дана формула <math> \varphi = (a_1 \lor b_1 \lor c_1) \land (a_2 \lor b_2 \lor c_2) \land ... \land (a_m \lor b_m \lor c_m) </math>, где <math>a_i</math>, <math>b_i</math> и <math>c_i</math> {{mdash}} переменные или их отрицания (возможно, с повторениями). Сами переменные будем обозначать <math> \{x_i\}_{i=1}^n </math>.<br/> Заметим следующие тривиальные факты, которые будут использованы при построении графа: |
# Ровно одно выражение из <math> \{x_i, \lnot {x_i}\} </math> истинно; | # Ровно одно выражение из <math> \{x_i, \lnot {x_i}\} </math> истинно; | ||
# <math> \varphi \in 3CNFSAT \Leftrightarrow \forall {j} (a_j \lor b_j \lor c_j) = 1 </math> | # <math> \varphi \in 3CNFSAT \Leftrightarrow \forall {j} (a_j \lor b_j \lor c_j) = 1 </math> |
Версия 12:15, 10 марта 2010
Содержание
Формулировка задачи
Даны граф
и число . Необходимо проверить, правда ли, что можно раскрасить вершины графа в цветов так, чтобы любые две вершины, соединённые ребром, имели разные цвета.Утверждение
Сформулированная выше задача NP-полна.
Доказательство
Доказательство принадлежности задачи классу NP
Сертификатом для решения данной задачи будет последовательность
, где , а обозначает цвет i-ой вершины. Проверку корректности такого сертификата легко осуществить за полиномиальное время, например, перебором всех пар вершин и проверкой того, что в случае, когда они соединены ребром, они имеют разные цвета, лежащие на отрезке .Доказательство принадлежности задачи классу NPH
Сведем задачу 3CNFSAT к данной.
Пусть дана формула , где , и Шаблон:Mdash переменные или их отрицания (возможно, с повторениями). Сами переменные будем обозначать .
Заметим следующие тривиальные факты, которые будут использованы при построении графа:
- Ровно одно выражение из истинно;
Построим множества V и E будущего графа следущим образом:
- ;
- ;
Будем интерпретировать
как цвет (соотвественно, вершина всегда покрашена в цвет ), причем - цвет, обозначающий истину.- добавим в V вершины , отвечающие и соответственно, и соединим каждую такую пару ребром;
- соединим каждую вершину из со всеми , кроме и .
Этим мы обеспечили выполнение первого условия из приведенных выше, так как теперь ровно одна вершина из
Осталось сделать так, чтобы возможность сделать истинной каждую скобку соответствовала необходимости покрасить хотя бы одну из вершин, соответствующих переменным в ней, в цвет .
- Для этого для каждой скобки вида
Доказательство корректности сведения
Покажем теперь, что такой граф будет (n+1)-раскрашиваемым тогда и только тогда, когда исходная формула принадлежала 3CNFSAT.
- . Из построения ясно, что можно покрасить вершины полученного графа, соответствующие истинным термам набора, обращающего формулу в истину, в цвет c0, а вершины, соответствующие ложным термам, - в соответствующие "ложные" цвета.
- . Построим по раскраске графа набор переменных , в котором истинно тогда и только тогда, когда покрашена в цвет . Этот набор непротиворечив (мы не попытались одну и ту же переменную сделать и истинной, и ложной одновременно). Он также обращает формулу в истину, так как по постронию в каждой скобке есть хотя бы один истинный терм.