Открыть сервис

NP-полнота

NP-полнота — это свойство некоторых задач из класса NP (недетерминированно полиномиальных) быть самыми сложными в этом классе. Задача является NP-полной, если она принадлежит классу NP и к ней можно свести любую другую задачу из NP за полиномиальное время. Другими словами, NP-полные задачи являются «эталонными» для класса NP: если для какой-либо из них удастся найти эффективный (полиномиальный) алгоритм решения, то все задачи класса NP будут решаемы за полиномиальное время. И наоборот, если для хотя бы одной NP-полной задачи доказана невозможность полиномиального решения, то ни одна NP-полная задача не может быть решена за полиномиальное время.

История

Понятие NP-полноты было введено в начале 1970-х годов как результат исследований по теории сложности вычислений. Основополагающие работы принадлежат независимо работавшим Стивену Куку (Канада, затем США) и Леониду Левину (СССР).

Открытие NP-полноты имело огромное значение: оно позволило не доказывать для каждой сложной переборной задачи её принципиальную трудность по отдельности, а свести её к уже известной NP-полной задаче. Это дало практическое объяснение тому, почему многие важные оптимизационные и переборные задачи (в расписании, логистике, криптографии, биоинформатике) оказались исключительно сложны для точного решения за приемлемое время.

Определения и формальная основа

Класс NP

NP (Nondeterministic Polynomial time) — это класс задач, для которых существует алгоритм, проверяющий правильность предложенного решения за полиномиальное время. При этом сам процесс поиска решения может занимать экспоненциальное время. Классический пример — задача о коммивояжёре: проверить, что данный маршрут короче заданной длины, можно быстро, но найти оптимальный маршрут среди всех возможных — очень трудно.

Понятие сводимости

Центральное понятие для определения NP-полноты — полиномиальная сводимость (сводимость по Карпу). Задача A сводится к задаче B за полиномиальное время, если существует алгоритм, который за полиномиальное время преобразует любой вход задачи A во вход задачи B таким образом, что ответ для задачи A («да»/«нет») совпадает с ответом для задачи B на преобразованном входе. Если это так, то говорят, что A ≤<sub>P</sub> B (A полиномиально сводится к B).

Если A ≤<sub>P</sub> B, и задача B решается за полиномиальное время, то и задача A решается за полиномиальное время. Соответственно, если A ≤<sub>P</sub> B, и задача A является «трудной», то и задача B не может быть «лёгкой» — она не менее трудна, чем A.

Определение NP-полноты

Формально задача Q называется NP-полной, если выполняются два условия:

  1. Принадлежность к NP: Q ∈ NP (существует полиномиальный алгоритм верификации).
  2. NP-трудность: Для любой задачи R ∈ NP существует полиномиальная сводимость R ≤<sub>P</sub> Q (любая задача из NP сводится к Q).

Из второго условия следует, что NP-полные задачи являются самыми сложными в классе NP: если для какой-либо из них найден полиномиальный алгоритм, то и для всех задач из NP он найдётся (P = NP).

NP-трудная задача — это задача, которая удовлетворяет только второму условию, но не обязательно первому. Иными словами, любая задача из NP сводится к NP-трудной, но сама NP-трудная задача может не принадлежать классу NP (например, оптимальная задача коммивояжёра, где требуется не ответ «да/нет», а найти маршрут минимальной длины — она NP-трудная, но не NP-полная).

Известные NP-полные задачи

Список NP-полных задач в настоящее время насчитывает тысячи разнообразных задач из многих областей науки, техники и экономики. К классическим NP-полным задачам относятся:

Классические задачи

Прикладные NP-полные задачи

Классы P, NP, NP-полные и NP-трудные

Взаимосвязь этих классов схематично изображается на диаграмме Венна. Однако до сих пор не доказано строго, что P ≠ NP или P = NP. Это одна из семи «задач тысячелетия» (Millennium Problems) — самых сложных и важных нерешённых математических проблем. Математический институт Клэя назначил за её решение приз в 1 миллион долларов США.

Если P = NP, то все NP-полные задачи решаемы за полиномиальное время. Если P ≠ NP, то ни одна NP-полная задача не может быть решена за полиномиальное время. Большинство специалистов по теории сложности склоняются к гипотезе P ≠ NP, то есть к тому, что точное решение NP-полных задач в общем случае требует экспоненциального времени.

Практическое значение

Несмотря на то, что NP-полные задачи считаются труднорешаемыми в худшем случае, на практике существуют подходы для работы с ними:

  1. Приближённые алгоритмы: Для многих NP-полных задач существуют алгоритмы, которые гарантированно находят решение, незначительно (в худшем случае) отличающееся от оптимального. Например, для задачи коммивояжёра существует алгоритм, находящий маршрут не более чем в 1,5 раза длиннее оптимального.
  2. Эвристические алгоритмы: Вместо гарантированной точности применяются эвристики, которые на практике часто находят (почти) оптимальные решения для большинства входных данных. Примеры: генетические алгоритмы, имитация отжига, муравьиные алгоритмы.
  3. Экспоненциальные алгоритмы для малых размеров: Для задачи с небольшим числом элементов (например, до 30-50) можно использовать точные алгоритмы, работающие за экспоненциальное время, которые на практике всё равно будут приемлемы.
  4. Параметризованная сложность: Для некоторых NP-полных задач существуют точные алгоритмы, время работы которых экспоненциально зависит от некоторого малого параметра, а не от общего размера входных данных.

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

Критика и ограничения

Хотя концепция NP-полноты является мощным инструментом, она имеет ограничения:

Источники

  1. Кук С. «Сложность процедур вывода теорем», 1971.
  2. Карп Р. «Редуцируемость комбинаторных задач», 1972.
  3. Левин Л. «Универсальные задачи перебора», 1973.
  4. Гэри М., Джонсон Д. «Вычислительные машины и труднорешаемые задачи», 1982.
  5. Ахо А., Хопкрофт Д., Ульман Дж. «Структуры данных и алгоритмы», 2000.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →