Presumo che tu stia cercando definizioni intuitive, dal momento che le definizioni tecniche richiedono parecchio tempo per capire. Prima di tutto, ricordiamo un concetto preliminare necessario per comprendere quelle definizioni.
- Problema decisionale : un problema con una risposta sì o no .
Ora, definiamo quelle classi di complessità .
P
P è una classe di complessità che rappresenta l'insieme di tutti i problemi di decisione che possono essere risolti in tempi polinomiali .
Cioè, data un'istanza del problema, la risposta sì o no può essere decisa in tempo polinomiale.
Esempio
Dato un grafico collegato G
, i suoi vertici possono essere colorati usando due colori in modo che nessun bordo sia monocromatico?
Algoritmo: inizia con un vertice arbitrario, coloralo di rosso e tutti i suoi vicini blu e continua. Interrompi quando esaurisci i vertici o sei costretto a creare un bordo con entrambi i punti finali dello stesso colore.
NP
NP è una classe di complessità che rappresenta l'insieme di tutti i problemi decisionali per i quali i casi in cui la risposta è "sì" hanno prove che possono essere verificate in tempo polinomiale.
Ciò significa che se qualcuno ci fornisce un'istanza del problema e un certificato (a volte chiamato testimone) alla risposta sì, possiamo verificare che sia corretta in tempo polinomiale.
Esempio
La fattorizzazione in numeri interi è in NP. Questo è il problema che ha dato numeri interi n
e m
, c'è un numero intero f
con 1 < f < m
, tale da f
dividere n
( f
è un piccolo fattore di n
)?
Questo è un problema decisionale perché le risposte sono sì o no. Se qualcuno ci consegna un'istanza del problema (quindi ci consegna numeri interi n
e m
) e un numero intero f
con 1 < f < m
, e affermano che f
è un fattore di n
(il certificato), possiamo controllare la risposta in tempo polinomiale eseguendo la divisione n / f
.
NP-completo
NP-completo è una classe di complessità che rappresenta l'insieme di tutti i problemi X
in NP per cui è possibile ridurre qualsiasi altro problema NP Y
a X
in tempo polinomiale.
Intuitivamente ciò significa che possiamo risolvere Y
rapidamente se sappiamo come risolvere X
rapidamente. Precisamente, Y
è riducibile a X
, se c'è un algoritmo di tempo polinomiale f
di trasformare le istanze y
di Y
a istanze x = f(y)
di X
in tempo polinomiale, con la proprietà che la risposta a y
è sì, se e solo se la risposta a f(y)
è sì.
Esempio
3-SAT
. Questo è il problema in cui ci viene data una congiunzione (AND) di disgiunzioni (OR) a 3 clausole, dichiarazioni del modulo
(x_v11 OR x_v21 OR x_v31) AND
(x_v12 OR x_v22 OR x_v32) AND
... AND
(x_v1n OR x_v2n OR x_v3n)
dove ognuno x_vij
è una variabile booleana o la negazione di una variabile da un elenco predefinito finito (x_1, x_2, ... x_n)
.
Si può dimostrare che ogni problema NP può essere ridotto a 3-SAT . La prova di ciò è tecnica e richiede l'uso della definizione tecnica di NP ( basata su macchine di Turing non deterministiche ). Questo è noto come teorema di Cook .
Ciò che rende importanti i problemi NP-completi è che se si trova un algoritmo di tempo polinomiale deterministico per risolverne uno, ogni problema NP è risolvibile in tempo polinomiale (un problema per domarli tutti).
NP-hard
Intuitivamente, questi sono i problemi che sono tanto difficili quanto i problemi NP-completi . Si noti che i problemi NP-hard non devono necessariamente trovarsi in NP e non devono essere problemi di decisione .
La definizione precisa qui è che un problema X
è NP-difficile, se c'è un problema NP-completo Y
, che Y
è riducibile a X
in tempo polinomiale .
Ma poiché qualsiasi problema NP-completo può essere ridotto a qualsiasi altro problema NP-completo in tempo polinomiale, tutti i problemi NP-completi possono essere ridotti a qualsiasi problema NP-difficile in tempo polinomiale. Quindi, se esiste una soluzione a un problema NP-difficile in tempo polinomiale, esiste una soluzione a tutti i problemi NP in tempo polinomiale.
Esempio
Il problema di arresto è un problema NP-difficile. Questo è il problema che ha dato un programma P
e input I
, si fermerà? Questo è un problema decisionale ma non si trova in NP. È chiaro che qualsiasi problema NP completo può essere ridotto a questo. Come altro esempio, qualsiasi problema NP completo è NP-difficile.
Il mio problema preferito NP-completo è il problema Minesweeper .
P = NP
Questo è il problema più famoso nell'informatica e una delle più importanti questioni in sospeso nelle scienze matematiche. In effetti, il Clay Institute offre un milione di dollari per una soluzione al problema (la scrittura di Stephen Cook sul sito Web di Clay è abbastanza buona).
È chiaro che P è un sottoinsieme di NP. La domanda aperta è se i problemi NP abbiano o meno soluzioni deterministiche di tempo polinomiale. Si ritiene in gran parte che non lo facciano. Ecco un eccezionale articolo recente sull'ultimo (e l'importanza) del problema P = NP: lo stato del problema P contro NP .
Il miglior libro sull'argomento è Computer e intrattabilità di Garey e Johnson.
I
sullen
variabili, prova tutte le2^n
possibili assegnazioni alle variabili e fermati se uno soddisfa la proposizione e altrimenti entra in un ciclo infinito. Vediamo che questo algoritmo si ferma se e solo seI
è soddisfacente. Quindi, se avessimo un algoritmo temporale polinomiale per risolvere il problema di arresto, potremmo risolvere SAT in tempo polinomiale. Pertanto, il problema di arresto è NP-difficile.