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

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

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

785
задан DarthVader 07 дек. '09 в 4:11
источник поделиться
10 ответов

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

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

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

P

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) of X в полиномиальное время с тем свойством, что ответ на Y - да, тогда и только тогда, когда ответ на f(y) равен да.

Пример

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

(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-hard. Это проблема, которая при задании программы P и ввода I остановится? Это проблема решения, но это не в NP. Понятно, что любая NP-полная проблема может быть сведена к этому. В качестве другого примера любая NP-полная проблема NP-hard.

Моя любимая проблема NP-complete - проблема Minesweeper.


P = NP

Это одна из самых известных проблем в информатике и один из самых важных выдающихся вопросов в математических науках. Фактически, Clay Institute предлагает миллион долларов для решения проблемы (Stephen Cook writeup на сайте Clay неплохо).

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

Лучшая книга по этой теме - Компьютеры и нерушимость от Garey and Johnson.

1021
ответ дан jason 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 трудно.

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

180
ответ дан Johnson Wong 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.

68
ответ дан Managu 07 дек. '09 в 5:42
источник поделиться

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

enter image description here

38
ответ дан Franck Dernoncourt 24 нояб. '14 в 20:50
источник поделиться

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

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

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

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

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

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

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

36
ответ дан Michael 08 авг. '13 в 23:41
источник поделиться

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

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

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

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

26
ответ дан Nagakishore Sidde 04 окт. '13 в 6:50
источник поделиться

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

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

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

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

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

16
ответ дан Sushant Sharma 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)

15
ответ дан awesomo 07 дек. '09 в 4:45
источник поделиться

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

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

5
ответ дан Salvador Dali 14 янв. '14 в 4:56
источник поделиться

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

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

enter image description here

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

3
ответ дан MrDrews 13 авг. '14 в 16:57
источник поделиться

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