Сложность вычислений

Классы P и NP

С 2000 года Математический институт Клэя предлагает 1 миллион долларов за ответ на вопрос: равны ли P и NP? Никто не получил. Но ставки выше: если P = NP, вся криптография рушится за часы. RSA, TLS, Bitcoin - всё. Разница между $O(n^2)$ и $O(2^n)$ для $n = 100$: 10 000 операций против $10^{30}$ - больше атомов в Земле. Bitcoin-майнинг - намеренно NP-задача. Это не баг. Это архитектура.

  • **Криптография** - RSA и Diffie-Hellman основаны на предположении, что факторизация и дискретный логарифм не в P; если P = NP - всё рухнет
  • **Bitcoin и proof-of-work** - майнинг намеренно построен на NP-задаче: найти хэш трудно, проверить - мгновенно
  • **SAT-солверы** - верификация чипов Intel, синтез схем в FPGA, планировщики компиляторов - всё через решение NP-задач приближёнными методами
  • **Логистика** - маршрутизация FedEx и UPS, bin packing на складах Amazon - NP-трудные задачи, решаемые эвристиками

Класс P

С 2000 года Математический институт Клэя предлагает 1 миллион долларов за ответ на вопрос: равны ли P и NP? Никто не получил. Пока. Разница между $O(n^2)$ и $O(2^n)$ для $n = 100$: 10 000 операций против $10^{30}$ - больше атомов в Земле. Класс **P** - это граница, отделяющая задачи, которые компьютер решит при жизни, от тех, на которые уйдут эпохи. И именно эта граница защищает каждый ваш банковский счёт.

**P** - класс задач разрешимости (ответ да/нет), которые решаются детерминированной машиной Тьюринга за полиномиальное время $O(n^k)$. Здесь $n$ - размер входа, $k$ - константа, не зависящая от $n$.

ЗадачаСложностьВ классе P?
Поиск в отсортированном массивеO(log n)Да
СортировкаO(n log n)Да
Кратчайший путь (Dijkstra)O(n² log n)Да
Проверка простоты числа (AKS)O(n^6)Да
Максимальный поток (Edmonds-Karp)O(V·E²)Да
Факторизация числаНеизвестноНеизвестно!

Почему именно полиномиальное время? Потому что полиномы **замкнуты относительно композиции**: полином от полинома - снова полином. Если один шаг алгоритма полиномиален и таких шагов полиномиально много - общее время полиномиально. Это делает класс P устойчивым и удобным для анализа.

Между $O(n^2)$ и $O(2^n)$ - пропасть. Для $n = 100$: $n^2 = 10\,000$ операций (мгновенно), а $2^n \approx 10^{30}$ (больше атомов в Земле). Bitcoin-майнинг намеренно построен на задаче из-за пределов P - это не баг, это архитектурное решение. Граница класса P - это граница практической вычислимости.

Тезис Кобэма-Эдмондса

В 1960-х Алан Кобэм и Джек Эдмондс независимо предложили отождествлять «эффективно решаемые» задачи с классом P. Это грубое приближение ($O(n^{1000})$ формально полиномиально, но практически бесполезно), однако оно оказалось удивительно точным: почти все «естественные» задачи в P имеют небольшие степени полинома.

Какая из задач принадлежит классу P?

Класс NP и недетерминизм

А что если компьютер мог бы **угадывать**? Представьте машину, которая на каждом шаге «раздваивается» и пробует все варианты параллельно. Если хотя бы одна ветка находит решение - задача решена. Это **недетерминированная машина Тьюринга** (NTM). Класс задач, которые она решает за полиномиальное время, - это **NP**. Судоку 9×9 найти трудно, проверить - легко. TSP-маршрут для UPS - найти трудно, проверить длину - секунда. Это и есть NP.

**NP** (Nondeterministic Polynomial) - класс задач, решаемых недетерминированной машиной Тьюринга за полиномиальное время. Эквивалентное определение: NP - задачи, для которых **правильность предложенного решения** можно проверить за полиномиальное время.

**N в NP означает Nondeterministic, а не «Non-Polynomial»!** Критически важное различие. P ⊆ NP - каждая задача из P также в NP (детерминированная машина - частный случай недетерминированной). SAT-солверы в верификации чипов Intel, задача раскраски графа при распределении регистров компилятора, маршрутизация в логистике FedEx - всё это NP-задачи, которые решаются приближённо, потому что точное решение за полиномиальное время никто не нашёл.

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

Проблема P vs NP

В 1971 году Стивен Кук сформулировал проблему P vs NP. В 2000 году Математический институт Клэя включил её в список «задач тысячелетия» с призом в 1 миллион долларов. На 2026 год проблема остаётся открытой. Большинство специалистов верят, что P ≠ NP, но доказательства нет.

Что означает буква N в аббревиатуре NP?

Верификация решений

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

Альтернативное определение NP: задача L ∈ NP, если существует полиномиальный **верификатор** V(x, c), такой что: для каждого «да»-экземпляра x существует сертификат c полиномиальной длины, при котором V(x, c) = true. Верификатор работает за полиномиальное время от |x|.

Асимметрия NP: для «да»-ответа есть короткое доказательство (сертификат). Но для «нет»-ответа - не обязательно! Класс задач, где «нет»-ответ имеет короткое доказательство, называется **coNP**. Вопрос NP = coNP тоже открыт.

ЗадачаСертификат (доказательство «да»)Время верификации
SATНабор значений переменныхO(n) - подставить и проверить
CLIQUEМножество из k вершинO(k²) - проверить все пары
Hamilton CycleПоследовательность вершинO(n) - проверить цикл
Subset SumПодмножество с нужной суммойO(n) - сложить элементы
Graph ColoringРаскраска вершинO(E) - проверить все рёбра

Задача принадлежит NP, если:

Сертификат

Сертификат (свидетель, witness) - это «подсказка», доказывающая что ответ - «да». Размер сертификата должен быть полиномиальным от размера входа. Для SAT - это набор значений переменных. Для задачи о клике - список вершин. Для гамильтонова цикла - сам цикл. Для доказательства теоремы - пошаговое обоснование. Разрыв между «проверить доказательство» и «найти доказательство» - это и есть суть P vs NP.

Формально: для задачи L ∈ NP существует полиномиальный верификатор V и полином p такие, что x ∈ L ⟺ ∃c: |c| ≤ p(|x|) и V(x, c) принимает. Сертификат c имеет длину не более p(|x|) - полиномиальную от входа.

Критически важно: сертификат должен быть **полиномиального размера**. Если бы допускались экспоненциальные сертификаты, то класс NP стал бы тривиальным (можно закодировать весь перебор в сертификат). Ограничение на длину - ключ к содержательности определения.

КлассОпределениеПример
PРешается за полиномСортировка, кратчайший путь
NPПроверяется за полиномSAT, клика, TSP
coNP«Нет»-ответ проверяется за полиномUNSAT, не-гамильтоновость
P ∩ coNPИ «да» и «нет» проверяютсяПростота числа (PRIMES)
NP-hardНе легче любой задачи из NPЗадача остановки (не в NP)

Итог. P - задачи, которые умеем решать быстро. NP - задачи, для которых решение можно быстро проверить (при наличии сертификата). Вопрос P = NP спрашивает: каждая ли задача, которую легко проверить, также легко решить? Интуиция говорит «нет» - проверить доказательство теоремы проще, чем его найти. Bitcoin стоит триллион долларов именно потому, что кто-то умный сделал правильную ставку на P ≠ NP.

NP означает «экспоненциальное время» или «не полиномиальное»

NP = Nondeterministic Polynomial. Класс P полностью содержится в NP (P ⊆ NP), так что все полиномиальные задачи тоже в NP

Буква N означает Nondeterministic (недетерминированный), а не Not (не). Детерминированная машина - частный случай недетерминированной, поэтому P ⊆ NP. Задача сортировки - в P и одновременно в NP. NP не равно «трудные задачи». NP - это задачи с быстро проверяемыми решениями. А P ≠ NP (если верно) означает, что существуют задачи, где проверка легче поиска.

Сертификат для NP-задачи должен быть:

Ключевые идеи

  • **P** - задачи, решаемые за полиномиальное время $O(n^k)$; граница практической вычислимости
  • **NP** - задачи, решения которых проверяются за полиномиальное время (Nondeterministic Polynomial, не Non-Polynomial)
  • **P ⊆ NP** - каждая задача из P также в NP; вопрос в том, верно ли обратное
  • **Сертификат** - доказательство «да»-ответа полиномиального размера, проверяемое за полиномиальное время
  • NP-задачи - не теория. Это то, почему Bitcoin стоит триллион долларов, а RSA защищает интернет

Связанные темы

Классы P и NP - фундамент теории сложности вычислений:

  • NP-полнота — Самые трудные задачи внутри NP - если одна в P, то все в P
  • Классические NP-полные задачи — 3-SAT, клика, гамильтонов цикл - конкретные примеры NP-полных задач

Вопросы для размышления

  • Почему большинство верит, что P ≠ NP? Какие аргументы «за» и «против»?
  • Если бы P = NP, какие практические последствия это имело бы для криптографии, AI, математики?
  • Задача PRIMES (проверка простоты) долго была в NP, но не доказано что в P. В 2002 алгоритм AKS показал PRIMES ∈ P. Какие ещё задачи могут «переехать» из NP в P?

Связанные уроки

  • alg-01-big-o — Без понимания O-нотации невозможно разобраться в классах P и NP
  • comp-01 — Теория сложности предполагает вычислимость: изучаем сложность только разрешимых задач
  • ds-01-arrays — Структуры данных определяют сложность конкретных алгоритмов: дерево vs массив меняет O(n) на O(log n)
  • dm-01 — NP-полные задачи формулируются через комбинаторные объекты дискретной математики: графы, множества, матрицы
  • alg-34-approximation
Классы P и NP

0

1

Войти