Чем отличаются NP, NP-Complete и NP-Hard? - PullRequest
1034 голосов
/ 07 декабря 2009

В чем различия между NP , NP-Complete и NP-Hard ?

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

Ответы [ 11 ]

1324 голосов
/ 07 декабря 2009

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

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

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

P

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

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

* * Пример тысячи двадцать-шести * 1 028 *

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

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


NP

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

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

* ** 1044 тысяча сорок-три * Пример * * тысяча сорок-шести

Целочисленная факторизация в 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-задач за полиномиальное время.

* +1137 * Пример * +1139 *

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

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


P = NP

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

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

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

238 голосов
/ 22 октября 2013

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

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

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

____________________________________________________________
| Problem Type | Verifiable in P time | Solvable in P time | Increasing Difficulty
___________________________________________________________|           |
| P            |        Yes           |        Yes         |           |
| NP           |        Yes           |     Yes or No *    |           |
| NP-Complete  |        Yes           |      Unknown       |           |
| NP-Hard      |     Yes or No **     |      Unknown ***   |           |
____________________________________________________________           V

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

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

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

74 голосов
/ 07 декабря 2009

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

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

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

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

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

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

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

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

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

56 голосов
/ 24 ноября 2014

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

enter image description here

54 голосов
/ 04 октября 2013

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

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

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

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

43 голосов
/ 09 августа 2013

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

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

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

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

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

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

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

18 голосов
/ 18 июня 2011

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

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

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

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

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

16 голосов
/ 07 декабря 2009

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)

5 голосов
/ 14 января 2014

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

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

3 голосов
/ 13 августа 2014

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

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

enter image description here

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

...