Что такое NP-полный в информатике? - PullRequest
379 голосов
/ 17 октября 2008

Что такое NP-полная проблема? Почему это такая важная тема в информатике?

Ответы [ 14 ]

387 голосов
/ 24 ноября 2008

Что такое NP ?

NP - это совокупность всех проблем с решением (вопросы с ответом "да" или "нет"), для которых ответы "да" могут быть подтверждены за полиномиальное время (O (n k ), где n - размер проблемы, а k - постоянная) детерминированной машиной Тьюринга . Полиномиальное время иногда используется как определение fast или fast .

Что такое P ?

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

Что такое NP-Complete ?

Проблема x в NP также есть в NP-Complete тогда и только тогда, когда любая другая проблема в NP может быть быстро (т. Е. За полиномиальное время) преобразована в x.

Другими словами:

  1. х в NP, а
  2. Каждая проблема в NP сводится к x

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

См. Также сообщение Что такое "P = NP?", И почему это такой знаменитый вопрос?

Что такое NP-Hard ?

NP-Hard - проблемы, которые, по крайней мере, такие же сложные, как самые сложные проблемы в NP. Обратите внимание, что задачи NP-Complete также являются NP-сложными. Однако не все NP-сложные проблемы являются NP (или даже проблемой решения), несмотря на то, что NP имеет префикс. То есть NP в NP-hard не означает недетерминированного полиномиального времени . Да, это сбивает с толку, но его использование укоренилось и вряд ли изменится.

190 голосов
/ 17 октября 2008

NP означает Недетерминированный Полином Время.

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

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

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

31 голосов
/ 17 октября 2008

NP-Complete означает нечто очень конкретное, и вы должны быть осторожны, иначе вы ошибетесь в определении. Во-первых, проблема NP - это проблема да / нет такая, что

  1. Для каждого случая проблемы есть доказательство за полиномиальное время с ответом «да», что ответ «да» или (эквивалентно)
  2. Существует алгоритм полиномиального времени (возможно, с использованием случайных переменных), который имеет ненулевую вероятность ответа «да», если ответом на экземпляр задачи является «да» и будет сказано «нет» 100% от время, если ответ «нет». Другими словами, алгоритм должен иметь уровень ложноотрицательных результатов менее 100% и не содержать ложных срабатываний.

Проблема X является NP-Complete, если

  1. X в NP, а
  2. Для любой проблемы Y в NP есть «сокращение» от Y до X: алгоритм за полиномиальное время, который преобразует любой экземпляр Y в экземпляр X так, что ответом на экземпляр Y является «да» тогда и только тогда, когда X-экземпляр ответа - «да».

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

Пока что никто не придумал такой детерминированный алгоритм за полиномиальное время, но никто не доказал, что его не существует (миллион для каждого, кто может сделать что-либо: проблема P = NP) ). Это не значит, что вы не можете решить конкретный случай проблемы NP-Complete (или NP-Hard). Это просто означает, что у вас не может быть чего-то, что будет надежно работать во всех случаях проблемы так же, как вы могли бы надежно отсортировать список целых чисел. Возможно, вам удастся придумать алгоритм, который будет очень хорошо работать во всех практических случаях проблемы NP-Hard.

22 голосов
/ 17 октября 2008

NP-Complete - это класс задач.

Класс P состоит из тех задач, которые можно решить за полиномиальное время . Например, они могут быть решены в O (n k ) для некоторой константы k, где n - размер ввода. Проще говоря, вы можете написать программу, которая будет работать за разумное время.

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

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

NP-Complete означает, что проблема по крайней мере такая же сложная, как любая проблема в NP.

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

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

20 голосов
/ 19 июля 2013

В основном проблемы этого мира можно отнести к категории

1) неразрешимая проблема 2) неразрешимая проблема 3) NP-проблема 4) P-проблема


1) Первое - это не решение проблемы. 2) Второе - это экспоненциальное время (то есть O (2 ^ n) выше) 3) Третий называется НП. 4) Четвертая легкая проблема.


P: относится к решению проблемы полиномиального времени.

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

NP Complete: в полиномиальном времени мы еще не нашли решение, но оно может быть проверено в полиномиальном времени. Проблема NPC в NP - более сложная проблема, поэтому, если мы сможем доказать, что у нас есть решение P для NPC, то проблемы NP, которые можно найти в решении P.

NP Hard: относится к полиномиальному времени, пока еще не найдено решение, но оно не может быть проверено в полиномиальном времени. NP Трудная проблема превосходит NPC сложность.

18 голосов
/ 17 октября 2008

Если вы ищете пример NP-полной проблемы, то я предлагаю вам взглянуть на 3-SAT .

Основная предпосылка состоит в том, что у вас есть выражение в конъюнктивной нормальной форме , что означает, что у вас есть серия выражений, объединенных OR, которые должны быть истинными:

(a or b) and (b or !c) and (d or !e or f) ...

Проблема 3-SAT состоит в том, чтобы найти решение, которое будет удовлетворять выражению, в котором каждое из OR-выражений имеет ровно 3 логических значения для сопоставления:

(a or !b or !c) and (!a or b or !d) and (b or !c or d) ...

Решением этого может быть (a = T, b = T, c = F, d = F). Однако не было обнаружено ни одного алгоритма, который бы решал эту проблему в общем случае за полиномиальное время. Это означает, что лучший способ решить эту проблему - это, по сути, делать догадки и проверки методом грубой силы и пробовать разные комбинации, пока не найдете подходящую.

Что характерно для проблемы 3-SAT, так это то, что ЛЮБУЮ NP-полную проблему можно свести к проблеме 3-SAT. Это означает, что если вы сможете найти алгоритм полиномиального времени для решения этой проблемы, то вы получите $ 1 000 000 , не говоря уже об уважении и восхищении компьютерных ученых и математиков по всему миру.

18 голосов
/ 17 октября 2008

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

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

14 голосов
/ 17 октября 2008

Честно говоря, Википедия может быть лучшим местом для поиска ответа на этот вопрос.

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

9 голосов
/ 20 ноября 2008

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

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

Это означает, что множество простых задач тоже «в NP», потому что мы можем писать плохие алгоритмы для решения простых задач. Было бы хорошо узнать, какие проблемы в NP являются действительно сложными, но мы не просто хотим сказать: «Это те, для которых мы не нашли хорошего алгоритма». В конце концов, я мог бы столкнуться с проблемой (назовите это X), которая, я думаю, нуждается в супер-удивительном алгоритме. Я говорю миру, что лучший алгоритм, который я мог бы придумать для решения X, плохо масштабируется, и поэтому я думаю, что X - действительно сложная проблема. Но завтра, может быть, кто-нибудь умнее меня придумает алгоритм, который решает X и находится в P. Так что это не очень хорошее определение сложных проблем.

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

5 голосов
/ 23 октября 2008

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

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

Но не все потеряно, если проблема, с которой вы столкнетесь, является NP Complete. Существует обширная и очень техническая область, где люди изучают алгоритмы аппроксимации, которые дадут вам гарантии того, что вы близки к решению полной задачи NP. Некоторые из них являются невероятно сильными гарантиями - например, для 3sat вы можете получить гарантию 7/8 по действительно очевидному алгоритму. Еще лучше, в действительности, есть некоторые очень сильные эвристики, которые превосходно дают отличные ответы (но не гарантируют!) На эти проблемы.

Обратите внимание, что две очень известные проблемы - изоморфизм графов и факторинг - не известны как P или NP.

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