Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 -...

22
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Un’introduzione informale agli algoritmi Algoritmi e Strutture Dati

Transcript of Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 -...

Page 1: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl1

Capitolo 1Un’introduzione informale

agli algoritmi

Algoritmi e Strutture Dati

Page 2: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl2

Approfondimento: Dimostrazione del Lemma 1Lemma 1: Il numero di foglie dell’albero della ricorsione di fibonacci2(n) è pari a Fn

Dim: Per induzione su n:

– Caso base n=1: in questo caso l’albero della ricorsione è costituito da un unico nodo, che è quindi anche una foglia; poiché F1=1, il lemma segue.

– Caso n>1: supposto vero fino ad n-1, dimostriamolo vero per n; osserviamo che l’albero della ricorsione associato ad n è formato da una radice etichettata F(n) e da due sottoalberi etichettati F(n-1) e F(n-2). Per l’ipotesi induttiva, tali sottoalberi hanno rispettivamente Fn-1 ed Fn-2 foglie, e quindi l’albero della ricorsione associato ad n avrà Fn-1 + Fn-2 = Fn foglie, come volevasi dimostrare. □

Page 3: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl3

Approfondimento: Dimostrazione del Lemma 2Lemma 2: Il numero di nodi interni di un albero in cui ogni nodo interno ha esattamente due figli è pari al numero di foglie -1

Dim: Per induzione sul numero di nodi interni, sia detto k:

– Caso base k=1: se c’è un solo nodo interno, poiché per ipotesi deve avere due figli, tali figli saranno foglie, e quindi il lemma segue.

– Caso k>1: supposto vero fino a k-1, dimostriamolo vero per k; osserviamo che poiché k>1, abbiamo due possibilità:

1. Uno dei due sottoalberi della radice è una foglia: in tal caso l’altro sottoalbero contiene k-1 nodi interni, e quindi per ipotesi induttiva avrà k foglie; allora, il numero totale di foglie è k+1, da cui segue il lemma;

2. Entrambi i sottoalberi contengono nodi interni, in numero totale di k-1=k1+k2; ma allora, per ipotesi induttiva, conterranno rispettivamente k1+1 e k2+1 foglie, e quindi il numero totale di foglie è k1+k2+2=k+1,

come volevasi dimostrare.

Page 4: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl4

• Stiamo cercando di calcolare efficientemente l’n-esimo numero della sequenza di Fibonacci

• Abbiamo progettato 3 algoritmi:– fibonacci1, non corretto in quanto approssima la soluzione – Fibonacci2, che impiega tempo esponenziale in n– fibonacci3, che impiega tempo proporzionale ad n

Punto della situazione

Page 5: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

• Il tempo di esecuzione non è la sola risorsa di calcolo che ci interessa. Anche la quantità di memoria necessaria può essere cruciale.

• Se abbiamo un algoritmo lento, dovremo solo attendere più a lungo per ottenere il risultato

• Ma se un algoritmo richiede più spazio di quello a disposizione, non otterremo mai la soluzione, indipendentemente da quanto attendiamo!

• È il caso di Fibonacci3, la cui correttezza è subordinata alla dimensione della memoria allocabile

Occupazione di memoria

Page 6: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

• fibonacci3 usa un array di dimensione n prefissata• In realtà non ci serve mantenere tutti i valori di Fn

precedenti, ma solo gli ultimi due, riducendo lo spazio a poche variabili in tutto:

Algoritmo fibonacci4

algoritmo fibonacci4(intero n) intero a b 1 for i = 3 to n do c a+b a b b c return b

Page 7: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

• Per la risorsa tempo, calcoliamo il numero di linee di codice T(n) mandate in esecuzione – Se n≤2: tre sole linee di codice– Se n3: T(n) = 2+(n-1)+3·(n-2) = 4n-5 (per Fibonacci3 avevamo T(n)=2n)

• Per la risorsa spazio, contiamo il numero di variabili di lavoro utilizzate: S(n)=4 (per Fibonacci3 avevamo S(n)=n+1) [NOTA: stiamo assumendo che ogni locazione di memoria può contenere un valore infinitamente grande!)

Correttezza? Corretto per definizione!

Efficienza?

Page 8: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

• Misurare T(n) come il numero di linee di codice mandate in esecuzione è una misura molto approssimativa del tempo di esecuzione

• Se andiamo a capo più spesso, aumenteranno le linee di codice sorgente, ma certo non il tempo richiesto dall’esecuzione del programma!

Notazione asintotica

Page 9: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

• Per lo stesso programma impaginato diversamente potremmo concludere ad esempio che T(n)=3n oppure T(n)=5n

• Vorremmo un modo per descrivere l’ordine di grandezza di T(n) ignorando dettagli inessenziali come le costanti moltiplicative, additive e sottrattive

• Useremo a questo scopo la notazione asintotica Θ

Notazione asintotica

Page 10: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Supponiamo che

Allora, scriveremo che f(n) = (g(n)).

Notazione asintotica (definizione informale)

LLng

nfn

0,)(

)(lim

Page 11: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Esempi:

Sia f(n) = 2n2 + 3n, allora f(n)=Θ(n2)

Sia f(n) = n3 -2n2+3n, allora f(n)=Θ(n3)

Sia f(n) = 23, allora f(n)=Θ(1)

Sia f(n) = 3n -2n, allora f(n)=Θ(3n)

Page 12: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

• Fibonacci2 T(n)=3Fn-2 T(n)=Θ(Fn) T(n)=Θ(n), poiché

• Fibonacci3 T(n)=2n T(n)=Θ(n)

• Fibonacci4 T(n)= 4n-6 T(n)=Θ(n)

Andamento asintotico per i Fibonacci

5

151

lim

n

nn

n

Page 13: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Possiamo sperare di calcolare Fn in tempo inferiore a Θ(n)?

Un nuovo algoritmo

Page 14: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

• fibonacci4 non è il miglior algoritmo possibile

• E’ possibile dimostrare per induzione la seguente proprietà di matrici:

Potenze ricorsive

1 11 0

n= Fn+1

Fn

Fn Fn-1

• Useremo questa proprietà per progettare un algoritmo più efficiente

Page 15: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

…prodotto di matrici

nnn

n

aa

aa

A

,1,

,11,1

nnn

n

bb

bb

B

,1,

,11,1

(AB)i,j= ai,k bk,jk=1

n

i=1,…, n j=1,…, n

Page 16: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Dimostrazione per induzione

Base induzione: n=2

1 11 0

2

= F3 F2

F2 F1

1 11 0

1 11 0

= 2 11 1

=

Fn+1 Fn

Fn Fn-1

Hp induttiva: 1 11 0

n-1

= Fn Fn-1

Fn-1 Fn-2

1 11 0

n

= Fn Fn-1

Fn-1 Fn-2

1 11 0

Fn + Fn-1

Fn-1+ Fn-2

= = Fn

Fn-1

Page 17: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmo fibonacci5

• Osserva che il ciclo arriva fino ad n-1

• Il tempo di esecuzione è T(n)=2+2(n-1)=Θ(n)

• Possiamo migliorare?

Page 18: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

• Possiamo calcolare la n-esima potenza elevando al quadrato la (

└n/2

┘)-esima potenza

• Se n è dispari eseguiamo una ulteriore moltiplicazione

• Esempio:

32=9 34 =(32)2= (9)2 =81 38=(34)2= (81)2 =6561

Calcolo di potenze

Page 19: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmo fibonacci6

Page 20: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

• Tutto il tempo è speso nella procedura potenzaDiMatrice– All’interno della procedura si spende tempo costante– Si esegue una chiamata ricorsiva con input n/2

• L’equazione di ricorrenza è pertanto:

Tempo di esecuzione

T(n) = Θ(1) + T(n/2)

Page 21: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Metodo dell’iterazione

Si può dimostrare che

T(n) ≤ c log2 n + T(1) = Θ(log2 n )

Infatti: T(n)=T(n/2)+Θ(1)=[T(n/4)+Θ(1)]+Θ(1)=

=[{T(n/8)+Θ(1)}+Θ(1)] +Θ(1)=…

=((…(T(1)+Θ(1))+…+Θ(1))+Θ(1))+Θ(1)=Θ(log n)fibonacci6 è quindi esponenzialmente più

veloce di fibonacci5!

Page 22: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl

Riepilogo

fibonacci6

fibonacci5

fibonacci4

fibonacci3

fibonacci2

Θ(log n)

Θ(n)

Θ(n)

Θ(n)

Θ(n)

Θ(log n)

Θ(1)

Θ(1)

Θ(n)

Numero di linee di codice

Occupazione di memoria

fibonacci1 Θ(1)Θ(1)

Θ(n)