В теории вычислительной сложности задача является NP-полной, если:
Название «NP-полный» является сокращением от «недетерминированный полиномиальный полный». В этом названии «недетерминированный» относится к недетерминированным машинам Тьюринга , способу математической формализации идеи алгоритма поиска методом грубой силы. Полиномиальное время относится к количеству времени, которое считается «быстрым» для детерминированного алгоритма , чтобы проверить одно решение, или для недетерминированной машины Тьюринга, чтобы выполнить весь поиск. « Полный » относится к свойству быть способным моделировать все в том же классе сложности .
Точнее, каждый вход в задачу должен быть связан с набором решений полиномиальной длины, справедливость каждого из которых может быть быстро проверена (за полиномиальное время ), [2] таким образом, чтобы выход для любого входа был «да», если набор решений непустой, и «нет», если он пустой. Класс сложности задач такого вида называется NP , сокращение от «недетерминированное полиномиальное время». Задача называется NP-трудной , если все в NP может быть преобразовано в нее за полиномиальное время, даже если она может не быть в NP. Задача является NP-полной, если она одновременно и в NP, и в NP-трудной. NP-полные задачи представляют собой самые сложные задачи в NP. Если некоторая NP-полная задача имеет алгоритм полиномиального времени, то все задачи в NP имеют его. Множество NP-полных задач часто обозначается NP-C или NPC .
Хотя решение NP-полной задачи можно проверить «быстро», не существует известного способа быстрого нахождения решения. То есть, время, необходимое для решения задачи с использованием любого известного в настоящее время алгоритма, быстро увеличивается по мере роста размера задачи. Как следствие, определение того, возможно ли быстро решить эти задачи, называемое проблемой P против NP , является одной из фундаментальных нерешенных проблем в компьютерной науке сегодня.
В то время как метод вычисления решений NP-полных задач быстро остается неоткрытым, специалисты по информатике и программисты по-прежнему часто сталкиваются с NP-полными задачами. NP-полные задачи часто решаются с помощью эвристических методов и алгоритмов приближения .
NP-полные задачи находятся в NP , множестве всех задач принятия решений , решения которых могут быть проверены за полиномиальное время; NP может быть эквивалентно определено как множество задач принятия решений, которые могут быть решены за полиномиальное время на недетерминированной машине Тьюринга . Задача p в NP является NP-полной, если каждая другая задача в NP может быть преобразована (или сведена) к p за полиномиальное время. [ требуется ссылка ]
Неизвестно, можно ли быстро решить каждую задачу из NP — это называется проблемой P против NP . Но если любую NP-полную задачу можно решить быстро, то можно решить и любую задачу из NP , потому что определение NP-полной задачи гласит, что каждая задача из NP должна быть быстро сведена к любой NP-полной задаче (то есть ее можно свести за полиномиальное время). Из-за этого часто говорят, что NP-полные задачи сложнее или труднее, чем задачи NP в целом. [ требуется цитата ]
Задача принятия решения является NP-полной, если: [ необходима ссылка ]
можно показать, что она принадлежит классу NP, показав, что возможное решение может быть проверено за полиномиальное время.
Обратите внимание, что задача, удовлетворяющая условию 2, называется NP-трудной , независимо от того, удовлетворяет ли она условию 1. [4]
Следствием этого определения является то, что если бы у нас был алгоритм с полиномиальным временем (на UTM или любой другой абстрактной машине , эквивалентной Тьюрингу ) для , мы могли бы решить все задачи из NP за полиномиальное время.
Понятие NP-полноты было введено в 1971 году (см. теорему Кука–Левина ), хотя термин NP-полный был введен позже. На конференции STOC 1971 года между специалистами по информатике разгорелись ожесточенные дебаты о том, можно ли решить NP-полные задачи за полиномиальное время на детерминированной машине Тьюринга . Джон Хопкрофт привел всех на конференции к консенсусу, что вопрос о том, разрешимы ли NP-полные задачи за полиномиальное время, следует отложить на более позднее время, поскольку ни у кого не было никаких формальных доказательств своих утверждений так или иначе. [ требуется цитата ] Это известно как «вопрос о том, P=NP».
Никто пока не смог окончательно определить, действительно ли NP-полные задачи решаемы за полиномиальное время, что делает это одной из величайших нерешенных проблем математики . Математический институт Клэя предлагает награду в 1 миллион долларов США ( Премия тысячелетия ) любому, кто предоставит формальное доказательство того, что P=NP или P≠NP. [5]
Существование NP-полных задач не очевидно. Теорема Кука–Левина утверждает, что проблема булевой выполнимости является NP-полной, тем самым устанавливая, что такие задачи существуют. В 1972 году Ричард Карп доказал, что несколько других задач также являются NP-полными (см. 21 NP-полную задачу Карпа ); таким образом, существует класс NP-полных задач (помимо проблемы булевой выполнимости). После получения первоначальных результатов было показано, что тысячи других задач являются NP-полными путем сведения других задач, ранее показанных как NP-полные; многие из этих задач собраны в Garey & Johnson (1979).
Самый простой способ доказать, что некоторая новая задача является NP-полной, — это сначала доказать, что она принадлежит NP, а затем свести к ней некоторую известную NP-полную задачу. Поэтому полезно знать множество NP-полных задач. В списке ниже приведены некоторые известные задачи, которые являются NP-полными, если их выразить как задачи принятия решений.
Справа представлена диаграмма некоторых проблем и сокращений, обычно используемых для доказательства их NP-полноты. На этой диаграмме проблемы сокращены снизу вверх. Обратите внимание, что эта диаграмма вводит в заблуждение как описание математической связи между этими проблемами, поскольку существует сокращение за полиномиальное время между любыми двумя NP-полными проблемами; но она указывает, где демонстрация этого сокращения за полиномиальное время была проще всего.
Часто существует лишь небольшая разница между задачей в P и NP-полной задачей. Например, задача 3-выполнимости , ограничение задачи булевой выполнимости, остается NP-полной, тогда как немного более ограниченная задача 2-выполнимости находится в P (в частности, она является NL-полной ), но немного более общая задача max. 2-sat. снова является NP-полной. Определение того, можно ли раскрасить граф в 2 цвета, находится в P, но с 3 цветами является NP-полной, даже если ограничено планарными графами . Определение того, является ли граф циклом или двудольным , очень просто (в L ), но нахождение максимального двудольного или максимального циклического подграфа является NP-полным. Решение задачи о рюкзаке в пределах любого фиксированного процента от оптимального решения может быть вычислено за полиномиальное время, но нахождение оптимального решения является NP-полным.
Интересным примером является проблема изоморфизма графов , проблема теории графов , определяющая, существует ли изоморфизм графов между двумя графами. Два графа являются изоморфными, если один может быть преобразован в другой простым переименованием вершин . Рассмотрим эти две проблемы:
Проблема изоморфизма подграфов является NP-полной. Предполагается, что проблема изоморфизма графов не относится ни к P, ни к NP-полной, хотя она относится к NP. Это пример проблемы, которая считается сложной , но не считается NP-полной. Этот класс называется NP-промежуточными проблемами и существует тогда и только тогда, когда P≠NP.
В настоящее время все известные алгоритмы для NP-полных задач требуют времени, которое является суперполиномиальным по размеру входных данных. Задача о вершинном покрытии имеет [6] для некоторых и неизвестно, существуют ли более быстрые алгоритмы.
Для решения вычислительных задач в целом можно применять следующие методы, которые часто приводят к созданию существенно более быстрых алгоритмов:
Одним из примеров эвристического алгоритма является неоптимальный жадный алгоритм раскраски, используемый для раскраски графа во время фазы выделения регистров некоторых компиляторов, метод, называемый глобальным выделением регистров раскраской графа . Каждая вершина является переменной, ребра рисуются между переменными, которые используются одновременно, а цвета указывают регистр, назначенный каждой переменной. Поскольку большинство машин RISC имеют довольно большое количество регистров общего назначения, даже эвристический подход эффективен для этого приложения.
В определении NP-полного, данном выше, термин «редукция» использовался в техническом значении многоединичной редукции за полиномиальное время .
Другой тип сведения — это полиномиальное сведение по Тьюрингу . Задача является полиномиально-сводимой по Тьюрингу к задаче, если, имея подпрограмму, которая решается за полиномиальное время, можно написать программу, которая вызывает эту подпрограмму и решает ее за полиномиальное время. Это контрастирует со сводимостью «многие-один», которая имеет ограничение, что программа может вызвать подпрограмму только один раз, а возвращаемое значение подпрограммы должно быть возвращаемым значением программы.
Если определить аналог NP-полной задачи с помощью редукций Тьюринга вместо редукций типа «многие-один», то результирующий набор задач не будет меньше NP-полной задачи; открытым остается вопрос, будет ли он больше.
Другой тип редукции, который также часто используется для определения NP-полноты, — это логарифмическая много-одномерная редукция , которая является много-одномерной редукцией, которая может быть вычислена только с логарифмическим объемом памяти. Поскольку каждое вычисление, которое может быть выполнено в логарифмическом пространстве, может быть выполнено и за полиномиальное время, следует, что если существует логарифмическая много-одномерная редукция, то существует и много-одномерная редукция за полиномиальное время. Этот тип редукции более утончен, чем более обычные много-одномерные редукции за полиномиальное время, и он позволяет нам различать больше классов, таких как P-полные . Изменится ли при этих типах редукций определение NP-полных задач, все еще остается открытой проблемой. Все известные в настоящее время NP-полные задачи являются NP-полными при логарифмических редукциях. Все известные в настоящее время NP-полные задачи остаются NP-полными даже при гораздо более слабых редукциях, таких как редукции и редукции. Известно, что некоторые NP-полные задачи, такие как SAT, являются полными даже при полилогарифмических временных проекциях. [7] Однако известно, что сокращения AC определяют строго меньший класс, чем сокращения за полиномиальное время. [8]
Согласно Дональду Кнуту , название «NP-полный» было популяризировано Альфредом Ахо , Джоном Хопкрофтом и Джеффри Ульманом в их знаменитом учебнике «Проектирование и анализ компьютерных алгоритмов». Он сообщает, что они ввели изменение в гранки для книги (с «полиномиально полный») в соответствии с результатами опроса, который он провел среди теоретического сообщества по информатике . [9] Другие предложения, высказанные в опросе [10], включали « Геркулесов », «грозный», «крутой» Стейглица в честь Кука и аббревиатуру Шэнь Линя «PET», которая означала «вероятно экспоненциальное время», но в зависимости от того, в каком направлении развивалась проблема P против NP , могла означать «доказуемо экспоненциальное время» или «ранее экспоненциальное время». [11]
Часто встречаются следующие заблуждения. [12]
Рассматривая задачу принятия решения как формальный язык в некоторой фиксированной кодировке, множество NPC всех NP-полных задач не замкнуто при:
Неизвестно, замкнут ли NPC относительно комплементарности , поскольку NPC = co-NPC тогда и только тогда, когда NP = co-NP , и поскольку NP = co-NP является открытым вопросом . [16]
, равны ли NP и co-NP, вероятно, является второй по важности открытой проблемой в теории сложности после вопроса о соотношении P и NP.