1 / 38

Complessit à computazionale concreta

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?

flower
Download Presentation

Complessit à computazionale concreta

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Complessità computazionale concreta Corso di Informatica 2 a.a. 2003/04 Lezione 3 Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3

  2. 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

  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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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) = kc g(n) per ogni n n0. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3

  11. 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  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(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

  12. Gli ordini di grandezza Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3

  13. 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

  14. 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 nnp/2n = 0. Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3

  15. 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

  16. 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

  17. 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

  18. 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

  19.  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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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

  28. 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

  29. 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

  30. 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: 2h1s 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

  31. 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

  32. 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

  33. 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

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

More Related