Чем отличаются NP , NP-Complete и NP-Hard ?
Я знаю о многих ресурсах по всему Интернету. Я хотел бы прочитать ваши объяснения, и причина в том, что они могут отличаться от того, что там есть, или есть что-то, чего я не знаю.
источник
Чем отличаются NP , NP-Complete и NP-Hard ?
Я знаю о многих ресурсах по всему Интернету. Я хотел бы прочитать ваши объяснения, и причина в том, что они могут отличаться от того, что там есть, или есть что-то, чего я не знаю.
Я предполагаю, что вы ищете интуитивные определения, так как технические определения требуют довольно много времени для понимания. Прежде всего, давайте вспомним предварительную необходимую концепцию, чтобы понять эти определения.
Теперь давайте определим эти классы сложности .
P - класс сложности, представляющий совокупность всех проблем решения, которые могут быть решены за полиномиальное время .
То есть, учитывая случай проблемы, ответ «да» или «нет» может быть решен за полиномиальное время.
пример
Для связного графа G
можно ли раскрасить его вершины двумя цветами, чтобы ни одно ребро не было монохроматическим?
Алгоритм: начните с произвольной вершины, закрасьте ее красным, а все соседи - синим и продолжайте. Остановитесь, когда у вас закончатся вершины или вы вынуждены сделать ребро, чтобы обе его конечные точки были одного цвета.
NP - это класс сложности, представляющий набор всех проблем решения, для которых в случаях, когда ответ «да», есть доказательства, которые можно проверить за полиномиальное время.
Это означает, что если кто-то дает нам пример проблемы и сертификат (иногда называемый свидетелем), ответ на который да, мы можем проверить, что он правильный за полиномиальное время.
пример
Целочисленная факторизация в NP. Это проблема, которая дает целые числа, n
и m
есть ли целое число f
с 1 < f < m
, такое, что f
делит n
( f
это небольшой фактор n
)?
Это проблема решения, потому что ответы да или нет. Если кто-то передает нам пример проблемы (поэтому они передают нам целые числа n
и m
) и целое число f
с 1 < f < m
, и утверждают, что f
это фактор n
(сертификат), мы можем проверить ответ за полиномиальное время , выполнив деление n / f
.
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 , и они не должны быть проблемами решения .
Точное определение здесь состоит в том, что проблема X
является NP-трудной, если существует NP-полная проблема Y
, такая, которая Y
сводится к X
полиномиальному времени .
Но поскольку любая NP-полная задача может быть сведена к любой другой NP-полной задаче за полиномиальное время, все NP-полные задачи могут быть сведены к любой NP-трудной задаче за полиномиальное время. Затем, если есть решение одной NP-трудной задачи за полиномиальное время, существует решение всех NP-задач за полиномиальное время.
пример
Проблема остановки - NP-трудная проблема. Это проблема, которая дает программу P
и ввод I
, остановит ли она? Это проблема решения, но ее нет в NP. Ясно, что любая NP-полная проблема может быть сведена к этой. В качестве другого примера, любая NP-полная проблема является NP-сложной.
Моя любимая NP-полная проблема - проблема Сапер .
Это одна из самых известных проблем в области компьютерных наук и один из самых важных нерешенных вопросов в математических науках. На самом деле, Институт Клэя предлагает миллион долларов для решения проблемы ( рецензия Стивена Кука на сайте Клэя довольно хорошая).
Понятно, что P является подмножеством NP. Открытый вопрос состоит в том, имеют ли проблемы NP детерминированные решения за полиномиальное время. Во многом считается, что они этого не делают. Вот выдающаяся недавняя статья о последней (и важности) проблеме P = NP: Состояние проблемы P против NP. .
Лучшая книга на эту тему - « Компьютеры и неразрешимость » Гэри и Джонсона.
I
поn
переменным, попробуйте все2^n
возможные присвоения переменных и остановитесь, если выполняется предложение, и в противном случае войдите в бесконечный цикл. Мы видим, что этот алгоритм останавливается тогда и только тогда, когдаI
он выполним. Таким образом, если бы у нас был алгоритм полиномиального времени для решения проблемы остановки, то мы могли бы решать SAT за полиномиальное время. Следовательно, проблема остановки является NP-сложной.Я искал вокруг и видел много длинных объяснений. Вот небольшая диаграмма, которая может быть полезна для подведения итогов:
Обратите внимание, как сложность увеличивается сверху вниз: любой NP может быть уменьшен до NP-Complete , а любой NP-Complete может быть уменьшен до NP-Hard. , все за P (полиномиальное) время.
Если вы можете решить более сложный класс задач за время P, это будет означать, что вы нашли способ решить все более простые задачи за время P (например, доказательство P = NP, если вы выясните, как решить любую задачу NP-Complete в Время р).
Примечания
Yes
илиNo
записи:Я также нашел эту диаграмму весьма полезной, чтобы увидеть, как все эти типы соответствуют друг другу (обратите больше внимания на левую половину диаграммы).
источник
Это очень неформальный ответ на заданный вопрос.
Можно ли записать 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 .
источник
P (полиномиальное время): как следует из названия, это проблемы, которые могут быть решены за полиномиальное время.
NP (недетерминированное полиномиальное время): это задачи решения, которые можно проверить за полиномиальное время. Это означает, что если я утверждаю, что для конкретной проблемы есть решение за полиномиальное время, вы просите меня доказать это. Затем я дам вам доказательство, которое вы можете легко проверить за полиномиальное время. Такого рода проблемы называются проблемами NP. Обратите внимание, что здесь мы не говорим о том, есть ли решение этой проблемы за полиномиальное время или нет. Но мы говорим о проверке решения данной проблемы за полиномиальное время.
NP-Hard: Это, по крайней мере, так же сложно, как самые сложные проблемы в NP. Если мы сможем решить эти проблемы за полиномиальное время, мы сможем решить любую проблему NP, которая может существовать. Обратите внимание, что эти проблемы не обязательно являются проблемами NP. Это означает, что мы можем / не можем проверить решение этих проблем за полиномиальное время.
NP-Complete: это проблемы как NP, так и NP-Hard. Это означает, что если мы сможем решить эти проблемы, мы сможем решить любую другую проблему NP, и решения этих проблем могут быть проверены за полиномиальное время.
источник
В дополнение к другим отличным ответам, вот типичная схема, которую люди используют, чтобы показать разницу между NP, NP-Complete и NP-Hard:
источник
Самый простой способ объяснить P v. NP и тому подобное, не вдаваясь в технические детали, - это сравнить «проблемы со словами» с «проблемами с множественным выбором».
Когда вы пытаетесь решить «проблему слов», вы должны найти решение с нуля. Когда вы пытаетесь решить «проблемы с множественным выбором», у вас есть выбор: либо решите его, как «проблему с словом», либо попробуйте включить каждый из предоставленных вам ответов и выберите подходящий вариант ответа.
Часто случается, что «проблема множественного выбора» намного проще, чем соответствующая «проблема слов»: замена ответов кандидата и проверка их соответствия могут потребовать значительно меньших усилий, чем поиск правильного ответа с нуля.
Теперь, если мы согласимся с усилием, которое требует полиномиального времени «легко», тогда класс P будет состоять из «простых задач со словами», а класс NP будет состоять из «простых задач с множественным выбором».
Суть P v. NP заключается в вопросе: «Есть ли какие-нибудь простые проблемы с множественным выбором, которые не так просты, как проблемы со словами»? То есть существуют ли проблемы, для которых легко проверить достоверность данного ответа, но найти этот ответ с нуля сложно?
Теперь, когда мы интуитивно понимаем, что такое NP, мы должны бросить вызов нашей интуиции. Оказывается, что есть «проблемы с множественным выбором», которые в некотором смысле являются наиболее сложными из всех них: если бы кто-то нашел решение одной из этих «самых сложных из всех» проблем, он мог бы найти решение для ВСЕХ НП проблемы! Когда Кук обнаружил это 40 лет назад, это стало полной неожиданностью. Эти «самые сложные из всех» проблем известны как NP-hard. Если вы найдете «решение проблемы со словом» для одного из них, вы автоматически найдете «решение проблемы со словом» для каждой «простой задачи с множественным выбором»!
Наконец, NP-полными являются те проблемы, которые являются NP-сложными и NP-сложными. Следуя нашей аналогии, они являются одновременно «простыми, как проблемы с множественным выбором» и «самыми сложными из всех, как проблемы со словом».
источник
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).
источник
Я думаю, что мы можем ответить на него гораздо более кратко. Я ответил на связанный вопрос и скопировал свой ответ оттуда
Но во-первых, NP-трудная задача - это проблема, для которой мы не можем доказать, что существует решение за полиномиальное время. NP-твердость некоторой «проблемы-P» обычно подтверждается путем преобразования уже доказанной NP-трудной проблемы в «проблему-P» за полиномиальное время.
источник
Есть действительно хорошие ответы на этот конкретный вопрос, поэтому нет смысла писать мои собственные объяснения. Поэтому я постараюсь поделиться с отличным ресурсом о различных классах вычислительной сложности.
Для тех, кто думает, что вычислительная сложность касается только P и NP, вот самый исчерпывающий ресурс о различных проблемах вычислительной сложности. Помимо задач, поставленных OP, он перечислил около 500 различных классов вычислительных задач с хорошими описаниями, а также список фундаментальных исследовательских работ, которые описывают класс.
источник
Насколько я понимаю, проблема np-hard не "сложнее", чем проблема np-complete . Фактически, по определению, каждая np-полная проблема:
источник
Найдите интересное определение:
источник