Что такое NP и NP-полные проблемы? [закрытый]
Я изо всех сил пытаюсь понять, что недетерминированных полиномиальных задач и NP-полные задачи. Я понимаю, что такое полиномиально-временные разрешимые проблемы, и видел в Википедии о проблемах NP. Прочитав об этом, я попытался подумать о некоторых примерах проблем. Насколько я понимаю, поиск глубины в неориентированном NP-завершен, так как каждое решение может быть принято недетерминированно (i.e если я принял неправильное решение, я мог бы вместо этого попробовать другой выбор) если граф большой (cit-многочлен, если размер графа мал.)
может ли кто-нибудь кратко объяснить все эти NP-термины простыми примерами, не используя много математики?
3 ответов
есть много способов думать о NP и NP-полноте. Я начну с определения NP, тогда поговорим о NP-твердости, и, наконец,NP-полноте.
на высоком уровне, P и NP несколько классов задач. Проблема в P Если есть вопрос " да " или " нет " (a решение проблемы) и есть некоторый алгоритм это решает проблему в полиномиальное время. Например, вопрос "Можете ли вы получить от узла u к узлу v в этом графике?"принадлежит P потому что вы можете решить его с помощью поиска глубины. (Обратите внимание, что сам DFS не находится в P, так как DFS является алгоритм, а не ). Еще один пример проблемы в P будет проверять, является ли последовательность в отсортированном порядке.
проблема в NP если это вопрос " да " или " нет " (a решение проблемы), где правильный ответ может быть проверен за полиномиальное время. Например, классический NP проблема заключается в том, можно ли, учитывая набор весов известного веса, выбрать набор весов, который весит ровно некоторое количество k (это называется проблема подмножество сумме). Может быть сложно выяснить, является ли набор весов с этим свойством существует, но если я дам вам набор весов, который, как я сказал, Я знаю, был правильным, Вы можете очень легко проверить, дал ли я вам правильный набор весов, просто сложив их и увидев, если они составили k.
причина NP называется "недетерминированным многочленом" - это другой способ мышления о NP - это подумать о магическом алгоритме, который может каким-то образом угадать правильный ответ на проблему в полиномиальное время. То есть, если вы можете написать алгоритм, который позволяет делать догадки об ответе на проблему и работает в полиномиальное время, то проблема, которую вы решаете, находится в NP. Чтобы вернуться к нашему примеру весов, мы могли бы написать такой алгоритм угадывания для задачи следующим образом. Начните с того, что в линейном времени угадайте, какой набор весов является правильным набором весов, затем сложите их все и посмотрите, составляют ли они K. Если да, сообщите, что ответ "да". В противном случае скажите "нет"."Если это программа всегда гарантированно делает правильные догадки, затем, учитывая любой вход в проблему, которая имеет решение, она всегда найдет его и сообщит "да", а если нет решения, она всегда будет угадывать неправильно и сообщать "нет"."
один из самых фундаментальных и важных вопросов в информатике прямо сейчас является ли любая проблема, которая, как известно, в NP также в P. То есть, если мы сможем легко проверка ответ на вопрос эффективно (в полиномиальное время), можем ли мы всегда решить эта проблема эффективно (в полиномиальное время)? Известно, что любая проблема в P также является проблемой в NP, так как вы можете использовать алгоритм полиномиального времени для получения ответа, а затем проверить, правильно ли это, но никто никогда не находил способ решения произвольных задач в NP за полиномиальное время.
причина этого в том, что некоторые проблемы в NP называются NP - complete, что означает, что (неофициально) они, по крайней мере, так же трудно, как и любая другая проблема в NP. Если бы мы могли решить эти проблемы эффективно (полиномиальное время), то мы могли бы решить каждую проблему в NP за полиномиальное время. Это было бы огромное дело, так как есть много проблем в NP это чрезвычайно важно, что в настоящее время у нас нет хороших, быстрых алгоритмов для. Это также очарование P = NP вопрос, так как все, что потребуется, будет один алгоритм, чтобы показать, что огромный класс проблем, предположительно непрактично трудных для решения, на самом деле будет разрешим эффективно.
более формально, проблема в NP называется NP - complete, если за полиномиальное время вы можете преобразовать любой экземпляр любого другого NP проблема в экземпляр эта проблема. Вышеуказанная проблема с весами является такой проблемой, как и проблема определения имеет ли булева формула удовлетворительное назначение, решение некоторых задач оптимизации над целыми числами (целочисленного программирования), определить самый быстрый маршрут для посещения ряда мест (коммивояжера), или определение того, как назначить сотовые вышки в городе, используя наименьшее количество частот (раскраска графа). Даже определение того, можно ли решить такую игру, как судоку и тральщик известно, что NP - завершите для произвольных размеров доски.
(некоторые проблемы имеют это последнее свойство - что любая проблема в NP может быть эффективно преобразован в эту проблему , но сами они не находятся в NP. Эти проблемы называются NP-тяжело.)
с практической точки зрения, если вы не когда-либо просили решить проблему, которая, как известно,NP-полное или NP - трудно, не ожидайте найти точное решение в любое разумное время. В некоторых случаях даже невозможно эффективно приближать решения в пределах какой-либо точности. Вам лучше всего искать альтернативную проблему, чтобы попытаться решить или смириться с эвристическим решением, которое хорошо работает в большинстве, но не во всех случаях.
Что касается ваших оригинальных мыслей о DFS NP-полно, только проблемы можно в NP или NP - complete; алгоритмы не могут. DFS-это алгоритм решения задачи достижимости графа-учитывая два узла в графе, есть ли путь от первого ко второму? Эта проблема в NP потому что, если есть путь, его легко проверить, но это (вероятно) не NP - complete, потому что мы знаем, что можем решить его в полиномиальное время, используя ДФХ.
надеюсь, что это помогает!
меня учили эмпирическому правилу в колледже: проблема находится в NP, если, учитывая решение, решение может быть проверено быстро (т. е. в полиномиальное время).
Я постараюсь разобрать ваш пример, надеюсь, что со всеми другими ресурсами в интернете вы можете добиться прогресса.
несколько вопросов
- DFS не является NP-трудной проблемой,поэтому ее не NP-полная.
- NP-полнота должна быть сформулирована в терминах проблемы решения - я не знаю, что вы имеете в виду, принимая неправильное решение
- размер входного сигнала не имеет ничего общего с NP-завершенностью или твердостью. Каждая проблема имеет время выполнения как функция от размера задачи, величина этой функции заключается в том, как решается Поли-время (а именно, если оно полиномиальное или экспоненциальное)