Как доказать, что задача является NP-полной?
У меня проблема с расписанием. Мне нужно доказать, что задача является NP-полной. Какие могут быть методы, чтобы доказать это NP complete?
5 ответов:
чтобы показать, что проблема NP завершена, вам нужно:
показать это в NP
другими словами, дана некоторая информация
C
, вы можете создать алгоритм полиномиального времениV
что будет проверять для каждого возможного входного сигналаX
лиX
в домене или нет.пример
доказать, что проблема вершинных покрытий (то есть для некоторого графа
G
,имеет ли он набор вершинного покрытия размераk
такой, что каждый край вG
имеет по крайней мере одну вершину в крышке установлен?) находится в НП:
наш вход
X
это какой-то графG
и какое-то количествоk
(это из определения проблемы)принять нашу информацию
C
быть " любым возможным подмножеством вершин в графеG
в размереk
"тогда мы можем написать алгоритм
V
, что с учетомG
,k
иC
, вернет ли этот набор вершин является вершинным покрытием дляG
или нет,полиномиальное время.тогда для каждого графика
G
, если существует некоторое " возможное подмножество вершин вG
в размереk
" который является вершинным покрытием, тоG
находится вNP
.Примечание что мы делаем не нужно найти
C
за полиномиальное время. Если бы проблема была бы в П.Примечание алгоритм
V
должны работать для каждыйG
для некоторыхC
. Для каждого входа должно быть существует информация, которая может помочь нам проверить, находится ли вход в проблемной области или нет. То есть, не должно быть входа, где информация не существует.доказать, что это NP трудно
это включает в себя получение известной NP-полной проблемы, как села, набор булевых выражений в виде:
(A или B или C) и (D или E или F) И...
где выражение выполнимой, то есть существует некоторая настройка для этих булевых значений, которая делает выражение правда.
затем уменьшите NP-полную проблему до вашей проблемы за полиномиальное время.
то есть, учитывая некоторые вход
X
наSAT
(или что-то еще NP-полная проблема, которую вы используете), создайте некоторый входY
для вашей проблемы, такой чтоX
находится в СБ тогда и только тогда, когдаY
в вашей проблеме. Функцияf : X -> Y
должны работать в полиномиальное время.в приведенном выше примере вход
Y
был бы графG
и размер крышки вершиныk
.на полное доказательство, вы должны были бы доказать оба:
это
X
вSAT
=>Y
ваши проблемыи
Y
в ваши проблемы =>X
наSAT
.marcog это ответ имеет связь с несколькими другими NP-полными проблемами, которые вы можете свести к своей проблеме.
сноска: в шаге 2 (доказать, что это NP-трудно), сведение другой NP-жесткой (не обязательно NP-полной) проблемы к текущей проблеме будет сделано, так как NP-полные проблемы являются a подмножество NP-трудных задач (которые также находятся в NP).
вам нужно уменьшить NP-полную проблему до проблемы, которую вы имеете. Если сокращение может быть сделано за полиномиальное время, то вы доказали, что ваша проблема NP-полная, если проблема уже находится в NP, потому что:
Это не проще, чем NP-полная задача, так как она может быть сведена к ней за полиномиальное время, что делает задачу NP-трудной.
смотрите конец http://www.ics.uci.edu / ~eppstein/161/960312.html для большего.
во-первых, вы показываете, что он лежит в NP вообще.
тогда вы найдете еще одну проблему, которую вы уже знаете, является NP полной и показать, как вы полиномиально уменьшить NP трудную проблему к вашей проблеме.
- познакомьтесь с подмножеством NP полных задач
- докажите твердость NP: уменьшите произвольный экземпляр полной задачи NP до экземпляра вашей проблемы. Это самый большой кусок пирога, и где знакомство с NP-полной проблемы платит. Сокращение будет более или менее сложным в зависимости от NP полной проблемы, которую вы выберете.
- докажите, что ваша проблема находится в NP : разработайте алгоритм, который может проверить в полиномиальное время, является ли экземпляр решения.
чтобы доказать, что задача L является NP-полной, нам нужно сделать следующие шаги:
- докажите, что ваша задача L принадлежит NP (то есть, что при наличии решения вы можете проверить его в полиномиальное время)
- выберите известную NP-полную задачу L'
- опишите алгоритм f, который преобразует L ' в L
- докажите, что ваш алгоритм верен (формально: x ∈ L ' тогда и только тогда, когда f (x) ∈ L )
- доказать, что алгоритм работает за полиномиальное Ф время