NP-полнота задачи о раскраске графа
Версия от 11:50, 10 марта 2010; 192.168.0.2 (обсуждение)
Содержание
Формулировка задачи
Даны граф
и число . Нужно проверить, правда ли, что можно раскрасить вершины графа в цветов так, чтобы любые две вершины, соединённые ребром, имели разные цвета.Утверждение
Сформулированная выше задача NP-полна.
Доказательство
Доказательство принадлежности задачи классу NP
Сертификатом для решения данной задачи будет последовательность
, где , а обозначает цвет i-ой вершины. Проверку корректности такого сертификата легко осуществить за полиномиальное время, например, перебором всех пар вершин и проверкой того, что в случае, когда они соединены ребром, они имеют разные цвета, лежащие на отрезке .Доказательство принадлежности задачи классу NPH
Сведем задачу 3CNFSAT к данной.
Пусть дана , где , и - переменные или их отрицания (возможно, с повторениями). Сами переменные будем обозначать .
Заметим следующие тривиальные факты, которые будут использованы при построении графа:
- Ровно одно выражение из истинно;
Построим множества V и E будущего графа следущим образом:
- ;
- ;
Будем интерпретировать
как цвет (соотвественно, вершина всегда покрашена в цвет ), причем - цвет, обозначающий истину.- добавим в V вершины , отвечающие и соответственно, и соединим каждую такую пару ребром;
-
Осталось сделать так, чтобы возможность сделать истинной каждую скобку соответствовала необходимости покрасить хотя бы одну из вершин, соответствующих переменным в ней, в цвет
.- Для этого для каждой скобки вида
Доказательство корректности сведения
Покажем теперь, что такой граф будет (n+1)-раскрашиваемым тогда и только тогда, когда исходная формула принадлежала 3CNFSAT.
- . Из построения ясно, что можно покрасить вершины полученного графа, соответствующие истинным термам набора, обращающего формулу в истину, в цвет c0, а вершины, соответствующие ложным термам, - в соответствующие "ложные" цвета.
- . Построим по раскраске графа набор переменных , в котором истинно тогда и только тогда, когда покрашена в цвет . Этот набор непротиворечив (мы не попытались одну и ту же переменную сделать и истинной, и ложной одновременно). Он также обращает формулу в истину, так как по постронию в каждой скобке есть хотя бы один истинный терм.