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