Задача формулируется так: содержит ли данный граф G k – клику, где k – целое число. На вход алгоритма подается цепочка
k (x 1 ,y1) …(x m ,y m), где (x i ,y i ) – ребра m - узельного графа G, задаваемые номерами своих вершин. Задача о клике принадлежит классу NP. Недетерминированная машина Тьюринга “догадывается”, какие k вершин составляют полный подграф, а затем это проверяется, для чего достаточно O(n3) шагов, где n - длина кода задачи о клике.
Теорема.Задача ВКНФ полиномиально сводится к задаче о клике. Поэтому задача о клике NP – полна.
Доказательство. Пусть F = F1…F q - формула в КНФ, где Fi = Ú x i j ,
j=1,…,k i
x i j - литерал. Построим неориентированный граф G = (V, E), узлы кото- рого представляются парами целых чисел [ i, j ] для 1£ i £ q, 1£j£ ki .
Первое число i обозначает член Fi , второе j - литерал, входящий в Fi , т.е. x i j . Таким образом, каждый узел графа естественным образом соответствует вхождению в конкретный сомножитель.
Ребра образуют пары [ i, j ], [ k, s], для которых i ¹ k и x ij ¹ Øx ks .
Присвоение смежным вершинам значения 1 превращает в истину оба члена - Fi и F k .
Число узлов в G, очевидно, меньше длины формулы F, а число ребер не превосходит квадрата числа узлов. Граф G можно закодировать цепочкой, длина которой ограничена полиномом от длины формулы F, а найти такой код можно за время, ограниченное полиномом от длины F.
Покажем, что граф G содержит q-клику тогда и только тогда, когда формула F выполнима.
Достаточность. Пусть формула F выполнима. Тогда на некотором наборе из 0 и 1 формула F обращается в 1. Поскольку на этом наборе каждый сомножитель Fi обращается в 1, то в каждом сомножителе найдется литерал, принимающий значение 1, который обозначим как x imi . Покажем, что множество узлов {[ i, m i ]: 1£ i £ q } образует q –клику.
В противном случае нашлись бы такие i и j , что i ¹ j и вершины
[ i, m i ], [ j, m j ] не смежные. Из приведенного выше построения графа по формуле F следует, что x imi = Øxjmj , что невозможно, так как
x imi = xjmj = 1.
Необходимость. Пусть G содержит q-клику. Первые компоненты узлов, составляющих клику, должны быть различны. Так как в q-клике q узлов, то узлы клики взаимно однозначно соответствуют сомножителям формулы F.
Пусть S1 = {y:x imi = y, где 1£ i £ q }, S2 = {y:x imi = Øy, где 1£ i £ q }, тогда S1 Ç S2 = Æ, ибо в противном случае какие-то узлы [ i, m i ] и
[ j, m j ], для которых x imi = Ø x jmj , соединялись бы ребром. Если положить переменные из S1 равными 1, а из S2 равными 0, то каждая формула Fi примет значение 1, т.е. формула F выполнима.
Пример. На рис. 10.7 представлен граф, построенный по предложенному выше алгоритму на основании формулы F= (y1 + Øy 2)(y2 + Øy3)( y3 + Øy1), где литералы соответственно представлены:
x11 = y1 , x21 = y2 , x31 = y3 ,
x12 = Øy2 , x22 = Øy3 , x32 = Øy1 .
Три сомножителя 2-КНФ F показывают, что граф на рис. 10.7 содержит две 3-клики: {[1,1], [2,1], [3,1]} и {[1,2], [2,2], [3,2]}. Литералы первой клики выполняют F при y1 = y2 = y3 =1, второй - при y1 = y2 = y3 =0.