complessit à computazionale concreta

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

Upload: flower

Post on 06-Jan-2016

37 views

Category:

Documents


4 download

DESCRIPTION

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? - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Complessit à computazionale concreta

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3

Complessità computazionale concreta

Corso di Informatica 2

a.a. 2003/04

Lezione 3

Page 2: Complessit à computazionale concreta

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.

Page 3: Complessit à computazionale concreta

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.

Page 4: Complessit à computazionale concreta

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 REACHABILITYS := {u}; M := {u};

while S dox := 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

Page 5: Complessit à computazionale concreta

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 xE’ talvolta espressa in termini di una dimensione: | · | : Input N

Es. | n | = log2 (n+1) = lunghezza della rappresentazione binaria di n ( 0)

Input N N| · | gA

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

Page 6: Complessit à computazionale concreta

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3

Confronto tra algoritmi

0

5000

10000

15000

20000

25000

0 10 20 30 40 50 60 70 80 90 100

TA (n) = 100 n

TB (n) = 2 n2

• L’algoritmo A è migliore dell’algoritmo B per n > 50;

• Rimpiazzare B con A è meglio che raddoppiare la velocità del computer:

02)1000(

)1000( 2

)100(

)100(

A

B

A

B

T

T

T

T

Page 7: Complessit à computazionale concreta

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

Page 8: Complessit à computazionale concreta

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 disparig(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:

Page 9: Complessit à computazionale concreta

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

Page 10: Complessit à computazionale concreta

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) = k c g(n)

per ogni n n0.

Page 11: Complessit à computazionale concreta

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

kk

i

ik

i

ik

i

ii xkaxaaxxaxp )1()(

000

hkk cxxpxa )(

dacxacxcxxa hkkk

hkhkk //

Page 12: Complessit à computazionale concreta

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3

Gli ordini di grandezza

Ordini Funzioni

O(1) costanti

O(log2 n) logaritmiche

O(n) lineari

O(n log n) n log n

O(n2) quadratiche

O(n3) cubiche

O(np) p > 0 polinomiali

O(2n) esponenziali

Page 13: Complessit à computazionale concreta

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

Page 14: Complessit à computazionale concreta

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:

))(()())(()(0)(

)(lim nfOngngOnf

ng

nf

n

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) < c per ogni c > 0.

Corollario. O(np) < O(2n): perché lim n np/2n = 0.

Page 15: Complessit à computazionale concreta

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:

0)(

)())(()( lim

ng

nfngonf

n

Page 16: Complessit à computazionale concreta

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

Page 17: Complessit à computazionale concreta

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

Page 18: Complessit à computazionale concreta

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; // T1

for i := 1 to n do

A[i,i] := 1; // T4

T2

T5

T3

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)

Page 19: Complessit à computazionale concreta

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

Page 20: Complessit à computazionale concreta

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)

fc g

f(x) = O(g(x))

c gf

f(x) = (g(x))

c1 g

c2 g

f

f(x) = (g(x))

Page 21: Complessit à computazionale concreta

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

Page 22: Complessit à computazionale concreta

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 – c n log 2 + n

= c n log n – c n + n

c n log n (se c 1)

Page 23: Complessit à computazionale concreta

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) + n ip. ind.

= c n + n

= O(n) Errore!!!

Page 24: Complessit à computazionale concreta

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 n T(1) = n (1 + 2 + … + 2lg (n-1) ) + n2 (1) = n (2lg n 1) + (n2) = n2 n + (n2) = (n2)

Page 25: Complessit à computazionale concreta

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:

1. se c < logba allora T(n) = (nlogb

a), 2. se c = logba allora T(n) = (nc log n),3. se c > logba allora T(n) = (nc).

Page 26: Complessit à computazionale concreta

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 = 2c = 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 = 2c = 1 = logba Caso 2 del teorema principale:

T(n) = (nc log n) = (n log n)

Page 27: Complessit à computazionale concreta

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

Page 28: Complessit à computazionale concreta

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.

Page 29: Complessit à computazionale concreta

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.

Page 30: Complessit à computazionale concreta

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:

2h1 s 2h , ovvero h log2 s

Quindi un problema la cui soluzione può rappresentarsi con un albero qpb con s(n) possibili soluzioni è (log2 s(n)).

Page 31: Complessit à computazionale concreta

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.

)/(log2log)/(2log!log 2222 ennnennn n

Page 32: Complessit à computazionale concreta

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3

L’albero per l’ordinamento di 3 el.

a:b

b:c b:c

a:c

a < b b < a

a, b, c

b < c c < b

a, c, b c, a, b

c < aa < ca:c

b, a, c b, c, a

c < aa < cb, c, a

c < bb < c

3!3log2 h

Page 33: Complessit à computazionale concreta

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) log2 f(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).

Page 34: Complessit à computazionale concreta

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.

Page 35: Complessit à computazionale concreta

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3

Il torneo

a

a b

d

c d

a

f

f

e f

h

g h

f

j

i l

m

m n

m

o

o

o p

r

q r

o

o

Per stabilire il massimo tra n elementi si organizza un torneo: un albero qbf di altezza k = log2 n.

Page 36: Complessit à computazionale concreta

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3

Il torneo di consolazione

r

p r

f

m f

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 + log2 n – 2.

Page 37: Complessit à computazionale concreta

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:

Page 38: Complessit à computazionale concreta

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) + 1 se j > 0

Quindi M(j) = 2j 1: perché risulti M(y) = 2y – 1 n – 1 occorre che y log2 n:

sostituendo in |A| n + y 2 si trova

n + log2 n – 2.