24/11/2003
Teoria della Complessità
Computazionale
Parte I: Introduzione
Daniele Vigo
D.E.I.S. - Università di Bologna
[email protected]
rev. 3.0 - ottobre 2003
Teoria della Complessità
• Studia la difficoltà dei problemi computazionali
• Difficoltà: tempo di calcolo per la soluzione
occupazione di memoria
• Problema :
a) struttura matematica (dipendente da variabili)
b) domanda circa le proprietà della struttura
Es. struttura = un numero intero
domanda = il numero è primo ?
D. Vigo
Compl-I.2
1
24/11/2003
Problemi ed istanze
Istanza :
• problema in cui i valori delle variabili sono
specificati
• un insieme dei dati di ingresso del problema
un problema ⇒ molte istanze
Es. A) Problema del numero primo
I1 = 5, I2=27, …, In=12302323
B) Ordinamento di un vettore di n elementi
I={4,6,9,3,2,7,…}
D. Vigo
Compl-I.3
Forme dei problemi
Versione
Soluzione
Riconoscimento
SI o NO
(Recognition V., RV) (Es. K è numero primo?)
Ottimizzazione
soluzione di valore ottimo
(Optimization V., OV) (Es. x* : min {cx : x ∈ F })
Enumerazione
D. Vigo
tutte le soluzioni
Compl-I.4
2
24/11/2003
Alfabeti
Algoritmo:
metodo di soluzione di un problema
• Per risolvere i problemi si usa un “calcolatore”
• È necessario un mezzo di comunicazione e
codifica dei dati di ingresso al calcolatore
Alfabeto:
• unario
= un solo simbolo (Es. 6: 111111)
• binario
= due simboli (0,1) (Es. 6: 110)
• esadecimale = 16 simboli (0-9,A-F) (Es. 6: 6, 14: E)
D. Vigo
Compl-I.5
Codifica delle informazioni
• la codifica di un’informazione richiede un numero
diverso di simboli a seconda dell’alfabeto usato
Es. codifica numero intero n :
• alfabeto unario = n simboli
(Es. 6: 111111)
• alfabeto binario = log2 n simboli
(Es. 6: log2 6 = 3)
D. Vigo
Compl-I.6
3
24/11/2003
Dimensione di un problema
• Dimensione di un problema (µ(I)): numero di
simboli necessari per codificare una sua istanza
Es. ordinamento di un vettore di n elementi
n. bit = log2 n + Σj=1,n log2 cj
≤ (n + 1) log2 max{n,cj}
• in generale è sufficiente determinare un valore
proporzionale al numero di simboli
se L= max{n,cj}=costante (es. ≤ 231) ⇒ µ(I) ∝ n
D. Vigo
Compl-I.7
Comportamento asintotico
• Date due funzioni f (x) e g(x) definite sullo stesso
dominio si ha che f (x) = O(g(x)) se esistono due
costanti k1 e k2 tali che f (x) ≤ k1 g(x) + k2,
per ogni x del dominio
• se f (x) e g(x) monotone crescenti di dominio R
f (x) = O(g(x)) ⇔ limx→∞ (f (x) / g(x)) = costante
Es. f (x) = x2 + 3x +27, f (x) = x2 + log x, sono O(x2)
ordinamento: se L = costante ⇒ µ(I) = O(n)
D. Vigo
Compl-I.8
4
24/11/2003
Complessità in tempo
• massimo tempo di calcolo f (n) impiegato da un
algoritmo per risolvere ogni istanza del problema
di dimensione ≤ n (caso peggiore)
• tempo di calcolo:
• espresso in numero di operazioni elementari
(somme, sottrazioni, confronti …)
• su un calcolatore (ideale)
deterministico e sequenziale
(Es. macchina di Turing, PRAM ...)
… Ο(n), O(n2), O(log2 n), O(2n) …
D. Vigo
Compl-I.9
Esempio: ricerca di un numero
• Struttura: numeri reali a1,…,an e b
• Domanda ∃ i : ai = b ?
• Dimensione istanza : log2 b + Σi=1,n log2 ai =
log2 (b Πi=1,n ai) ≤ (n + 1) log2 (max {b, a1, …an})
⇒ dimensione : (n + 1) c = O(n)
• Complessità in tempo :
n confronti nel caso peggiore ⇒ tempo O(n),
lineare nella dimensione del problema
D. Vigo
Compl-I.10
5
24/11/2003
Esempio: SST (in RV)
• Struttura:
grafo non orientato pesato e connesso
G=(V,E) | V | = n, | E |= m = O(n2)
numero intero K
• Domanda: esiste in G uno ST di costo ≤ K?
• Dimensione istanza : O(m), O(n2) oppure O(n)
• Complessità in tempo :
Algoritmo di Prim
⇒ O(n2)
Algoritmo di Kruskal ⇒ O(m log m), O(n2 log n)
D. Vigo
Compl-I.11
Esempio: Circ. Hamiltoniano
• Struttura:
grafo orientato
G=(V,A) | V | = n, | A |= m = O(n2)
• Domanda: esiste in G un HC?
• Dimensione istanza : O(m), O(n2) oppure O(n)
• Complessità in tempo :
non si conoscono algoritmi che richiedono un
numero di operazioni polinomiale in n
Algoritmi enumerativi ⇒ O(n!), O(2n)
D. Vigo
Compl-I.12
6
24/11/2003
Esempio: Knapsack 0-1 (OV)
• Struttura : n coppie di interi (p1,w1),…,(pn,wn),
un intero W
• Domanda: determinare il sottoinsieme S di
coppie tale che:
Σi∈S wi ≤ W
e
Σi∈S pi
è massimo
• Dimensione istanza : O(n)
• Complessità in tempo :
non si conoscono algoritmi polinomiali in n
Algoritmi branch-and-bound ⇒ O(2n)
D. Vigo
Compl-I.13
Esempio: Knapsack 0-1 (RV)
• Struttura : n coppie di interi (p1,w1),…,(pn,wn),
un intero W
un intero K
• Domanda: determinare il sottoinsieme S di
coppie tale che:
Σi∈S wi ≤ W e Σi∈S pi ≥ K
D. Vigo
Compl-I.14
7
24/11/2003
Esempio: Progr. Lineare 0-1 (LP01)
• Struttura : sistema di disuguaglianze lineari Ax≥ b
funzione obiettivo: min cx
un intero K (per RV)
OV:
determinare un vettore booleano x che
soddisfa il sistema ed ha costo minimo ?
RV:
Esiste un vettore booleano x che
soddisfa il sistema ed ha costo ≤ K ?)
D. Vigo
Compl-I.15
Classi di complessità
• classificazione in base al tasso di crescita del
tempo di calcolo al crescere della dimensione
dell’istanza
• Prob. “facili”: crescita polinomiale in µ(I)
Prob. “difficili”: crescita esponenziale in µ(I)
t
O(n!) O(2n) O(n3)
O(n2)
O(n)
O(logn)
µ (I) = n
D. Vigo
Compl-I.16
8
24/11/2003
Complessità in tempo
10
20
30
40
50
60
n
10-5 sec
2*10-5s
3*10-5s
4*10-5s
5*10-5s
6*10-5s
n2
10-4 sec
4*10-4s
9*10-4s
n3
10-3 sec
8*10-3s
0.027s
0.064s
0.125s
0.216s
n5
2n
0.1 sec
3.2s
24.3s
1.7 min
5.2 min
13.0 min
10-3 sec
1.0s
17.9 min
12.7 gg
3n
5.9*10-2 s
58 min
6.5 anni
3855 anni
1.6*10-3s 2.5*10-3s 3.6*10-3s
35.7 anni 3.6*104
anni
2*108
secoli
D. Vigo
1.3*1013
secoli
Compl-I.17
Tempo e tecnologia
funzione
n
n2
n3
n5
2n
3n
computer
attuale
N1
N2
N3
N4
N5
N6
PC 486/33 1.3 Mflop/s.
D. Vigo
computer
100 volte
più veloce
100 N1
10 N2
4.64 N3
2.5 N4
N5 + 6.64
N6 + 4.19
computer
1000 volte
più veloce
1000 N1
31.6 N2
10 N3
3.98 N4
N5 + 9.97
N6+ 6.29
Cray C90 (16 proc) 479 Mflop/s.
Compl-I.18
9