Московский государственный университет имени М.В.Ломоносова
Опубликован: 15.03.2007 | Доступ: свободный | Студентов: 576 / 7 | Оценка: 5.00 / 4.50 | Длительность: 19:30:00
Специальности: Программист
Лекция 2:

Класс NP: сводимость и полнота

< Лекция 1 || Лекция 2: 12 || Лекция 3 >
Аннотация: В лекции дается определение класса NP, описаны условия принадлежности предиката к указанному классу, рассматривается понятие и доказательство полиномиальной сводимости предикатов (сводимости по Карпу), приводятся примеры NP-полных задач.

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

Термин "недетерминированный" неудачный, но он уже стал стандартным.

Класс NP определен только для предикатов. Говорят, например, что "свойство графа "иметь гамильтонов цикл1Гамильтонов циклзамкнутый путь в графе, проходящий через все вершины графа ровно по одному разу. Граф, в котором есть хотя бы один гамильтонов цикл, называется гамильтоновым. " принадлежит NP".

Мы дадим несколько определений этого класса. Первое использует понятие недетерминированной машины Тьюринга. Устройство недетерминированной машины (НМТ) такое же, как и обычной (детерминированной), за одним исключением. У управляющего устройства НМТ есть особые недетерминированные состояния. Находясь в таком состоянии, НМТ может выполнить одно из нескольких действий. Поэтому у НМТ вместо функции переходов есть таблица, в которой для каждой пары (состояние управляющего устройства, текущий символ на ленте) вместо единственно возможного варианта действий (изменение состояния управляющего устройства, запись символа на ленту, сдвиг головки) указан набор возможных действий. Обычные, детерминированные, состояния становятся частным случаем, когда такой набор состоит ровно из одного варианта действий.

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

Определение 2.1. Предикат L принадлежит классу NP, если существуют НМТ M и полином p(n) такие, что

L(x)=1 \Longrightarrow существует путь вычисления, дающий ответ "да" за время, не превосходящее p(|x|) ;

L(x)=0 \Longrightarrow (1 вариант определения ) нет указанного выше пути; (2 вариант определения ) на любом пути вычисления ответа "да" не получается.

Замечание 2.1. Приведенные варианты определения эквивалентны. Чтобы исключить возможность ответов "да" на длинных путях вычисления, достаточно взять НМТ, имитирующую исходную НМТ и подсчитывающую количество сделанных исходной НМТ шагов. Когда число шагов превышает p(|x|), машина останавливается.

Замечание 2.2. В предыдущем рассуждении допущена одна тонкая ошибка. В определении ничего не сказано о полиноме p(n), кроме факта его существования. Если коэффициенты полинома невычислимы, могут возникнуть проблемы с указанным выше способом сведения одного определения к другому (нужно вычислить значение полинома). Чтобы в дальнейшем избегать этой сложности, будем считать, что полином имеет целые коэффициенты.

Замечание 2.3. Непосредственно из определения 2.1 следует, что \P\subseteq\NP. Является ли это включение строгим? Довольно интенсивные, хотя и безуспешные, попытки ответить на этот вопрос продолжаются уже почти 30 лет. Недавно С.Смейл включил проблему \P\qne\NP в число трех важнейших математических проблем следующего столетия (две другие — гипотеза Римана и гипотеза Пуанкаре).

Второе определение класса NP представляется более естественным. Оно использует понятие полиномиально вычислимого предиката от двух переменных. Определение такого предиката получается комбинацией определений 1.2 и 1.3. Под размером входа для предиката R(x,y) можно понимать также или |x|+|y|, или \max(|x|,|y|) — получатся эквивалентные определения.

Определение 2.2. Предикат L принадлежит классу NP, если он представим в форме L(x)=\exists\, y\:\big( (|y|<q(|x|))\:\wedge\: R(x,y)\big), где q(\cdot)полином, а R(\cdot,\cdot)\in\P.

Пример 2.1. Пусть R(x,y)= " y есть гамильтонов цикл в графе x ". Более точно нужно сказать так: " x есть двоичный код некоторого графа, а y — код гамильтонова цикла в этом графе (используем такое кодирование, при котором код цикла не длиннее кода графа), такие что \dots ". Возьмем q(n)=n. Тогда L(x) будет в точности означать, что в графе найдется гамильтонов цикл.

Теорема 2.1. Определения 2.1 и 2.2 эквивалентны.

Опр. 2.1 \Longrightarrow опр. 2.2. Пусть есть НМТ M и полином p(n) из первого определения. Рассмотрим предикат R(x,y)= " y есть протокол работы M на возможном пути вычисления со входом x дающего ответ "да" за время, не превосходящее p(|x|)." Длина такого протокола при разумном кодировании линейно зависит от времени вычисления (если использовать в качестве протокола описанную в доказательстве теоремы 1.2 таблицу вычисления, то квадратично), поэтому в качестве q(n) для второго определения можно взять p(n) ( p^2(n) ), умноженный на подходящую константу.

Чтобы закончить доказательство в этом случае, осталось проверить, что R(\cdot,\cdot)\in\P. Это почти очевидно. Мы должны проверить протокол некоторой НМТ, работающей за полиномиальное время. Это займет нас примерно на то же время (совершенно незачем смотреть на одну ячейку экспоненциально долго).

Опр. 2.2 \Longrightarrow опр. 2.1. Пусть есть R,q из определения 2.2. Построим M для определения 2.1. Она работает в два этапа.

Вначале M недетерминированно пишет y (который в силу определения 2.2 существует для любого слова x, для которого L(x)=1 ). Говорят еще, что M "отгадывает" ("guesses") y. Более точно это означает, что M находит правый конец входного слова, сдвигается еще на одну ячейку вправо, записывает в нее \#, еще раз сдвигается вправо и переходит в такое недетерминированное состояние, в котором она пишет один из символов на ленту, сдвигается вправо и выбирает между сохранением этого состояния и переходом в (уже детерминированное) состояние начала следующего этапа.

После завершения первого этапа на ленте, помимо входного слова x, записано еще и слово y. Теперь M осталось вычислить значение предиката R(x,y) за полиномиальное время. Это можно сделать, используя детерминированный алгоритм, существующий в силу определения 2.2.

Еще одно определение класса NP есть не более чем вариант определения 2.2, но именно в такой форме его удобно обобщать и получать определения других сложностных классов.

Определение 2.3. Имеются два персонажа: король A rthur (Артур), умственные способности которого полиномиально ограничены, и волшебник M erlin (Мерлин), который интеллектуально всемогущ и знает правильные ответы на все вопросы. Король A интересуется некоторым свойством L(x) (например, "есть ли у графа гамильтонов цикл"), а волшебник M хочет, чтобы король признал наличие этого свойства (ну, скажем, граф стремится к званию гамильтонова и дал M взятку). A не доверяет своему волшебнику, зная его корыстолюбие, и хочет иметь возможность самостоятельно проверить предложенный M ответ.

Поэтому они действуют следующим образом. A и M оба смотрят на слово x, после чего M сообщает некоторую информацию (слово y ), которая должна убедить A, что L(x)=1. Используя эту информацию, A проверяет убедительность аргументов M некоторым полиномиальным способом.

В этих терминах определение класса NP можно сформулировать так: свойство L принадлежит классу NP, если у Артура есть полиномиальный способ проверять убедительность доводов Мерлина, причем:

L(x)=1 \Longrightarrow у M есть способ убедить A в этом;

L(x)=0 \Longrightarrow как бы M ни изощрялся, A не поверит, что L(x)=1.

Эквивалентность этого определения определению 2.2 не вызывает сомнений. Действительно, из-за полиномиальной ограниченности короля A, сообщение волшебника M должно иметь полиномиальный размер. В остальном различия между определениями чисто внешние.

< Лекция 1 || Лекция 2: 12 || Лекция 3 >
Михаил Адигеев
Михаил Адигеев
Россия
Олег Корсак
Олег Корсак
Латвия, Рига