Чем отличаются NP, NP-Complete и NP-Hard?

1108

Чем отличаются NP , NP-Complete и NP-Hard ?

Я знаю о многих ресурсах по всему Интернету. Я хотел бы прочитать ваши объяснения, и причина в том, что они могут отличаться от того, что там есть, или есть что-то, чего я не знаю.

Дарт Вейдер
источник

Ответы:

1439

Я предполагаю, что вы ищете интуитивные определения, так как технические определения требуют довольно много времени для понимания. Прежде всего, давайте вспомним предварительную необходимую концепцию, чтобы понять эти определения.

  • Решение проблемы : проблема с ответом да или нет .

Теперь давайте определим эти классы сложности .

п

P - класс сложности, представляющий совокупность всех проблем решения, которые могут быть решены за полиномиальное время .

То есть, учитывая случай проблемы, ответ «да» или «нет» может быть решен за полиномиальное время.

пример

Для связного графа Gможно ли раскрасить его вершины двумя цветами, чтобы ни одно ребро не было монохроматическим?

Алгоритм: начните с произвольной вершины, закрасьте ее красным, а все соседи - синим и продолжайте. Остановитесь, когда у вас закончатся вершины или вы вынуждены сделать ребро, чтобы обе его конечные точки были одного цвета.


NP

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

Это означает, что если кто-то дает нам пример проблемы и сертификат (иногда называемый свидетелем), ответ на который да, мы можем проверить, что он правильный за полиномиальное время.

пример

Целочисленная факторизация в NP. Это проблема, которая дает целые числа, nи mесть ли целое число fс 1 < f < m, такое, что fделит n( fэто небольшой фактор n)?

Это проблема решения, потому что ответы да или нет. Если кто-то передает нам пример проблемы (поэтому они передают нам целые числа nи m) и целое число fс 1 < f < m, и утверждают, что fэто фактор n(сертификат), мы можем проверить ответ за полиномиальное время , выполнив деление n / f.


NP-Complete

NP-Complete - это класс сложности, представляющий совокупность всех проблем Xв NP, для которых можно свести любую другую проблему NP YкX полиномиальное время.

Интуитивно это означает, что мы можем решить Yбыстро, если мы знаем, как решить Xбыстро. Точнее, Yсводится к X, если существует полиномиальный алгоритм времени fдля преобразования экземпляров yиз Yк экземплярам x = f(y)из Xза полиномиальное время, с тем свойством , что ответ на yэто да, если и только если ответ наf(y) это да.

пример

3-SAT, Это проблема, в которой нам дано соединение (AND) из трехпозиционных дизъюнкций (OR), операторов вида

(x_v11 OR x_v21 OR x_v31) AND 
(x_v12 OR x_v22 OR x_v32) AND 
...                       AND 
(x_v1n OR x_v2n OR x_v3n)

где каждый x_vij- логическая переменная или отрицание переменной из конечного предопределенного списка(x_1, x_2, ... x_n) .

Можно показать, что каждая проблема NP может быть уменьшена до 3-SAT . Доказательство этого является техническим и требует использования технического определения NP ( на основе недетерминированных машин Тьюринга ). Это известно как теорема Кука .

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


NP-трудной

Интуитивно понятно, что это проблемы, которые по крайней мере так же сложны, как и проблемы с NP-завершением . Обратите внимание, что NP-сложные проблемы не обязательно должны быть в NP , и они не должны быть проблемами решения .

Точное определение здесь состоит в том, что проблема Xявляется NP-трудной, если существует NP-полная проблема Y, такая, которая Yсводится к Xполиномиальному времени .

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

пример

Проблема остановки - NP-трудная проблема. Это проблема, которая дает программу Pи ввод I, остановит ли она? Это проблема решения, но ее нет в NP. Ясно, что любая NP-полная проблема может быть сведена к этой. В качестве другого примера, любая NP-полная проблема является NP-сложной.

Моя любимая NP-полная проблема - проблема Сапер .


P = NP

Это одна из самых известных проблем в области компьютерных наук и один из самых важных нерешенных вопросов в математических науках. На самом деле, Институт Клэя предлагает миллион долларов для решения проблемы ( рецензия Стивена Кука на сайте Клэя довольно хорошая).

Понятно, что P является подмножеством NP. Открытый вопрос состоит в том, имеют ли проблемы NP детерминированные решения за полиномиальное время. Во многом считается, что они этого не делают. Вот выдающаяся недавняя статья о последней (и важности) проблеме P = NP: Состояние проблемы P против NP. .

Лучшая книга на эту тему - « Компьютеры и неразрешимость » Гэри и Джонсона.

Ясон
источник
32
@ Пол Фишер: Я покажу, что SAT сводится к проблеме остановки за полиномиальное время. Рассмотрим следующий алгоритм: приведите в качестве входных данных предложение Iпо nпеременным, попробуйте все 2^nвозможные присвоения переменных и остановитесь, если выполняется предложение, и в противном случае войдите в бесконечный цикл. Мы видим, что этот алгоритм останавливается тогда и только тогда, когда Iон выполним. Таким образом, если бы у нас был алгоритм полиномиального времени для решения проблемы остановки, то мы могли бы решать SAT за полиномиальное время. Следовательно, проблема остановки является NP-сложной.
Джейсон
6
@ Джейсон - Вы не можете таким образом уменьшить разрешимую проблему до неразрешимой. Решаемые проблемы должны приводить к окончательному ответу «да» или «нет», чтобы считаться решаемыми. Проблема остановки не имеет однозначного ответа «да» или «теперь», поскольку произвольный ответ может привести к тому, что любое решение окажется в цикле.
rzzii
11
@Rob: Да, я могу. Определение сводимости не требует, чтобы сводимая задача была разрешимой. Это верно как для сокращений много-один, так и для сокращений Тьюринга.
Джейсон
5
@Rob: Хорошо, хорошо, если ты хочешь продолжить это. Во-первых, «Decidable» не является синонимом «проблемы решения», как вы ее использовали. «Вероятность» означает примерно то, что существует «эффективный метод» для определения ответа. «Эффективный метод», безусловно, имеет техническое определение. Более того, «разрешимый» также может быть определен в терминах «вычислимых функций». Итак, проблема остановки - это проблема решения («Эта программа останавливается?» - это вопрос да / нет), но она неразрешима; не существует эффективного метода для определения того, остановится ли экземпляр проблемы остановки.
Джейсон
21
Использование проблемы остановки в качестве «классического примера» NP-сложной задачи некорректно. Это все равно что сказать: «Тихий океан - классический пример аквариума с соленой водой».
Майкл
261

Я искал вокруг и видел много длинных объяснений. Вот небольшая диаграмма, которая может быть полезна для подведения итогов:

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

Если вы можете решить более сложный класс задач за время P, это будет означать, что вы нашли способ решить все более простые задачи за время P (например, доказательство P = NP, если вы выясните, как решить любую задачу NP-Complete в Время р).

____________________________________________________________
| Тип проблемы | Проверяется в P время | Разрешимый в P время | Увеличение сложности
___________________________________________________________ | |
| P | Да | Да | |
| НП | Да | Да или нет * | |
| NP-Complete | Да | Неизвестный | |
| НП-Хард | Да или нет ** | Неизвестный *** | |
____________________________________________________________ V

Примечания Yesили Noзаписи:

  • * Проблема NP, также являющаяся P, разрешима за P время.
  • ** Задача NP-Hard, которая также является NP-Complete, проверяется в течение P времени.
  • *** Проблемы NP-Complete (все из которых составляют подмножество NP-hard) могут быть. В остальном НП хард нет.

Я также нашел эту диаграмму весьма полезной, чтобы увидеть, как все эти типы соответствуют друг другу (обратите больше внимания на левую половину диаграммы).

Джонсон Вонг
источник
У меня есть сомнения, связанные с вашим ответом. Я задал это в отдельном вопросе, но меня попросили опубликовать это здесь. Можете ли вы помочь мне здесь? stackoverflow.com/questions/21005651/…
Srikanth
Неизвестно, разрешимы ли NP-полные задачи за полиномиальное время. Кроме того, NP-полные задачи являются NP-сложными, поэтому некоторые NP-сложные задачи проверяются за полиномиальное время, и, возможно, некоторые также решаются за полиномиальное время.
Фальк Хюффнер
Эта таблица неверна и противоречива. Даже если вы предполагаете, что NP! = P, который еще не доказан, он все равно будет неверным. Например, класс NP-Hard включает в себя задачи NP-Complete; поэтому ваша таблица утверждает, что задачи NP-Complete одновременно проверяются за полиномиальное время и не проверяются за полиномиальное время.
Майкл
3
@ FalkHüffner Спасибо, таблица обновлена ​​(произошла ошибка при переводе с диаграммы Венна).
Джонсон Вонг
1
@PeterRaeves Все NP-полные задачи являются NP-сложными по определению: NP-complete = (NP и NP-hard). Обратное неверно: есть проблемы (такие как проблема остановки) в NP-hard, которые не в NP-complete. «NP (не разрешимый за полиномиальное время)» - это не то, что означает NP. NP является "недетерминированным полиномом". Все проблемы в P также есть в NP. Верно ли обратное, неизвестно.
Джим Балтер
73

Это очень неформальный ответ на заданный вопрос.

Можно ли записать 3233 как произведение двух других чисел, больших 1? Есть ли способ пройти путь по всем Семи Мостам Кенигсберга, не переходя ни один мост дважды? Это примеры вопросов, которые имеют общую черту. Может быть неочевидно, как эффективно определить ответ, но если ответ «да», то есть краткое и быстрое подтверждение. В первом случае нетривиальная факторизация 51; во втором - маршрут для ходьбы по мостам (с учетом ограничений).

Проблема решения представляет собой набор вопросов с да или нет ответов , которые различаются только по одному параметру. Скажем, проблема COMPOSITE = {" nСоставно": nявляется целым числом} или EULERPATH = {"Имеет ли граф Gпуть Эйлера?": GЯвляется конечным графом}.

Теперь некоторые проблемы решения поддаются эффективным, если не очевидным алгоритмам. Эйлер обнаружил эффективный алгоритм для таких задач, как «Семь мостов Кенигсберга» более 250 лет назад.

С другой стороны, для многих проблем, связанных с принятием решения, неочевидно, как получить ответ, но если вы знаете какую-то дополнительную информацию, очевидно, как доказать, что вы правильно ответили. COMPOSITE выглядит следующим образом: пробное деление - это очевидный алгоритм, и он медленный: чтобы получить десятизначное число, нужно попробовать что-то вроде 100 000 возможных делителей. Но если, например, кто-то сказал вам, что 61 - это делитель 3233, простое длинное деление - эффективный способ убедиться, что они верны.

Класс сложности NP - это класс проблем принятия решений, где ответы «да» должны быть краткими, чтобы быстро проверять доказательства. Как композит. Одним из важных моментов является то, что это определение ничего не говорит о том, насколько сложна проблема. Если у вас есть правильный и эффективный способ решения проблемы решения, достаточно просто записать шаги в решении.

Исследование алгоритмов продолжается, и все время создаются новые умные алгоритмы. Проблема, которую вы, возможно, не знаете, как эффективно решить сегодня, может оказаться эффективным (если не очевидным) решением завтра. На самом деле исследователям потребовалось до 2002 года, чтобы найти эффективное решение для КОМПОЗИТА! Со всеми этими достижениями действительно нужно задаться вопросом: действительно ли это немного о коротких доказательствах, просто иллюзия? Может быть, каждая проблема решения, которая поддается эффективным доказательствам, имеет эффективное решение? Никто не знает .

Возможно, самый большой вклад в эту область внес открытие своеобразного класса проблем NP. Играя с моделями цепей для вычислений, Стивен Кук обнаружил проблему решения разновидности NP, которая была доказуемо такой же трудной или сложной, как любая другая проблема NP. Эффективное решение проблемы булевой выполнимости может быть использовано для создания эффективного решения любой другой проблемы в NP. Вскоре после этого Ричард Карп показал, что ряд других проблем решения может служить той же цели. Эти проблемы, в некотором смысле самые трудные проблемы в NP, стали называться NP-полными проблемами.

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

Managu
источник
67

P (полиномиальное время): как следует из названия, это проблемы, которые могут быть решены за полиномиальное время.

NP (недетерминированное полиномиальное время): это задачи решения, которые можно проверить за полиномиальное время. Это означает, что если я утверждаю, что для конкретной проблемы есть решение за полиномиальное время, вы просите меня доказать это. Затем я дам вам доказательство, которое вы можете легко проверить за полиномиальное время. Такого рода проблемы называются проблемами NP. Обратите внимание, что здесь мы не говорим о том, есть ли решение этой проблемы за полиномиальное время или нет. Но мы говорим о проверке решения данной проблемы за полиномиальное время.

NP-Hard: Это, по крайней мере, так же сложно, как самые сложные проблемы в NP. Если мы сможем решить эти проблемы за полиномиальное время, мы сможем решить любую проблему NP, которая может существовать. Обратите внимание, что эти проблемы не обязательно являются проблемами NP. Это означает, что мы можем / не можем проверить решение этих проблем за полиномиальное время.

NP-Complete: это проблемы как NP, так и NP-Hard. Это означает, что если мы сможем решить эти проблемы, мы сможем решить любую другую проблему NP, и решения этих проблем могут быть проверены за полиномиальное время.

Нагакишор Сидде
источник
Так вы просто решили скопировать определения откуда-нибудь?
Арун
1
Ответ имеет смысл!
Константин
2
@ArunSatyarth Откуда?
значение имеет значение
3
Лучший ответ, поскольку он короткий, использует достаточно терминологии, имеет нормальные человеческие предложения (не очень сложный материал «давайте будем правильными, насколько это возможно») и, что удивительно, единственный ответ, который записывает, что означает N.
значение имеет значение
62

В дополнение к другим отличным ответам, вот типичная схема, которую люди используют, чтобы показать разницу между NP, NP-Complete и NP-Hard:

введите описание изображения здесь

Франк Дернонкур
источник
1
Доказано ли, что в NP-Hard существует проблема, которой нет в NP-Complete? Потому что это изображение предлагает это. Спасибо.
Хильдер Витор Лима Перейра
9
@VitorLima да, например, EXPSPACE-полные задачи являются NP- сложными, но доказано, что они не являются NP-полными.
Франк Дернонкур
2
Хорошо спасибо. Я нашел некоторые упоминания об этом. Например, вот этот: princeton.edu/~achaney/tmve/wiki100k/docs/NP-hard.html
Хильдер Витор Лима Перейра
47

Самый простой способ объяснить P v. NP и тому подобное, не вдаваясь в технические детали, - это сравнить «проблемы со словами» с «проблемами с множественным выбором».

Когда вы пытаетесь решить «проблему слов», вы должны найти решение с нуля. Когда вы пытаетесь решить «проблемы с множественным выбором», у вас есть выбор: либо решите его, как «проблему с словом», либо попробуйте включить каждый из предоставленных вам ответов и выберите подходящий вариант ответа.

Часто случается, что «проблема множественного выбора» намного проще, чем соответствующая «проблема слов»: замена ответов кандидата и проверка их соответствия могут потребовать значительно меньших усилий, чем поиск правильного ответа с нуля.

Теперь, если мы согласимся с усилием, которое требует полиномиального времени «легко», тогда класс P будет состоять из «простых задач со словами», а класс NP будет состоять из «простых задач с множественным выбором».

Суть P v. NP заключается в вопросе: «Есть ли какие-нибудь простые проблемы с множественным выбором, которые не так просты, как проблемы со словами»? То есть существуют ли проблемы, для которых легко проверить достоверность данного ответа, но найти этот ответ с нуля сложно?

Теперь, когда мы интуитивно понимаем, что такое NP, мы должны бросить вызов нашей интуиции. Оказывается, что есть «проблемы с множественным выбором», которые в некотором смысле являются наиболее сложными из всех них: если бы кто-то нашел решение одной из этих «самых сложных из всех» проблем, он мог бы найти решение для ВСЕХ НП проблемы! Когда Кук обнаружил это 40 лет назад, это стало полной неожиданностью. Эти «самые сложные из всех» проблем известны как NP-hard. Если вы найдете «решение проблемы со словом» для одного из них, вы автоматически найдете «решение проблемы со словом» для каждой «простой задачи с множественным выбором»!

Наконец, NP-полными являются те проблемы, которые являются NP-сложными и NP-сложными. Следуя нашей аналогии, они являются одновременно «простыми, как проблемы с множественным выбором» и «самыми сложными из всех, как проблемы со словом».

Майкл
источник
18

NP-полными задачами являются те проблемы, которые являются NP-Hard и в классе сложности NP. Следовательно, чтобы показать, что любая заданная проблема является NP-полной, вам нужно показать, что проблема как в NP, так и в том, что она NP-сложная.

Задачи, находящиеся в классе сложности NP, могут быть решены недетерминированно за полиномиальное время, а возможное решение (т. Е. Сертификат) для проблемы в NP может быть проверено на корректность за полиномиальное время.

Примером недетерминированного решения проблемы k-клика будет что-то вроде:

1) случайным образом выбрать k узлов из графика

2) проверить, что эти k узлов образуют клику.

Вышеприведенная стратегия является полиномиальной по размеру входного графа и, следовательно, проблема k-клики находится в NP.

Заметим, что все задачи, детерминированно разрешимые за полиномиальное время, также есть в NP.

Демонстрация того, что проблема NP-сложная, как правило, включает в себя сокращение от некоторой другой проблемы NP-сложного решения вашей проблемы с использованием полиномиального отображения времени: http://en.wikipedia.org/wiki/Reduction_(complexity).

шикарн-о
источник
Не то чтобы я вижу в этом ответе что-то неправильное, но я не знаю, почему это было принято. Это на самом деле не предлагает того, о чем спрашивал ОП. Это на самом деле даже не отличается от стандартных объяснений этих проблем, и нет никаких четких объяснений того, что делает эти проблемы в этих классах. Не стоит понижать голос, но, конечно, не стоит принимать ответ.
Сан Хасинто
18

Я думаю, что мы можем ответить на него гораздо более кратко. Я ответил на связанный вопрос и скопировал свой ответ оттуда

Но во-первых, NP-трудная задача - это проблема, для которой мы не можем доказать, что существует решение за полиномиальное время. NP-твердость некоторой «проблемы-P» обычно подтверждается путем преобразования уже доказанной NP-трудной проблемы в «проблему-P» за полиномиальное время.

Чтобы ответить на остальную часть вопроса, сначала нужно понять, какие сложные задачи также являются NP-полными. Если NP-сложная задача принадлежит NP, то она NP-полная. Чтобы принадлежать множеству NP, проблема должна быть

(i) решение проблемы,
(ii) число решений проблемы должно быть конечным, и каждое решение должно иметь полиномиальную длину, и
(iii) с учетом решения полиномиальной длины мы должны быть в состоянии сказать, является ли ответ на проблема да / нет

Теперь легко заметить, что может быть много сложных для NP задач, которые не относятся к установленной NP и которые сложнее решить. В качестве интуитивно понятного примера, оптимизационная версия коммивояжера, в которой нам нужно найти фактическое расписание, сложнее, чем вариант решения коммивояжера, где нам просто нужно определить, существует ли расписание с длиной <= k или нет.

Сушант Шарма
источник
5

Есть действительно хорошие ответы на этот конкретный вопрос, поэтому нет смысла писать мои собственные объяснения. Поэтому я постараюсь поделиться с отличным ресурсом о различных классах вычислительной сложности.

Для тех, кто думает, что вычислительная сложность касается только P и NP, вот самый исчерпывающий ресурс о различных проблемах вычислительной сложности. Помимо задач, поставленных OP, он перечислил около 500 различных классов вычислительных задач с хорошими описаниями, а также список фундаментальных исследовательских работ, которые описывают класс.

Сальвадор Дали
источник
3

Насколько я понимаю, проблема np-hard не "сложнее", чем проблема np-complete . Фактически, по определению, каждая np-полная проблема:

  1. в НП
  2. нп твердолобый

введите описание изображения здесь

-- Вступление. Алгоритмы (3ed) по Cormen, Leiserson, Rivest и Stein, стр. 1069

MrDrews
источник
3
Ваше понимание неверно. Ваше определение NP-complete является правильным, но не имеет отношения к вашему первому утверждению. Все проблемы в NP-hard, по крайней мере, такие же сложные, как и в NP-complete; некоторые (например, проблема остановки, которая бесконечно сложна, и en.wikipedia.org/wiki/EXPSPACE ) доказуемо сложнее.
Джим Балтер
2

Найдите интересное определение:

введите описание изображения здесь

sendon1982
источник