Какое определение у P, NP, NP-complete и NP-hard?


249

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

Все, что я знаю, это то, что NP - это подмножество NP-complete, которое является подмножеством NP-hard, но я понятия не имею, что они на самом деле значат. Википедия тоже не сильно помогает, так как объяснения все еще слишком высокого уровня.


6
Это формальный объект с формальным определением. Я обнаружил, что не хватает большинства «простых» объяснений. Если у вас есть проблемы с пониманием определений, что вы делаете в классе по теории сложности? (Серьезный вопрос.) Кстати, Википедия не очень хорошая ссылка для TCS.
Рафаэль

17
Не все, что вы знаете, правда: NPC (NP complete) является подмножеством NP, а не наоборот. Полнота всегда включает в себя элемент класса, для которого задача завершена. Кроме того, NP не является подмножеством NP-сложного, так как не каждая проблема в NP сложная.
13

5
@frafl: «Не каждая проблема в NP трудна» - это еще предстоит выяснить.
Рафаэль

3
@ Рафаэль: Это на самом деле зависит от типа сокращения, которое вы используете. Я думал полиномиальное время много одно сокращения, где NPC .
13

Ответы:


366

Я думаю, что статьи из Википедии P , NP и P против NP довольно хороши. Все еще вот что я бы сказал: Часть I , Часть II

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


Часть I

Решение проблем

Существуют различные виды вычислительных задач. Однако во введении в курс теории вычислительной сложности легче сосредоточиться на проблеме решения , то есть на проблемах, где ответом является ДА или НЕТ. Существуют и другие виды вычислительных проблем, но большую часть времени вопросы о них можно свести к аналогичным вопросам о проблемах решения. Причем решение проблем очень простое. Поэтому во введении в курс теории вычислительной сложности мы сосредоточим наше внимание на изучении проблем решения.

Мы можем идентифицировать решение проблемы с подмножеством входов, которые имеют ответ ДА. Это упрощает обозначения и позволяет записать xQ вместо Q(x)=YES и xQ вместо Q(x)=NO .

Другая перспектива заключается в том, что мы говорим о членских запросах в наборе. Вот пример:

Решение проблемы:

Ввод: натуральное число x ,
вопрос: является ли x четным числом?

Проблема членства:

Ввод: натуральное число x ,
Вопрос: x в Even={0,2,4,6,} ?

Мы называем ответ «ДА» на входе принятием ввода, а ответ «НЕТ» на входе отклонением ввода.

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

[Примечания: 1. Если бы мы хотели сделать все формально и точно, нам нужно было бы исправить модель вычислений, например, стандартную модель машины Тьюринга, чтобы точно определить, что мы подразумеваем под алгоритмом и его использованием вычислительных ресурсов. 2. Если мы хотим поговорить о вычислениях над объектами, которые модель не может обработать напрямую, нам нужно закодировать их как объекты, которые может обрабатывать модель машины, например, если мы используем машины Тьюринга, нам нужно кодировать объекты, такие как натуральные числа и графики. как двоичные строки.]


P = проблемы с эффективными алгоритмамипоискарешений

Предположим, что эффективные алгоритмы означают алгоритмы, которые используют не более полиномиального количества вычислительных ресурсов. Основным ресурсом, который нас интересует, является время выполнения алгоритмов в наихудшем случае в зависимости от размера ввода, т. Е. Количество основных шагов, которые алгоритм выполняет для ввода размера n . Размер входа x равен n если для хранения x требуется n бит компьютерной памяти , и в этом случае мы пишем | х | = п . Таким образом, под эффективными алгоритмами мы подразумеваем алгоритмы, которые имеют полиномиальное время выполнения в худшем случае .x|x|=n

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

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

Более формально, мы говорим, что решение проблемы Q находится в P если

существует эффективный алгоритм A , который
для всех входов x ,

  • если Q(x)=YES то A(x)=YES ,
  • если Q(x)=NO тогда A(x)=NO .

Можно просто писать A(x)=Q(x) , но я пишу это таким образом , чтобы мы могли сравнить его с определением NP .


NP = Проблемы с эффективными алгоритмамипроверкидоказательств / сертификатов / свидетелей

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

Если доказательство слишком длинное, оно не очень полезно, может потребоваться слишком много времени, чтобы просто прочитать доказательство, не говоря уже о проверке, является ли оно действительным. Мы хотим, чтобы время, необходимое для проверки, было разумным по размеру исходного ввода, а не по размеру предоставленного доказательства! Это означает, что мы действительно хотим не произвольных длинных доказательств, а коротких доказательств. Обратите внимание, что если время выполнения верификатора является полиномиальным по размеру исходного ввода, то он может прочитать только полиномиальную часть доказательства. Итак, под коротким мы подразумеваем полиномиальный размер .

Формируйте этот пункт всякий раз, когда я использую слово «доказательство», я имею в виду «краткое доказательство».

Вот пример проблемы, которую мы не знаем, как эффективно решить, но мы можем эффективно проверить доказательства:


Ввод разбиения : конечное множество натуральных чисел S ,
Вопрос: можно ли разбить S на два множества A и B ( AB=S и AB= )
, так что сумма чисел в A равна сумма числа в B ( xAx=xBx )?

Если я даю вам S и спрашиваю, можем ли мы разделить его на два набора так, чтобы их суммы были равны, вы не знаете никакого эффективного алгоритма для его решения. Вероятно, вы попробуете все возможные способы разбиения чисел на два набора, пока не найдете раздел, в котором суммы равны, или пока не перепробуете все возможные разделы, и ни один из них не сработал. Если бы кто-то из них работал, вы бы сказали «ДА», иначе - «НЕТ».

Но существует много экспоненциальных разделов, поэтому это займет много времени. Однако , если я дам вам два множества A и B , вы можете легко проверить , если суммы равны , и если A и B является разбиением S . Обратите внимание, что мы можем эффективно вычислять суммы.

Здесь пара A и B которую я вам даю, является доказательством ответа ДА. Вы можете эффективно проверить мою претензию, посмотрев мое доказательство и проверив, является ли оно действительным доказательством . Если ответ ДА, то есть действительное доказательство, и я могу предоставить его вам, и вы сможете проверить его эффективно. Если ответ НЕТ, то нет никаких веских доказательств. Поэтому все, что я вам даю, вы можете проверить и увидеть, что это не является действительным доказательством. Я не могу обмануть вас неверным доказательством того, что ответ ДА. Напомним, что если доказательство слишком большое, его проверка займет много времени, мы не хотим, чтобы это произошло, поэтому нам важны только эффективные доказательства, то есть доказательства, имеющие полиномиальный размер.

Иногда люди используют « свидетельство » или « свидетель » вместо «доказательства».

Примечание. Я даю вам достаточно информации об ответе для данного ввода x чтобы вы могли эффективно найти и проверить ответ. Например, в нашем примере с разделами я не говорю вам ответ, я просто даю вам раздел, и вы можете проверить, является ли он действительным или нет. Обратите внимание, что вы должны проверить ответ самостоятельно, вы не можете доверять мне в том, что я говорю. Более того, вы можете проверить только правильность моих доказательств. Если мои доказательства верны, это означает, что ответ ДА. Но если мое доказательство неверно, это не значит, что ответ НЕТ. Вы видели, что одно доказательство было недействительным, а не то, что нет действительных доказательств. Мы говорим о доказательствах ДА. Мы не говорим о доказательствах для НЕТ.

Давайте рассмотрим пример: A={2,4} и B={1,5} являются доказательством того, что S={1,2,4,5} можно разбить на два множества с равными суммами. Нам просто нужно суммировать числа в A и число в B и посмотреть , если результаты равны, и проверить , если , B является разбиение S .ABS

Если я дал вам A={2,5} и B={1,4} , вы проверите и увидите, что мое доказательство недействительно. Это не означает, что ответ НЕТ, это просто означает, что это конкретное доказательство было недействительным. Ваша задача здесь не в том, чтобы найти ответ, а только в том, чтобы проверить, верны ли предоставленные вами доказательства.

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

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

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

Более формально, мы говорим, что решение проблемы Q находится в NP если

существует эффективный алгоритм V называемый верификатором, такой, что
для всех входов x ,

  • если Q(x)=YES то существует доказательство y такое, что V(x,y)=YES ,
  • если Q(x)=NO , то для всех доказательств y , V(x,y)=NO .

Мы говорим, что верификатор является надежным, если он не принимает никаких доказательств, когда ответ НЕТ. Другими словами, звуковой верификатор нельзя обмануть, чтобы принять доказательство, если ответ действительно НЕТ. Нет ложных срабатываний.

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

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

Верификатор V получает два входа,

  • x : исходный ввод дляQ , и
  • Y : предложенное доказательство дляQ(Икс)знак равноYЕS .

Обратите внимание, что мы хотим, чтобы В был эффективным в размере Икс . Если Y большого доказательство верификатор будет иметь возможность читать только полиномиальную часть от Y . Вот почему мы требуем, чтобы доказательства были короткими. Если Y коротко, то сказать, что В эффективно в Икс , то же самое, что сказать, что В эффективно в Икс и Y (потому что размер Y ограничен фиксированным многочленом в размере Икс ).

Таким образом, чтобы показать, что проблема решения Q находится в Nп мы должны дать эффективный алгоритм верификатора, который является надежным и полным .

Историческая справка: исторически это не первоначальное определение Nп . В первоначальном определении используются так называемые недетерминированные машины Тьюринга. Эти машины не соответствуют какой-либо реальной модели машины и к ним трудно привыкнуть (по крайней мере, когда вы начинаете изучать теорию сложности). Я читал, что многие эксперты считают, что они использовали бы определение верификатора в качестве основного определения и даже назвали бы класс Вп (для проверяемого в полиномиальном времени) вместо Nп если они вернутся к началу теории вычислительной сложности. Определение верификатор более естественно, легче понять концептуально, и проще в использовании , чтобы показать проблемы в Nп .


пNп

Поэтому мы имеем п = эффективно разрешимое и Nп = эффективно проверяемое . Таким образом, пзнак равноNп если проблемы, которые могут быть эффективно проверены, совпадают с проблемами, которые могут быть эффективно решены.

Обратите внимание, что любая проблема в п также находится в Nп , т.е. если вы можете решить проблему, вы также можете проверить, является ли данное доказательство правильным: верификатор просто проигнорирует доказательство!

Это потому, что нам это не нужно, верификатор может вычислить ответ самостоятельно, он может решить, является ли ответ ДА ​​или НЕТ без какой-либо помощи. Если ответ НЕТ, мы знаем, что не должно быть никаких доказательств, и наш верификатор просто отклонит все предложенные доказательства. Если ответ ДА, то должно быть доказательство, а на самом деле мы просто принимать что - либо в качестве доказательства.

[Мы могли бы сделать так, чтобы наш верификатор принимал только некоторые из них, что тоже хорошо, если наш верификатор принимает хотя бы одно доказательство, что верификатор работает правильно для этой проблемы.]

Вот пример:

Сумма
ввода: список N+1 натуральных чисел 1 , , п и s , вопрос: является Σ п я = 1 я = S ?a1,,aNs
Σязнак равно1Naязнак равноs

Проблема в п потому что мы можем суммировать числа и затем сравнить их с s , мы возвращаем YES, если они равны, и NO, если они не равны.

Проблема также в Nп . Рассмотрим верификатор В который получает доказательство плюс ввод для Sum. Он действует так же, как алгоритм в п который мы описали выше. Это эффективный верификатор для Sum.

Обратите внимание, что существуют другие эффективные верификаторы для Sum, и некоторые из них могут использовать предоставленное им доказательство. Однако тот, который мы разработали, нет, и это тоже хорошо. Так как мы дали эффективный верификатор для Sum проблема в Nп . Тот же трюк работает для всех других проблем в п так пNп .


Алгоритмы грубой силы / исчерпывающего поиска для Nп и NпЕИкспTяме

Лучшие алгоритмы, которые мы знаем для решения произвольной задачи в Nп - это алгоритмы полного перебора / исчерпывающего поиска . Выберите эффективный верификатор для задачи (у него есть эффективный верификатор по нашему предположению, что он находится в Nп ) и проверьте все возможные доказательства одно за другим. Если верификатор принимает один из них, то ответ - ДА. В противном случае ответ НЕТ.

В нашем примере с разделами мы пробуем все возможные разделы и проверяем, равны ли суммы в любом из них.

Обратите внимание, что алгоритм перебора работает в экспоненциальном времени в худшем случае. Размер доказательств является полиномиальным по размеру входных данных. Если размер доказательств равен м то существует 2м возможных доказательств. Проверка каждого из них займет полиномиальное время у верификатора. Таким образом, в целом алгоритм грубой силы занимает экспоненциальное время.

Это показывает , что любая Nп проблема может быть решена в экспоненциальное время, т.е. NпЕИкспTяме . (Более того, алгоритм грубой силы будет использовать только полиномиальный объем пространства, то есть NппSпaсе но это история для другого дня).

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

Однако это не означает, что не существует лучших алгоритмов, мы этого не знаем . Насколько нам известно, все еще возможно (хотя это считается очень маловероятным почти всеми теоретиками сложности), что Nпзнак равноп и все проблемы Nп могут быть решены за полиномиальное время.

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

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

Тем не менее, есть Nп проблемы , которые , кажется, трудно решить. Я вернусь к этому , когда мы обсудим Nп -hardness.


Нижние границы кажутся трудными доказать

Итак, теперь мы знаем, что в N P существует много естественных проблем , и мы не знаем ни одного эффективного способа их решения, и мы подозреваем, что для их решения действительно требуется экспоненциальное время. Можем ли мы доказать это?Nп

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

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

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

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

Это еще одно место, где люди путаются. Здесь «невозможность» - математическая невозможность , т. Е. С нашей стороны не так уж легко, что какой-то гений может исправить в будущем. Когда мы говорим невозможное, мы имеем в виду, что это абсолютно невозможно, так же невозможно, как 1знак равно0 . Никакой научный прогресс не может сделать это возможным. Это то, что мы делаем, когда доказываем нижние границы.

Доказать нижнюю границу, т. Е. Показать, что проблема требует некоторого времени для решения, означает, что мы должны доказать, что любаяАлгоритм, даже очень изобретательный, который еще не знает, не может решить проблему быстрее. Есть много интеллектуальных идей, о которых мы знаем (жадность, согласование, динамическое программирование, линейное программирование, полуопределенное программирование, программирование суммы квадратов и многие другие интеллектуальные идеи), и есть еще много, о которых мы еще не знаем. Исключить один алгоритм или одну конкретную идею разработки алгоритмов недостаточно, мы должны исключить все из них, даже те, о которых мы еще не знаем, даже те, о которых, возможно, даже не знают! И все это можно объединить в одном алгоритме, поэтому мы должны также исключить их комбинации. Там был достигнут некоторый прогресс в направлении , показывая , что некоторые идеи не могут решать сложные Nппроблемы, например, жадность и ее расширения не могут работать, и есть некоторые работы, связанные с алгоритмами динамического программирования, и есть некоторые работы по конкретным способам использования линейного программирования. Но они даже близко не исключают известные нам интеллектуальные идеи (ищите нижние границы в ограниченных моделях вычислений, если вам это интересно).


Барьеры: нижние границы являются Трудно доказать

С другой стороны, у нас есть математические результаты, называемые барьерами, которые говорят, что доказательство нижней границы не может быть таким-то и таким-то и таким-то и почти охватывает все методы, которые мы использовали для доказательства нижних оценок! На самом деле многие исследователи перестали работать над доказательством нижних оценок после того, как Александр Разбаров и Стивен Рудич защитили естественный барьер доказательств . Оказывается, что существование определенного вида доказательств с нижней границей подразумевает небезопасность криптографических генераторов псевдослучайных чисел и многих других криптографических инструментов.

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

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

[С другой стороны, работа Райана Уильямса показывает, что существуют тесные связи между доказательством нижних оценок и доказательством верхних оценок. Смотрите его выступление на ICM 2014, если вам интересно.]


Сокращения: решение проблемы с использованием другой проблемы в качестве подпрограммы / Oracle / Black Box

Идея сокращения очень проста: чтобы решить проблему, используйте алгоритм для другой задачи.

Вот простой пример: предположим, что мы хотим вычислить сумму списка из N натуральных чисел, и у нас есть алгоритм SUм который возвращает сумму двух заданных чисел. Можем ли мы использовать SUм чтобы сложить числа в списке? Конечно!

Проблема:

Входные данные: список из N натуральных чисел Икс1,...,ИксN ,
Выходные данные: return Σязнак равно1NИкся .

Алгоритм редукции:

  1. sзнак равно0
  2. для я от 1 до N
    2.1. sзнак равноSUм(s,Икся)
  3. возврат s

Здесь мы используем SUм в нашем алгоритме в качестве подпрограммы . Обратите внимание , что мы не заботимся о том , как SUм работы, он действует как черный ящик для нас, мы не волнует , что происходит внутри SUм . Мы часто ссылаемся на подпрограмме SUм в качестве оракула . Это похоже на оракула Дельфи в греческой мифологии, мы задаем вопросы, и оракул отвечает на них, и мы используем ответы.

По сути, это и есть сокращение: предположим, что у нас есть алгоритм для задачи, и используем его как оракула для решения другой проблемы. Здесь «эффективный» означает «эффективный», если предположить, что оракул отвечает за единицу времени, то есть мы считаем каждое исполнение оракула одним шагом.

Если оракул возвращает большой ответ, нам нужно прочитать его, и это может занять некоторое время, поэтому мы должны посчитать время, которое требуется нам, чтобы прочитать ответ, который дал нам оракул. Аналогично для написания / задания вопроса от оракула. Но оракул работает мгновенно, то есть, как только мы задаем вопрос от оракула, оракул записывает для нас ответ за одну единицу времени. Вся работа, которую делает оракул, считается одним шагом, но это исключает время, которое требуется нам, чтобы написать вопрос и прочитать ответ.

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

Например, SUм в вопросе выше - это сама функция сложения (а не алгоритм вычисления сложения).

Мы можем задать несколько вопросов от оракула, и эти вопросы не нужно задавать заранее: мы можем задать вопрос и, основываясь на ответе, который возвращает оракул, мы выполним некоторые вычисления самостоятельно, а затем зададим другой вопрос, основываясь на ответе, который мы получили для предыдущий вопрос.

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

Алгоритм , который использует оракул / черный ящик O обычно обозначается как A O .AОAО

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

Более формально:

Говорят , что проблема Q черный ящик сводится к задаче О и писать QTО тогда и только тогда
существует алгоритм таким образом, что для всех входов х , Q ( х ) = О ( х ) .AИкс
Q(Икс)знак равноAО(Икс)

Другими словами , если существует алгоритм который использует оракула O в качестве подпрограммы и решает проблему Q .AОQ

Если наш алгоритм редукции работает в полиномиальное время мы называем это сокращение черного ящика полиномиальное время или просто сокращение Кук (в честь Стивен А. Кук ) и писать Q P T O . (Нижний индекс Т означает «Тьюринг» в честь Алана Тьюринга ).AQTпОT

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

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

Более формально,

Мы говорим, что проблема Q многозначна, сводима к проблеме О и писать QмО тогда и только тогда
существует алгоритм таким образом, что для всех входов х , Q ( х ) = О ( ( х ) ) .AИкс
Q(Икс)знак равноО(A(Икс))

Когда алгоритм редукции является полиномиальное время мы называем это полиномиальное время многих один сокращение или просто сокращение Карп (в честь Ричарда М. Карп ) и обозначим его через QмпО .

Основная причина заинтересованности в данном конкретном неинтерактивном снижении является то , что она сохраняет Nп проблемы: если существует полиномиальные многое одна сокращения от задачи A до Nп проблем В , то также находится в N P ,ANп

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


Пост стал слишком длинным и превышает лимит ответа (30000 символов). Я продолжу ответ в части II .



4
@Kaveh Это потрясающий пост, спасибо. Перед этим разделом в классе я принимал решения, но я немного отстаю в своем понимании доказательства неразрешимости. Я не знаю, связано ли это с моим непониманием сложности.
agent154

5
Я прочитал много книг по сложности от начального уровня (включая Sipser) до более продвинутых. У меня нет проблем с абстрактной математикой (например, я могу читать алгебру Ланга). Этот ответ является лучшим объяснением NP против P. Я бы посоветовал вам больше времени уделять его полировке и делать лекционные заметки. Это может помочь многим людям.
scaaahu

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

10
Этот ответ должен быть сделан в качестве справочного ответа. Все будущие базовые вопросы типа P / NP должны быть переданы в первую очередь. Очень плавное описание!
Пареш

180

Часть II

Продолжение первой части .

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

-полнота:универсальныезадачи N PNп Nп

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

Иногда нам хочется сказать, что проблему трудно решить . Но, как мы упоминали выше, мы не можем использовать нижние оценки для этой цели: теоретически это именно то, что мы хотели бы доказать, однако на практике нам не очень удалось доказать нижние оценки, и в целом их трудно доказать, как мы упоминали выше. Есть ли еще способ сказать, что проблему трудно решить ?

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

Сокращения как относительная сложность

Мы можем думать о нижних границах как об абсолютной сложности проблем. Тогда мы можем рассматривать сокращения как относительную сложность проблем. Мы можем взять сокращение от до В, такAВ как сказать, что легче, чемAВ . Это подразумевается в понятии, которое мы использовали для сокращений. Формально сокращения дают частичные заказы на проблемы.

Если мы сможем эффективно свести проблему к другой проблеме B, то решение A не должно быть труднее, чем решение B. Интуиция заключается в следующем:AВAВ

Пусть является эффективным сокращение по сравнению с к B , т.е. М представляет собой эффективный алгоритм , который использует B и решает . Пусть N будет эффективный алгоритм , который решает B . Мы можем объединить эффективное сокращение M B и эффективный алгоритм N, чтобы получитьMВAВMВANВMВN , который является эффективным алгоритмомкоторый решает.MNA

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

-комплектное означает наиболее сложныепроблемы N PNпNп

Теперь, когда у нас есть относительный способ сравнения сложности проблем, мы можем спросить, какие проблемы наиболее сложны среди проблем в ? Мы называем такие проблемы N P -полными .NпNп

-полных проблемы являются наиболее трудными N P проблемыNпNп,
если мы можем решить -полное проблему эффективно, мы можем решить все N P проблемы эффективно.NпNп

Более формально, мы говорим, что проблема решения является N P -полной, еслиANп

В N P , и для всех N P проблем B , B является полиномиальное время многих один сводится к A ( B P м A ).ANп
NпВВAВмпA

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

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

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

Если задача удовлетворяет второму условию в определении -полноты (т. Е. Условию универсальности), мы называем задачу N P -твердой .Nп
Nп

-hardness это способ сказатьчто проблема трудно.Nп

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

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

Теперь вопросы:

  • Есть ли -полные проблемы?Nп

  • Мы знаем кого-нибудь из них?

Я уже дал ответ, когда мы обсуждали SAT-решатели. Удивительно то, что многие естественные проблемы оказываются N P- полными (подробнее об этом позже). Так что, если мы выбираем случайным образом выбранные естественные задачи в N P , с очень высокой вероятностью это либо то, что мы знаем алгоритм для него за полиномиальное время, либо то, что мы знаем, что это N PNпNпNпNп -завершенным. Число естественных проблем, о которых неизвестно, либо достаточно мало (важный пример - это разложение целых чисел, список подобных проблем см. В этом списке ).

Прежде чем перейти к примерам -полных задач, обратите внимание, что мы можем дать аналогичные определения для других классов сложности и определить классы сложности, такие как E x p T i m e -complete. Но, как я уже сказал, N P занимает особое место: в отличие от N P, другие классы сложности имеют немного естественных полных задач.NпЕИкспTямеNпNп

(Под естественной проблемой я подразумеваю проблему, которую люди действительно заботятся о решении, а не проблемы, которые люди искусственно определяют, чтобы продемонстрировать какую-то точку. Мы можем изменить любую проблему так, чтобы она оставалась по существу той же самой проблемой, например, мы можем изменить ответ для ввода п¬п в SAT, чтобы быть НЕТ. Мы можем определить бесконечно много различных проблем подобным способом, не изменяя по существу проблему. Но кого действительно волнует эта искусственная проблема самостоятельно?)

-полные проблемы: в N P есть универсальные проблемыNпNп

Во-первых, отметим, что если является N P -твердым и A многочленного времени сводится к B, то B также является N P -твердым. Мы можем решить любую проблему N P, используя A, и мы можем решить саму A , используя B , поэтому мы можем решить любую проблему N P, используя B !ANпAВВNпNпAAВNпВ

Это очень полезная лемма. Если мы хотим показать, что проблема является трудной, мы должны показать, что мы можем свести к ней все проблемы N P , что не легко, потому что мы ничего не знаем об этих проблемах, кроме того, что они находятся в N PNпNпNп .

Подумай об этом на секунду. Это удивительно, когда мы впервые видим это. Мы можем доказать, что все проблемы сводимы к SAT и ничего не зная об этих проблемах, кроме того факта, что они находятся в N PNпNп !

SATNпSATSUбsеTSUмNпSATSUбsеTSUм

Nп

Nп

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

Nп


ВИксTК
YЕSКВИксTNО если таких доказательств нет.

UNяВерNп -Жесткий:

ВNпИксВИксUNяВер
TКВИксВИкс .)

TTTК

NпUNяВерNп


MИксMT
YЕSMИксYЕSTNОYЕST

СпT шагов.

яNTерпреTер для этой задачи.

UNяВерNпMИксTКссКяNTерпреTерMYЕSИкссT

SATNп -полным

UNяВерNпUNяВерNп задачиНам нужны проблемы, которые проще.

NпSAT .

SAT , то есть можем ли мы присвоить истинные / ложные переменные, чтобы она оценивалась как истинная.


φ
YЕSφNО если это не так.

SATNп . Мы можем оценить данную пропозициональную формулу по заданному правдивому назначению за полиномиальное время. Верификатор получит назначение истины и оценит формулу для этого назначения истины.


Быть написанным ...

Nп

Nп

Nп

пNп

Что дальше? Куда пойти отсюда?


6
Хотелось бы, чтобы я проголосовал не раз, спасибо, что приложили столько усилий, чтобы ответить!
Fingolfin

2
Ух, классная статья! Я также с нетерпением жду анонсированных частей, особенно «Что делать, если вам нужно решить проблему с NP-полной задачей?».
Тобиас Германн

5
@ xci13 Ты можешь! Upvote первая часть;)
Винс Эми

4
Я создал аккаунт, чтобы проголосовать за ваши посты!
ghosts_in_the_code

6
@ Kaveh Есть ли планы закончить эту чудесно написанную статью?
Габ

26

Более полезно упомянутые ответы, я рекомендую вам высоко смотреть « Beyond Исчисление: Р против NP проблемы » по Майкл Сипзеру . Я думаю, что это видео должно быть заархивировано как одно из ведущих обучающих видео по информатике.

Наслаждайтесь!


Интересно, что мой учебник им. Это не ужасная книга, но она оставляет желать лучшего.
agent154,

8

Копирование моего ответа на аналогичный вопрос по переполнению стека:

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

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

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

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

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

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

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


Теперь, когда мы интуитивно понимаем, что такое NP, мы должны бросить вызов нашей интуиции. Оказывается, есть «проблемы с множественным выбором» - вы имели в виду «проблемы со словом»? Я так думаю, потому что все проблемы NP легки как «множественный выбор» по определению.
Дмитрий Григорьев

По линии выясняется, что есть «проблемы с множественным выбором», которые, в некотором смысле, являются самыми трудными из всех я имел в виду. Оказывается, существуют проблемы с НП, которые в некотором смысле являются наиболее сложными из всех . Эти проблемы NP на самом деле являются простыми задачами множественного выбора по определению, но они также являются самыми сложными из них как проблемы со словами. Стандартный пример - SAT3: он прост как проблема с множественным выбором, но сложен как проблема со словом.
Майкл

7

Простейшим из них является P, к которому относится задача, решаемая за полиномиальное время.

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

Твердость и полнота должна быть с сокращениями. Задача A трудна для класса C, если каждая проблема в C сводится к A. Если задача A трудна для NP , или NP-сложна, если каждая проблема в NP сводится к A.

Наконец, проблема является полной для класса C, если он находится в C, а сложный для C. В вашем случае, проблема A завершена для NP , или NP-полная, если каждая задача в NP сводится к A, а A находится в NP ,

Чтобы добавить к объяснению NP, проблема находится в NP тогда и только тогда, когда решение может быть проверено за (детерминированный) полиномиальное время. Рассмотрим любую NP-полную проблему, которую вы знаете, SAT, CLIQUE, SUBSET SUM, VERTEX COVER и т. Д. Если вы «получаете решение», вы можете проверить его правильность за полиномиальное время. Это, соответственно, присвоения истинности для переменных, полный подграф, подмножество чисел и множество вершин, которые доминируют над всеми ребрами.


7

Из P против NP и зоопарка сложности вычислений видео .

Для компьютера с действительно большой версией проблемы ...

P проблемы

легко решить (Rubix Cube)

NP проблемы

трудно решить, но проверка ответов легко (судоку)

Возможно, это все проблемы P, но мы этого не знаем ... P vs. NP .

NP-полной

Многие проблемы с NP сводятся к одной и той же проблеме (судоку - новичок в списке).

EXP проблемы

действительно трудно решить (например, лучший следующий ход в шахматах)

NP-сложные проблемы

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

SVG эйлеровы диаграммы из P, NP, NP-complete и NP-hard

схема

Как показано в конце видео.

Классные диаграммы Эйлера из P, NP, NP-complete, EXP и NP-hard


2

P , NP , NP-complete и NP-hard - классы сложности, классифицирующие задачи по алгоритмической сложности для их решения. Короче говоря, они основаны на трех свойствах:

таблица классов сложности

Разрешаемое за полиномиальное время: Определяет задачи решения, которые могут быть решены детерминированной машиной Тьюринга (DTM) с использованием полиномиальной величины времени вычислений, т. Е. Его время выполнения ограничено сверху полиномиальным выражением в размере входных данных для алгоритма. Используя обозначение Big-O, эта временная сложность определяется как O(n ^ k), где n - размер входного сигнала и постоянный коэффициент ka.

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

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


Недавно я написал статью на эту тему, в которой содержится более подробная информация, включая демонстрацию кода для превращения проблемы NP в задачу NP-hard: классы сложности задач

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.