NP задачи

Определим теперь класс NP задач распознавания, т.е. имеющих ответ «ДА» или «НЕТ». Для того, чтобы задача I содержалась в классе NP требуется , чтобы если I

имеет ответ “ДА”, существовало бы слово с(I) длины, ограниченной полиномом от размера I, такое, что задача с начальными данными с(I), I принадлежит Р. Слово с(I) называется удостоверением или догадкой для задачи I.

Рассмотрим примеры.

1.  Пусть дана задача проверки гамильтоновости бинарного отношения на множестве М={1,2,…,n}. Если R – гамильтоново отношение, то удостоверением этого будет последовательность элементов М: с(R)=i1i2…in. Имея пару с(R), R, можно проверить соотношение (*) и убедиться является ли R – гамильтоновым отношением. Следовательно, задача проверки гамильтоновости бинарного отношения лежит в классе NP.

2. Пусть дана задача проверки выполнимости формул КНФ.

Если f(x1,…,xn) – выполнимая функция, то удостоверением этого будет соответствующий набор  . Имея пару ,  f(x1,…,xn), легко убедиться,  что f(x1,…,xn) выполнима.

Формализуем эти идеи.

Класс NP определяется через понятие недетерминированного алгоритма. Введем понятие

недетерминированной машины Тьюринга.

Схема недетерминированной машины Тьюринга:

……

-3

-2

-1

0

1

2

n

*

x1

x2

………

xn

УМ

 

q1

 

 

Отличие недетерминированной машины Тьюринга от обычной заключается в том,

что недетерминированная машина (НТ) имеет дополнительно угадывающий модуль (УМ), который может только записывать на ленту слова из внешнего алфавита. Поскольку речь идет о задачах распознавания, то удобно считать, что машина имеет два заключительных состояния qY и qN, соответствующие ответам «ДА» и «НЕТ» соответственно. Работа машины имеет две стадии:

1-я стадия – угадывание. В начальный момент на ленте записано слово x=x1…xn – код индивидуальной задачи I, начиная с ячейки 1. В ячейке 0 записан знак раздела *. Угадывающий модуль просматривает ячейку –1. Затем УМ пишет произвольное слово с(х) по одной букве за такт в каждой ячейке с номерами – -1,-2,-3,… . В итоге 1-ой стадии конфигурацией машины будет с(х)*q1x.

2-ая стадия – решение. На этой стадии недетерминированная машина работает как  обычная машина Тьюринга с конфигурацией  с(х)*q1x. Если машина через конечное число шагов приходит в состояние qY, то говорим, что она принимает конфигурацию с(х)*q1x.

Будем говорить, что недетерминированная машина принимает x, если существует слово с(х), такое что конфигурация с(х)*q1x принимается.

Определим время работы недетерминированной машины  (если х принимается) где t1(x) – время работы на стадии 1, т.е., по определению,  ;

 t2(x) — время работы на стадии 2, т.е., по определению, , где tT – время работы обычной машины Тьюринга.

Определим 

Недетерминированная машина НТ решает задачу П за полиномиальное время, еслидля некоторого полинома р.

Временная функция определена только для тех индивидуальных задач х, которые принимаются машиной НТ.

Определим класс задач NP как множество задач, для которых существует недетерминированная машина Тьюринга, принимающая за полиномиальное время те и только те слова, которые соответствуют индивидуальным задачам с ответом «ДА».

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

Теорема. Если задача ПÎNP, то существует такой полином р, что П может быть решена детерминированным алгоритмом со сложностью O(2p(n)), где n – размер П.

Выводы.

1. Алгоритм с трудоемкостью O(n) называется линейным. Линейный алгоритм ограниченное число раз просматривает входную информацию и для большинства практических задач является неулучшаемым. Если найден линейный алгоритм для решения задачи, то на этом ее решение заканчивается.

2. Алгоритм, сложность которого равна О(nc), где с – константа называется полиномиальным (класс Р). Говорят, что массовая задача решается эффективно, если существует алгоритм, имеющий полиномиальную сложность. Такая формализация не лишена недостатков. Например, алгоритм имеющий порядок О(n 1000000) вряд ли будет эффективно работать. Но на практике появление какого-нибудь полиномиального алгоритма приводит в конце концов к алгоритму, трудоемкость которого оценивается полиномом небольшой степени. В большинстве случаев эта степень не превосходит 3: O(n3), O(n2), O(n log(n)), .

Пример: нахождение кратчайшего маршрута во взвешенном графе.

3. Алгоритм, сложность которого равна О(сn), где  называется экспоненциальным (класс E).

Пример: задача проверки совпадения булевых функций f(x1,…,xn) и g(x1,…,xn). Решение задачи состоит в составлении таблиц истинности функций с количеством строк 2n.

4. NP-сложные задачи.

Пример: Задача коммивояжера из теории графов. Перебор всех маршрутов в графе из n вершин требует рассмотрения n! вариантов. Но n! растет быстрее, чем 2n.

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

Существует мнение, что детерминированных алгоритмов решения таких задач не существует. NP сложные задачи не имеют гарантированных оценок времени решения. Даже незначительное изменение исходных данных приводит к резкому увеличению времени решения.

Примеры.

1. Выполнимость. Дана КНФ, представляющая булеву функцию. Выяснить является ли она выполнимой.

2. Клика. Определить содержит ли граф клику мощности К.

3. Независимость. Определить содержит ли граф независимое множество из К вершин.

4. Ядро графа.

5. Гамильтонов цикл.

6. Раскраска графа. Определить существует ли правильная раскраска графа посредством К цветов.

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

 

Логика - доступно для всех