390 likes | 564 Views
Complessit à computazionale concreta. Corso di Informatica 2 a.a. 2003/04 Lezione 3. Che cos’è la teoria della complessità?. La teoria della complessità è un tentativo di dare una risposta matematica a domande come: Cosa vuol dire che un algoritmo è più efficiente di un altro?
E N D
Complessità computazionale concreta Corso di Informatica 2 a.a. 2003/04 Lezione 3 Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Che cos’è la teoria della complessità? • La teoria della complessità è un tentativo di dare una risposta matematica a domande come: • Cosa vuol dire che un algoritmo è più efficiente di un altro? • In che senso un problema di calcolo è più difficile di un altro? • Che cosa rende una funzione calcolabile “praticamente trattabile”? • Esistono soluzioni ottimali per problemi di calcolo effettivamente risolvibili? • Quali problemi si possono risolvere meglio parallelizzando? • ecc. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Problemi e istanze In generale un problema di calcolo è una funzione : Input Output ; un’ istanza del problema è un particolare x Input. Es. Input = N , (x) = la scomposizione in primi di x Se è a volori 0,1 allora si parla di problema di decisione. Es. REACHABILITY Dato un grafo finito orientato G = (V,E) e due vertici u, v V, decidere se esiste un cammino in G da u a v. E’ un problema di decisioneun’istanza del quale è una tripla G, u, v. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Algoritmi Un algoritmo è metodo dettagliato che consente di risolvere un problema di calcolo, ossia di calcolare i valori della funzione . Es. Input (G =(V,E), u, v) // alg. per REACHABILITY S := {u}; M := {u}; while S do x := un elemento di S; S := S\{x}; foreach y V if (x,y) E then M := M {y}; S := S {y} if v M Output 1 else Output 0 Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Complessità dinamica Si misura la quantità di risorsa richiesta da ciascuna esecuzione di un algoritmo. E’ dunque una funzione degli ingressi: fA : Input N Es. SpaceA(x) = quantità di memoria usata da A in x TimeA(x) = numero delle operazioni elementari eseguite da A in x E’ talvolta espressa in termini di una dimensione: | · | : Input N Es. | n | = log2 (n+1) = lunghezza della rappresentazione binaria di n ( 0) | · | gA Input N N Complessità nel caso peggiore: gA(n) = max{fA(x) : |x| = n} (che esiste se | n |-1 è finito oppure se fA è limitata su | n |-1, per ogni n). Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Confronto tra algoritmi TB (n) = 2 n2 TA (n) = 100 n • L’algoritmo A è migliore dell’algoritmo B per n > 50; • Rimpiazzare B con A è meglio che raddoppiare la velocità del computer: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Confronto asintotico tra funzioni g f g x. f(x) g(x) dove x. P(x) z x z. P(x). f z f g x. f(x) g(x) dove x. P(x) z x z. P(x). Oss. x. P(x) x. P(x) x. P(x) x. P(x) f g Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
La relazione è un preordine La relazione f gè soltanto un preordine (riflessiva e transitiva). Infatti: f gnon è tricotomica, essendovi funzioni inconfrontabili: 1 se x pari 0 se x dispari 0 se x pari 1 se x dispari f(x) = g(x) = f gnon è un ordine parziale, non essendo antisimmetrica: f g f g z x z. f(x) = g(x) In generale z 0. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
O-grande Def. Se f (x) e g(x) sono funzioni su N, allora f (n) = O(g(n)) sse c R+\{0} n0 N n n0. f (n) c g(n). A rigore O(g(n)) è un insieme di funzioni, onde si dovrebbe scrivere f (n) O(g(n)). c g(n) f (n) n0 Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Le costanti non contano Per ogni f, g, e per ogni costante c > 0: f (n) = O(c g(n)) f (n) = O(g(n)) . ) a fortiori, visto che c > 0. ) esistono d > 0 e n0 tali che f (n) d g(n), per ogni n n0 posto k = d/c (esiste perchéc 0), abbiamo k > 0 e f (n) d g(n) = kc g(n) per ogni n n0. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Eliminazione dei termini d’ordine inferiore Se p(x) è un polinomio di grado k a coeff. in R+ e x positiva allora p(x) = O(xk) dove a = max{ai : 0 ik}. Se q(x) è un polinomio di grado h < k, allora p(x) O(q(x)): p.a. se p(x) = O(q(x)) = O(xh), allora q.o. ma perché ak > 0, da cui una contradd. quando x > d. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Gli ordini di grandezza Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Alcune inclusioni importanti • O(1) < O(log n): conseguenza del fatto che log nè sup. illimitata. • f (n) = O(1) c n. f (n) c • Ma, per n 2c, c log n definitivamente. • O(log n) < O(n): sfruttando il fatto che n < 2n per ogni n, • log n n n = 2log n 2n • O(n) < O(n log n): • n > 2 log n > 1 n log n > n Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
O(np) < O(2n) Lemma. Siano f, g funzioni a valori interi positivi con g(n) 0 per ogni n. Allora: Dall’ipotesi segue che per ogni c > 0, 0 f (n)/g(n) < c q.o., quindi f (n) < c g(n) q.o., ossia f (n) = O(g(n)). P.a. g(n) = O(f (n)): allora esiste d > 0 t.c. g(n) df (n) q.o. Poiché g ha valori int. positivi non nulli, 1/ d f (n)/g(n) q.o., mentre dovrebbe essere, definitivamente, 0 f (n)/g(n) < c per ogni c > 0. Corollario. O(np) < O(2n): perché lim nnp/2n = 0. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
O-grande ed o-piccolo Se f (n) = O(g(n)) e g h, allora f (n) = O(h(n)): quanto “buono” è questo confine superiore? Def.f (n) = o(g(n)) sse c > 0 n. 0 f (n) < cg(n). Se f (n) = o(g(n)) allora f è un infinitesimo di g, quindi g non è un confine superiore “stretto” di f. Osserviamo infatti che, se gè positiva non nulla: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Algebra di O-grande (1) Definiamo: f (n) + O(g(n)) = {h : g O(g(n)) . n. h(n) f (n) + g(n)} f (n) O(g(n)) = {h : g O(g(n)) . n. h(n) f (n) g(n)} Allora ne segue: f (n) + O(g(n)) = O(f (n) + g(n)) f (n) O(g(n)) = O(f (n) g(n)). Similmente definiamo O(f (n)) + O(g(n)) = {h : f O(f (n)) g O(g(n)) n. h(n) f (n) + g(n)}, ed O(f (n)) O(g(n)) analogamente. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Algebra di O-grande (2) Ne deriva: f (n) = O(f (n)) c O(f (n)) = O(f (n)) c costante O(f (n)) + O(g(n)) = O(f (n) + g(n)) O(f (n)) + O(f (n)) = O(f (n)) f g O(f (n)) + O(g(n)) = O(g(n)) O(f (n)) O(g(n)) = O(f (n) g(n)) Perciò ad esempio: O(1) + O(1) = O(2) = O(1) ma n O(1) = O(n) (nè una variabile!) Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Una semplice applicazione IdentityMatrix (Matrix A, int n) // costruisce la matrice identità di ordine n for i := 1 tondo for j := 1 tondo A[i,j] := 0; // T1 for i := 1 tondo A[i,i] := 1; // T4 T3 T2 T5 T1(n) c1 = O(1) T2(n) = n T1(n) = n O(1) = O(n) T3(n) = n T2(n) = n O(n) = O(n2) T4(n) c2 = O(1) T5(n) = n T4(n) = n O(1) = O(n) T(n) = T3(n) + T5(n) = O(n2) + O(n) = O(n2 + n) = O(n2) Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
e Def. Supposto che g sia asintoticamente non negativa: f (n) = (g(n)) sse c R+\{0} n0 N n n0. c g(n) f (n). f (n) = (g(n)) sse c1,c2 R+\{0} n0 N n n0. c1 g(n) f (n) c2 g(n). Teor.f (n) = (g(n)) f (n) = O(g(n)) f (n) = (g(n)). Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Notazione asintotica • f(x) = O(g(x)) c > 0 x. f (x) c g(x) • f(x) = (g(x)) c > 0 x.c g(x) f (x) • f(x) = (g(x)) c1,c2 > 0 x. c1g(x)f (x) c2g(x) c g f c2 g f f c g c1 g f(x) = O(g(x)) f(x) = (g(x)) f(x) = (g(x)) Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Relazioni di ricorrenza Sono equazioni, o diseguaglianze, in cui una funzione viene descritta in termini dei suoi valori su argomenti più piccoli: Semplificazioni: • Le funzioni si assumono definite su R. • Il caso di base si trascura. (1) se n = 1 2T(n/2) + (n) se n > 1 T(n) = Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Il metodo di sostituzione (1) • Si indovina la soluzione • Si verifica induttivamente che la soluzione sia tale. T(n) = 2T(n/2) + n Soluzione: T(n) c n log n T(n) 2 (c (n/2) log (n/2)) + n ip. ind. = c n log (n/2) + n = c n log n – cn log 2 + n = c n log n – cn + n c n log n (se c 1) Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Il metodo di sostituzione (2) Quanto vale c ? Se T(1) = 1, allora T(1) c 1 log 1 = 0 non può valere! Ma T(2) c 2 log 2, T(3) c 3 log 3, valgono per c 2. Tanto basta: il confine superiore cercato è asintotico. Attenzione: indovinando T(n) = cn si può “dimostrare” la tesi T(n) = O(n): T(n) 2(c n/2) + n ip. ind. = c n + n = O(n) Errore!!! Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Il metodo di iterazione Sviluppare l’equazione sino ad ottenere una somma di termini che dipendono da n e dalle condizioni iniziali: T(n) = n + 4T(n/2) = n + 4 (n/2 + 4 T(n/4)) = n + 2n + 42(n/4 + 4 T(n/8) ) = n + 2n + 4n + 43(n/8 + 4 T(n/16) ) = n + 2n + … + 2lg (n-1) n + 4lg nT(1) = n (1 + 2 + … + 2lg (n-1) ) + n2 (1) = n (2lg n 1) + (n2) = n2 n + (n2) = (n2) Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Il metodo principale Si basa su un teorema: Teor. (versione semplificata) Siano a 1, b > 1 e c 0 delle costanti. T(n) sia definita dalla seguente ricorrenza: T(n) = a T(n/b) + (nc), dove n/b rappresenta n/b oppure n/b. Allora: • se c < logba allora T(n) = (nlogb a), • se c = logba allora T(n) = (nclog n), • se c > logba allora T(n) = (nc). Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Esempi Il tempo di calcolo per l’algoritmo DI-Min-Max soddisfa la ricorrenza: T(n) = 2 T(n/2) + (1) a = b = 2 c = 0 < 1 = logba Caso 1 del teorema principale: T(n) = (nlog22) = (n) Il tempo di calcolo per l’algoritmo Merge-Sort soddisfa la ricorrenza: T(n) = 2 T(n/2) + (n) a = b = 2 c = 1 = logba Caso 2 del teorema principale: T(n) = (nclog n) = (n log n) Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Confini inferiori ed ottimalità • Un problema di calcolo ha confine inferiore alla complessità g se qualunque algoritmo per è (g(n)). • Se ha confine inferiore g ed esiste un algoritmo di complessità O(g(n)), allora tale algoritmo sarà ottimo per . Nota. Si ricordi che la complessità è valutata nel caso peggiore, e sempre in rapporto ad una risorsa (spazio, tempo, ecc.) Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Confini banali • Dimensione dei dati: quando è necessario esaminare tutti i dati in ingresso, ovvero generare tutti i dati in uscita. Es. La moltiplicazione di due matrici quadrate di ordine n richiede l’ispezione di 2n2 = (n2) entrate. • Eventi contabili: quando c’è un evento la cui ripetizione un numero contabile di volte sia necessaria alla soluzione del problema. Es. La determinazione del massimo tra n elementi richiede n 1 = (n) confronti, in cui altrettanti elementi non massimi risultino minori. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Alberi di decisione Un albero rappresenta un algoritmo: • i nodi interni rappresentano decisioni, • le foglie rappresentano possibili uscite, • i rami rappresentano particolari esecuzioni. L’albero di decisione che minimizza l’altezza fornisce un confine inferiore al numero di decisioni necessarie nel caso peggiore. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Alberi quasi perfettamente bilanciati Def. Un albero binario è completo se ha 2k vertici per ogni livello k non vuoto. Un albero binario è quasi perfettamente bilanciato (qpb) se, avendo altezza h, è completo sino al livello h 1. Le foglie di un albero quasi perfettamente bilanciato di altezza h sono: 2h1s 2h , ovvero h log2 s Quindi un problema la cui soluzione può rappresentarsi con un albero qpb con s(n) possibili soluzioni è (log2s(n)). Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Il problema dell’ordinamento Nel caso dell’ordinamento: • s(n) = n! (un ordinamento è una permutazione) • i nodi interni rappresentano confronti Nel caso dell’ordinamento (sorting) il numero dei confronti deve essere dunque maggiore di (usando la formula di Stirling): Ossia il problema è (n log n). Algoritmi O(n log n), come il Merge-Sort e lo Heap-Sort, sono allora ottimi. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
L’albero per l’ordinamento di 3 el. a:b a < b b < a b:c b:c b < c c < b b < c c < b a, b, c a:c a:c b, c, a a < c c < a a < c c < a a, c, b c, a, b b, a, c b, c, a Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Quando serve l’albero delle decisioni ? Se s(n) = (f(n)g(n)) allora l’albero delle decisioni fornisce il confine inferiore (g(n) log2f(n)) utile se f(n) è O(1). Non è interessante nel caso del problema Min-Max, per cui s(n) = n(n 1), ma log2 s(n) = log2 n + log2(n 1) peggiore del confine banale (n). Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
L’oracolo Oracolo: avversario immaginario che divina la situazione più sfavorevole in cui possa operare un algoritmo che risolva il problema per cui si cerca un confine inferiore. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Il torneo Per stabilire il massimo tra n elementi si organizza un torneo: un albero qbf di altezza k = log2n. o f o a f m o a d f h j m o r a b c d e f g h i l m n o p q r Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Il torneo di consolazione r r f p r m f Per stabilire il secondo tra n elementi si organizza un torneo di consolazione tra tutti gli el. risultati perdenti in scontri diretti col vincitore: m = k. Numero degli incontri (confronti) = numero dei nodi interni dei due alberi: C(n) = n + log2n – 2. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Il doppio torneo è ottimo (1) A = insieme degli incontri per stabilire il massimo tra n el. B = insieme degli incontri in cui ciascun el., salvo il campione, è sconfitto: |B| = n 1. Se a:b A, con a, b diversi dal campione, allora a:b B. Se y = numero el. Perdenti col campione in B, allora sono necessari y 1 incontri per stabilire il secondo: |A| n + y 2. Oracolo: nell’incontro a:b risulta a < b sse il numero degli el. trovati peggiori di b di quelli peggiori di a: si minimizzano le informazioni ricavabili per transitività. M(j) = numero max el. Peggiori del campione dopo j incontri: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3
Il doppio torneo è ottimo (2) M(j) = numero max el. peggiori del campione dopo j incontri: M(0) = 0 M(j) = 2M(j 1) + 1 se j > 0 Quindi M(j) = 2j 1: perché risulti M(y) = 2y – 1 n – 1 occorre che y log2n: sostituendo in |A| n + y 2 si trova n + log2n – 2. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3