Classi di complessità P e NP
# Classi di complessità P e NP

Il problema delle classi P e NP è un problema tuttora aperto nella teoria della complessità computazionale.

Nonostante ci sia in palio un premio di un milione di dollari il problema rimane ancora senza una soluzione (si tratta di uno dei problemi del millennio).

## Definizione

A livello informale, esso richiede di determinare se ogni problema per il quale un computer è in grado di verificare la correttezza di una soluzione positiva, in un tempo accettabile, sia anche un problema che può essere risolto dal computer in un tempo accettabile (ovvero se il computer sia in grado di trovare da solo una soluzione positiva in un tempo accettabile). Se la risposta è no, allora esistono problemi per i quali è più complesso calcolare una certa soluzione che verificarla.

Una definizione formale fa uso delle classi di complessità P e NP. La prima consiste di tutti quei problemi di decisione che possono essere risolti con una macchina di Turing deterministica in un tempo che è polinomiale rispetto alla dimensione dei dati di ingresso; la seconda consiste di tutti quei problemi di decisione le cui soluzioni positive possono essere verificate in tempo polinomiale avendo le giuste informazioni, o, equivalentemente, la cui soluzione può essere trovata in tempo polinomiale con una macchina di Turing non deterministica. Il problema delle classi P e NP si risolve quindi nella seguente domanda:

    P è uguale a NP?

Un esempio per avere un'idea di cosa ciò vuole dire. Supponiamo di voler calcolare tutti i divisori (divisione intera, ovvero con resto pari a zero) di un numero n. Il problema, quindi, è trovare tutti i numeri x tali che x è un divisore di n.

È abbastanza facile verificare che un certo numero $x_0$ è divisore di n; è sufficiente svolgere l'operazione di divisione e controllare il resto: se è pari a zero, il numero è un divisore, altrimenti non lo è. Il numero di passaggi richiesti per eseguire l'operazione di divisione è tanto maggiore quanto maggiore è il numero n, tuttavia essa risulta sempre abbastanza veloce perché il tempo da essa richiesto sia considerato accettabile.

Al contrario, potrebbe non essere altrettanto facile determinare l'insieme di tutti i divisori. Infatti, quasi tutti i metodi finora ideati nel corso dei secoli richiedono un tempo che aumenta rapidamente al crescere del valore di n, troppo perché esso sia considerato accettabile.

## Problemi NP-completi

Un ruolo importante in questa discussione è giocato dall'insieme dei problemi NP-completi, che possono essere intuitivamente descritti come quei problemi che sicuramente non apparterrebbero a P se P fosse diverso da NP. Al contrario, dimostrando anche per un solo problema NP-completo la sua appartenenza a P, si otterrebbe una dimostrazione che P e NP sono equivalenti. In un certo senso, i problemi NP-completi sono quelli che meno probabilmente appartengono anche a P.

