La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3 Complessità computazionale concreta Corso di Informatica 2 a.a. 2003/04 Lezione 3."— Transcript della presentazione:

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

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

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

4 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

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

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

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

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

9 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

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

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

12 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

13 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

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

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

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

17 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!)

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

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

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

21 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

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

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

24 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 + 4 2 (n/4 + 4 T(n/8) ) = n + 2n + 4n + 4 3 (n/8 + 4 T(n/16) ) = n + 2n + … + 2 lg (n-1) n + 4 lg n T(1) = n (1 + 2 + … + 2 lg (n-1) ) + n 2  (1) = n (2 lg n  1) +  (n 2 ) = n 2  n +  (n 2 ) =  (n 2 )

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

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

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

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

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

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

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

32 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

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

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

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

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

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

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


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

Presentazioni simili


Annunci Google