Contenuto e scopo presentazione
Premesse:
Dato un sistema:
• alcune domande non hanno senso
• alcune domande che hanno senso non hanno una risposta (o hanno risposte
che non possono essere fornite in un tempo finito)
• alcune domande che hanno senso hanno risposte (esatte) che non possono
essere fornite in tempi ragionevoli
• le risposte di alcune domande hanno risposte (esatte) che possono essere
fornite in tempi ragionevoli
Teoria della complessità
Concetti fondamentali
Scopo della scienza è capire a quale domande può essere data una risposta
e fornire in tempi ragionevoli risposte esatte, se possibile, o risposte
approssimate, se non si può fare altrimenti.
Raffaele Pesenti
Raffaele Pesenti
Contenuto e scopo presentazione
Contenuto e scopo presentazione
Premesse:
I problemi di PL, o che possono essere “ricondotti” ad essere tali, sono
risolvibili in modo “efficiente” in funzione delle loro “dimensioni” sia dal
punto di vista teorico, e.g., con il metodo dell’elissoide, sia dal punto di vista
pratico con il Simplesso e, più raramente, con l’algoritmo del punto interno.
Il Simplesso però in casi “sfortunati”, e.g., cubo di Klee–Minty, esegue un
numero “molto elevato” di iterazioni.
Si pongono quindi le seguenti domande:
– esistono altre classi di problemi per cui possono essere fatti ragionamenti
“simili”?
– si possono definire in modo formale i concetti espressi tra apici?
Raffaele Pesenti
2
Contenuto:
• vengono introdotti i concetti fondamentali riguardanti la teoria della
complessità
Scopo:
• dato un problema fornire dei criteri che permettano di stabilire se esista la
speranza di realizzare un algoritmo che permetta con tempi di calcolo
ragionevoli di determinare la soluzione ottima, oppure se convenga utilizzare
metodi approssimati o euristiche.
3
Raffaele Pesenti
4
Factoids
Oggetto della teoria della complessità
Alcuni dati rispetto ai quali confrontare l’onere computazionale (in tempo e in
bit) necessari ad un algoritmo per la soluzione dell’istanza di un problema.
Secondi in un minuto: 60
Secondi in un ora: 3.6 103
Secondi in un giorno: 8.64 104
Secondi in un anno: 3.16 107
Età stimata dell’universo: 1010 – 2 1010 anni = 3.16 1017 – 6.32 1017 secondi
L’oggetto della teoria della complessità è stabilire se un problema sia facile o
difficile
La difficoltà di un problema è una caratteristica generale e non associata a
particolari istanze del problema stesso
Massima velocità di un computer (2006): 340 TFlops = 3.4 1014 ops. per sec.*
Stima del numero di atomi nell’universo visibile: 1078 – 1080
*si veda http://www.top500.org/, operazioni usate per risolvere sistemi lineari.
Raffaele Pesenti
5
Raffaele Pesenti
Problemi e Istanze
6
Esempio
• Problema P: domanda la cui risposta dipende dal valore assunto da un
insieme di parametri e variabili.
P è definito tramite la descrizione dei parametri e la descrizione delle
proprietà di cui deve godere la risposta (soluzione) cercata.
Una possibilità è fornire:
– l’insieme delle soluzioni ammissibili F
– una funzione obiettivo c che permette di valutare il costo/profitto
associato ad ogni soluzione.
• Esempio
Dato un grafo G=(V,E), esiste un percorso hamiltoniano di lunghezza <K?
Struttura del problema = grafo G
Struttura della soluzione = percorso hamiltoniano
Parametri = i particolari nodi, archi ed i pesi degli archi
ℜ
c:F →
• Istanza di un problema P : particolare domanda che si ottiene fissando i
valori di tutti i parametri di P
Raffaele Pesenti
7
Raffaele Pesenti
8
Problemi
Difficoltà di un problema
• Problemi di decisione
Risposta SI/NO
(es., ∃ un ciclo hamiltoniano di lunghezza <K?)
• Problemi di ricerca
Trovare una soluzione (una prova della risposta “SI”)
(es., trovare un ciclo hamiltoniano di lunghezza <K)
• Problemi di enumerazione
Trovare tutte le soluzioni
(es., trovare tutti i cicli hamiltoniani di lunghezza <K)
Facilità di un problema
Esiste un algoritmo di
soluzione efficiente
Difficoltà di un problema
Non esiste un algoritmo
di soluzione efficiente
• Problemi di ottimizzazione
Trovare una soluzione (una prova della risposta “SI”) ottima rispetto ad un
obiettivo (es., trovare un ciclo hamiltoniano di lunghezza minima)
Raffaele Pesenti
9
Stabilire la difficoltà di un problema
misurare l’efficienza del (migliore) algoritmo risolutore
Misurare l’efficienza di un algoritmo
determinare la complessità computazionale dell’algoritmo
Raffaele Pesenti
Algoritmo
10
Efficienza di un algoritmo
Efficienza di un algoritmo
• Algoritmo:
sequenza di istruzioni non ambigue che a partire da dei dati di input produce
dei risultati soddisfacenti date proprietà.
Tempo richiesto per
trovare la soluzione
• Algoritmo (definizione formale):
ciò che riesce ad eseguire una macchina di Turing
Quantità di memoria
richiesta per elaborare i
dati del problema
Dimensione dell’istanza del problema
(Numero di variabili, vincoli, grandezza dei dati)
Quantità di informazioni necessarie per codificare un’istanza
Raffaele Pesenti
11
Raffaele Pesenti
12
Codifica di un’istanza di un problema
Codifica di un’istanza di un problema
Codifica:
metodologia utilizzata per descrivere un’istanza di un problema, è
caratterizzata da un alfabeto di simboli e da espressioni significative.
Esempio: Un problema di PL
Codificare i dati (n+mn+m coeff.)
ci, i=1,...n; aij, i=1,...,n, j=1,...,m; bj, j=1,...m
Codifica “ragionevole”:
utilizza almeno 2 simboli
non introduce dati irrilevanti né richiede una generazione esponenziale di dati
Numeri a precisione finita:
interi e razionali come rapporto tra interi
Dimensione di un’istanza di un problema:
lunghezza della stringa di simboli necessaria a descrivere l’istanza
(teoricamente tale lunghezza dovrebbe essere la minima, praticamente basta
che sia “ragionevole”)
Raffaele Pesenti
Sistema binario (codifica di un numero x):
k+1 bit, con k ≤ log2 x ≤k+1 più 1 bit per il segno
13
Raffaele Pesenti
Codifica di un’istanza di un problema
Codifica di un’istanza di un problema
Esempio: Codifica decimale (ragionevole)
1 cifra (0-9) ⇒ 10 numeri
10 (2 cifre) ⇒ 100 numeri
10 × 10=100 (3 cifre) ⇒ 1000 numeri
100 × 10=1000 (4 cifre) ⇒ 10000 numeri
⇒
mentre il numero di numeri cresce di fattori 10
il numero di cifre cresce come il logaritmo
Esempio: Codifica unaria (non ragionevole)
1 cifra (1) ⇒ 1 numeri
10 decimale (10 cifre) ⇒ 10 numeri
100 decimale (100 cifre) ⇒ 100 numeri
1000 decimale (1000 cifre) ⇒ 1000 numeri
⇒
mentre il numero di simboli cresce di fattori 10
il numero di cifre cresce linearmente
Raffaele Pesenti
14
Esempio: Generazione esponenziale di dati
Problema di decisione difficile:
dato un grafo determinare se esiste un ciclo hamiltoniano di lunghezza <K.
Problema di decisione semplice:
dati n numeri trovare se esiste un numero <K (sorting)
Con una codifica non ragionevole (codificare il grafo e tutti i suoi cicli) si
potrebbe trasformare il problema difficile del ciclo hamiltoniano nel problema
semplice del sorting.
La codifica non è ragionevole perché in essa è contenuta la generazione delle
soluzioni del problema.
15
Raffaele Pesenti
16
Tempo di soluzione
Efficienza di un algoritmo
Funzione di complessità nel tempo
Tempo richiesto per risolvere un’istanza del
problema codificata ragionevolmente
Il tempo di calcolo della soluzione è definito in maniera indipendente dalle caratteristiche
del particolare calcolatore utilizzato (più formalmente bisognerebbe fare riferimento ad
una macchina standard, e.g., macchina di Turing, Random Access Machine (RAM)).
Tempo di soluzione:
numero delle operazioni elementari (addizioni, moltiplicazioni, confronti,
scrittura/lettura registri ) necessarie all’algoritmo per risolvere un’istanza di una
dimensione data.
Raffaele Pesenti
17
Funzione di complessità nel tempo:
f(n), dove n è la dimensione di un’istanza, è la funzione che restituisce il
massimo numero di operazioni elementari necessarie ad un algoritmo per
risolvere le istanze di dimensione n di un problema.
• La funzione di complessità nel tempo è determinata per mezzo della worst case
analysis.
• Un modo alternativo di valutare la complessità è l’analisi statistica (più
complicato).
Raffaele Pesenti
Funzione di complessità nel tempo
18
Funzione di complessità nel tempo
Occorre conoscere solo il comportamento asintotico (n →∞) della funzione
di complessità nel tempo, ossia l’ordine di f(n)
Ordine:
La funzione f(n) è di ordine g(n), indicato come O(g(n)), se ∃ n’ ed una
costante c tali che
f(n) ≤ c⋅ g(n) per n ≥ n’
Notazione
f(n) = O(g(n)) asymptotic upper bound
f(n) = o(g(n)) asymptotically negligible (lim f(n)/g(n) = 0)
f(n) = (g(n)) asymptotic lower bound (se e solo se g(n) = O(f(n)))
f(n) = (g(n)) asymptotically dominant (se e solo se g(n) = o(f(n)))
f(n) = (g(n)) asymptotically tight bound
(se e solo se vale f(n) = O(g(n)) e g(n) = O(f(n)))
Esempio: un polinomio p(n) =Σi=1..r cini è O(nr)
Raffaele Pesenti
19
Raffaele Pesenti
20
Algoritmi
Classe P
Algoritmo polinomiale
Un algoritmo è di tipo polinomiale se ha una funzione di complessità nel tempo
che è O(np) per un certo p fissato.
Algoritmo esponenziale
Un algoritmo è di tipo esponenziale se non ha una funzione di complessità nel
tempo di tipo polinomiale.
Ordine esponenziale
Una funzione f(n) è di ordine esponenziale se non è limitata da alcun polinomio,
ossia, dati n2 ≥ n1, c1, c2>0 e d1, d2>1,
Classe P
Appartengono alla classe P tutti i problemi di decisione che possono essere
risolti da algoritmi di tipo polinomiale (Polynomial time algorithm).
Commento:
I problemi in P sono ben risolti poiché per essi esiste un algoritmo efficiente di
soluzione. Per questo i problemi in P vengono anche detti trattabili.
c1 d 1n1 ≤ f ( n ) ≤ c 2 d 2n 2
Raffaele Pesenti
21
Raffaele Pesenti
Classe P
Classe P
Esempio:tre algoritmi su un calcolatore che esegue una operazione in 10-6s
n
10
30
n 5 0.1s
Esempio:
Sono noti algoritmi polinomiali per determinare il minimo albero ricoprente in un
grafo:
60
n 2 10 − 4 s 9 ⋅10 − 4 s 3.6 ⋅10 −3 s
O(f(k))
24.3s
13m
2 n 10 −3 s 17.9m
366c
polinomiale
l’algoritmo di Kruskal è O(nlogn),
l’algoritmo di Prim è O(n2)
esponenziale
Legenda: s=secondi, m=minuti, c=secoli
La complessità computazionale non dipende dalla velocità del calcolatore utilizzato.
Esempio: un calcolatore 1000 volte più veloce (10-9s) potrebbe eseguire le seguenti
operazioni in più per i tre algoritmi
10 − 6
10 − 9
Raffaele Pesenti
22
n2
n5
k
k
31 . 62 ⋅ k
3 . 98 ⋅ k
2n
k
10 + k
23
Il problema (di decisione) dello shortest spanning tree: “dato un grafo stabilire se
esiste un albero ricoprente di lunghezza <K” è in P
Raffaele Pesenti
24
Esempi di problemi in P
Classe NP
Programmazione Lineare Continua
Matching
Cammino Minimo e tutti i problemi riconducibili a quello di Flusso a Costo
Minimo
Sistemi equazioni lineari
Classe NP
Appartengono alla classe NP tutti i problemi di decisione per cui, essendo nota
una soluzione, è possibile verificare in tempo polinomiale se una data risposta è
ammissibile (Non deterministic Polynomial time algorithm).
La codifica di una soluzione è detta certificato di ammissibilità.
Commento:
Esistono problemi non in NP (tipicamente quelli enumerativi e molti di quelli di
ottimizzazione) e problemi per cui non esiste modo di verificare la correttezza
di una soluzione data.
Raffaele Pesenti
25
Raffaele Pesenti
Classe NP
Classe NP
I problemi NP sono quelli che sono risolvibili da un algoritmo di tipo polinomiale
non deterministico (Non deterministic Polynomial time algorithm).
Esempio:
Problema:
Dato il grafo G, esiste un circuito hamiltoniano di lunghezza <K?
Risposta:
Si
Certificato di ammissibilità:
Una sequenza di nodi del grafo
Verifica:
Seguire la sequenza dei nodi verificando che corrisponde ad un circuito
hamiltoniano di lunghezza <K (polinomiale)
Raffaele Pesenti
26
Algoritmo NP :
Guessing stage)
Checking stage)
Un oracolo “indovina” la soluzione (non deterministico)
Verifica in tempo polinomiale della soluzione
(ovviamente nella realtà non esistono tali algoritmi)
Teorema: P ⊆ NP
Congettura: P≠ N P
27
Raffaele Pesenti
NP
P
28
Problema complementare
Classe NP
Esempi di problemi di decisione:
Minimum spanning tree: è P e NP
PL (determinare se esiste una soluzione >K): è NP e dal 1979 è stato provato che
è P (algoritmo dell’ellissoide)
Ciclo hamiltoniano di lunghezza <K: è NP ma non è stato provato che sia in P
Problemi complementari (co-problemi):
In un problema decisionale π , le cui soluzioni x in F devono soddisfare una
data proprietà P, i.e., x∈F se e solo se P(x) =VERO, si deve rispondere alla
domanda
∃ x t.c.P(x) =VERO?
nel problema complementare co- π si deve rispondere alla domanda “negata”,
ovvero se è falsa l’affermazione precedente
¬ ∃ x t.c.P(x) =VERO? ⇒ ∀ x t.c.P(x) =FALSO?
Esempio:
Il problema complementare del ciclo hamiltoniano di lunghezza<K:
“Dato il grafo G, è vero che non esistono cicli hamiltoniani di lunghezza <K?”
Raffaele Pesenti
29
Raffaele Pesenti
Problema complementare
Commenti:
• Dimostrare la correttezza della soluzione di un problema complementare è, in
generale, più complesso che dimostrare la correttezza della soluzione di un
problema decisionale.
Per il problema
π: esiste un cigno nero?
può essere estremamente difficile o impossibile trovare una risposta
affermativa, ma se si riesce è banale convincere della correttezza della
risposta, basta mostrare il cigno nero che si è trovato (il problema è in NP)
Per co-problema
co-π: non esiste un cigno nero? ⇒tutti i cigni non sono neri?
può essere banale trovare un cigno che non è nero, ma potrebbe essere
estremamente difficile convincere della verità della risposta positiva. Come
certificato di ammissibilità bisognerebbe probabilmente mostrare tutti i cigni
viventi, vissuti e che vivranno (il co-problema non sembra appartenere a NP).
Raffaele Pesenti
31
30
Problema complementare
Commenti(cont.):
• Esistono però problemi in cui è facile dimostrare la correttezza sia del
problema che del co-problema. Questa situazione si verifica quando è
possibile determinare (non solo verificare come nel caso precedente) una
soluzione per il problema decisionale, o negarne l’esistenza, in tempo
polinomiale. Esempio:
π: esiste un percorso tra Palermo e Catania minore di 100 Km?
co-π: tutti i percorsi tra Palermo e Catania sono non minori di 100 Km?
Per rispondere a questi problemi, essendo π∈P, si cerca in tempo polinomiale
una soluzione di π (e.g., il percorso minimo), se questa esiste la risposta a π è
SI e a co-π è NO, altrimenti, se non esiste soluzione per π, la risposta a π è
NO e a co-π è SI.
Si può (determinare e) quindi verificare la correttezza della risposta a co-π in
tempo polinomiale, in questo caso co-π∈ΝP.
Raffaele Pesenti
32
Problemi Co-NP
Problema complementare
Commenti(cont.):
• Il ragionamento precedente non si può (o meglio, non sembra potersi)
applicare al caso dei cigni e dei percorsi hamiltoniani in quanto non è
(sembra essere) possibile determinare una soluzione del problema decisionale
o negarne l’esistenza in tempi polinomiali (in pratica non esiste un algoritmo
polinomiale che, e.g., determini il cigno più scuro o il percorso hamiltoniano
minimo)
I problemi co-P, complementari dei problemi in P, sono ancora in P.
Non tutti i problemi co-NP, complementari dei problemi in NP, sembrano essere
in NP.
Congettura
Teorema
P=co-P ⇒ P⊆ NP ∩ co-NP, non noto se P = NP ∩ co-NP
NP ≠ coNP
NP
P
co-NP
Esempio:
Se il certificato di ammissibilità per il problema complementare del ciclo
hamiltoniano è la lista di tutti i possibili cicli hamiltoniani (come attualmente
appare) allora...
per un grafo completo con m nodi il certificato ha dimensione pari a m!
⇒esponenziale quindi non verificabile in tempo polinomiale
Raffaele Pesenti
33
Raffaele Pesenti
34
Trasformazioni e riduzioni
Problemi più difficili
Problemi più difficili
Si definiscono come problemi più difficili di una classe quei problemi
appartenenti alla classe che risultano almeno difficili quanto ogni altro
Se si riuscisse a risolvere efficientemente uno dei problemi più difficili allora si
potrebbero risolvere efficientemente anche tutti gli altri problemi della classe
Trasformazione polinomiale (polynomial-time Karp reduction)
E’ un algoritmo che, data un’istanza I di un problema π, produce in tempo
polinomiale un’istanza I’ di un problema π’ in modo tale che, se la risposta
è “SI” per I, allora la risposta è “SI” anche per I’
Riduzione polinomiale (polynomial-time Turing reduction)
E’ un algoritmo che, data un’istanza I di un problema π, usa una subroutine
per risolvere un’istanza I’ di un problema π ’ in modo tale che l’algoritmo
sarebbe polinomiale se la procedura fosse di ordine O(1), i.e., fosse eseguita
in un tempo indipendente dalla dimensione di I’, e se i parametri da passare
alla subroutine sono calcolati in tempo polinomiale.
La trasformazione polinomiale di π a π’ (π ridotto a π ’)
π ∝π’
Raffaele Pesenti
35
Raffaele Pesenti
36
Esempio
Trasformazioni e riduzioni
Dati
• Problema dello zaino KP(U,s,c,B,K)
Istanza: dato un insieme finito U, dove ogni u∈U è caratterizzato da un
volume s(u)∈N, e un peso c(u)∈N, e dati due interi positivi B,K∈N .
Soluzione: un sottoinsieme U’⊆Utale che il volume occupato sia non
maggiore di B, i.e., Σu∈ U’ s(u) ≤ B e il peso totale degli elementi scelti sia non
minore di K, i.e., Σu∈ U’ c(u) ≥ K.
Proprietà:
– Le trasformazioni e le riduzioni polinomiali sono transitive
– Dati π e π’, con π ∝ π ’,
• se π’ ∈ P ⇒ π ∈ P
• se π ∈ Ν P-C ⇒ π ’ ∈ Ν P -C
• Problema di somma di sottoinsiemi SS(V,a,D)
Istanza: dato un insieme finito V, dove |V|=2n e dove ogni v∈V è
caratterizzato da un volume a(v)∈N, e dato un intero positivo D∈N .
Soluzione: un sottoinsieme V’⊆V, dove |V’|=n, tale che Σv∈ V’ a(v) = D.
allora ...
Problema di somma di sottoinsiemi ∝ Problema dello zaino
Raffaele Pesenti
37
Raffaele Pesenti
38
Esempio
Esempio
Dimostrazione (cont.)
(correttezza) L’istruzione s(u)←a(u)|V|+ 1 impone che ogni u abbia volume che
superi di uno un multiplo di |V|. Analoga considerazione per c(u) ←a(u)|V|+ 1.
Le istruzioni B←D|V|+|V|/2,K ←D|V|+|V|/2 hanno come conseguenza che
risolvendo KP(U,s,c,B,K) si cerchi un sottoinsieme U’ t.c.
Dimostrazione
si deve realizzare un algoritmo che per risolvere un SS(V,a,D) esegue un numero
polinomiali di chiamate alla subroutine di soluzione di KP(U,s,c,B,K).
Σu∈U’ s(u) ≤B ⇒|V| Σu∈ U’ a(u) + |U’| ≤D|V|+|V|/2
Σu∈U’ c(u) ≥ K ⇒ |V| Σu∈ U’ a(u) + |U’| ≥ D|V|+|V|/2
Sia risolvi_KP(U,s,c,B,K) la procedura che restituisce un sottoinsieme U’
soluzione di KP(U,s,c,B,K) se U’ esiste, allora la procedura risolvi_SS(V,a,D)
risulta essere:
quindi, se tale sotto insieme U’ esiste allora
D|V|+|V|/2 ≤|V| Σu∈ U’ a(u) + |U’| ≤D|V|+|V|/2
risolvi_SS(V,a,D)
U ←V
da cui dividendo per |V|
for each u ∈U c(u) ←a(u)|V|+ 1
for each u ∈U s(u) ←a(u)|V|+ 1
B ←D|V|+|V|/2
K ←D|V|+|V|/2
return risolvi_KP(U,s,c,B,K)
Raffaele Pesenti
Σu∈U’ a(u) = D
+ 1/2 - |U’|/|V|.
poiché v(u) è intero e |U’|/|V| ≤ 1 l’ultima condizione impone
Σu∈U’ a(u) = D e 1/2 - |U’|/|V| =0 ⇒ |U’|=|V|/2.
quindi, se esiste U’, i suoi elementi soddisfano le condizioni del problema SS.
39
Raffaele Pesenti
40
Esempio
Trasformazioni e riduzioni
Dimostrazione (cont.)
(complessità) La prima istruzione dell’algoritmo richiede 2n operazioni elementari poiché
si devono elencare tutti gli elementi di V, analogamente la seconda e la terza istruzione
richiedono 6n operazioni elementari (un for su 2n elementi di 3 operazioni). La quarta e
la quinta istruzione richiedono 4 operazioni, i.e., un tempo indipendente dalla dimensione
dell’istanza. La sesta istruzione è per ipotesi O(1).
Di conseguenza la complessità dell’algoritmo è O(n) = O(max{2n,6n,4, O(1)}) .
Raffaele Pesenti
Commenti:
– In parole povere π può essere ridotto a π’se i suoi dati possono essere
“manipolati” (in tempo polinomiale) in modo che la soluzione del
problema π p ossa essere ottenuta risolvendo uno o comunque “pochi”
(in numero polinomiale) problemi π’
– Le trasformazioni e le riduzioni polinomiali permettono di definire se il
problema π’ è almeno altrettanto difficile di π
– L’ideale è riuscire a trasformare tutti i problemi in un unico di forma
standard che si riesca a risolvere in modo efficiente o almeno accettabile.
Un problema spesso preso come riferimento è la programmazione lineare
intera (che però non è risolvibile in modo efficiente)
Raffaele Pesenti
41
42
NP-completezza
NP-completezza
Commenti:
Classe NP-C (NP-Completi)
Appartengono alla classe NP-C tutti i problemi di decisione della classe NP che
sono almeno difficili quanto ogni altro problema in NP, i.e.,
il problema π è NP-C se ∀π ’ ∈ NP, è possibile π’ ∝ π
Se fosse possibile risolvere efficientemente un π ∈ NP-C allora tutti i problemi
NP sarebbero stati risolti efficientemente.
Per dimostrare P=NP basterebbe provare che un solo problema NP-C è P
Commento:
I problemi NP-C sono quelli a cui possono essere ridotti con una trasformazione
polinomiale tutti i problemi in NP.
La riduzione polinomiale alla Turing è più generale della trasformazione, una
definizione basata su di essa comprenderebbe in NP-C anche i Co-NP
Raffaele Pesenti
43
NP
NP-C
Raffaele Pesenti
P
co-NP
44
Il problema della soddisfacilità (SAT)
Il problema della soddisfacilità (SAT)
SAT Problem:
Data un’espressione booleana in forma congiuntiva normale in n variabili, x1,...,
xn, e loro complementi, dire se l’espressione è soddisfacibile
Forma congiuntiva normale:
un AND di OR:
K
y1i ∨ ...∨ yhi
∧(
i=1
)
con
Teorema di Cook (1971)
Il problema SAT è NP-C se h ≥ 3
Commenti:
SAT è stato il primo problema NP di cui è stata dimostrata l’appartenenza
ad NP-C
y ji ∈{x1,...,xn , x1,...,xn }
dove le espressioni in parentesi sono clausole di cardinalità h
Esempio:
Data l’espressione
E = (x1 ∨ x2 ∨ x4 ) ∧ (x1 ∨ x2 ) ∧ ( x4 ) ∧ (x1 ∨ x3 ∨ x4 ) ∧ (x2 ∨ x3 ∨ x4 )
dire se esiste un’assegnazione VERO-FALSO alle variabili per cui E=VERO.
Raffaele Pesenti
45
Raffaele Pesenti
46
Primi problemi NP-completi
Appartenenza di altri problemi a NP-C
Vertex Cover
Appartenenza di altri problemi a NP-C:
Per dimostrare che π ∈ NP è incluso in NP-C, per transitività è sufficiente
dimostrare che un π‘ ∈NP-C (ad esempio, SAT) si riduce ad esso, π’ ∝π .
Hamiltonian Circuit
on a Digraph
Hamiltonian Circuit
Feedback Arc Set
Clique
Set Packing
Set Cover
Feedback Node Set
Esempio:
Il problema dello zaino è in NP-C, infatti si dimostra che
SAT ∝KP
quindi poiché ∀ π ∈ NP è t.c.
π ∝S AT
e
SAT ∝KP
allora
π ∝S AT ∝K P ⇒ π ∝KP
Raffaele Pesenti
SAT
Partitioning
Clique Cover
01LP
Knapsack
Max-Cut
Sequencing
3-Dimensional
Matching
3-SAT
Chromatic
Number
Exact Cover
Steiner Tree
Hitting Set
Vedere “A compendium of NP optimization problems” di P. Crescenzi e V. Kann
47
Raffaele Pesenti
48
Problemi di decisione e problemi di ottimizzazione
Le definizioni della teoria della complessità fanno riferimento a problemi di
decisione.
Quanto detto si può estendere ai problemi di ottimizzazione
un algoritmo che risolve un problema di decisione può essere utilizzato
all’interno di un algoritmo di tipo polinomiale per risolvere il corrispondente
problema di ottimizzazione.
Raffaele Pesenti
49
Problemi di decisione e problemi di ottimizzazione
Esempio:
Problema di decisione (CH(k))
Dato il grafo G, esiste un circuito hamiltoniano di lunghezza <K?
Problema di ottimizzazione (TSP)
Determinare il ciclo hamiltoniano di G di lunghezza minima.
Raffaele Pesenti
Problemi di decisione e problemi di ottimizzazione
50
Problemi NP-hard
Esempio (cont.):
Sia S l’algoritmo per risolvere CH(k).
L’algoritmo per risolvere TSP può essere costituito dalla seguente procedura
dicotomica:
1.
2.
3.
4.
Siano A e B la minima e massima lunghezza degli archi di G ed m il numero di
nodi di G.
Allora m⋅ A ≤lunghezza circuto hamiltoniano ≤m⋅ B
Porre k= m(B+A)/2 e ∆ = m(B-A)/2
Usare S per risolvere CH(k).
Porre ∆ = ∆ /2.
Se la risposta di S è si, porre k=k - ∆ altrimenti k=k + ∆ ed andare a 2.
Problemi NP-hard:
Un problema π è NP-hard se esiste un problema NP-C che può essere ridotto,
secondo Turing, ad esso. Il problema π non appartiene necessariamente ai
problemi NP, può anche essere un problema non decisionale, ma, e.g., di
ottimizzazione.
NP-hard
NP-C
Poiché i coefficienti sono interi, al più ci saranno (log(m(B-A))+1 iterazioni.
Raffaele Pesenti
51
Raffaele Pesenti
52
Problemi NP-hard
Problemi NP-C (NP-hard) in senso debole/forte
Commenti:
Sono NP-hard problemi (anche non NP) almeno difficili quanto ogni problema NP-C.
Se π ∈ NP-hard per alcune delle sue istanze (le più grandi) non potrà essere trovata la
soluzione ottima in un tempo accettabile per mezzo di algoritmi esatti (enumerazione
Algoritmo pseudopolinomiale:
algoritmo che risolve un problema NP-C (o NP-hard) in un tempo che sia
polinomiale nella lunghezza dell’input quando i coefficienti sono codificati in
maniera “unaria”.
esplicita o implicita).
In generale è possibile determinare soluzioni accettabili per π ∈ NP-hard per mezzo di
algoritmi approssimati (soluzioni sub-ottime)
algoritmi euristici
Problemi NP-C (NP-hard) in senso debole:
problemi in NP-C (NP-hard) che possono essere risolti da algoritmi
pseudopolinomiali
Problemi NP-C (NP-hard) in senso forte:
problemi in NP-C (NP-hard) che non siano pseudopolinomiali
Raffaele Pesenti
53
Raffaele Pesenti
Problemi NP-C (NP-hard) in senso debole
54
Problemi P-easy
Esempio:
il problema di somma di sottoinsiemi è NP-C infatti si dimostra SAT ∝ KP ∝
SS. Gli algoritmi più veloci per la soluzione di un istanza SS(V,a,D) hanno
complessità O(Dn), dove 2n=|V|. Tali algoritmi sono esponenziali, dato che il
numero D codificato in binario ha lunghezza logD:O(Dn) = O(2logDn).
Se si fosse accettata però una codifica unaria gli algoritmi considerati
risulterebbero polinomiali.
Problemi P-easy:
Un problema π è P-easy se esiste un problema in P a cui può essere ridotto.
Il problema π non appartiene necessariamente ai problemi NP, può anche
essere un problema non decisionale, ma, e.g., di ottimizzazione.
I problemi P-easy sono risolvibili polinomialmente richiamando un numero
di volte polinomiale la subroutine che risolve un problema in P.
Nei casi pratici se D è “piccolo” o cresce “lentamente”, e.g., D <100 n, con la
dimensione del problema gli algoritmi pseudopolinomiali hanno tempi di
esecuzione “accettabili”.
Raffaele Pesenti
55
Raffaele Pesenti
56
Errori
Soluzioni approssimate e algoritmi euristici
Trovare la soluzione ottima di problemi di ottimizzazione NP-hard può
risultare in pratica troppo oneroso, inoltre dato che i parametri del modello
considerato possono essere affetti da errori tale sforzo potrebbe essere anche
poco rilevante.
Nei casi pratici possono essere anche accettate delle soluzioni “buone” che,
sperabilmente, non siano lontane dall’ottimo.
Algoritmo euristico:
algoritmo che risolve un problema di ottimizzazione, utilizzando in genere
regole di buon senso, e fornisce una soluzione ammissibile ma non
necessariamente ottima.
Raffaele Pesenti
57
Errori:
dato un problema (F,c; max), detti zopt= {max c(x) : x∈F} il valore della
soluzione ottima e zA il valore fornito dall’algoritmo euristico A si definiscono
EA= zopt - zA
– errore assoluto:
– errore relativo:
RA= (zopt - zA)/zopt
Raffaele Pesenti
58
Algoritmi approssimati
Algoritmi approssimati
Algoritmo ε - approssimato:
algoritmo che garantisce un errore relativo non maggiore di ε > 0:
Ra ≤ε
Schema di approssimazione:
algoritmo che garantisce Ra ≤ ε per qualunque ε > 0
– schema di approssimazione polinomiale: schema di approssimazione con
complessità polinomiale nelle dimensioni dell’istanza
– schema di approssimazione pienamente polinomiale: schema di
approssimazione con complessità polinomiale nelle dimensioni
dell’istanza e in 1/ε
Raffaele Pesenti
Quando è possibile (non sempre lo è) è opportuno dare una stima per eccesso
dell’errore compiuto accettando la soluzione di un algoritmo euristico
rispetto a quella ottima
59
Commenti:
• Quando esistono conviene applicare algoritmi approssimati, per i quali è
calcolabile, per definizione, un limite massimo dell’errore compiuto, rispetto
a degli algoritmi euristici basati sul buonsenso, ma per cui non si può fornire
un limite massimo dell’errore.
• La classe dei problemi di ottimizzazione in NP-hard per cui esista un
algoritmo approssimato viene detta APX, la classe dei problemi per cui esiste
uno schema polinomiale viene detta PTAS, la classe dei problemi per cui
esiste uno schema pienamente polinomiale è detta FPTAS:
FPTAS ⊆ PTAS ⊆ APX
se P ≠ NP le inclusioni sono strette. In particolare i problemi NP-C in senso
forte non sono in FPTAS. Viceversa non è noto se tutti gli NP-C in senso
debole sono in FPTAS.
• Per alcuni problemi non sono noti algoritmi approssimati, per altri il migliore
algoritmo approssimato ha valori di ε grandi (maggiori di 0.5).
Raffaele Pesenti
60
Esempio
Esempio
Problema dello zaino KP(U,s,c,B, max)
Istanza: dato un insieme finito U, dove ogni u∈U è caratterizzato da un volume
s(u)∈N e da un valore c(u)∈N, e dato un intero positivo B∈N .
Soluzione: un sottoinsieme U’⊆Utale che il volume occupato sia non maggiore
di B, i.e., Σu∈ U’ s(u) ≤B
Obiettivo: il peso totale degli elementi scelti sia massimo, i.e., maxΣu∈ U’ c(u)
• L’algoritmo euristico è polinomiale: O(nlogn)
• zopt è limitato superiormente
zopt ≤ Σ i=1...m c(ui) + (B - Σi=1...m s(ui)) c(um+1)/s(um+1),
il valore del r.h.s. della disequazione è infatti ciò che si otterrebbe riempiendo lo
spazio disponibile B con gli m elementi di densità massima e frazionando
l’(m+1)mo elemento, che è troppo grande per essere incluso completamente
Algoritmo euristico:
• sia n=|U|, si ordinano per densità decrescente c(u)/s(u) gli elementi in U in
O(nlogn) operazioni;
• si assegnano a U’ i primi m elementi più densi t.c. Σi=1...m s(ui) ≤B in O(n)
operazioni: za = Σi=1...m c(ui)
Raffaele Pesenti
Proprietà:
• Errore assoluto:
EA ≤ z opt - zA= (B - Σi=1...m s(ui)) c(um+1)/s(um+1),
• Errore relativo:
RA ≤ (zopt - zA)/zopt ≤ (zopt - zA)/zA =
=(B - Σi=1...m s(ui)) c(um+1)/s(um+1)/Σi=1...m c(ui)
61
Raffaele Pesenti
Esempio
62
Algoritmi paralleli
Commenti:
• Per problemi di massimo generalmente 0<RA<1, mentre per problemi di
minimo RA può anche non essere limitato superiormente.
• L’errore relativo RA dell’algoritmo euristico può essere limitato superiormente
solo da 1. Infatti siano dati
– U={u1, u2}
– v(u1) = 1, v(u2) = B
– c(u1) = 1, c(u2) = B-1
allora
– zopt = B-1
– zA = 1
– RA = (B-1-1)/(B-1) = (B-2)/(B-1) < 1
Facendo riferimento ad un modello standard di processori paralleli che
accedono ad una random access memory comune (Parallel Random
Access Machine (PRAM)) è sviluppata una teoria della complessità
parallela.
Algoritmo parallelo efficiente:
dato un problema di dimensione n un algoritmo parallelo è detto efficiente
se richiede un tempo O(logkn), con k costante positiva, quando utilizza un
numero polinomiale di processori.
qualunque limite inferiore a 1 può essere violato scegliendo B
sufficientemente grande.
Raffaele Pesenti
63
Raffaele Pesenti
64
P-completezza
Esercizi
Classe NC:
La classe dei problemi per cui esiste un algoritmo parallelo efficiente è detta
NC.
Proprietà:
NC ⊆ P, ma non è noto se NC = P
Es. 1)
Indicare, motivando la risposta, a che classe appartiene il problema
corrispondente alla domanda: esiste un cigno bianco?. Indicare anche la
classe del co-problema.
Classe P-C (P-Completi)
La classe di tutti i problemi di decisione della classe P che sono almeno
difficili quanto ogni altro problema in P è detta P-C
Proprietà:
Se un problema π ∈ P-C è t.c. π ∈ NC allora P=NC
La PL è in P-C, le operazioni booleane sono in NC.
Raffaele Pesenti
65
Raffaele Pesenti
Esercizi
Esercizi
Es. 3)
Dato il problema:
Problema dello pallet loading PalL(U,l,h,c,L,H, max)
Istanza: dato un insieme finito U, dove ogni (scatola) u∈U è caratterizzato da un
una superficie rettangolare di lati l(u)∈N e h(u)∈N, e da un valore c(u)∈N, e data
una struttura rettangolare (pallet) di lati L ,H∈N.
Soluzione: un sottoinsieme U’⊆Utale che i suoi elementi occupino una superficie
non maggiore di L× H e non avvengano sovrapposizioni.
Es. 2)
Il problema Pn//Cmax di minimizzazione del massimo tra i tempi di
completamento di operazioni indipendenti che possono essere eseguite su n
macchine parallele è NP-hard. Determinare le conclusioni che possono
essere tratte sulla complessità dei problemi 1//Cmax, Pn/prec/Cmax,
Pn/chain/Cmax e BP sapendo che valgono le seguenti relazioni:
1//Cmax ∝ Pn//Cmax
Pn//Cmax ∝ Pn/prec/Cmax
BP ∝ Pn//Cmax
Pn//Cmax ∝ BP
Pn/chain/Cmax ∝ Pn/prec/Cmax
Raffaele Pesenti
66
Obiettivo: il valore totale degli elementi scelti sia massimo, i.e., maxΣu∈U’ c(u)
Provare che è NP-hard e dedurre le conseguenze operative che questo comporta
sugli imballaggi secondari (scatole) dei prodotti.
67
Raffaele Pesenti
68
Esercizi
Esercizi
Es. 4)
Una catena di supermercati ha un grosso magazzino da cui rifornisce tutti i
supermercati della città. Ogni sera il magazzino centrale riceve la lista ordini
dei prodotti necessari da ogni supermercato e carica uno o più roll (appositi
carrelli verticali) con i beni richiesti. Per caricare ogni roll (e viceversa per
scaricarlo) si deve risolvere un problema di circuito hamiltoniano, dove i nodi
da visitare sono i punti dove è dislocata la merce richiesta nel magazzino
centrale (e nei supermercati). Trarre delle conclusioni sul modo in cui devono
essere elencati i prodotti nella lista ordini e su come devono essere disposti i
prodotti nel magazzino centrale e nei supermercati in modo che il problema
sia facilmente risolvibile.
Es. 5)
Dato un insieme di 12 elementi dai seguenti valori
{3,4,4,5,6,6,7,8,9,10,11,13} suddividerlo in due sottoinsiemi di uguale
cardinalità e valore complessivo. Formalizzare in pseudocodice l’algoritmo
utilizzato e determinarne la complessità computazionale.
Es. 6)
Risolvere il problema del punto precedente con il seguente insieme di valori
{38,10,59,89,88,95,1,40,86,13,24,4,3,16,21,1} usando l’algoritmo
sviluppato.
Raffaele Pesenti
Raffaele Pesenti
69
Esercizi
70
Esercizi
Es. 7)
Dato il problema:
Problema di Bin Packing BP(U,s,B,n)
Istanza: dato un insieme finito U, dove ogni u∈U è caratterizzato da un volume
s(u)∈N, e dato un intero positivo n di contenitori (bin) di volume B∈N .
Soluzione: una partizione di U in sottoinsiemi U(i), per i =1,..., n, tale che il
volume occupato in ogni contenitore i non sia maggiore di B, i.e., Σu∈ U(i) s(u) ≤B.
Provare che il problema di bin packing è NP-Completo in quanto si può ridurre ad
esso il problema dello della somma dei sottoinsiemi (che rimane in NP-C anche
quando D = Σv∈V a(u)/2) .
Es. 8)
Il problema 1//ΣC di minimizzazione del tempo medio di completamento di m
operazioni indipendenti e immediatamente disponibili che devono essere
eseguite su una macchina è in P. In particolare si risolve all’ottimo eseguendo
prima le operazioni di durata minore: politica SPT (shortest processing time
first).
Provare che tale politica è ottima, dimostrando che dato un qualunque
ordinamento con le operazioni schedulate in maniera diversa da SPT se ne può
ottenere uno non peggiore invertendo la posizione di due operazioni
successive.
Il problema 1/ri/ΣC, identico al precedente ma dove ogni operazione non è
disponibile immediatamente ma solo a partire dal tempo ri , è invece NP-hard
Suggerire delle euristiche di soluzione.
Raffaele Pesenti
71
Raffaele Pesenti
72
Soluzioni ad alcune domande
Esercizi
Es. 8) (cont.)
Definire un’euristica di ricerca locale (ad ogni passo vengono scambiate di
posizione due operazioni) che risolva il problema 1/ri/ΣC determinando un
minimo locale. Stabilire la complessità computazionale di tale euristica e
indicare una soluzione iniziale da cui conviene partire.
operazione
durata tempo di rilascio
Applicare l’euristica ai seguenti dati:
1
2
3
4
5
6
7
8
9
1
10
Raffaele Pesenti
38
10
59
89
88
95
1
40
86
13
24
0
5
40
120
100
150
100
200
60
30
30
73
Soluzioni ad alcune domande
Es. 5)
{4,6,6,7,9,11}, {3,4,5,8,10,13}
Es. 7)
Pensare le euristiche cercando di formalizzare il criterio con cui si carica un
portabagagli di un’automobile quando si hanno tante valige di differente
dimensione.
Raffaele Pesenti
75
Es. 2)
Su 1//Cmax non si può concludere (in realtà è in P)
Su n/chain/Cmax non si può concludere (in realtà è in NP-hard)
Su n/prec/Cmax e BP si può concludere che sono NP-hard
Es. 3)
Il problema dello zaino si riduce banalmente a quello del pallet loading (basta
porre h(u) = 1, per ogni u). Conviene avere imballaggi che siano
sottomultipli del pallet. Per comprendere l’importanza del problema si veda
sito http://www.federlegno.it/ASSO-PALLET.htm
Es. 4)
la disposizione delle merci in tutti i supermercati deve essere
topologicamente identica e simmetrica a quella del magazzino centrale.
(Domanda aggiuntiva: come si possono inoltre sfruttare al meglio gli spazi
disponibili, senza lasciare vuoti, che costano e colpiscono negativamente la
clientela?).
Raffaele Pesenti
74