12 KiB
Analisi della complessita'
Le classi di complessita' suddividono i problemi in base alla risolubilita' con un certo quantitativo di risorse (tempo / spazio, si tratta il tempo).
3 categorie principali: 1. Problemi che ammettono algoritmi di soluzione efficienti (polinomiali) 2. Problemi intrattabili (irrisolvibili tramite algoritmi efficienti) 3. Problemi per i quali una soluzione efficiente non e' ancora stata trovata, ma non e' stato dimostrato che non esista.
A questi si aggiungono i problemi che non sono risolvibili algoritmicamente. La maggior parte dei problemi trattati si identifica nella classe 3, presentando caratteristiche molto simili gli uni agli altri. Per questo si possono definire metodi / tecniche comuni ai vari problemi.
Problemi di Decisione
Un problema di decisione ammette solo due possibili soluzioni (si/no).
Puo' essere rappresentato da una coppia <I,q>
dove I e' l'insieme delle istanze e
q e' un predicato su I, ovvero una funzione q: I -> {0,1}
Algoritmi decisionali non deterministici
Gli algoritmi decisionali mirano a risolvere problemi di decisione.
Un algoritmo non deterministico di fronte a una scelta:
- Sceglie, dove possibile, la strada giusta generando tutte le alternative contemporaneamente utilizzando piu' copie di se stesso.
Se esiste almeno una scelta che porta al successo, allora l'algoritmo risponde si'.
Schema generale di un A.ND
Gli algoritmi non deterministici operano su di una sequenza di scelte: ognuna avviene su un sottoinsieme che e' funzione delle scelte precedenti.
Schema generale:
non_det(...)
...
for i <- 1 to n
S[i] <- choice(I[i])
if (S[1]..S[i] non puo' essere soluzione) failure
if (S[1]..S[i] e' soluzione) success
failure / success
Certificare la soluzione di un A.ND
La soluzione scelta dev'essere verificata (certificata) in maniera efficiente (polinom.) Solitamente, la risposta success viene data solo dopo la verifica.
Questo significa che prendendo la decisione giusta in ogni punto di decisione si potrebbe determinare velocemente se esiste una soluzione. Questo processo e' chiamato Oracolo.
Gli algoritmi non deterministici danno una risposta tramite una serie di mosse corrette che poi verificano in maniera efficiente. Quelli deterministici prendono decisioni provando ad una ad una tutte le possibili scelte.
Si nota che per quanto un algoritmo sia non deterministico, esistono algoritmi di verifica della soluzione prodotta che sono deterministici e con complessita' polinomiale.
Simulare un programma ND con uno D
Per simulare un programma non deterministico con uno deterministico, e' necessario generare ed esplorare deterministicamente lo spazio delle soluzioni.
Questo significa visitare l'albero delle scelte corrispondente alla computazione ND, il che ha complessita' esponenziale per un numero di foglie superpolinomiale.
A.ND: Commesso viaggiatore
Il problema del commesso viaggiatore puo' essere riformulato come un problema di decisione:
Dato un grafo G non orientato, completo e pesato, esiste un “ciclo semplice”
(che tocca tutti i vertici) di costo non superiore a un costo prefissato ?
(algoritmo su slides)
Si nota come l'insieme delle scelte varia durante l'esecuzione dell'algoritmo, in quanto le citta' visitate vengono eliminate dalle successive scelte possibili.
A.ND: Cricca
Dato un grafo G non orientato, esiste in G una cricca di
dimensione prefissata k, ossia esistono in G k vertici
ogni coppia dei quali risulta adiacente ?
La soluzione associa ad ogni vertice un attributo S[i] booleano che ricorda se il vertice e' gia' stato scelto per la cricca attuale. L'insieme delle scelte non varia.
(algoritmo su slides)
Classi di complessita'
Si effettuano alcune ipotesi per poter trattare in modo omogeneo problemi eterogenei:
-
I problemi di decisione non possono essere piu' difficili di uno di ricerca o ottimizzazione. L'intrattabilita' di un problema decisionale implica l'intrattabilita' delle altre formulazioni del problema.
-
Si considera il modello di calcolo RAM, che coincide con le funzioni calcolabili tramite i formalismi della macchina di Turing, del lambda-calcolo, etc. Questa classe di funzioni e' detta ricorsive-parziali ed e' estremamente robusta.
-
Codifica dati concisa: la rappresentazione dei dati in una qualunque base non cambia la risolubilita' polinomiale del problema, ad eccezione della rappresentazione in base unaria.
-
Costi logaritmici: vedi criterio di costo uniforme / logaritmico.
Criterio di costo uniforme / logaritmico
Basandosi sull'analisi asintotica della complessita' nel tempo, in particolare sull'ordine di grandezza nel tendere ad infinito, si puo' definire la rapidita' di incremento nel tempo di calcolo al crescere delle dimensioni del problema.
Questo permette di stabilire per che dimensioni dell'input un algoritmo e' utilizzabile e per confrontarne le prestazioni con altri algoritmi.
Per determinare le quantita' di tempo e spazio impiegati da un programma RAM, si usano due criteri:
- Criterio di costo uniforme: l'esecuzione di un'istruzione del programma richiede 1 unita' di tempo indipendentemente dal costo degli operandi. Utile per casi in cui la dimesione degli interi calcolati non aumenta in maniera eccessiva.
- Criterio di costo logaritmico: il tempo necessario a calcolare ogni istruzione dipende dal numero di bit necessari a rappresentare gli operandi.
Per questo si puo' definire: Il tempo di calcolo richiesto al programma P su input x secondo il criterio logaritmico e' la somma dei costi delle istruzioni eseguite nella computazione P su x.
Questo significa: costo in tempo == somma dei costi delle istruzioni.
Nota: il criterio uniforme e il criterio logaritmico portano alle volte a valutazioni
drasticamente differenti, in cui il criterio uniforme risulta in un tempo
molto minore del criterio logaritmico. -> esempio y = 3^(2n)
Classe P
La classe P rappresenta tutti i problemi di decisione per la cui soluzine esistono algoritmi deterministici di complessita' polinomiale nella dimensione dei dati in input.
Classe NP
La classe NP rappresenta tutti i problemi di decisione per la cui soluzione esistono algoritmi non deterministici di complessita' polinomiale nella dimensione dei dati in input.
I problemi appartenenti alla classe NP sono quelli per cui un algoritmo deterministico di complessita' polinomiale non e' ancora stato trovato, ma esistono algoritmi di certificazione deterministici con complessita' polinomiale.
Pertanto: NP e' anche definita come la classe di problemi per cui esistono certificati polinomiali.
Problemi interessanti in NP
- Soddisfattibilita' di circuiti logici (AND,OR,NOT)
- Soddisfattibilita' di formule (3-SAT)
- Copertura di vertici
- Insieme indipendente
- Copertura esatta di insiemi
- Circuito Hamiltoniano
- Programmazione lineare 0/1
P e NP
Si sa che P appartiene a NP (e' un subset), ma non si sa' se la contenenza e' propria (non include l'uguale) oppure impropria (include l'uguale). In pratica, non si e' riusciti a dimostrare se P = NP oppure se P != NP.
Riducibilita' polinomiale
Due problemi, Q e R tale che R: Q e' riducibile a R se:
- esiste una funzione f che trasformi le istanze di input per Q in istanze di input per R.
- Per ogni istanza di input di Q, Q risponde si su quell'istanza se e solo se R risponde si su f(x).
Q(x) <=> R(f(x))
Riducibilita' polinomiale e NP-completezza
Teoremi
-
Q e' riducibile a R e R appartiene a NP => Q appartiene a NP
-
Q e' riducibile a R e R appartiene a P => Q appartiene a P
Teorema di Cook-Levin
Per ogni Q appartenente a NP => Q e' riducibile al problema Domino-limitato.
La dimostrazione del problema, complessa, e' basata sull'utilizzo di una macchina di turing non-deterministica che risolva il problema in tempo polinomiale. (vedi slides)
Corollario
P = NP <=> Domino-limitato appartiene a P
NP-hard (NP-arduo)
Un problema Q e' detto NP-arduo se: Per ogni Q' appartente a NP, Q' e' riconducibie a Q
Questo significa che per dimostrare che un problema e' NP-arduo basta dimostrare che esiste un problema NP polinomialmente riducibile ad esso. esempio -> domino-limitato riconducibile a cricca.
NP-completezza
Un problema Q e' NP-completo se:
- Q e' NP-hard
- Q e' NP
Riducibilita' - esempi
(slides)
Problemi NP-completi
Importante risultato della riducibilita' polinomiale e' la possibilita' di esprimere i problemi NP-completi in forma di altri problemi NP-completi. (vedi slides per albero)
Relazioni tra classi di complessita'
NP e NP-completi
Teorema 1
Se P != NP, esiste un problema Q che appartiene a NP-P non NP-completo. Questi problemi sono detti NP-intermedi.
Il corollario che ne deriva e': Se P != NP, NP-completi appartengono (in maniera propria) a NP-P
Teorema 2
Se P != NP, esistono due problemi Q e R, NP-intermedi, tali che:
- Q non e' riducibile a R
- R non e' riducibile a Q
Sono quindi detti non confrontabili in
riducibilita'
Esempi di NP-intermedi
- Isomorfismo tra grafi
- Fattorizzazione
NP-completezza forte
Si considerino i problemi con cardinalita' n dell'insieme di dati in input. I problemi per cui **ogni istanza di lunghezza n e' ristretta a interi di dimensione al piu' p(n), funzione polinomiale in n, sono detti **fortemente NP-completi.
Esempi: Cricca, ciclo Hamiltoniano Esempi di problemi non fortemente NP-completi: Somma di sottoinsieme, zaino. Questi infatti dipendono sia dalla cardinalita' dell'insieme in input sia dai valori degli elementi (piccoli, grandi).
(slides per prova)
co-P e co-NP
Il problema complemento e' il problema definito sullo stesso dominio del problema originale, ma che da risposta opposta in ogni caso (Si/No -> No/Si)
Le classi complemento co-P e co-NP identificano quei problemi complemento dei problemi in P, NP.
E' facilmente dimostrabile che co-P coincide con P, ma dato un problema in NP, non si puo' dire nulla sul suo complemento.
Si puo' affermare pero' che il complemento di un problema in NP non e' mai piu' facile del problema originale, semmai piu' difficile. Questo risultato deriva dal fatto che per un problema in NP esiste una funzione polinomiale che verifica la soluzione trovata dimostrando che e' vera, mentre per un problema complemento e' necessario dimostrare che nessuna soluzione sia vera, il che e' molto piu' difficile, se non impossibile. (differenza Soddisfacibilita'/Falsita')
Teorema 3
se co-NP != NP, allora P != NP
Questo si dimostra per assurdo, supponendo che P = NP si ottiene: NP = P = co-P = co-NP che e' una contraddizione.
Teorema 4
Se esiste un problema NP-completo il cui problema complemento e' NP, allora: co-NP = NP
Gerarchia di classi di complessita'
(slides per rappresentazione grafica)
Classe E
La classe E coincide con tutti i problemi di decisione risolubili con algoritmi deterministici in tempo esponenziale k-plo, ossia con k esponenziali concatenati.
Questa classe coincide con la classe delle funzioni elementari cioe' quelle definibili mediante un numero finito di applicazioni delle quattro operazioni elementari dell' aritmetica/esponenziazione/logaritmiche/di potenza/di radice/trigonometriche.
Alcuni problemi non sono elementari.
Problemi indecidibili
Problemi che non possono essere risolti da un computer anche con tempo illimitato. Un esempio e' il Domino non limitato (tiling problem), ma anche la corrispondenza di Post (PCP) e l'halting problem.
Un problema P che non ammette nessun algoritmo e' incalcolabile. Nel caso di un problema decisionale, viene detto problema indecidibile.