- •Теория np-полноты Труднорешаемые задачи
- •Нерешенные проблемы теории np-полноты
- •Полиномиальная сводимость и np-полные задачи
- •Примеры np-полных задач
- •1. Задача выполнимость
- •2. Задача 3-выполнимость
- •3. Задача о клике
- •4. Задача о вершинном покрытии
- •Приближенные алгоритмы решения np-полных задач Оценка качества приближенных алгоритмов
- •Приближенный алгоритм решения задачи о вершинном покрытии
Полиномиальная сводимость и np-полные задачи
Наиболее убедительным аргументом в пользу того, что классы P и NP различны, является существование так называемых NP-полных задач. NP-полные языки являются самыми «трудными» в классе NP. При этом трудность языков можно сравнивать, сводя один язык к другому.
Полиномиальная сводимость
Определение.
Язык L1
за полиномиальное время к языку L2
(обозначение: L1≤pL2
или L1
L2),
если существует такая функция
f
:
{0, 1}*,
вычислимая за полиномиальное время,
что для любого слова
х{0,
1}*
: xL1
f(x)L2
(х
является индивидуальной задачей L1
тогда и только тогда, когда f(x)
является индивидуальной задачей L2).
Функцию f называют сводящей функцией, а полиномиальный алгоритм Af, вычисляющий функцию f, – сводящим алгоритмом.
xL1 f(x)L2
xL1 f(x)L2
Лемма 1. Если язык L1{0, 1}* сводится за полиномиальное время к языку L2{0, 1}* и L2 принадлежит классу P, то L1 также принадлежит классу Р (если L1 L2 и L2P, то L1Р).
Доказательство
1) L1 L2, следовательно, существует полиномиальный сводящий алгоритм А;
2)
L2P,
следовательно, существует полиномиальный
алгоритм
распознавания языка L2.
Возьмем произвольное слово хL1 и с помощью алгоритма А сведем его к слову А(х)L2, а затем определим, принимается или отвергается слово А(х) полиномиальным алгоритмом . Из определения полиномиальной сводимости следует, что слово А(х) допускается алгоритмом тогда и только тогда, когда слово x допускается алгоритмом, распознающим язык L1. Таким образом, последовательное выполнение алгоритмов А и дает алгоритм распознавания языка L1, и этот алгоритм полиномиален (сумма полиномов есть полином), т. е. L1P.
Лемма 2. Отношение полиномиальной сводимости транзитивно (если L1 L2 и L2 L3, то L1 L3).
Определение. Языки L1 и L2 полиномиально эквивалентны, если сводятся друг к другу.
Понятие полиномиальной сводимости позволяет произвести классификацию языков по степени их «трудности». Запись L1 L2 можно интерпретировать так: сложность языка L2 не более чем полиномиально превосходит сложность языка L1. Наиболее трудные в этом смысле – NP-полные языки.
Определение. Язык L{0, 1}* называется NP-полным:
1) если LNP;
2) L’ L для любого языка L’NP.
Обозначение класса NP-полных языков – NPC.
Лемма 3. Если языки L1 и L2 принадлежат классу NP, L1 – это NP-полный язык и L1 полиномиально сводится к L2, то L2 также NP-полный язык (если L1NP, L2NP, L1NPC и L1 L2, то L2NPС).
Доказательство. Так как L2NP, то, согласно определению, достаточно доказать, что любой язык L’NP полиномиально сводится к языку L2 (L’ L2).
По условию леммы L1NPC, следовательно, любой язык L’NP сводится к языку L1 (L’NP: L’ L1), а язык L1 сводится к языку L2 (по условию леммы L1 L2). По свойству транзитивности полиномиальной сводимости (лемма 2) L’NP: L’ L1, L1 L2, следовательно, L’NР: L’ L2, т.е язык L2NPC.
Основное свойство NP-полных языков: если некоторый NP-полный язык разрешим за полиномиальное время, то классы P и NP эквивалентны (P=NP), т. е. если в классе NPС существует язык разрешимый за полиномиальное время, то все языки класса NPC разрешимы за полиномиальное время.
Доказательство. Пусть L – NP-полный язык, который одновременно оказался разрешимым за полиномиальное время (LNPC и LP). По определению NP-полного языка справедливо утверждение: любой язык L’, проверяемый за полиномиальное время, полиномиально сводится к языку L (L’NP: L’ L). Таким образом, L’NP: L’ L и LP, значит, по лемме 1 следует, что L’NP разрешима за полиномиальное время (L’NP: L’P), т. е. классы P и NP совпадают.
