NP-полнота задачи о раскраске графа — различия между версиями
Alant (обсуждение | вклад) |
Alant (обсуждение | вклад) |
||
| Строка 13: | Строка 13: | ||
# Ровно одно выражение из <math> \{x_i, \lnot {x_i}\} </math> истинно; | # Ровно одно выражение из <math> \{x_i, \lnot {x_i}\} </math> истинно; | ||
# <math> \varphi \in 3CNFSAT </math> тогда и только тогда, когда существует набор, обращающий каждую скобку в истину. | # <math> \varphi \in 3CNFSAT </math> тогда и только тогда, когда существует набор, обращающий каждую скобку в истину. | ||
| − | Построим множества V и E будущего графа | + | Построим множества V и E будущего графа следующим образом: |
* <math> V = \{c_i\}_{i=0}^n </math>; | * <math> V = \{c_i\}_{i=0}^n </math>; | ||
* <math> E = \{<c_i, c_j>\}_{i,j=0, i \ne j}^n </math>. | * <math> E = \{<c_i, c_j>\}_{i,j=0, i \ne j}^n </math>. | ||
Версия 12:49, 10 марта 2010
Содержание
Формулировка задачи
Даны граф и число . Необходимо проверить, правда ли, что можно раскрасить вершины графа в цветов так, чтобы любые две вершины, соединённые ребром, имели разные цвета.
Утверждение
Сформулированная выше задача NP-полна.
Доказательство
Доказательство принадлежности задачи классу NP
Сертификатом для решения данной задачи будет последовательность , где , а обозначает цвет i-ой вершины. Проверку корректности такого сертификата легко осуществить за полиномиальное время, например, перебором всех пар вершин и проверкой того, что в случае, когда они соединены ребром, они имеют разные цвета, лежащие на отрезке . С другой стороны, очевидно, что если задача имеет решение, то такой сертификат существует.
Доказательство принадлежности задачи классу NPH
Сведем задачу 3CNFSAT к данной.
Пусть дана формула , где , и — переменные или их отрицания (возможно, с повторениями). Сами переменные будем обозначать .
Заметим следующие тривиальные факты, которые будут использованы при построении графа:
- Ровно одно выражение из истинно;
- тогда и только тогда, когда существует набор, обращающий каждую скобку в истину.
Построим множества V и E будущего графа следующим образом:
- ;
- .
Будем интерпретировать как цвет (соотвественно, вершина всегда покрашена в цвет ), причем — цвет, обозначающий истину.
- Для всех добавим в V вершины , отвечающие и соответственно, и соединим каждую такую пару ребром;
- Каждую вершину из соединим ребрами со всеми , кроме и .
Этим мы обеспечили выполнение первого условия из приведенных выше, так как теперь ровно одна вершина из окрашена в цвет , а другая — в цвет .
Осталось сделать так, чтобы возможность сделать истинной каждую скобку соответствовала необходимости покрасить хотя бы одну из вершин, соответствующих переменным в ней, в цвет .
- Для этого для каждой скобки вида добавим вершину , соединив ее с соответствующими , а также со всеми , кроме . Тем самым, «не дает» покрасить все три вершины, отвечающие термам в скобке, в «ложный» цвет (напомним, что все цвета, кроме , мы условились называть «ложными»).
Доказательство корректности сведения
Покажем теперь, что такой граф будет (n+1)-раскрашиваемым тогда и только тогда, когда исходная формула принадлежала 3CNFSAT.
- . Из построения ясно, что можно покрасить вершины полученного графа, соответствующие истинным термам набора, обращающего формулу в истину, в цвет c0, а вершины, соответствующие ложным термам, — в соответствующие "ложные" цвета.
- . Построим по раскраске графа набор переменных , в котором истинно тогда и только тогда, когда покрашена в цвет . Этот набор непротиворечив (мы не попытались одну и ту же переменную сделать и истинной, и ложной одновременно). Он также обращает формулу в истинную, так как по постронию в каждой скобке есть хотя бы один истинный терм.