logo
tsvpis

5.3 Сводимость. Np-полнота.

Будем говорить, что задача L1, полиномиально трансформируема к задаче L2, если существует трансформатор Т, который преобразует входную информацию (входное слово) ω1 для задачи L1 во входное слово ω2 для задачи L2 причем ответы при решении

этих задач (задачи L1 с входной информацией ω1 и задачи L2 с информацией ω2) будут одинаковые ( в случае, когда ответом задачи может являться «ДА» или «Нет») (смотри рис. 5.2).

Рисунок 5.2

Пояснение к рисунку 5.2 Пусть МТ М1 решает задачу L1, а МТ М2 решает задачу L2. Каждая машина дает ответ да/нет. Т – трансформатор.

Если же ответ выглядит более сложным образом, то нам потребуется не только входной трансформатор, но и выходной трансформатор Т1(см. рисунок 5.3)

Рисунок 5.3

Пояснения к рисунку 5.3:

q1q2 – выходная информация для М1 и М2

Т1 – трансформирует q2 в q1

Результаты прохождения по обоим путям (стрелки сверху и снизу) одинаковы. Приэтом время работы М2 полиномиально эквивалентно времени работы машины М1, и оба трансформатора Т и Т1 работают полиномиальное время.

Если все эта условия выполняются, то мы говорим, что задача L1, полиномиально трансформируема к задаче L2.

Определение. Задача L0 из класса NP называется NP-полной задачей, если любая другая задача L из класса NP может быть к этой задаче L0 полиномиально трансформируема (сводима).

Фактически NP- полные задачи - это самые сложные задачи в классе NP, то есть как только мы научимся решать за полиномиальное время Т(n) какую-либо NP-полную задачу, мы, тем самым, научимся решать за время Р(Т(n)) любую задачу из класса NP.

Комментарий. Трансформаторы Т и Т1 есть некоторые детерминированные машины Тьюринга, которые строятся индивидуально для каждых задач L1 и L2.

Возникает вопрос: существуют ля вообще NP-полные задачи? Ответ на данный вопрос положительный.

Например, NP полными задачами являются следующие задачи:

1. Выполнимость (выполнима ли данная булева формула), т.е. существует ли

некоторый набор переменных, такой, что формула на этом наборе принимает истинное значение.

2. Задача о клике (найдется ли в данном неориентированном графе G клика размера к, т.е. подграф размера к, каждая вершина которого связана с любой другой).

3. Задача о гамильтонове контуре (найдется ли в данном графе G гамильтонов цикл).

4. Задача об узельном покрытии (найдется ли в данном графе G узельное покрытие размера к, т.е. такие к вершин, что любое ребро графа инцидентно какой-либо вершине из подмножества к (т.е. входит или выходит из какой-либо вершины узельного покрытия)).

5. Задача о разбиении (можно ли разбить некоторое множество М натуральных чисел на два подмножества так, чтобы суммы этих подмножеств были одинаковы).

Подобного рода NP-полных задач известно несколько сотен. Научившись быстро решать хоть одну из них (то есть за полиномиальное время), мы и любую из них сможем решить тоже за полиномиальное время. Если же, напротив, сможем доказать, что некоторая NP-полная задача не решаема за полиномиальное время ни на одной ДМТ, мы тем самым докажем, что и другие NP-полные задачи не могут быть решены за полиномиальное время.

Теорема 5.3 Задача выполнимости булевой формулы NP-полна.

Доказательство.

Для начала докажем, что задача выполнимости лежит в классе NP. Для этого достаточно предъявить некоторую НДМТ, которая решит эту задачу за полиномиальное время. Это нетрудно сделать, т.к. для решения данной задачи необходимо один раз правильно угадать набор переменных и проверить, что на этом наборе переменных формула принимает значение, равное 1. Для формулы длины n такую проверку можно сделать за сn2 действий.

Докажем теперь, что любая задача L, из класса NP может быть полиномиально сведена к задаче выполнимости.

Итак, мы имеем некоторую НДМT, которая за полиномиальное время Т решает нашу задачу L.

Пусть ω - входная информация машины М(входное слово для нашей машины).

|ω|= n - объем входной информации.

Если машина М допускает слово ω, то найдется некоторая последовательность мгновенных описаний:

Q0→Q1→…→Qend,

причем

Q0 -мгновенное описание следующего вида:

- в ячейках ленты записано слово ω;

- обозревается первая ячейка;

- мы находимся в состоянии q0.

Qend - следующего вида:

- в ячейках записано все что угодно (выходная информация);

- обозревается любая ячейка;

- мы находимся в состоянии qend.

Длина этой последовательности мгновенных описаний не превосходит Р(n), где Р(n) - некоторый многочлен.

Основная идея доказательства Теоремы 5.3 состоит в том, что мы будем строить булеву формулу Z, которая «моделирует» работу машины М на входном слове ω, т.е. моделирует последовательность мгновенных описаний (5.1). А именно, Z принимает значение 1 тогда и только тогда, когда присваивание значений 0 или 1 переменным в этой формуле соответствует допускаемой последовательности мгновенных описаний (5.1).

Переменные в нашей формуле Z будут трех видов:

1)C(i, j, t) =1 тогда и только тогда, когда i-ая клетка ленты содержит символ xj в момент времени t;

2)S(k t) =1 тогда и только тогда, когда машина М в момент времени t находится в состоянии qk

3)H(i, t) = l, когда головка М в момент времени t находится над i-той ячейкой ленты.

Таким образом, значения переменной С отвечают за содержимое ленты, S — за текущее состояние, Н - за положение головки. Т.е., зная значения всех переменных С, S, Н, мы имеем полную информацию о последовательности мгновенных описаний машины М.

Заметим, что 1≤i≤P(n), т.к. за время работы P(n) (то есть за P(n) шагов) мы доберемся не далее, чем до P(n)-той ячейки.

0≤t≤P(n) 1≤j≤C 1≤x≤C, где C некоторая константа.

C=|T|+|Q| -зависит только от машины;

|T| - количество символов алфавита данной машины;

|Q| - количество состояний.

Таким образом нам потребуется CP(2)(n) переменных первого типа;

CP(n) переменных второго типа;

P(2) переменных третьего типа.

Итого нам потребуется

CP(2)(n)+ CP(n)+ P(2)=P2(n)×Const переменных.

Для каждой переменной (при двоичной кодировке) потребуется не более чем

log2P2(n) ×Const≤P(n)

символов на ленте.

Для дальнейшего доказательства Теоремы 5.3 нам потребуется Лемма 5.4

Лемма 5.4 Для любого набора переменных х1,..,хк существует формула U(х1,..,хк), которая равна 1 тогда и только тогда, когда равно одна из переменных х1,..,хк принимает значение 1, а все остальные - нули.

Доказательство. Предъявим формулу:

U(х1,..,хк)=(x1˅…˅ хк)&(&i<j(˺xi˅˺xj)) (5.2)

Формула (5.2) представляет собой набор КНФ, поэтому она равна 1, когда все ее элементарные сомножители равны 1.

x1˅…˅ хк=1 тогда и только тогда, когда хоть одна из переменных хi равна 1.

˺xi˅˺xj=1 тогда и только тогда, когда хi и xj одновременно в 1 не обращаются.

&i<j(˺xi˅˺xj)=1 т.к. мы перебираем все вариант по i, j, то получаем, что никакие две переменные одновременно в 1 не обращаются.

Замети, что длина формулы (5.2) порядка k2.

Лемма доказана.

Вернемся к доказательству теоремы.

Искомую формулу Z будем искать в виде конъюнкции:

Z=A&B&C&D&E&F&G, где

А: отвечает за то, что в каждый момент времени головка обозревает ровно одну ячейку.

В: отвечает за то, что в каждый момент времени в каждой ячейке находится ровно один символ.

С: отвечает за то, что в каждый момент времени машина находится ровно в одном состоянии.

D: отвечает за то, что при переходе к следующему шагу машина меняет

содержимое не более одной ячейки.

Е: отвечает за то, что все изменения на каждом шаге происходят в строгом

соответствии с функцией перехода δ.

F: отвечает за то, что в момент времени t = 0 мы находимся в состоянии q0 и

на входе имеем слово ω, обозреваем первую ячейку.

G: отвечает за то, что в момент времени Р(n) мы находимся в состоянии qend.

Для удобства будем считать, что машина М всякий раз работает ровно Р(n) шагов и каждое мгновение описание содержит Р(n) ячеек.

Аi = U(H(l,t), H(2,t), ...,H(P(n),t))

Ai = 1 тогда и только тогда, когда ровно одна из переменных H(k,t) = 1, т.е. в момент времени t мы обозреваем ровно одну ячейку (т.к. берем конъюнкцию по всем t). Здесь Р(n) — длина ленты.

Вit = U(C(i, 1, t), C(i, 2, t),...,C(i, const, t))

Сt = U(S(1, t),...,S(const, t))

Здесь P(n) - время работы машины.

Знак «≡» обозначает совпадение значений двух переменных, то есть

(x≡y) = (x&y)v(˺x&˺y).

Если H(i, t) = 1, т.е. мы находимся в i-той ячейке, то с этой ячейкой мы

можем делать все что угодно.

Если H(i,t) = 0, т.е. головка находится на другой ячейке, то должно выполняться C(i,j,t+1)≡C(i,j,t +1), т.е. содержимое 1-той ячейки при переходе от момента времени t к моменту времени t+1 не меняется.

Ei,j,k,t=˺C(i,j,t)˅˺H(i,t)˅S(k,t)˅(˅l(C(i,jl,t+1)&S(kl,t+1)&H(il,t+1))),

где l пробегает все возможные разветвления многозначной функции переходов δ.

qkl новое состояние, в соответствии с многозначной функцией переходов δ;

xjl новый символ, который мы напишем в i-той ячейке;

il=i+1,i,i-1 – номер новой обозреваемой ячейки;

1≤l≤L, где L – максимально возможное число ветвлений нашего алгоритма.

Комментарий.

Ei,j,k,t будет равно й в том случае, если C(i,j,t)=1, Н(i,t)=1,S(k,t)=1(т.е. начальный фрагмент Е равен 0).

C(i,j,t)=1, Н(i,t)=1,S(k,t)=1 означает, что в момент времени t мы видим символ xj в i-той ячейке ленты и находимся в состоянии qk, то есть мы должны работать в строгом соответствии с функцией переходов δ.

Если же хоть одно из этих условий не выполняется то мы можем делать что угодно.

xj1…xjn – символы входного слова ω

Во всех остальных ячейках находится пустой символ b.

Построенная нами формула Z моделирует работу исходной НДМT М: она принимает значение 1 тогда и только тогда, когда мы прошли от начального состояния до конечного в соответствии с работой машины М и функцией переходов.

Осталось убедиться, что длина формулы Z тоже полином, и, следовательно, её выполнимость может быть проверена за полиномиальное время (функция длины n может быть проверена за время n2). Длина формулы Z складывается из длин ее слагаемых:

|A|=p(n)∙|Ai|=p(n)∙p2(n)∙p(n)=p4(n)

кол-во

переменных в Ai

кол-во Ai

длина записи

имени переменной

Каждый конъюнкт Ai, представляет собой функцию U и зависит от Р(n) символов. Длина функции U, зависящей от Р(п) символов составляет Р2(n).

Оценим длину формулы В:

|B|=p(n)∙ p(n)|Bit|=p2(n)∙ p2(n)∙p(n)=p5(n)

кол-во i

кол-во t

Длина имени переменной

кол-во Bit

|Bit|=P(n)∙P(n)=P2(n)

Аналогичным образом оцениваются длины всех остальных формул.

Складывая длины всех этих формул, получаем:

|Z|≤const∙p5 (n) .

Как мы знаем, выполнимость формулы длины k на НДМT может быть проверена за время, не превосходящее k2.

Таким образом, мы доказали, что наша исходная задача из класса NP полиномиально трансформировалась к задаче выполнимости, решаемой за полиномиальное время.

Теорема доказана.

В Теореме 5.3 мы по НДМТ М и входной информации ω для нее построили формулу Z, которая моделирует работу этой машины, т.е. принимает значение 1 тогда и только тогда, когда исходная НДМТ М закончит свою работу (стартовав со слова ω). При этом выполнимость формулы Z проверяется за время работы, которое полиномиально эквиваентно Р(n) - времени работы М.

Осталось заметить, что входной трансформатор, который преобразует матрицу M+ ω в формулу Z, работает полиномиальное время.

Следствие 5.5 Задача выполнимости КНФ NP полна.

Доказательство. Построенная в Теореме 5.3 формула Z уже почти находится в КНФ, а именно:

А – уже в КНФ, т.к. U()- уже в КНФ, В - уже в КНФ, С –уже в КНФ, D - почти в КНФ, Е - почти в КНФ, F - уже в КНФ.

«Почти в КНФ» — означает, что формулы D и Е есть конъюнкции большой длины от формул маленькой длины (длина ≤const), причем формулы маленькой длины мы можем спокойно привести в КНФ, при этом длина формулы вместо k станет не больше, чем k∙2k (по таблице истинности исходной формулы находим 0, их не больше 2k штук; потом составляем СКНФ — в ней будет не более 2k конъюнктов, длина каждого конъюнкта не более к , где к— количество переменных).

Следовательно, при преобразовании форму D и Е в КНФ их длина увеличивается не более, чемв const раз.

Для формулы D эта const = 3, для Е const = Зm, где m — максимально возможное количество ветвлений в формуле переходов δ.

Замечание. Таким образом, формулу Z мы можем (увеличив ее длину не более, чем в const раз) заменить на равносильную ей формулу Z1, которая находится в КНФ.

Следствие доказано.

Теорема 5.6 Задача о клике—NP-полная.

Доказательство. Сначала проверим, что задача о клике принадлежит классу NP. В самом деле, нетрудно построить НДМТ, которая сначала угадывает за один проход нашу клику размера к (подграф из к вершин, в котором каждая вершина связана с каждой), а затем за время к проверяет, что каждая вершина соединена с каждой.

Докажем теперь, что любая задача S из класса NP может быть полиномиально трансформируема к задаче о клике. Для этого сначала трансформируем задачу S к задаче выполнимости некоторой формулы Z, находящейся в конъюнктивной нормальной форме(см. Следствие 3.5), а уже задачу выполнимости формулы Z сведем к задаче о клике.

Итак, пусть задача S сведена к задаче выполнимости формулы Z, причем

Z=

представляет собой конъюнкцию дизъюнкций, где — литералы, то есть переменные или отрицания переменных. Наша задача — по формуле Z построить граф G, такой, что в графе G найдется клика размера к тогда и только тогда, когда формула Z выполнима.

Граф G =(V, Е), где V - множество вершин графа, Е - множество ребер.

Вершины индексируются парами (i, j), где 1 ≤i≤k, 1≤j ≤ ki

Строим граф G следующим образом: каждой вершине соответствует вхождение переменной в формулу Z. Две вершины соединены ребром (|i1,j1|)(|i2, j2|)∈E тогда и только тогда, когда соответствующие литералы лежат в разных конъюнкциях и один литерал не совпадает с отрицанием другого.

Пример. Z = (x1˅˺x2)&(х˅˺x3)&( x3 ˅˺x1).

Решение. Литералов 6 - поэтому в графе будет 6 вершин.

Вершинам соответствуют литералы:

[1,1] - x1 [2, 1] - х2 [3,1] - x3

[1,2] - ˺ х2 [2,2] - ˺x3 [3,2] - ˺x1

Соединим вершины, руководствуясь вышеизложенным принципом:

Рисунок 5.4

[1,1] и [ 1,2] не соединяем потому, что они входят в один конъюнкт.

[1, 1] и [3, 2] не соединяем потому, что хоть они и лежат в разных . конъюнктах, но один является отрицанием другого и т.д.

Заметим, что формула Z выполнима, так как в построенном графе G найдется клика размером 3 (т.к. в Z было 3 конъюнкта). При этом Z = 1 когда х1= х2= х3= 0

либо х1= х2= х3= 1.

Заметим, что первому набору значений переменных соответствует 3-клика [1, 1]»[2,1], [3,1] , а второму набору 3-клика [1,2], [2,2], [3,2] .

Докажем теперь, что в графе G найдется клика размера k тогда и только тогда, когда формула Z выполнима.

В самом деле, если Z на некотором наборе переменных выполнима, то в каждом конъюнкте хотя бы один литерал обращается в 1. Пусть это будут литералы x1,i1…xk,ik

Тогда соответствующие им к вершине графа G образуют клику, так как вершины

( ) соединены друг с другом, так как l≠p и xi,l≠ xi,p так как они оба обращаются в 1.

Обратно, если в построенном нами графе G нашлась k-клика, то:

1)все эти к вершин лежат в разных конъюнктах (так как вершины из одного

конъюнкта ребрами не соединяются);

2) мы можем подобрать такие значения переменных, что хотя бы один

литерал в каждом конъюнкте обращается в единицу.

В самом деле, имеем клику из k вершин (все вершины из разных конъюнктов)

Если литерал xp,ip есть некоторая переменная, то эту переменную полагаем равной единице. Если же он есть отрицание некоторой переменной, то эту переменную полагаем равной нулю. Остальные переменные (не входящие в этот конъюнкт) могут принимать любые значения. Тогда в первом конъюнкте литерал x1,i2 обращается в единицу, во втором конъюнкте x2,i2 =1, то есть наша формула Z=l.

Таким образом, мы доказали, что функция Z выполняется тогда и только тогда, и только когда в графе G найдется клика размера k.

Теорема доказана.

Теорема 5.7 Задача об узельном покрытии NP-полна. (Узельное покрытие графа G - такой набор вершин V0V, что любое ребро графа G инцидентно какой-либо вершине из V0).

Доказательство. Докажем сначала, что задача об узельном покрытии принадлежит классу NP. Для этого построим НДМТ, которая угадывает узельное покрытие V0 за время k, а потом за полиномиальное время n∙k проверяет, что каждое ребро графа инцидентно какой-либо вершине из V0 (то есть каждое ребро проверяется на смежность с каждой вершиной).

Докажем теперь, что любая задача Р из класса NP может быть полиномиально трансформируема к задаче об узельном покрытии.

Вспомним (см. Теорему 5.6), что любая задача Т из класса NP может быть полиномиально трансформируема к задаче о клике. Осталось только лишь трансформировать задачу о клике к задаче об узельном покрытии.

Пусть нам дан граф G-(V, Е).

Рассмотрим дополнительный граф =(V,). То есть ребро (u,v)∈ тогда и только тогда, когда (u,v)E (то есть как бы инвертируем граф G по его ребрам. Тогда множество S вершин графа G образует клику в графе G тогда и только тогда, когда его дополнение будет узельным покрытием графа

Иллюстрация сказанного на рисунке 5.5:

Клика размера 3 -1,2.4 в G => Узельное покрытие 3.5 в G

Рисунок 5.5

В самом деле, если S - клика в G, то V\S - узельное покрытие в . Возьмем произвольное ребро из (u,v)∈ Е.

Нам необходимо доказать, что либо u, либо v попадают в узельное покрытие V\S. Еcли это не так, то есть u и v ∈ S, тогда мы получим противоречие (так как S - клика в графе G, то с одной стороны, (u,v)∈E, и с другой стороны (u,v)∈).

Докажем теперь противное: если V\S - узельное покрытие в, то S- клика в G.

Возьмем произвольные u и v из S. Надо доказать, что (u,v)∈ Е. Если это не так, то тогда по построению ребро (u,v)∈, но u и v попадают в S, и поэтому не лежат в V\S, следовательно, это ребро не инцидентно никакой из вершин V \ S. Получаем противоречие, которое завершает доказательство Теоремы 5.7.

Теорема доказана.

Итак, мы выявили много NP-полных задач и все они друг другу полиноминально эквивалентны, поэтому как только мы научимся любую из них решать за полиномиальное время, это будет означать, что мы можем любую задачу из класса NP решить за полиномиальное время, следовательно, класс NP совпадает с классом Р.

Если же, напротив, для какой-то из них нам удастся доказать, что какая-либо из NP-полных задач не решается за полиномиальное время на обычной НДМТ, мы, тем самым, докажем, что любая другая задача не может быть решена за полиномиальное время.

Грубо говоря, все NP- полные задачи имеют приблизительно одинаковую сложность.

Домашнее задание №7.

По заданной в КНФ Z построить граф G и найти в нем возможные «клики».

Z=(x1˅˺x2˅˺x4)&( ˺x2˅˺x4)&( x3˅˺x4)&( ˺x1˅˺x4)