Каковы различия между NP, NP-Complete и NP-Hard?

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

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

1031
07 дек. '09 в 4:11
источник поделиться
11 ответов

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

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

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

п

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 of 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.

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

1319
07 дек. '09 в 4:46
источник

Связанные вопросы


Похожие вопросы

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

Обратите внимание на то, как сложность увеличивается сверху вниз: любой 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-полные проблемы (все из которых образуют подмножество NP-hard). Остальная часть NP трудно.

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

236
22 окт. '13 в 9:08
источник

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

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

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

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

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

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

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

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

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

74
07 дек. '09 в 5:42
источник

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

enter image description here

56
24 нояб. '14 в 20:50
источник

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

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

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

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

53
04 окт. '13 в 6:50
источник

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

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

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

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

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

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

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

43
08 авг. '13 в 23:41
источник

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

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

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

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

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

18
18 июня '11 в 19:52
источник

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

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

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

1) произвольно выбираем k узлов из графика

2) убедитесь, что эти k-узлы образуют клику.

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

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

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

16
07 дек. '09 в 4:45
источник

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

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

5
14 янв. '14 в 4:56
источник

Как я понимаю, проблема np-hard не является "сложнее", чем проблема с np-полным. В самом деле, по определению, каждая np-полная задача:

  • в NP
  • нп-жесткий

enter image description here

- Введение. к алгоритмам (3ед) Кормен, Лейсерсон, Ривест и Штейн, стр. 1069

3
13 авг. '14 в 16:57
источник

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

enter image description here

0
11 июня '19 в 6:06
источник

Посмотрите другие вопросы по меткам или Задайте вопрос