В 2000 году Математический институт Клэя включил проблему «P против NP» в список семи «проблем тысячелетия». За её решение учреждена премия в 1 млн. долларов США.
1. Что такое классы P, NP и NP-полнота?
В теории вычислительной сложности задачи делят по тому, сколько времени и ресурсов нужно компьютеру для их решения или проверки.
Класс P (Polynomial time)
Состоит из задач принятия решений, которые могут быть решены детерминированным алгоритмом за полиномиальное время O(n^k) для некоторого фиксированного k. Поскольку поиск решения занимает полиномиальное время, проверка найденного решения также выполняется за полиномиальное время.
Пример: Сортировка массива (например, O(n log n)), поиск кратчайшего пути на графе (алгоритм Дейкстры, O(n^2)).
Класс NP (Nondeterministic Polynomial time)
Состоит из задач принятия решений, для которых возможно трудно найти решение, но предложенное решение может быть проверено за полиномиальное время.
Соотношение классов: Любая задача из класса P также входит в класс NP (P ⊆ NP), поскольку если решение можно быстро найти, то его можно и быстро проверить.
NP-полные задачи (NP-complete): Это подмножество задач из класса NP, для таких задач на текущем этапе развития науки не найдено полиномиальных алгоритмов решения (все известные алгоритмы требуют как минимум экспоненциального времени), однако правильность уже готового ответа проверяется за полиномиальное время.
Пример: Задача о рюкзаке (0-1 Knapsack Problem) в формате задачи принятия решения.
NP-трудные задачи (NP-hard): Это задачи, для которых не только решение, но и сама проверка ответа может требовать как минимум экспоненциального времени.
Пример: Задача коммивояжёра (поиск точного наименьшего маршрута).
2. Теорема Кука — Левина
Фундаментальным результатом в теории алгоритмов является теорема Кука — Левина (доказана Стивеном Куком в 1971 г. и независимо Леонидом Левиным в 1973 г.).
Следствие теоремы: Все NP-полные задачи образуют единый класс эквивалентности. Нахождение полиномиального алгоритма хотя бы для ОДНОЙ NP-полной задачи автоматически означает наличие полиномиальных алгоритмов для ВСЕХ задач из класса NP.
Например, если бы удалось решить за время O(n^k) задачу о рюкзаке, то за полиномиальное время удалось бы решить и проблему факторизации (разложения больших чисел на простые множители).
3. Проблема «P против NP» (Гипотеза P ≠ NP) и угроза цифровой экономике
Проблема «P против NP» (сформулирована Стивеном Куком в 1971 г.) утверждает, что класс P не совпадает с классом NP, то есть сложные задачи из NP фундаментально невозможно решить за полиномиальное время.
Однако если гипотеза ложна и на самом деле P = NP, это означает, что для всех задач, решение которых мы можем легко проверить, существуют быстрые полиномиальные алгоритмы решения.
Угроза цифровой экономике:
На допущении о высокой вычислительной сложности задач NP (таких как факторизация чисел или дискретное логарифмирование) базируются алгоритмы несимметричного шифрования (RSA, ECC), обеспечивающие безопасность интернет-банкинга, электронных подписей, защищённых протоколов связи (HTTPS, TLS, SSH) и цифровых систем. Если P = NP, стойкость этих криптосистем будет полностью взломана за разумное время.
