Risposte:
Per mostrare che un problema è NP completo, è necessario:
In altre parole, date alcune informazioni C
, puoi creare un algoritmo temporale polinomiale V
che verificherà per ogni possibile input X
se X
è nel tuo dominio o meno.
Dimostrare che il problema delle coperture dei vertici (cioè, per qualche grafo G
, ha un insieme di coperture dei vertici di dimensioni k
tali che ogni spigolo G
abbia almeno un vertice nell'insieme delle coperture ?) È in NP:
il nostro input X
è un grafico G
e un numero k
(questo è dalla definizione del problema)
Considera le nostre informazioni C
come "qualsiasi possibile sottoinsieme di vertici nel grafico G
di dimensione k
"
Quindi possiamo scrivere un algoritmo V
che, dato G
, k
e C
, restituirà se quell'insieme di vertici è una copertura di vertici G
o meno, in tempo polinomiale .
Quindi per ogni grafo G
, se esiste qualche "possibile sottoinsieme di vertici G
di dimensione k
" che è una copertura di vertici, allora G
è in NP
.
Nota che non abbiamo bisogno di trovare C
in tempo polinomiale. Se potessimo, il problema sarebbe in `P.
Nota che l'algoritmo V
dovrebbe funzionare per ogni G
, per alcuni C
. Per ogni input dovrebbero esistere informazioni che potrebbero aiutarci a verificare se l'input è nel dominio del problema o meno. Cioè, non dovrebbe esserci un input in cui l'informazione non esiste.
Ciò comporta l'acquisizione di un problema NP completo noto come SAT , l'insieme di espressioni booleane nella forma:
(A o B o C) e (D o E o F) e ...
dove l'espressione è soddisfacente , cioè esiste un'impostazione per questi booleani, che rende l'espressione vera .
Quindi riduci il problema NP-completo al tuo problema in tempo polinomiale .
Cioè, dato un input X
per SAT
(o qualsiasi problema NP-completo che stai usando), crea un input Y
per il tuo problema, ad esempio X
in SAT se e solo se Y
è nel tuo problema. La funzione f : X -> Y
deve essere eseguita in tempo polinomiale .
Nell'esempio sopra, l'input Y
sarebbe il grafico G
e la dimensione della copertura del vertice k
.
Per una prova completa , dovresti provare entrambi:
che X
è in SAT
=> Y
nel tuo problema
e Y
nel tuo problema => X
in SAT
.
La risposta di marcog ha un collegamento con molti altri problemi NP-complete che potresti ridurre al tuo problema.
Nota a piè di pagina: Nella fase 2 ( Dimostrare che è NP-difficile ), ridurre un altro problema NP-difficile (non necessariamente NP-completo) al problema corrente andrà bene, poiché i problemi NP-completi sono un sottoinsieme di problemi NP-hard (che sono anche in NP).
Devi ridurre un problema NP-Complete al problema che hai. Se la riduzione può essere eseguita in tempo polinomiale, allora hai dimostrato che il tuo problema è NP-completo, se il problema è già in NP, perché:
Non è più semplice del problema NP-completo, poiché può essere ridotto ad esso in un tempo polinomiale che rende il problema NP-Hard.
Vedere la fine di http://www.ics.uci.edu/~eppstein/161/960312.html per ulteriori informazioni.
Per dimostrare che un problema L è NP-completo, è necessario eseguire i seguenti passaggi:
Primo, dimostri che si trova in NP.
Quindi trovi un altro problema che già sai essere NP completo e mostri come riduci polinomialmente il problema NP Hard al tuo problema.