Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3 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. 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 decisione un’istanza del quale è una tripla G, u, v. Es.
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: f A : Input N Es. Space A (x) = quantità di memoria usata da A in x Time A (x) = numero delle operazioni elementari eseguite da A in x E’ talvolta espressa in termini di una dimensione: | · | : Input N Es. | n | = log 2 (n+1) = lunghezza della rappresentazione binaria di n ( 0) Input NN | · | gA gA Complessità nel caso peggiore: g A (n) = max{f A (x) : |x| = n} (che esiste se | n | -1 è finito oppure se f A è limitata su | n | -1, per ogni n).
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3 Confronto tra algoritmi T A (n) = 100 n T B (n) = 2 n 2 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 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 z f g f g x. f(x) g(x) dove x. P(x) z x z. P(x).
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3 La relazione è un preordine f g non è tricotomica, essendovi funzioni inconfrontabili: f(x) = 1 se x pari 0 se x dispari g(x) = 0 se x pari 1 se x dispari f g non è un ordine parziale, non essendo antisimmetrica: f g f g z x z. f(x) = g(x) In generale z 0. La relazione f g è soltanto un preordine (riflessiva e transitiva). Infatti:
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} n 0 N n n 0. 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) n0n0
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 n 0 tali che f (n) d g(n), per ogni n n 0 posto k = d/c (esiste perché c 0), abbiamo k > 0 e f (n) d g(n) = k c g(n) per ogni n n 0.
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(x k ) dove a = max{a i : 0 i k}. Se q(x) è un polinomio di grado h < k, allora p(x) O(q(x)): p.a. se p(x) = O(q(x)) = O(x h ), allora q.o. ma perché a k > 0, da cui una contradd. quando x > d .
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3 Gli ordini di grandezza OrdiniFunzioni O(1)costanti O(log 2 n)logaritmiche O(n)O(n)lineari O(n log n)n log n O(n2)O(n2)quadratiche O(n3)O(n3)cubiche O(n p ) p > 0polinomiali O(2 n )esponenziali
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 2 c, c log n definitivamente. O(log n) < O(n): sfruttando il fatto che n < 2 n per ogni n, log n n n = 2 log n 2 n 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(n p ) < O(2 n ) 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) d f (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) 0. Corollario. O(n p ) < O(2 n ): perché lim n n p /2 n = 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) < c g(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 to n do for j := 1 to n do A[i,j] := 0; // T 1 for i := 1 to n do A[i,i] := 1; // T 4 T2T2 T5T5 T3T3 T 1 (n) c 1 = O(1)T 2 (n) = n T 1 (n) = n O(1) = O(n) T 3 (n) = n T 2 (n) = n O(n) = O(n 2 ) T 4 (n) c 2 = O(1) T 5 (n) = n T 4 (n) = n O(1) = O(n) T(n) = T 3 (n) + T 5 (n) = O(n 2 ) + O(n) = O(n 2 + n) = O(n 2 )
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} n 0 N n n 0. c g(n) f (n). f (n) = (g(n)) sse c 1,c 2 R + \{0} n 0 N n n 0. c 1 g(n) f (n) c 2 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)) c 1, c 2 > 0 x. c 1 g(x) f (x) c 2 g(x) fc g f(x) = O(g(x)) c g f f(x) = (g(x)) c 1 g c 2 g f 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: 1. Le funzioni si assumono definite su R. 2. Il caso di base si trascura. T(n) = (1)se n = 1 2T(n/2) + (n)se n > 1
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)) + nip. ind. = c n log (n/2) + n = c n log n – c n log 2 + n = c n log n – c n + 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) = c n si può “dimostrare” la tesi T(n) = O(n): T(n) 2(c n/2) + nip. 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 (n/4 + 4 T(n/8) ) = n + 2n + 4n (n/8 + 4 T(n/16) ) = n + 2n + … + 2 lg (n-1) n + 4 lg n T(1) = n ( … + 2 lg (n-1) ) + n 2 (1) = n (2 lg n 1) + (n 2 ) = n 2 n + (n 2 ) = (n 2 )
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) + (n c ), dove n/b rappresenta n/b oppure n/b . Allora: 1.se c < log b a allora T(n) = (n log b a ), 2.se c = log b a allora T(n) = (n c log n), 3.se c > log b a allora T(n) = (n c ).
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 = log b aCaso 1 del teorema principale: T(n) = (n log 2 2 ) = (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 = log b aCaso 2 del teorema principale: T(n) = (n c log 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 2n 2 = (n 2 ) 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 2 k 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: 2 h 1 s 2 h, ovvero h log 2 s Quindi un problema la cui soluzione può rappresentarsi con un albero qpb con s(n) possibili soluzioni è (log 2 s(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 b:c a:c a < bb < a a, b, c b < cc < b a, c, bc, a, b c < aa < c a:c b, a, cb, c, a c < aa < c b, c, a c < bb < c
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) log 2 f(n)) utile se f(n) è O(1). Non è interessante nel caso del problema Min-Max, per cui s(n) = n(n 1), ma log 2 s(n) = log 2 n + log 2 (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 a ab d cd a f f ef h gh f j il m mn m o o op r qr o o Per stabilire il massimo tra n elementi si organizza un torneo: un albero qbf di altezza k = log 2 n.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3 Il torneo di consolazione r pr f mf r 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 + log 2 n – 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) = 2 M(j 1) + 1se j > 0 Quindi M(j) = 2 j 1: perché risulti M(y) = 2 y – 1 n – 1 occorre che y log 2 n: sostituendo in |A| n + y 2 si trova n + log 2 n – 2.