Проблема P против NP является одной из основных нерешенных проблем в теоретической информатике . Неформально, она спрашивает, может ли каждая проблема, решение которой можно быстро проверить, быть также быстро решена.
Здесь «быстро» означает, что алгоритм, который решает задачу и работает за полиномиальное время (в отличие, скажем, от экспоненциального времени ), существует, что означает, что время выполнения задачи ограничено сверху полиномиальной функцией от размера входных данных для алгоритма. Общий класс вопросов, на которые некоторый алгоритм может ответить за полиномиальное время, — это « P » или «класс P». Для некоторых вопросов нет известного способа быстро найти ответ, но если ответ предоставлен, его можно быстро проверить. Класс вопросов, где ответ может быть проверен за полиномиальное время, — это «NP» , что означает «недетерминированное полиномиальное время». [Примечание 1]
Ответ на вопрос P против NP определил бы, можно ли решить проблемы, которые можно проверить за полиномиальное время, за полиномиальное время. Если P ≠ NP, что широко распространено, это означало бы, что существуют проблемы в NP, которые сложнее вычислить, чем проверить: их нельзя решить за полиномиальное время, но ответ можно проверить за полиномиальное время.
Эту проблему называют самой важной открытой проблемой в информатике . [1] Помимо того, что это важная проблема в теории вычислений , доказательство в любом случае будет иметь глубокие последствия для математики, криптографии , исследования алгоритмов, искусственного интеллекта , теории игр , обработки мультимедиа, философии , экономики и многих других областей. [2]
Это одна из семи задач Премии тысячелетия, отобранных Математическим институтом Клэя , каждая из которых предусматривает премию в размере 1 000 000 долларов США за первое правильное решение.
Рассмотрим следующую задачу типа «да/нет»: дана неполная сетка судоку размера , существует ли хотя бы одно допустимое решение, в котором каждая строка, столбец и квадрат содержат целые числа от 1 до ? Легко проверить примеры «да» этой обобщенной задачи судоку, если задано возможное решение. Однако неизвестно, существует ли алгоритм с полиномиальным временем, который может правильно ответить «да» или «нет» на все примеры этой задачи. Следовательно, обобщенная задача судоку относится к NP (быстро проверяемая), но может относиться или не относиться к P (быстро решаемая). (Необходимо рассмотреть обобщенную версию судоку, поскольку любая фиксированная сетка судоку имеет только конечное число возможных сеток. В этом случае задача относится к P, поскольку ответ можно найти с помощью поиска по таблице.)
Точная формулировка проблемы P против NP была введена в 1971 году Стивеном Куком в его основополагающей статье «Сложность процедур доказательства теорем» [3] (и независимо Леонидом Левиным в 1973 году [4] ).
Хотя проблема P против NP была формально определена в 1971 году, ранее уже были намеки на связанные с ней проблемы, сложность доказательства и потенциальные последствия. В 1955 году математик Джон Нэш написал письмо в АНБ , предположив, что взлом достаточно сложного кода потребует времени, экспоненциально зависящего от длины ключа. [5] Если это будет доказано (а Нэш был настроен скептически), это будет означать то, что сейчас называется P ≠ NP, поскольку предложенный ключ может быть проверен за полиномиальное время. Другое упоминание об основной проблеме произошло в письме 1956 года, написанном Куртом Гёделем Джону фон Нейману . Гёдель спросил, можно ли решить доказательство теорем (теперь известное как co-NP-полное ) за квадратичное или линейное время , [6] и указал на одно из самых важных следствий — что если это так, то открытие математических доказательств может быть автоматизировано.
Связь между классами сложности P и NP изучается в теории вычислительной сложности , части теории вычислений, которая занимается ресурсами, необходимыми во время вычислений для решения данной задачи. Наиболее распространенными ресурсами являются время (сколько шагов требуется для решения задачи) и пространство (сколько памяти требуется для решения задачи).
В таком анализе требуется модель компьютера, для которого должно быть проанализировано время. Обычно такие модели предполагают, что компьютер детерминирован (учитывая текущее состояние компьютера и любые входные данные, существует только одно возможное действие, которое может выполнить компьютер) и последователен (он выполняет действия одно за другим).
В этой теории класс P состоит из всех задач принятия решений (определенных ниже), разрешимых на детерминированной последовательной машине за время, полиномиальное по размеру входных данных; класс NP состоит из всех задач принятия решений, положительные решения которых проверяются за полиномиальное время при наличии правильной информации или, что эквивалентно, решение которых может быть найдено за полиномиальное время на недетерминированной машине. [7] Очевидно, P ⊆ NP. Возможно, самый большой открытый вопрос в теоретической информатике касается взаимосвязи между этими двумя классами:
С 2002 года Уильям Гасарч провел три опроса исследователей по этому и связанным с ним вопросам. [8] [9] [10] Уверенность в том, что P ≠ NP, растет — в 2019 году 88% считали, что P ≠ NP, по сравнению с 83% в 2012 году и 61% в 2002 году. Если ограничиться экспертами, то в 2019 году ответы стали 99% считать, что P ≠ NP. [10] Эти опросы не подразумевают, что P = NP, сам Гасарч заявил: «Это не приближает нас к решению P=?NP или к знанию того, когда это будет решено, но это попытка быть объективным отчетом о субъективном мнении этой эпохи».
Для атаки на вопрос P = NP очень полезна концепция NP-полноты. NP-полные задачи — это задачи, к которым любая другая NP-задача сводится за полиномиальное время, и решение которых все еще проверяемо за полиномиальное время. То есть любая NP-задача может быть преобразована в любую NP-полную задачу. Неформально, NP-полная задача — это NP-задача, которая по крайней мере такая же «жесткая», как и любая другая задача в NP.
NP-трудные задачи — это те, которые по крайней мере столь же сложны, как и задачи NP; т. е. все задачи NP могут быть сведены (за полиномиальное время) к ним. NP-трудные задачи не обязательно должны быть в NP; т. е. они не обязательно должны иметь решения, проверяемые за полиномиальное время.
Например, задача о булевой выполнимости является NP-полной по теореме Кука–Левина , поэтому любой экземпляр любой задачи из NP может быть механически преобразован в задачу о булевой выполнимости за полиномиальное время. Задача о булевой выполнимости является одной из многих NP-полных задач. Если какая-либо NP-полная задача принадлежит P, то отсюда следует, что P = NP. Однако многие важные задачи являются NP-полными, и ни для одной из них не известен быстрый алгоритм.
Из определения неочевидно, что существуют NP-полные задачи; однако, тривиальную NP-полную задачу можно сформулировать следующим образом: если машина Тьюринга M гарантированно останавливается за полиномиальное время, существует ли входной сигнал полиномиального размера, который примет M ? [11] Он находится в NP, потому что (при наличии входных данных) просто проверить, принимает ли M входные данные, смоделировав M ; он является NP-полным, потому что верификатор для любого конкретного примера задачи в NP может быть закодирован как полиномиальная машина M , которая принимает проверяемое решение в качестве входных данных. Тогда вопрос о том, является ли пример экземпляром «да» или «нет», определяется тем, существуют ли допустимые входные данные.
Первой естественной задачей, доказано, что она NP-полна, была задача о булевой выполнимости, также известная как SAT. Как отмечалось выше, это теорема Кука–Левина; ее доказательство того, что выполнимость является NP-полной, содержит технические детали о машинах Тьюринга, поскольку они связаны с определением NP. Однако после того, как эта задача была доказана как NP-полная, доказательство путем редукции предоставило более простой способ показать, что многие другие задачи также являются NP-полными, включая игру Судоку, обсуждавшуюся ранее. В этом случае доказательство показывает, что решение Судоку за полиномиальное время также может быть использовано для завершения латинских квадратов за полиномиальное время. [12] Это, в свою очередь, дает решение задачи о разбиении трехдольных графов на треугольники, [13] которое затем может быть использовано для поиска решений для особого случая SAT, известного как 3-SAT, [14] которое затем дает решение для общей булевой выполнимости. Итак, решение судоку за полиномиальное время приводит, посредством ряда механических преобразований, к решению выполнимости за полиномиальное время, которое, в свою очередь, может быть использовано для решения любой другой NP-задачи за полиномиальное время. Используя преобразования, подобные этому, обширный класс, казалось бы, не связанных между собой задач сводятся друг к другу и в некотором смысле являются «одной и той же задачей».
Хотя неизвестно, P = NP, известны проблемы за пределами P. Так же, как класс P определяется в терминах полиномиального времени выполнения, класс EXPTIME представляет собой множество всех задач принятия решений, которые имеют экспоненциальное время выполнения. Другими словами, любая задача из EXPTIME разрешима детерминированной машиной Тьюринга за время O (2 p ( n ) ), где p ( n ) — полиномиальная функция от n . Задача принятия решений является EXPTIME-полной , если она находится в EXPTIME, и каждая задача из EXPTIME имеет к ней полиномиальное сведение ко многим единицам . Известно, что ряд задач являются EXPTIME-полными. Поскольку можно показать, что P ≠ EXPTIME, эти задачи находятся за пределами P и, таким образом, требуют больше, чем полиномиальное время. Фактически, по теореме об иерархии времени , они не могут быть решены за значительно меньшее, чем экспоненциальное время. Примерами служат поиск идеальной стратегии для шахматных позиций на доске N × N [15] и аналогичные задачи для других настольных игр. [16]
Проблема определения истинности утверждения в арифметике Пресбургера требует еще больше времени. Фишер и Рабин доказали в 1974 году [17] , что каждый алгоритм, который определяет истинность утверждений Пресбургера длины n, имеет время выполнения по крайней мере для некоторой константы c . Следовательно, известно, что проблема требует больше, чем экспоненциальное время выполнения. Еще более сложными являются неразрешимые проблемы , такие как проблема остановки . Они не могут быть полностью решены никаким алгоритмом, в том смысле, что для любого конкретного алгоритма существует по крайней мере один вход, для которого этот алгоритм не даст правильный ответ; он либо даст неправильный ответ, либо завершится, не дав окончательного ответа, либо будет работать вечно, не давая никакого ответа вообще.
Также можно рассматривать вопросы, не связанные с проблемами принятия решений. Один из таких классов, состоящий из проблем подсчета, называется #P : в то время как проблема NP спрашивает «Есть ли какие-либо решения?», соответствующая проблема #P спрашивает «Сколько решений?». Очевидно, что проблема #P должна быть по крайней мере такой же сложной, как соответствующая проблема NP, поскольку количество решений немедленно сообщает, существует ли хотя бы одно решение, если количество больше нуля. Удивительно, но некоторые проблемы #P, которые считаются сложными, соответствуют легким (например, линейно-временным) проблемам P. [18] Для этих проблем очень легко сказать, существуют ли решения, но считается очень сложным сказать, сколько их. Многие из этих проблем являются #P-полными , и, следовательно, входят в число самых сложных проблем в #P, поскольку решение любой из них за полиномиальное время позволило бы найти решение всех других проблем #P за полиномиальное время.
В 1975 году Ричард Э. Ладнер показал, что если P ≠ NP, то существуют задачи из NP, которые не являются ни P, ни NP-полными. [19] Такие задачи называются NP-промежуточными задачами. Задача изоморфизма графов , задача дискретного логарифма и задача факторизации целых чисел являются примерами задач, которые считаются NP-промежуточными. Они являются одними из немногих задач NP, о которых неизвестно, что они находятся в P или являются NP-полными.
Проблема изоморфизма графов — это вычислительная проблема определения того, являются ли два конечных графа изоморфными . Важной нерешенной проблемой в теории сложности является то, является ли проблема изоморфизма графов P, NP-полной или NP-промежуточной. Ответ неизвестен, но считается, что проблема по крайней мере не NP-полная. [20] Если изоморфизм графов является NP-полным, иерархия полиномиального времени схлопывается до своего второго уровня. [21] Поскольку широко распространено мнение, что полиномиальная иерархия не схлопывается ни до какого конечного уровня, считается, что изоморфизм графов не является NP-полным. Лучший алгоритм для этой проблемы, принадлежащий Ласло Бабаи , выполняется за квазиполиномиальное время . [22]
Задача факторизации целых чисел — это вычислительная задача определения простого фактора заданного целого числа. Формулируя ее как задачу принятия решений, это задача определения, имеет ли входной фактор фактор меньше k . Эффективный алгоритм факторизации целых чисел неизвестен, и этот факт лежит в основе нескольких современных криптографических систем, таких как алгоритм RSA . Задача факторизации целых чисел находится в NP и в co-NP (и даже в UP и co-UP [23] ). Если задача является NP-полной, иерархия полиномиального времени схлопнется до своего первого уровня (т. е. NP = co-NP). Наиболее эффективным известным алгоритмом факторизации целых чисел является общее решето поля чисел , которое занимает ожидаемое время
для факторизации n -битного целого числа. Самый известный квантовый алгоритм для этой задачи, алгоритм Шора , работает за полиномиальное время, хотя это не указывает, где проблема находится относительно неквантовых классов сложности .
Все вышеприведенные рассуждения предполагали, что P означает «легко», а «не в P» означает «сложно», предположение, известное как тезис Кобэма . Это распространенное предположение в теории сложности; но есть оговорки.
Во-первых, это может быть ложно на практике. Теоретический полиномиальный алгоритм может иметь чрезвычайно большие постоянные множители или показатели, что делает его непрактичным. Например, задача определения , содержит ли граф G H в качестве минора , где H фиксировано, может быть решена за время выполнения O ( n 2 ), [25] где n — число вершин в G . Однако большая нотация O скрывает константу, которая зависит от H суперэкспоненциально . Константа больше (используя восходящую стрелочную нотацию Кнута ), и где h — число вершин в H . [26]
С другой стороны, даже если задача оказывается NP-полной, и даже если P ≠ NP, на практике все еще могут существовать эффективные подходы к решению этой задачи. Существуют алгоритмы для многих NP-полных задач, таких как задача о рюкзаке , задача о коммивояжере и задача о булевой выполнимости , которые могут оптимально решать множество реальных задач за разумное время. Эмпирическая сложность в среднем случае (время против размера задачи) таких алгоритмов может быть на удивление низкой. Примером может служить симплексный алгоритм в линейном программировании , который на удивление хорошо работает на практике; несмотря на экспоненциальную сложность в худшем случае , он работает наравне с лучшими известными алгоритмами с полиномиальным временем. [27]
Наконец, существуют типы вычислений, которые не соответствуют модели машины Тьюринга, на которой определены P и NP, такие как квантовые вычисления и рандомизированные алгоритмы .
Кук дает переформулировку проблемы в The P Versus NP Problem как «Does P = NP?» [28] Согласно опросам, [8] [29] большинство компьютерных специалистов считают, что P ≠ NP. Ключевой причиной этого убеждения является то, что после десятилетий изучения этих проблем никто не смог найти алгоритм полиномиального времени для любой из более чем 3000 важных известных NP-полных проблем (см. Список NP-полных проблем ). Эти алгоритмы искали задолго до того, как была определена концепция NP-полноты ( 21 NP-полная проблема Карпа , среди первых найденных, были хорошо известными существующими проблемами в то время, когда было показано, что они NP-полны). Более того, результат P = NP подразумевал бы множество других поразительных результатов, которые в настоящее время считаются ложными, например, NP = co-NP и P = PH .
Также интуитивно утверждается, что существование проблем, которые трудно решить, но решения которых легко проверить, соответствует реальному опыту. [30]
Если P = NP, то мир был бы совершенно другим местом, чем мы обычно предполагаем. Не было бы никакой особой ценности в «творческих скачках», никакого фундаментального разрыва между решением проблемы и признанием решения, когда оно найдено.
С другой стороны, некоторые исследователи полагают, что слишком самонадеянно верить в P ≠ NP и что исследователи должны также изучить доказательства P = NP. Например, в 2002 году были сделаны следующие заявления: [8]
Главным аргументом в пользу P ≠ NP является полное отсутствие фундаментального прогресса в области исчерпывающего поиска. Это, по моему мнению, очень слабый аргумент. Пространство алгоритмов очень велико, и мы только в начале его исследования. [...] Решение Великой теоремы Ферма также показывает, что очень простые вопросы могут быть решены только очень глубокими теориями.
Привязанность к спекуляции не является хорошим руководством для планирования исследований. Всегда следует пробовать оба направления каждой проблемы. Предубеждение привело к тому, что известные математики не смогли решить известные проблемы, решение которых было противоположно их ожиданиям, даже несмотря на то, что они разработали все необходимые методы.
При замене «линейного времени на многоленточной машине Тьюринга» на «полиномиальное время» в определениях P и NP получаются классы DLIN и NLIN . Известно [31], что DLIN ≠ NLIN.
Одна из причин, по которой проблема привлекает так много внимания, — это последствия возможных ответов. Любое направление решения значительно продвинет теорию вперед, а также, возможно, будет иметь огромные практические последствия.
Доказательство того, что P = NP, может иметь ошеломляющие практические последствия, если доказательство приведет к эффективным методам решения некоторых важных проблем в NP. Потенциальные последствия, как положительные, так и отрицательные, возникают, поскольку различные NP-полные проблемы являются фундаментальными во многих областях.
Также вполне возможно, что доказательство не приведет к практическим алгоритмам для NP-полных задач. Формулировка задачи не требует, чтобы ограничивающий многочлен был малым или даже специально известным. Неконструктивное доказательство может показать, что решение существует, не указывая ни алгоритма для его получения, ни конкретной границы. Даже если доказательство конструктивно, показывая явный ограничивающий многочлен и алгоритмические детали, если многочлен не очень низкого порядка, алгоритм может оказаться недостаточно эффективным на практике. В этом случае первоначальное доказательство будет в основном представлять интерес для теоретиков, но знание того, что возможны решения за полиномиальное время, несомненно, подстегнет исследования в области лучших (и, возможно, практических) методов их достижения.
Решение, показывающее P = NP, может перевернуть область криптографии , которая опирается на определенные проблемы, которые являются сложными. Конструктивное и эффективное решение [Примечание 2] для NP-полной проблемы, такой как 3-SAT, сломало бы большинство существующих криптосистем, включая:
Их необходимо модифицировать или заменить решениями , безопасными с точки зрения теории информации и не предполагающими, что P ≠ NP.
Также есть огромные преимущества, которые вытекают из превращения в разрешимые многие в настоящее время математически неразрешимые проблемы. Например, многие проблемы в исследовании операций являются NP-полными, такие как типы целочисленного программирования и задача коммивояжера . Эффективные решения этих проблем будут иметь огромные последствия для логистики. Многие другие важные проблемы, такие как некоторые проблемы в предсказании структуры белка , также являются NP-полными; [35] делая эти проблемы эффективно решаемыми, можно значительно продвинуть вперед науки о жизни и биотехнологии.
Эти изменения могут быть незначительными по сравнению с революцией, которую эффективное решение NP-полных задач вызовет в самой математике. Гёдель в своих ранних размышлениях о вычислительной сложности отметил, что механический метод, который может решить любую задачу, произведет революцию в математике: [36] [37]
Если бы действительно существовала машина с φ( n ) ∼ k ⋅ n (или даже ∼ k ⋅ n 2 ), это имело бы последствия величайшей важности. А именно, это, очевидно, означало бы, что, несмотря на неразрешимость Entscheidungsproblem , умственную работу математика над вопросами типа «да или нет» можно было бы полностью заменить машиной. В конце концов, нужно было бы просто выбрать натуральное число n настолько большим, что когда машина не выдает результат, нет смысла думать о проблеме дальше.
Аналогично Стивен Кук (предполагая не только доказательство, но и практически эффективный алгоритм) говорит: [28]
... это преобразило бы математику, позволив компьютеру находить формальное доказательство любой теоремы, которая имеет доказательство разумной длины, поскольку формальные доказательства могут быть легко распознаны за полиномиальное время. Примеры задач вполне могут включать все задачи премии CMI .
Математики-исследователи тратят свою карьеру на доказательство теорем, и некоторые доказательства находили десятилетия или даже столетия после того, как были сформулированы проблемы, например, доказательство Великой теоремы Ферма заняло более трех столетий. Метод, гарантирующий нахождение доказательства, если существует доказательство «разумного» размера, по сути, положил бы конец этой борьбе.
Дональд Кнут заявил, что он пришел к убеждению, что P = NP, но сдержан в отношении влияния возможного доказательства: [38]
[...] если представить число M , которое конечно, но невероятно велико — например, число 10↑↑↑↑3, обсуждаемое в моей статье о «преодолении конечности», — то существует огромное количество возможных алгоритмов, которые выполняют n M побитовых операций, операций сложения или сдвига над n заданными битами, и очень трудно поверить, что все эти алгоритмы терпят неудачу. Однако моя главная мысль заключается в том, что я не верю, что равенство P = NP окажется полезным, даже если оно будет доказано, потому что такое доказательство почти наверняка будет неконструктивным.
Доказательство P ≠ NP не будет иметь практических вычислительных преимуществ доказательства P = NP, но будет представлять собой большой шаг вперед в теории вычислительной сложности и направлять будущие исследования. Оно продемонстрирует, что многие общие проблемы не могут быть решены эффективно, так что внимание исследователей может быть сосредоточено на частичных решениях или решениях других проблем. Из-за широко распространенного убеждения в P ≠ NP большая часть такого фокусирования исследований уже имела место. [39]
P ≠ NP все еще оставляет открытым вопрос о сложности сложных задач в NP в среднем случае . Например, возможно, что SAT требует экспоненциального времени в худшем случае, но что почти все случайно выбранные примеры этого являются эффективно разрешимыми. Рассел Импальяццо описал пять гипотетических «миров», которые могут возникнуть в результате различных возможных решений вопроса о сложности в среднем случае. [40] Они варьируются от «Algorithmica», где P = NP и такие проблемы, как SAT, могут быть эффективно решены во всех случаях, до «Cryptomania», где P ≠ NP и генерация сложных примеров проблем вне P является легкой, с тремя промежуточными возможностями, отражающими различные возможные распределения сложности по примерам сложных задач NP. «Мир», где P ≠ NP, но все проблемы в NP являются разрешимыми в среднем случае, называется в статье «Heuristica». Семинар Принстонского университета в 2009 году изучал состояние пяти миров. [41]
Хотя сама проблема P = NP остается открытой, несмотря на приз в миллион долларов и огромное количество целенаправленных исследований, попытки решить эту проблему привели к появлению нескольких новых методов. В частности, некоторые из наиболее плодотворных исследований, связанных с проблемой P = NP, показали, что существующие методы доказательства недостаточны для ответа на этот вопрос, что говорит о необходимости новых технических подходов.
Дополнительным доказательством сложности проблемы является то, что по сути все известные методы доказательства в теории сложности вычислений попадают в одну из следующих классификаций, и все они недостаточны для доказательства P ≠ NP:
Эти барьеры являются еще одной причиной, по которой NP-полные задачи полезны: если для NP-полной задачи можно продемонстрировать алгоритм с полиномиальным временем, это решит задачу P = NP способом, не исключаемым приведенными выше результатами.
Эти барьеры заставляют некоторых специалистов по информатике предполагать, что проблема P против NP может быть независимой от стандартных систем аксиом, таких как ZFC (не может быть доказана или опровергнута в них). Результат независимости может означать, что либо P ≠ NP, и это недоказуемо в (например) ZFC, либо что P = NP, но в ZFC недоказуемо, что любые алгоритмы с полиномиальным временем верны. [45] Однако, если проблема неразрешима даже при гораздо более слабых предположениях, расширяющих аксиомы Пеано для целочисленной арифметики, то для всех задач NP существуют алгоритмы с почти полиномиальным временем. [46] Следовательно, если предположить (как делает большинство теоретиков сложности), что некоторые задачи NP не имеют эффективных алгоритмов, доказательства независимости с помощью этих методов невозможны. Это также означает, что доказательство независимости от PA или ZFC с помощью современных методов не проще, чем доказательство того, что все задачи NP имеют эффективные алгоритмы.
Проблему P = NP можно переформулировать в виде определенных классов логических утверждений в результате работы над дескриптивной сложностью .
Рассмотрим все языки конечных структур с фиксированной сигнатурой , включая линейное отношение порядка . Тогда все такие языки в P выразимы в логике первого порядка с добавлением подходящего наименьшего комбинатора с фиксированной точкой . Рекурсивные функции могут быть определены с этим и отношением порядка. Пока сигнатура содержит по крайней мере один предикат или функцию в дополнение к выделенному отношению порядка, так что объем пространства, занимаемого для хранения таких конечных структур, фактически является полиномиальным по числу элементов в структуре, это точно характеризует P.
Аналогично, NP — это множество языков, выражаемых в экзистенциальной логике второго порядка , то есть логике второго порядка, ограниченной для исключения универсальной квантификации по отношениям, функциям и подмножествам. Языки в полиномиальной иерархии PH соответствуют всей логике второго порядка. Таким образом, вопрос «является ли P собственным подмножеством NP» можно переформулировать как «способна ли экзистенциальная логика второго порядка описывать языки (конечных линейно упорядоченных структур с нетривиальной сигнатурой), которые не может описать логика первого порядка с наименьшим числом неподвижных точек?». [47] Слово «экзистенциальный» можно даже опустить из предыдущей характеристики, поскольку P = NP тогда и только тогда, когда P = PH (поскольку первое установило бы, что NP = co-NP, что, в свою очередь, подразумевает, что NP = PH).
Ни один известный алгоритм для NP-полной задачи не выполняется за полиномиальное время. Однако известны алгоритмы для NP-полных задач, которые, если P = NP, работают за полиномиальное время при принятии экземпляров (хотя и с огромными константами, что делает алгоритм непрактичным). Однако эти алгоритмы не могут считаться алгоритмами с полиномиальным временем, поскольку их время выполнения при отклонении экземпляров не является полиномиальным. Следующий алгоритм, созданный Левиным (без какой-либо ссылки), является таким примером ниже. Он правильно принимает NP-полный язык SUBSET-SUM . Он работает за полиномиальное время на входах, которые находятся в SUBSET-SUM, тогда и только тогда, когда P = NP:
// Алгоритм, принимающий NP-полный язык SUBSET-SUM. // // это алгоритм полиномиального времени, если и только если P = NP. // // «Полиномиальное время» означает, что он возвращает «да» за полиномиальное время, когда // ответ должен быть «да», и работает вечно, когда это «нет». // // Вход: S = конечное множество целых чисел // Выход: «да», если любое подмножество S в сумме дает 0. // Работает вечно, в противном случае вывода нет. // Примечание: «Программа с номером M» — это программа, полученная // путем записи целого числа M в двоичном виде, а затем // рассмотрения этой строки битов как // программы. Каждая возможная программа может быть // сгенерирована таким образом, хотя большинство ничего // не делает из-за синтаксических ошибок.ДЛЯ К = 1...∞ ДЛЯ М = 1...К Запустить программу номер M на K шагов с входным сигналом S ЕСЛИ программа выводит список различных целых чисел И все целые числа находятся в S И целые числа в сумме дают 0 ЗАТЕМ ВЫВОД "да" и ОСТАНОВКА
Это алгоритм полиномиального времени, принимающий NP-полный язык только если P = NP. «Принимающий» означает, что он дает ответы «да» за полиномиальное время, но может работать вечно, если ответ «нет» (также известный как полуалгоритм ) .
Этот алгоритм чрезвычайно непрактичен, даже если P = NP. Если самая короткая программа, которая может решить SUBSET-SUM за полиномиальное время, имеет длину b бит, то вышеуказанный алгоритм сначала попробует по крайней мере 2 b − 1 других программ.
Задача принятия решения — это задача, которая принимает на вход некоторую строку w в алфавите Σ и выводит «да» или «нет». Если существует алгоритм (скажем, машина Тьюринга или компьютерная программа с неограниченной памятью), который выдает правильный ответ для любой входной строки длины n максимум за cn k шагов, где k и c — константы, не зависящие от входной строки, то мы говорим, что задача может быть решена за полиномиальное время , и помещаем ее в класс P. Формально P — это множество языков, которые могут быть решены детерминированной машиной Тьюринга с полиномиальным временем. Это означает,
где
а детерминированная полиномиальная машина Тьюринга — это детерминированная машина Тьюринга M , которая удовлетворяет двум условиям:
NP можно определить аналогичным образом, используя недетерминированные машины Тьюринга (традиционный способ). Однако современный подход использует концепцию сертификата и верификатора . Формально NP — это набор языков с конечным алфавитом и верификатором, который выполняется за полиномиальное время. Ниже дано определение «верификатора»:
Пусть L — язык над конечным алфавитом Σ.
L ∈ NP тогда и только тогда, когда существует бинарное отношение и положительное целое число k, такие, что выполняются следующие два условия:
Машина Тьюринга, которая определяет L R, называется верификатором для L , а y, такой что ( x , y ) ∈ R, называется сертификатом принадлежности x к L.
Не все верификаторы должны быть полиномиальными по времени. Однако для того, чтобы L был в NP, должен быть верификатор, который выполняется за полиномиальное время.
Позволять
Является ли значение x составным , эквивалентно тому, является ли x членом COMPOSITE. Можно показать, что COMPOSITE ∈ NP, проверив, что оно удовлетворяет приведенному выше определению (если мы отождествляем натуральные числа с их двоичными представлениями).
COMPOSITE также случайно оказывается в P, факт, продемонстрированный изобретением теста на простоту AKS . [48]
Существует множество эквивалентных способов описания NP-полноты.
Пусть L — язык над конечным алфавитом Σ.
L является NP-полной тогда и только тогда, когда выполняются следующие два условия:
В качестве альтернативы, если L ∈ NP, и есть другая NP-полная задача, которая может быть сведена к L за полиномиальное время , то L является NP-полной. Это распространенный способ доказательства того, что некоторая новая задача является NP-полной.
Хотя проблема P против NP обычно считается нерешенной, [49] многие любители и некоторые профессиональные исследователи заявили о решениях. Герхард Дж. Вёгингер составил список из 116 предполагаемых доказательств с 1986 по 2016 год, из которых 61 были доказательствами P = NP, 49 были доказательствами P ≠ NP, а 6 доказали другие результаты, например, что проблема неразрешима. [50] Некоторые попытки решения проблемы P против NP получили краткое внимание СМИ, [51] хотя эти попытки были опровергнуты.
Фильм «Коммивояжер » режиссера Тимоти Ланзона — история четырех математиков, нанятых правительством США для решения задачи сравнения P и NP. [52]
В шестом эпизоде седьмого сезона « Симпсонов » « Treehouse of Horror VI » уравнение P = NP появляется вскоре после того, как Гомер случайно попадает в «третье измерение». [53] [54]
Во втором эпизоде второго сезона сериала «Элементарно » под названием «Решить для X» Шерлок и Ватсон расследуют убийства математиков, которые пытались решить задачу «P против NP». [55] [56]
проблема касается вопроса о том, имеют ли вопросы, которые легко проверить (класс запросов, называемый NP), также решения, которые легко найти (класс, называемый P).
Предположим, что вы организуете размещение в общежитии для группы из четырехсот студентов университета. Количество мест ограничено, и только сто студентов получат места в общежитии. Чтобы усложнить ситуацию, декан предоставил вам список пар несовместимых студентов и попросил, чтобы ни одна пара из этого списка не фигурировала в вашем окончательном выборе. Это пример того, что специалисты по информатике называют NP-задачей...