Algoritmi e struttur e dati mod b
This presentation is the property of its rightful owner.
Sponsored Links
1 / 43

Algoritmi e Struttur e Dati (Mod. B) PowerPoint PPT Presentation


  • 54 Views
  • Uploaded on
  • Presentation posted in: General

Algoritmi e Struttur e Dati (Mod. B). Programmazione Dinamica (Parte I). Numeri di Fibonacci. Definizione ricorsiva (o induttiva) F (1) = F (0) = 1 F ( n ) = F ( n -1) + F ( n -2). Algoritmo ricorsivo. Fib ( n : intero) if n = 0 or n = 1 then return 1

Download Presentation

Algoritmi e Struttur e Dati (Mod. B)

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Algoritmi e struttur e dati mod b

Algoritmi e Strutture Dati (Mod. B)

Programmazione Dinamica

(Parte I)


Numeri di fibonacci

Numeri di Fibonacci

Definizione ricorsiva (o induttiva)

  • F(1) = F(0) = 1

  • F(n) = F(n-1) + F(n-2)

Algoritmo ricorsivo

Fib(n: intero)

ifn=0 or n=1

then return1

else returnFib(n-1)+Fib(n-2)


Tempo di esecuzione dell algoritmo

F(4)

F(3)

F(3)

F(2)

F(2)

F(1)

F(2)

F(1)

F(1)

F(0)

F(1)

F(0)

F(1)

F(0)

Tempo di esecuzione dell’algoritmo

F(5)

Tempo di esecuzione

è O(2n)


Algoritmo ii

La complessità in spazio è O(n).

n

0

1

2

3

4

5

6

7

f[]

1

1

2

3

5

8

13

21

Algoritmo II

Fib(n:intero)

f[0] = 1

f[1] = 1

for i=2 to n

f[i] = f[i-1] + f[i-2]

returnf[n]

Un array f[] di

dimensione n.

La complessità in tempo è O(n).


Algoritmo ii1

La complessità in spazio è O(n).

n

0

1

2

3

4

5

6

7

f[]

1

1

2

3

5

8

13

21

Algoritmo II

Fib(n:intero)

f[0] = 1

f[1] = 1

for i=2 to n

f[i] = f[i-1] + f[i-2]

returnf[n]

Un array f[] di

dimensione n.

La complessità in tempo è O(n).


Algoritmo ii2

La complessità in spazio è O(n).

n

0

1

2

3

4

5

6

7

f[]

1

1

2

3

5

8

13

21

Algoritmo II

Fib(n:intero)

f[0] = 1

f[1] = 1

for i=2 to n

f[i] = f[i-1] + f[i-2]

returnf[n]

Un array f[] di

dimensione n.

La complessità in tempo è O(n).


Algoritmo ii3

n

0

1

2

3

4

5

6

7

f[0]

-

-

1

1

2

3

5

8

1

1

1

2

3

5

8

13

f[1]

f[2]

1

1

2

3

5

8

13

21

Algoritmo II

Un array f[] di

dimensione 2.

Fib(n:intero)

f[1] = f[2] = 1

for i=2 ton

f[0] = f[1]

f[1] = f[2]

f[2]= f[0]+ f[1]

returnf[2]

La complessità in spazio è O(1).

La complessità in tempo è O(n).


Programmazione dinamica

Programmazione Dinamica

  • Strategia sviluppata intorno agli anno ‘50 nel campo dei problemi di ottimizzazione

  • Applicazione nei casi in cui:

    • ci sia più di una soluzione al problema

    • alle soluzioni è associabile un indice di “bontà” (ad esempio: costo, preferenza, etc.)

    • si vuole determinare la soluzione con indice ottimo (la soluzione ottima del problema, rispetto all’indice di “bontà”)


Programmazione dinamica1

Programmazione Dinamica

  • Caratterizzare la struttura di una soluzione ottima

  • Definirericorsivamente il valore di una soluzione otti-ma

    • La soluzione ottima ad un problema contiene le soluzioni ottime ai sottoproblemi

  • Calcolare il valore di una soluzione ottima “bottom-up” (cioè calcolando prima le soluzioni ai casi più semplici)

    • Si usa una tabella per memorizzare le soluzioni dei sottoproblemi

    • Evitare di ripetere il lavoro più volte: non ricalcolare le soluzioni di sottoproblemi già calcolate.

  • Cotruire la (una) soluzione ottima.


Catena di moltiplcazione tra matrici

Catena di moltiplcazione tra matrici

Problema: Data una sequenza di matrici compat-ibili 2 a 2 al prodotto A1, A2, A3, …, An, vogliamo calcolare il loro prodotto.

La moltiplicazione di matrici si basa sulla molti-plicazione scalare come operazione elementare.

Vogliamo calcolare il prodottoimpiegando il numero minore possibile di moltiplicazioni

Il prodotto di matrici non è commutativo...

...ma è associativo [ (A1 A2)A3 = A1 (A2 A3) ]


Moltiplicazione tra matrici

=

73

35

75

P:

A:

B:

Moltiplicazione tra matrici

A: rc

B: pq(ma deve valere che c=p)

AB:rq:richiedercq(rpq)moltiplicazioni scalari


Moltiplicazione tra 2 matrici

(n3)

Moltiplicazione tra 2 matrici

Prod-Matrici(A[r,c],B[p,q],P[r,q]: matrice)

if cp

thenERRORE “dimensioni non compatibili”

return

else for i=1to r

doforj=1 to q

do sum=0

fork=1 to c

dosum=sum+A[i,k]B[k,j]

P[i,j]=sum

Tempo di esecuzione= (rcq)


Catena di moltiplcazione tra matrici1

Catena di moltiplcazione tra matrici

  • 3 matrici: ABC

  • Dimensioni: 1001 , 1100 , 1001

  • (( A B ) C ) Num Moltiplicazioni Memoria

    (A B ) 1001100 = 10000 10000

    ((A B ) C ) 1001001 = 10000 100

    ------------------------ -------

    20000 10100

  • (A ( B C ))

    (B C ) 11001 = 100 1

    (A (B C )) 10011 = 100 100

    ------------------- -------

    200 101


Catena di moltiplcazione tra matrici2

Catena di moltiplcazione tra matrici

  • 4 matrici: ABCD

  • Dimensioni: 5010, 1040, 4030, 305

  • ((( A B ) C ) D ) : 87500 moltiplicazioni

    ( A B ) 501040 = 20000

    (( A B ) C ) 504030 = 60000

    (( A B )C ) D 5030 5 = 7500

    -----------------------

    87500


Catena di moltiplcazione tra matrici3

Catena di moltiplcazione tra matrici

  • ((( A B ) C ) D ) : 87500 moltiplicazioni

  • (( A ( B C )) D ) : 34500 moltiplicazioni

  • (( A B )( C D )) : 36000 moltiplicazioni

  • ( A (( B C ) D )) : 16000 moltiplicazioni

  • ( A ( B ( C D ))) : 10500 moltiplicazioni

  • 4 matrici: ABCD

  • Dimensioni: 5010, 1040, 4030, 305


Criterio di scelta

Criterio di scelta

  • Determinare il numero di moltiplicazioni scalari necessari per i prodotti tra le matrici in ogni parentesizzazione

  • Scegliere la parentesizzazione che richiede il numero minimo di moltiplicazioni (criterio di otti-malità)

  • Ma quante sono le parentesizzazioni possibili?

    per n= 3 sono 2

    per n= 4 sono 5

    per n > 4 quante sono?


Definizione di parentesizzazione

A  B

A  B  C

D

C

(A B)

((A B) C )

(((A B ) C ) D)

Definizione di parentesizzazione

Definizione:Un prodotto di matrici A1A2A3…An si dice completamente parentesizzato se:

  • consiste di una unica matrice (n = 1) oppure

  • per qualche 1  k  n, è il prodotto, delimitato da pare-ntesi, tra i prodotti completamente parentesizzati

    A1A2A3…Ak eAk+1A2A3…An

A  B  C  D


Definizione di parentesizzazione1

C  D

B  C  D

A

B

(C D)

(B (C D))

(A (B (C D) ) )

Definizione di parentesizzazione

Definizione:Un prodotto di matrici A1A2A3…An si dice completamente parentesizzato se:

  • consiste di una unica matrice (n = 1) oppure

  • per qualche 1  k  n, è il prodotto, delimitato da pare-ntesi, tra i prodotti completamente parentesizzati

    A1A2A3…Ak eAk+1A2A3…An

A  B  C  D


Definizione di parentesizzazione2

C  D

A  B

(A B)

((A B )(C D))

(C D)

Definizione di parentesizzazione

Definizione:Un prodotto di matrici A1A2A3…An si dice completamente parentesizzato se:

  • consiste di una unica matrice (n = 1) oppure

  • per qualche 1  k  n, è il prodotto, delimitato da pare-ntesi, tra i prodotti completamente parentesizzati

    A1A2A3…Ak eAk+1A2A3…An

A  B  C  D


Quanti modi ci sono di parentesizzare

Quanti modi ci sono di parentesizzare?

  • A1, A2, A3, …, An

  • Sia P(n) il numero di modi di calcolare il pro-dotto di n matrici.

  • Supponiamo che l’ultima moltiplicazione sia

    • (A1, A2, …, Ak ) (Ak+1, …, An)1  k  n-1

per ogni scelta di parentesizzazione di (A1,A2,…,Ak ) ci sono P(n-k) possibili parentesizzazioni dell’altra porzione (Ak+1,…,An) e

per ogni scelta di parentesizzazione di (Ak+1,…,An) ci sono P(k) possibili parentesizzazioni dell’altra porzione (A1,A2 ,…, Ak).


Quanti modi ci sono di parentesizzare1

n

1

2

3

4

5

6

7

8

9

10

P(n)

1

1

2

5

14

42

132

429

1430

4862

Quanti modi ci sono di parentesizzare?

  • A1, A2, A3, …, An

  • Sia P(n) il numero di modi di calcolare il pro-dotto di n matrici.

  • Supponiamo che l’ultima moltiplicazione sia

    • (A1, A2, …, Ak ) (Ak+1, …, An)1  k  n-1

  • Allora ci sono P(k) P(n-k) modi per un k fissato

  • P(n) = 1kn-1P(k) P(n-k)P(1) = 1


Quanti modi ci sono di parentesizzare2

n

1

2

3

4

5

6

7

8

9

10

P(n)

1

1

2

5

14

42

132

429

1430

4862

Quanti modi ci sono di parentesizzare?

  • Allora ci sono P(k) P(n-k) modi per un k fissato

Questa è una equazione di ricorrenza


Quanti modi ci sono di parentesizzare3

Quanti modi ci sono di parentesizzare?

  • Allora ci sono P(k) P(n-k) modi per un k fissato

Questa è una equazione di ricorrenza...

… la cui soluzione è la sequenza dei numeri catalani


Quanti modi ci sono di parentesizzare4

Quanti modi ci sono di parentesizzare?

Questa è una equazione di ricorrenza...

… la cui soluzione è la sequenza dei numeri catalani

Quindi: enumerare tutte le possibilità,calcolare il nu-mero di moltiplicazioni escegliere la parentesizza-zione a costo minore non è praticabile(perché il numero di possibilità è esponenziale)!


Soluzione con programmazione dinamica

Soluzione con programmazione dinamica

  • Caratterizzare la struttura di una soluzione ottima

  • Definirericorsivamente il valore di una soluzione ottima

  • Calcolare il valore di una soluzione ottima “bottom-up” (dal basso verso l’alto)

  • Cotruzione di una soluzione ottima.

Vediamo ora una ad una le 4 fasi del processo di sviluppo


Notazione

Notazione

Denoteremo nel seguito con:

c0: numero di righe della matrice A1

ci-1: numero di righe della prima matrice Ai

ci : numero di colonne della matrice Ai

A1…n: sia una parentesizzazione che il risultato del prodottoA1A2…An

Al…r: sia una parentesizzazione che il risultato del prodottoAl…Ar


Caratterizzare della soluzione ottima

Caratterizzare della soluzione ottima

  • Una soluzione al problema della prentesizzazione ottima di n matrici divide il problema nei due sottoproblemi:

    • quello del prodotto delle prime k matrici A1…ke

    • quello delle rimanenti n-kAk+1…n(per qualche k).

  • La soluzione finale (A1…n) è il risultato del prodotto delle due matrici A1…k eAk+1…n.

  • Il costo del prodotto A1…n è la somma del costo del prodotto di A1…k più il costo di Ak+1…n, più il costo del prodotto finale tra le due matrici risultanti, cioè c0ckcn.


Caratterizzare della soluzione ottima1

Caratterizzare della soluzione ottima

  • La soluzione finale (A1…n) è il risultato del prodotto delle due matrici A1…k eAk+1…n.

  • Il costo del prodotto A1…n è la somma del costo del prodotto di A1…k più il costo di Ak+1…n, più il costo del prodotto finale tra le due matrici risultanti, cioè c0ckcn.

Ma come devono essere fatte le soluzioni ai due sottoproblemiA1…keAk+1…nper garantire che la soluzione complessiva (A1…n=A1…kAk+1…n)sia anch’essa ottima?


Caratterizzare della soluzione ottima2

Caratterizzare della soluzione ottima

  • Quello che ci serve che valga è che la struttura delle soluzioni ai sottoproblemi sia analoga a quella del problema complessivo.

  • Cioè che soluzioni ottime ai sottoproblemi permettano di costruire la soluzione ottima al problema complessivo.

Teorema:Se A1…n=A1…kAk+1…n è una parentesizzazione ottima del prodotto A1A2…An, allora A1…keAk+1…n sono parentesizzazioni ottime dei prodotti A1…Ak eAk+1…An, rispettivamente.


Caratterizzare della soluzione ottima3

Caratterizzare della soluzione ottima

Teorema:Se A1…n=A1…kAk+1…n è una parentesizzazione ottima del prodotto A1A2…An, allora A1…keAk+1…n sono parentesizzazioni ottime dei prodotti A1…Ak eAk+1…An, rispettivamente.

Dimostrazione: Supponiamo che A1…n=A1…kAk+1…n sia una parentesizzazione ottima di A1A2…An ma che almeno uno tra A1…k e Ak+1…n non sia una parentesizzazione ottima del rispettivo prodotto.

Il costo c[A1…n]= c[A1…k]+c[Ak+1…n] + c0ckcn

Supponiamo che esista una parentesizzazione migliore A’1…k delle prime k matrici (cioè c[A’1…k] < c[A1…k]).

Allora basterebbe sostiture A’1…k al posto A1…k per ottene-re anche una parentesizzazione migliore per A1…n.


Caratterizzare della soluzione ottima4

Caratterizzare della soluzione ottima

Teorema:Se A1…n=A1…kAk+1…n è una parentesizzazione ottima del prodotto A1A2…An, allora A1…keAk+1…n sono parentesizzazioni ottime dei prodotti A1…Ak eAk+1…An, rispettivamente.

Questo teorema fornisce la caratterizzazione della struttura della soluzione ottima.

Ci dice che ogni soluzione ottima al problema della parentesizzazione contiene al suo interno le soluzioni ottime dei due sottoproblemi.

L’esistenza di sottostrutture ottime nella soluzione ottima di un problema è una delle caratteristiche che vanno ricercate per decidere se la tecnica di Programmazione Dinamica è applicabile.


Definizione del valore di una soluzione ottima

Definizione del valore di una soluzione ottima

Il secondo passo consiste nel definire ricorsi-vamente il valore della soluzione ottima (alla parentesizzazione) in termini delle soluzioni ottime (alle parentesizzazioni) dei sottopro-blemi.


Notazione1

Notazione

  • Sia m(l,r) il numero ottimo di moltiplicazioninecessario calcolare il prodotto

    Al …rdove1  l  r  n

  • Definiamo m(1,n) ricorsivamente cone segue:

    • Caso Base:

      m(l,r) = 0sel = r


Definizione del valore di una soluzione ottima1

Definizione del valore di una soluzione ottima

  • Definiamo m(1,n) ricorsivamente cone segue:

    • Caso Base:

      m(l,r) = 0 sel = r

    • Caso Induttivo

      Supponiamo che l’ultima moltiplicazione sia

      Al…k Ak+1…l dove l  k  r-1

      m(l,r) = m(l,k) + m(k+1,r) + cl-1 ck cr


Definizione del valore di una soluzione ottima2

Definizione del valore di una soluzione ottima

  • Caso Base:

    m(l,r) = 0 se l = r

  • Caso Induttivo

    Al…k Ak+1…l dovel  k  r-1

    m(l,r) = m(l,k) + m(k+1,r) + cl-1 ck cr

  • Ma per risolvere il nostro problema ci interessa sapere per quale valore di k si ottiene il valore minimo per m(l,r)


Definizione del valore di una soluzione ottima3

Definizione del valore di una soluzione ottima

  • Caso Base:

    m(l,r) = 0 se l = r

  • Caso Induttivo

    Al…k Ak+1…l dovel  k  r-1

    m(l,r) = m(l,k) + m(k+1,r) + cl-1 ck cr

    Ma non conosciamo il valore di k...

    … quindi dobbiamo tentarli tutti!


Calcolo del valore di una soluzione ottima

Calcolo del valore di una soluzione ottima

Il terzo passo consiste nel calcolare il valore della soluzione ottima (alla parentesizza-zione) in termini delle soluzioni ottime (alle parentesizzazioni) dei sottoproblemi.


Calcolo del valore di una soluzione ottima1

Calcolo del valore di una soluzione ottima

A partire dall’equazione sotto, sarebbe facile definire un algoritmo ricorsivo che calcola il costo minimom(1,n) di A1…n

Purtroppo vedremo che tale approccio porta ad un algoritmo di costo esponenziale, non migliore dell’enumerazione esaustiva.


Algoritmi e struttur e dati mod b

L R

L R

L R

1

1

1

2

2

2

3

3

3

4

4

4

5

5

5

6

6

6

1

1

1

0

2

2

2

-

0

3

3

3

-

-

0

4

4

4

-

-

-

0

5

5

5

-

-

-

-

0

6

6

6

-

-

-

-

-

0

m(l,r) = 0 sel = r,

m(l,r) = minlk<r{ m(l,k) + m(k+1,r) + cl-1ckcr } altrimenti

m(1,2) = min1  k< 2{ m(1,k) + m(k+1,2) + c1ckc2 }

= m(1,1) + m(2,2) + c0c1c2


Algoritmi e struttur e dati mod b

L R

L R

L R

1

1

1

2

2

2

3

3

3

4

4

4

5

5

5

6

6

6

1

1

1

0

2

2

2

-

0

3

3

3

-

-

0

4

4

4

-

-

-

0

5

5

5

-

-

-

-

0

6

6

6

-

-

-

-

-

0

m(l,r) = 0 sel = r,

m(l,r) = minlk<r{ m(l,k) + m(k+1,r) + cl-1ckcr } altrimenti

m(2,4) = min2k<4{ m(2,k) + m(k+1,4) + c1ckc4 }

= min{ m(2,2) + m(3,4) + c1c2c4 ,

m(2,3) + m(4,4) + c1c3c4 }


Algoritmi e struttur e dati mod b

L R

L R

L R

1

1

1

2

2

2

3

3

3

4

4

4

5

5

5

6

6

6

1

1

1

0

2

2

2

-

0

3

3

3

-

-

0

4

4

4

-

-

-

0

5

5

5

-

-

-

-

0

6

6

6

-

-

-

-

-

0

m(l,r) = 0 sel = r,

m(l,r) = minlk<r{ m(l,k) + m(k+1,r) + cl-1ckcr } altrimenti

m(2,5) = min2k<5{ m(2,k) + m(k+1,5) + c1ckc5 }

= min{ m(2,2) + m(3,5) + c1c2c5 ,

m(2,3) + m(4,5) + c1c3c5 ,

m(2,4) + m(5,5) + c1c4c5 }


Algoritmi e struttur e dati mod b

L R

L R

L R

1

1

1

2

2

2

3

3

3

4

4

4

5

5

5

6

6

6

1

1

1

0

2

2

2

-

0

3

3

3

-

-

0

4

4

4

-

-

-

0

5

5

5

-

-

-

-

0

6

6

6

-

-

-

-

-

0

m(l,r) = 0 sel = r,

m(l,r) = minlk<r{ m(l,k) + m(k+1,r) + cl-1ckcr } altrimenti

m(1,5) = min1k<5{ m(1,k) + m(k+1,5) + c0ckc5 }

= min{ m(1,1) + m(2,5) + c0c1c5 ,

m(1,2) + m(3,5) + c0c2c5 ,

m(1,3) + m(4,5) + c0c3c5 ,

m(1,4) + m(5,5) + c0c4c5 }


Algoritmi e struttur e dati mod b

L R

L R

L R

1

1

1

2

2

2

3

3

3

4

4

4

5

5

5

6

6

6

1

1

1

0

2

2

2

-

0

3

3

3

-

-

0

4

4

4

-

-

-

0

5

5

5

-

-

-

-

0

6

6

6

-

-

-

-

-

0

m(l,r) = 0 sel = r,

m(l,r) = minlk<r{ m(l,k) + m(k+1,r) + cl-1ckcr } altrimenti

m(1,6) = min1k<6{ m(1,k) + m(k+1,6) + c0ckc6 }

= min{ m(1,1) + m(2,6) + c0c1c6 ,

m(1,2) + m(3,6) + c0c2c6 ,

m(1,3) + m(4,6) + c0c3c6 ,

m(1,4) + m(5,6) + c0c4c6 ,

m(1,5) + m(6,6) + c0c5c6 }


  • Login