Что такое NP-полная проблема? Почему это такая важная тема в информатике?
Что такое NP-полная проблема? Почему это такая важная тема в информатике?
Ответы:
NP означает недетерминированное полиномиальное время.
Это означает, что проблема может быть решена за полиномиальное время с помощью недетерминированной машины Тьюринга (например, обычной машины Тьюринга, но также с недетерминированной функцией «выбора»). По сути, решение должно быть тестируемым за раз. Если это так, и известная проблема NP может быть решена с использованием данной проблемы с измененным вводом (проблема NP может быть сведена к данной проблеме), то проблема является NP завершенной.
Главное, что нужно убрать из NP-полной задачи, это то, что она не может быть решена за полиномиальное время любым известным способом. NP-Hard / NP-Complete - это способ показать, что некоторые классы проблем не могут быть решены в реальном времени.
Изменить: Как уже отмечали другие, часто есть приблизительные решения для NP-Complete проблем. В этом случае приближенное решение обычно дает границу аппроксимации с использованием специальных обозначений, которые говорят нам, насколько близко аппроксимация.
NP - это совокупность всех проблем с решением (вопросов с ответом «да» или «нет»), для которых ответы «да» могут быть проверены за полиномиальное время (O (n k ), где n - размер проблемы, а k - это постоянная) детерминированной машиной Тьюринга . Полиномиальное время иногда используется как определение быстро или быстро .
P есть множество всех задач принятия решений , которые могут быть решены в полиномиальное время на детерминированной машине Тьюринга . Поскольку они могут быть решены за полиномиальное время, они также могут быть проверены за полиномиальное время. Следовательно, P является подмножеством NP.
Задача x, которая есть в NP, также находится в NP-Complete, если и только если любая другая проблема в NP может быть быстро (т.е. за полиномиальное время) преобразована в x.
Другими словами:
Итак, что делает NP-Complete настолько интересным, так это то, что если бы любая из проблем NP-Complete должна была быть решена быстро, то все проблемы NP можно было решить быстро.
Смотрите также пост Что такое "P = NP?", И почему это такой знаменитый вопрос?
NP-Hard - это проблемы, которые, по крайней мере, такие же сложные, как самые сложные проблемы в NP. Обратите внимание, что задачи NP-Complete также являются NP-сложными. Однако не все NP-сложные проблемы являются NP (или даже проблемой решения), несмотря на то, NP
что имеют префикс. То есть NP в NP-hard не означает недетерминированное полиномиальное время . Да, это сбивает с толку, но его использование укоренилось и вряд ли изменится.
NP-Complete означает нечто очень конкретное, и вы должны быть осторожны, иначе вы ошибетесь в определении. Во-первых, проблема NP - это проблема да / нет, такая, что
Задача X является NP-полной, если
Если X является NP-полным и существует детерминированный алгоритм за полиномиальное время, который может правильно решить все случаи X (0% ложных срабатываний, 0% ложных отрицательных результатов), то любая проблема в NP может быть решена с помощью детерминированных полиномиальных время (уменьшением до X).
До сих пор никто не придумал такой детерминистический алгоритм за полиномиальное время, но никто не доказал, что его не существует (миллион для каждого, кто может сделать что-либо: проблема P = NP ). Это не значит, что вы не можете решить конкретный случай проблемы NP-Complete (или NP-Hard). Это просто означает, что у вас не может быть чего-то, что будет надежно работать во всех случаях проблемы так же, как вы могли бы надежно отсортировать список целых чисел. Возможно, вам удастся придумать алгоритм, который будет очень хорошо работать во всех практических случаях проблемы NP-Hard.
В основном проблемы этого мира могут быть классифицированы как
1) неразрешимая проблема 2) неразрешимая проблема 3) NP-проблема 4) P-проблема
1) Первое - это не решение проблемы. 2) Второе - это экспоненциальное время необходимости (то есть O (2 ^ n) выше). 3) Третий называется НП. 4) Четвертая проблема легкая.
П: относится к решению проблемы полиномиального времени.
NP: относится к полиномиальному времени, чтобы найти решение. Мы не уверены, что решения за полиномиальное время не существует, но как только вы предоставите решение, это решение может быть проверено за полиномиальное время.
NP Complete: относится к полиномиальному времени, нам еще предстоит найти решение, но его можно проверить за полиномиальное время. Проблема NPC в NP - более сложная проблема, поэтому, если мы сможем доказать, что у нас есть P-решение проблемы NPC, тогда проблемы NP, которые можно найти в P-решении.
NP Hard: относится к полиномиальному времени, пока еще не найдено решение, но оно точно не может быть проверено в полиномиальном времени. NP Hard проблема превосходит NPC сложность.
NP-Complete - это класс задач.
Класс P
состоит из тех задач, которые разрешимы за полиномиальное время . Например, они могут быть решены в O (n k ) для некоторой константы k, где n - размер ввода. Проще говоря, вы можете написать программу, которая будет работать в разумные сроки.
Класс NP
состоит из тех задач, которые можно проверить за полиномиальное время. То есть, если нам дано потенциальное решение, то мы можем проверить, является ли данное решение правильным за полиномиальное время.
Некоторыми примерами являются проблема булевой удовлетворенности (или SAT ) или проблема цикла Гамильтона. Есть много проблем, о которых известно, что они относятся к классу NP.
NP-Complete
означает, что проблема не менее сложна, чем любая проблема в NP.
Это важно для информатики, потому что было доказано, что любая проблема в NP может быть преобразована в другую проблему в NP-complete. Это означает, что решение любой NP-полной проблемы - это решение всех NP-задач.
Многие алгоритмы безопасности зависят от того, что не существует известных решений для сложных проблем NP. Это определенно оказало бы значительное влияние на вычисления, если бы решение было найдено.
Это класс проблем, где мы должны смоделировать каждую возможность, чтобы убедиться, что у нас есть оптимальное решение.
Для некоторых задач NP-Complete есть много хороших эвристик, но в лучшем случае они являются лишь догадкой.
Если вы ищете пример 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 , не говоря уже об уважении и восхищении компьютерными учеными и математиками во всем мире.
Честно говоря, Википедия может быть лучшим местом для поиска ответа на этот вопрос.
Если NP = P, то мы можем решать очень сложные задачи гораздо быстрее, чем мы думали раньше. Если мы решим только одну задачу NP-Complete за P (полиномиальное) время, то она может быть применена ко всем другим задачам в категории NP-Complete.
Нам нужно разделить алгоритмы и задачи. Мы пишем алгоритмы для решения проблем, и они масштабируются определенным образом. Хотя это упрощение, давайте пометим алгоритм как «P», если масштабирование достаточно хорошее, и «NP», если это не так.
Полезно знать о проблемах, которые мы пытаемся решить, а не об алгоритмах, которые мы используем для их решения. Итак, мы скажем, что все задачи, которые имеют алгоритм масштабирования, находятся "в P". А те, у которых алгоритм плохого масштабирования, находятся "в NP".
Это означает, что множество простых задач тоже «в NP», потому что мы можем написать плохие алгоритмы для решения простых задач. Было бы хорошо узнать, какие проблемы в NP являются действительно сложными, но мы не просто хотим сказать: «Это те, для которых мы не нашли хороший алгоритм». В конце концов, я мог бы столкнуться с проблемой (назовите это X), которая, я думаю, нуждается в супер-удивительном алгоритме. Я говорю миру, что лучший алгоритм, который я мог бы придумать для решения X, плохо масштабируется, и поэтому я думаю, что X - действительно сложная проблема. Но завтра, может быть, кто-нибудь умнее меня придумает алгоритм, который решает X и находится в P. Так что это не очень хорошее определение сложных проблем.
Тем не менее, в NP есть много проблем, для которых никто не знает хорошего алгоритма. Так что, если бы я мог доказать, что X - это проблема определенного рода: такая, где хороший алгоритм для решения X также может быть использован некоторым окольным путем, чтобы дать хороший алгоритм для любой другой проблемы в NP. Что ж, теперь люди могут быть немного более убеждены в том, что X - действительно сложная проблема. И в этом случае мы называем X NP-Complete.
Приведенные выше определения для полных задач NP верны, но я подумал, что могу лирически отнестись к их философскому значению, так как никто еще не решил эту проблему.
Почти все сложные проблемы, с которыми вы столкнетесь, будут NP Complete. В этом классе есть что-то очень фундаментальное, и кажется, что оно вычислительно отличается от легко решаемых задач. У них своего рода вкус, и их не так сложно узнать. По сути, это означает, что любой довольно сложный алгоритм невозможно точно решить - планирование, оптимизация, упаковка, покрытие и т. Д.
Но не все потеряно, если проблема, с которой вы столкнетесь, является NP Complete. Существует обширная и очень техническая область, где люди изучают алгоритмы аппроксимации, которые дадут вам гарантии того, что вы близки к решению полной задачи NP. Некоторые из них являются невероятно сильными гарантиями - например, для 3sat вы можете получить гарантию 7/8 по действительно очевидному алгоритму. Еще лучше, в действительности, есть некоторые очень сильные эвристики, которые превосходно дают отличные ответы (но не гарантируют!) На эти проблемы.
Обратите внимание, что две очень известные проблемы - изоморфизм графов и факторинг - не известны как P или NP.
Я слышал объяснение, а именно: «NP-полнота, вероятно, является одной из наиболее загадочных идей при изучении алгоритмов.« NP »означает« недетерминированный полиномиальное время »и является названием того, что называется классом сложности, какие проблемы могут принадлежать. Важным в классе сложности NP является то, что проблемы в этом классе могут быть провереныалгоритмом полиномиального времени. В качестве примера рассмотрим проблему подсчета вещей. Предположим, на столе куча яблок. Проблема в том, сколько там яблок? Вам предоставляется возможный ответ 8. Вы можете проверить этот ответ за полиномиальное время, используя алгоритм подсчета яблок. Подсчет яблок происходит за O (n) (это обозначение Big-oh), потому что для подсчета каждого яблока требуется один шаг. Для n яблок нужно n шагов. Эта проблема в классе сложности NP.
Задача классифицируется как NP-полная, если можно показать, что она является NP-Hard и может быть проверена за полиномиальное время. Не вдаваясь слишком глубоко в обсуждение NP-Hard, достаточно сказать, что есть определенные проблемы, решения которых за полиномиальное время не были найдены. То есть требуется что-то вроде n! (n факториал) шаги для их решения. Однако, если вам дано решение проблемы NP-Complete, вы можете проверить это за полиномиальное время.
Классическим примером проблемы NP-Complete является проблема коммивояжера ».
Автор: ApoxyButt От: http://www.everything2.com/title/NP-complete
Н.П. Полная задача: -
1 Решение Решение A называется NP complete, если оно имеет следующие два свойства: -
Некоторые Ex: -
NP-полные задачи - это набор задач, для каждой из которых любая другая NP-проблема может быть сведена за полиномиальное время и решение которой еще может быть проверено за полиномиальное время. То есть любая проблема NP может быть преобразована в любую из задач NP-полной. - Неформально, NP-полная проблема - это NP-проблема, которая, по крайней мере, такая же «сложная», как и любая другая проблема в NP.
Насколько я понимаю
P - это множество задач, которые можно решить за полиномиальное время с помощью детерминированной TM.
NP - это набор задач, для решения которых требуется недетерминированный TM, чтобы его можно было решить за полиномиальное время. Это означает параллельную проверку всех возможных переменных, каждый из которых занимает полиномиальное время. Если проблема разрешима, то по крайней мере одно из этих параллельных состояний должно иметь решение проблемы. Это также означает, что если вы сделали предположение о переменных решения, то единственное, что нужно, это проверить правильность решения за полиномиальное время.
NP-Hard - набор, где проблемы, по крайней мере, такие же сложные, как NP. Любая проблема в NP может быть преобразована в задачу NP-Hard за полиномиальное время. Эти проблемы не могут быть решены за полиномиальное время, если P не равно NP. То есть, когда самая сложная проблема в NP решается за полиномиальное время, тогда только NP-Hard проблемы разрешимы за полиномиальное время.
NP-Complete - это набор пересечений NP и NP-Hard. Любая проблема NP может быть преобразована в задачу NP-Complete за полиномиальное время. Это означает, что если у любого из NP-Complete может быть эффективное решение, то любая проблема NP может быть решена с той же эффективностью.
Пожалуйста, дайте мне знать, если я сделал какую-либо ошибку.
проблема NP - та, где компьютерный алгоритм, который проверяет решение, может быть создан за полиномиальное время.
проблема NP-Complete - это NP, но также, если вы можете решить ее за полиномиальное время (называемое P), тогда все проблемы NP - P.
Так что взломай.