
- •Введение
- •1. Методы решения комбинаторных задач
- •1.1. Понятие об оценке эффективности алгоритмов и программ
- •1.2. Понятие комбинаторной задачи
- •1.3. Примеры комбинаторных задач
- •1.4. Организация исчерпывающего перебора
- •1.5. Сокращение перебора
- •1.6. Метод ветвей и границ
- •1.7. Метод динамического программирования
- •1.8. Метод a-b-отсечений для позиционных игр с полной информацией
- •1.9. Приближенные и эвристические методы решения задач комбинаторной оптимизации
- •2. Элементы теории сложности вычислений
- •2.1. Основные понятия и проблемы теории сложности вычислений
- •2.2. Полиномиальная сводимость задач
- •2.3. Недетерминированные машины Тьюринга и np-задачи
- •2.5. Теорема Кука
- •2.6. Примеры np-полных задач
- •2.6. Псевдополиномиальные задачи
- •2.7. Практическое значение результатов теории сложности вычислений
- •Литература
- •Дроздов Сергей Николаевич Комбинаторные задачи и элементы теории вычислительной сложности
2.5. Теорема Кука
Эта теорема (S.A.Cook, 1971г.) – тот самый первый шаг, о котором говорилось выше: доказательство NP-полноты одной конкретной задачи.
Как вообще можно доказать сводимость всех NP-задач к данной задаче? Можно воспользоваться определением NP-задачи: для нее имеется НМТ, принимающая индивидуальные задачи за полиномиальное время. А каждую НМТ можно описать, закодировав ее правила перехода. Тогда любую NP-задачу можно сформулировать следующим образом. Дано описание НМТ для данной массовой задачи Z и дано описание индивидуальной задачи z Î Z в виде записи с длиной l на ленте этой НМТ. Верно ли, что существует допустимое вычисление этой НМТ при этом исходном состоянии ленты, которое не более, чем за P(l) тактов приводит в состояние qy? Заметьте, что специфика конкретной задачи Z здесь исчезла, или вернее – она закодирована в правилах НМТ. Назовем такую «универсальную» NP-задачу Z0.
Теперь нам нужно сделать следующее. Нужно выбрать некоторую задачу распознавания Z1 и предложить алгоритм, который за полиномиальное (относительно l) время будет переводить описание индивидуальной задачи z0 Î Z0 в описание эквивалентной индивидуальной задачи z1 Î Z1. Тогда ясно, что задача Z1 является NP-трудной, поскольку мы фактически умеем полиномиально сводить к ней любую NP-задачу.
Рассмотрим задачу о выполнимости КНФ.
Даны переменные X = {xi, i=1...N} и конъюнктивная нормальная форма (КНФ) G(X). Существует ли такой план X, для которого G(X) = 1?
Теорема Кука. Задача о выполнимости КНФ NP-полна.
Приведем эскиз доказательства (т.е. не будем добиваться полной строгости рассуждений, но покажем их общий ход).
Пусть n – число состояний НМТ, m – число букв ленточного алфавита, l – длина описания некоторой индивидуальной NP-задачи z Î Z на ленте НМТ, P(l) – полином из определения NP-задачи (т.е. это верхняя оценка числа тактов, за которые НМТ принимает любую индивидуальную задачу z Î Z, имеющую длину l и ответ «Да».) Введем три набора булевых переменных, которые в совокупности описывают функционирование заданной НМТ.
1) {Qik, 0£i£P(l), 0£k£n}; Qik = 1, если на такте i НМТ находится в состоянии k.
2) {Hij, 0£i£P(l), -P(l)£j£P(l)}; Hij = 1, если на такте i текущей ячейкой ленты является ячейка j.
3) {Aijr, 0£i£P(l), -P(l)£j£P(l), 0£r£m}; Aijr = 1, если на такте i в ячейке j записана буква ar.
Любой набор значений переменных Qik, Hij, Aijr описывает некоторое вычисление НМТ, т.е. одну ветвь дерева вычислений НМТ, включая ее начальное состояние и все переходы. Но не любой набор значений описывает корректное поведение машины, некоторые наборы могут описывать такую чушь, как одновременное пребывание в нескольких состояниях, несколько букв в одной ячейке, неправильные переходы и т.п. Чтобы выделить допустимые вычисления НМТ, следует наложить еще некоторые условия на значения переменных. Таковые условия можно объединить в 6 групп. Опишем их сначала словесно.
1. На любом такте работы НМТ находится ровно в одном состоянии.
2. На любом такте работы головка НМТ находится ровно в одной позиции ленты.
3. На любом такте работы каждая ячейка ленты содержит ровно одну букву ленточного алфавита.
4. На такте i = 0 НМТ находится в состоянии q0, головка на ячейке 1, на ленте записано описание решаемой индивидуальной задачи.
5. Не позднее, чем через P(l) тактов НМТ приходит в состояние qy (принимает задачу).
6. Все изменения конфигурации НМТ между тактами i и i+1 происходят в соответствии с правилами перехода данной НМТ.
Такое подробное изложение довольно очевидных вещей нужно для того, чтобы от словесных условий перейти к формально заданным.
Для формализации условий корректности вполне подходит аппарат КНФ. Выпишем соответствующие КНФ.
1. (Qi0 Ú Qi1 Ú ... Ú Qin) & (~Qi0 Ú ~Qi1) & (~Qi0 Ú ~Qi2) & ... & (~Qi,n-1 Ú ~Qi,n), 0£i£P(l) (т.е. хотя бы одна Qij истинна, но не две одновременно!).
2. Аналогичная конструкция для переменных Hij.
3. Для Aijr так же по смыслу, только индексов больше: (Aij0 Ú Aij1 Ú ... Ú Aijm) & (~Aij0 Ú ~Aij1) & ... & (~Ai,j,m-1 Ú ~Ai,j,m), 0£i£P(l), -P(l)£j£P(l).
4. Q00 & H01 & A0,1,v1 & A0,1,v2 & ... & A0,l,vl & A0,l+1,0.
Здесь av1, av2, ... avl - входное слово на ленте (описание решаемой задачи).
5. QP(l),1 (полагая, что принимающее состояние qy пронумеровано как q1).
6. Это условие следует разбить на два:
6.1. Если на такте i головка не находится в позиции j, то буква в этой ячейке не изменится при переходе к такту i+1.
~Aijr Ú Hij Ú Ai+1,j,r , 0£i£P(l), -P(l)£j£P(l), 0£r£m.
Эта дизъюнкция кажется несколько загадочной, однако заметим, что ее отрицание означало бы следующее: в ячейке j была буква ar, головки там не было, но буква изменилась! Ясно, что этого не может быть, поэтому записанная дизъюнкция истинна.
6.2. Если на такте i НМТ была в состоянии qk, головка находилась в позиции j и там была записана буква ar, то на такте i+1 НМТ должна оказаться в одной из тех конфигураций (q'k, j', a'r), которые получаются применением одного из правил перехода этой НМТ с подходящей левой частью:
~Qik Ú ~Hij Ú ~Aijr Ú (Hi+1,j'Qi+1,k'Ai+1,j,r' Ú Hi+1,j''Qi+1,k''Ai+1,j,r'' Ú …)
Здесь 0£i£P(l), -P(l)£j£P(l), 0£k£n, 0£r£m.
Индексы с разным числом штрихов относятся к правым частям различных правил перехода с одной и той же левой частью. Выражение в скобках не находится в конъюнктивной нормальной форме. В ходе приведения этого выражения к КНФ его длина может сильно возрасти, однако можно показать, что длина выражения остается ограниченной некоторым полиномом от l.
Только в условии 6.2 фигурируют правила перехода конкретной НМТ.
Наконец, соединим все выписанные выражения из всех 6 групп с помощью операций конъюнкции. Результатом будет КНФ G(Q, H, A), зависящая как от рассматриваемой массовой задачи Z, так и от ее индивидуального представителя z.
Предположим, эта КНФ выполнима, т.е. существует набор Qik, Hij, Aijr, выполняющий все 6 условий. Но по смыслу условий это означает, что существует принимающее вычисление НМТ, т.е. исходная задача распознавания z Î Z имеет ответ «Да». И наоборот, если существует принимающее вычисление, то его ход можно закодировать набором переменных Qik, Hij, Aijr, которые по построению будут выполнять КНФ G(Q, H, A). Тем самым мы доказали эквивалентность задачи z и задачи о выполнимости КНФ G(Q, H, A). Таким образом, задача Z была сведена к задачи о выполнимости (сокращенно – задаче ВЫП). Было ли это сведение полиномиальным по времени относительно l? Да, ибо все сведение задачи заключалось просто в выписывании логических выражений, длина и количество которых ограничены полиномом от l.
Поскольку Z – произвольная задача из NP, то доказана полиномиальная сводимость любой NP-задачи к задаче ВЫП. В то же время задача ВЫП, очевидно, проверяема за полиномиальное время (на самом деле даже за линейное: для проверки нужно просто подставить значения переменных в КНФ и убедиться, что все элементарные дизъюнкции истинны), а потому эта задача принадлежит NP. Значит, задача ВЫП является NP-полной, что и требовалось доказать.