• Non ci sono risultati.

Strutture Dati

N/A
N/A
Protected

Academic year: 2021

Condividi "Strutture Dati"

Copied!
21
0
0

Testo completo

(1)

Murano Aniello - Lab. di ASD Lezione n.19

1

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Laboratorio di Algoritmi e

Strutture Dati Strutture Dati

Aniello Murano Aniello Murano http://

http://people.na.infn.itpeople.na.infn.it//~murano~murano//

Murano Aniello - Lab. di ASD 2

Algoritmi per il calcolo di

Algoritmi per il calcolo di

percorsi minimi su un grafo

percorsi minimi su un grafo

(2)

Murano Aniello - Lab. di ASD

Lezione n.19 3

Un semplice problema

Pr oblema: Supponiamo che un mot ociclist a voglia r aggiunger e Genova par t endo da Napoli. Avendo a disposizione una mappa dell I t alia in cui per ogni collegament o dir et t o t r a cit t à è segnat a la sua lunghezza, come può il motociclista trovare il percorso minimo?

Murano Aniello - Lab. di ASD 4

Soluzione del problema

Una soluzione è quella di numer ar e t ut t i i possibili cammini da Napoli a Genova, per ognuno calcolar e la lunghezza complessiva e poi selezionare il più breve

Q uest a soluzione non è la più ef f icient e per ché ci sono milioni di cammini da analizzare.

I n quest a lezione vediamo come r isolver e quest o pr oblema in modo efficiente.

I n pr at ica, modellando la car t ina dell I t alia come un gr af o or ient at o pesat o G=(V, E), dove ciascun ver t ice r appr esent a una città, ogni ar co (u,v) r appr esent a una st r ada dir et t a da u a v ed ogni peso w(u,v) cor r ispondent e ad un ar co (u,v) r appr esent a la dist anza t r a u e v, il pr oblema da r isolver e è quello di t r ovar e il cammino minimo che collega il vertice corrispondente a Napoli con quello corrispondente a Genova.

(3)

Murano Aniello - Lab. di ASD

Lezione n.19 5

Definizione di Shortest path (SP)

Dat o un gr af o pesat o or ient at o G=(V,E), il peso di un cammino p=(v0v1, ,vk) è dat o dalla somma dei pesi degli ar chi che lo costituiscono, cioè

Uno shortest path (cammino minimo) dal nodo u al nodo v di V è un cammino p = (u,v1,v2, ,v) tale che w(p) è minimo

Il costo del cammino minimo da u a v è denotato con (u, v).

Se non esiste un cammino da u a v allora (u, v) =

k

i

i

i v

v w p

w

1

1, ) (

) (

Murano Aniello - Lab. di ASD 6

Principio di ottimalità

Dat o un gr af o pesat o or ient at o G=(V,E) e uno shortest path p = (v0,v1, ,vk) da v0 a vk, qualsiasi sot t ocammino p = (vi,vi+1, ,vj) contenuto in p è anch esso uno shortest path tra vie vj

(4)

Murano Aniello - Lab. di ASD

Lezione n.19 7

Algoritmi per il calcolo dello SP

Dat o un gr af o pesat o connesso or ient at o G=(V,E) e un nodo sor gent e s di V, esist ono diver si algor it mi per t r ovar e uno SP da s ver so ogni alt r o nodo di V (single- source shortest path problem)

Dall esecuzione di t ali algor it mi si ot t iene, per ogni nodo dest inazione v di V, uno SP p (da s a v) e si calcola

d[v] = distanza del nodo v dal nodo sorgente s lungo lo SP p [v] = predecessore del nodo v lungo lo SP p

Inizializzazione: per ogni nodo v di V d[v] = se v s, altrimenti d[s] = 0

[v] = Ø

L idea è ad ogni passo d[v] tale che d[v] = (s, v)

Dur ant e l esecuzione si usa la t ecnica del rilassamento (relaxation) di un generico arco (u,v) di E, che serve a migliorare la nostra stima per d.

Gli algoritmi si differenziano sulla modalità di eseguire il rilassamento Algoritmo di Dijkstra O(E + V log V)

Algoritmo di Bellman- Ford O(E V)

s v

d[v]=30

[v]=f

Murano Aniello - Lab. di ASD 8

Rilassamento di un arco

Il rilassamento di un arco (u,v) di E, consiste nel valutare se, utilizzando u come pr edecessor e di v, si può miglior ar e il valor e cor r ent e della distanza d[v] e, in tal caso, si aggiornano d[v] e [v]

Procedura relax(u,v):

se d[v] > d[u] + w(u,v); allora

d[v] = d[u] + w(u,v);e [v] = u;

In (a), d[v] > d[u] + w(u,v). Quindi il valore di d[v] decresce In (b), d[v] d[u] + w(u,v). Quindi d[v] non viene modificato

5 9

5 7

5 5

6 6

2

2

2

2 u

u

u

u v

v

v

v

(a) (b)

(5)

Murano Aniello - Lab. di ASD

Lezione n.19 9

Algoritmo di Dijkstra

L algor it mo di Dijkstra r isolve il pr oblema di cammini minimi con sor gent e singola su un gr af o or ient at o e pesat o G = (V, E) nel caso in cui tutti i pesi degli archi siano non negativi.

Assumeremo quindi che il peso w(u, v) 0 per ogni arco (u, v) di E.

L algor it mo di Dijkstra mant iene un insieme S che cont iene i ver t ici il cui peso di cammino minimo dalla sor gent e s è già stato determinato.

Inizialmente S viene inizializzato vuoto (inizializzazione).

L algor it mo poi seleziona r ipet ut ament e un ver t ice u di S =V S con la minima st ima di cammino minimo, inser isce u in S e r ilassa tutti gli archi uscenti da u.

Viene usat a una coda con pr ior it à Q che cont iene t ut t i i ver t ici in S

L algoritmo termina quando S=V

Murano Aniello - Lab. di ASD 10

Dijkstra's Shortest Path Algorithm

Consideriamo il seguente grafo e il problema di trovare il cammino minimo da s a t

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

(6)

Murano Aniello - Lab. di ASD

Lezione n.19 11

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

0

distance label

S = { }

Q = { s, 2, 3, 4, 5, 6, 7, t }

Murano Aniello - Lab. di ASD 12

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

0

distance label

S = { }

Q = { s, 2, 3, 4, 5, 6, 7, t }

ExtractMin()

(7)

Murano Aniello - Lab. di ASD

Lezione n.19 13

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

distance label

S = { s }

Q = { 2, 3, 4, 5, 6, 7, t } decrease key

X

X

X

Murano Aniello - Lab. di ASD 14

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

distance label

S = { s }

Q = { 2, 3, 4, 5, 6, 7, t }

X

X

X

ExtractMin()

(8)

Murano Aniello - Lab. di ASD

Lezione n.19 15

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2 }

Q = { 3, 4, 5, 6, 7, t }

X

X

X

Murano Aniello - Lab. di ASD 16

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2 }

Q = { 3, 4, 5, 6, 7, t }

X

X

X

decrease key X 32

(9)

Murano Aniello - Lab. di ASD

Lezione n.19 17

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2 }

Q = { 3, 4, 5, 6, 7, t }

X

X

X

X 32

ExtractMin()

Murano Aniello - Lab. di ASD 18

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 6 } Q = { 3, 4, 5, 7, t }

X

X

X

X 32

44 X

(10)

Murano Aniello - Lab. di ASD

Lezione n.19 19

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 6 } Q = { 3, 4, 5, 7, t }

X

X

X

X 32

44 X

ExtractMin()

Murano Aniello - Lab. di ASD 20

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 6, 7 } Q = { 3, 4, 5, t }

X

X

X

X 32

44 X X 35

59X

(11)

Murano Aniello - Lab. di ASD

Lezione n.19 21

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 6, 7 } Q = { 3, 4, 5, t }

X

X

X

X 32

44 X X 35

59X ExtractMin

Murano Aniello - Lab. di ASD 22

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 3, 6, 7 } Q = { 4, 5, t }

X

X

X

X 32

44 X X 35

59X X 51 X 34

(12)

Murano Aniello - Lab. di ASD

Lezione n.19 23

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 3, 6, 7 } Q = { 4, 5, t }

X

X

X

X 32

44 X X 35

59X X 51 X 34

ExtractMin

Murano Aniello - Lab. di ASD 24

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 3, 5, 6, 7 } Q = { 4, t }

X

X

X

X 32

44 X X 35

59X X 51 X 34

X 50 X 45

(13)

Murano Aniello - Lab. di ASD

Lezione n.19 25

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 3, 5, 6, 7 } Q = { 4, t }

X

X

X

X 32

44 X X 35

59X X 51 X 34

X 50 X 45

ExtractMin

Murano Aniello - Lab. di ASD 26

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 3, 4, 5, 6, 7 } Q = { t }

X

X

X

X 32

44 X X 35

59X X 51 X 34

X 50 X 45

(14)

Murano Aniello - Lab. di ASD

Lezione n.19 27

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 3, 4, 5, 6, 7 } Q = { t }

X

X

X

X 32

44 X X 35

59X X 51 X 34

X 50 X 45

ExtractMin

Murano Aniello - Lab. di ASD 28

Dijkstra's Shortest Path Algorithm

s

3

t 2

6

7

4 5

23

18

2 9

14

15

5

30

20

44

16 11

6

19

6

15 9

14 0

S = { s, 2, 3, 4, 5, 6, 7, t } Q = { }

X

X

X

X 32

44 X X 35

59X X 51 X 34

X 50 X 45

ExtractMin

(15)

Murano Aniello - Lab. di ASD

Lezione n.19 29

Inizializzazione

For ogni vertice v di V do d[v]

[v] NIL d[s] 0

Murano Aniello - Lab. di ASD 30

DIJKSTRA(G,s)

1. INIZIALIZE-SINGLE-SOURCE(G ,s)

2. S Ø

3. Q V[G]

4. while Q Ø

5. do u EXTRACT-MIN(Q)

6. S S unito {u}

7. for ogni vertice v di Adj[u]

8. do RELAX(u, v)

Tratto da:

Introduzione agli algoritmi Di H.Cormen

La linea 1 esegue l inizializzazione,

la linea 2 inizializza l insieme S con l insieme vuoto.

La linea 3 inizializza la coda con priorità Q con tutti i vertici in V-S.

Ad ogni esecuzione del ciclo while un ver t ice u viene est r at t o da Q e viene inserito in S (la prima volta u = s).

I nf ine le linee 7-8 r ilassano ogni ar co (u, v) che esce da u, aggior nando la st ima d[ v] ed il pr edecessor e [ v] se il cammino minimo per v può essere migliorato passando per u.

Si osservi che ogni vertice viene estratto da Q ed inserito in S una sola volta;

Quindi il ciclo while viene ripetuto |V| volte.

(16)

Murano Aniello - Lab. di ASD

Lezione n.19 31

Un altro esempio

Supponiamo di voler calcolare il cammino minimo da A a D

Murano Aniello - Lab. di ASD 32

Complessità (1/2)

1. INIZIALIZE-SINGLE-SOURCE(G ,s)

2. S Ø // Inizializzazione: (V) //

3. Q V[G] // Per costruire la coda a priorità: (V) //

4. while Q Ø // eseguito |V| volte //

5. do u EXTRACT-MIN(Q)

6. S S unito {u}

7. for ogni vertice v di Adj[u] // |E| volte //

8. do RELAX(u, v)

Ciclo while eseguito |V| volte

|V| chiamate a EXTRACT-MIN ciclo interno su archi fatto |E| volte Al più |E| chiamate a Relax

Tempo totale:

(V + V × TEXTRACT- MIN+ E × TRELAX)

Dunque, la complessità dipende molto da come è implementata la coda di priorità

(17)

Murano Aniello - Lab. di ASD

Lezione n.19 33

Complessità (2/2)

Usando un array non ordinato per implementare la coda:

EXTRACT-MIN in tempo (n), Relax in (1) Tempo totale: (V + V V + E) = (V2)

In un grafo non fortemtente conesso conviene usare un heap binario invece di una coda di priorità

Usando un heap, la complessità diventa: ((V+E) logV) Per costruire un heap: (V)

ExtractMin prende tempo (lgV) (se si pensa ad un heap con minimo nella radice) e questa operazione viene eseguita

|V| volte

Il costo di relax è O(lgV) e questo viene effettuato |E|

volte.

Murano Aniello - Lab. di ASD 34

Algoritmo Bellman - Ford

L algor it mo di Bellman-For d r isolve il pr oblema di cammini minimi con sor gent e singola nel caso più gener ale in cui i pesi degli ar chi possono essere negativi.

Dat o un gr af o or ient at o e pesat o G = (V, E) con sor gent e s, l algor it mo di Bellman Ford r est it uisce un valor e booleano che indica se esist e oppur e no un ciclo di peso negat ivo r aggiungibile dalla sor gent e. I n caso af f er mat ivo, l algor it mo indica che non esist e alcuna soluzione; se invece t ale ciclo non esist e, allor a l algoritmo produce i cammini minimi ed i loro pesi.

Anche quest o algor it mo usa la t ecnica del r ilassament o, diminuendo pr ogr essivament e una st ima d[ v] del peso di un cammino minimo dalla sor gent e s ad ogni ver t ice v di V f ino a raggiungere il reale peso di cammino minimo (s, v).

L algor it mo r est it uisce TRUE solo se il gr af o non cont iene un ciclo di peso negativo raggiungibile dalla sorgente

(18)

Murano Aniello - Lab. di ASD

Lezione n.19 35

Bellman- Ford (G,s)

1. INIZIALIZE SINGLE SOURCE (G, s) 2. For i 1 to |V[G]| - 1

3. do for ogni vertice (u, v) di E[G]

4. do Relax (u, v, w)

5. For ogni arco (u, v) di E[G]

6. do if d[v] > d[u] + w(u, v)

7. then return FALSE

8. Return TRUE

Dopo aver effettuato l inizializzazione, l algoritmo fa |V| - 1 passate sugli archi del grafo:ogni passata è una iterazione del ciclo for delle linee 2-4 e consiste nel rilassare ogni arco del grafo una volta.

infine le linee 5-8 controllano l esistenza di un ciclo di peso negativo e restituiscono il valore booleano appropriato.

Tratto da:

Introduzione agli algoritmi Di H.Cormen

Murano Aniello - Lab. di ASD 36

Analisi Bellman- Ford

L algor it mo di Bellman For d r ichiede t empo O(VE), poiché l inizializzazione in linea 1 r ichiede t empo (V) ment r e i cicli for richiedono tempo O(E)

(19)

Murano Aniello - Lab. di ASD

Lezione n.19 37

Algoritmi:complessità

In definitiva l algoritmo di Dijkstra è più conveniente rispetto a quello di Bellman-Ford,mentre l ultimo algoritmo citato ha una duttilità maggiore perché é in grado di trovare il cammino minimo anche su grafi con archi di peso negativo.

Murano Aniello - Lab. di ASD 38

Cammini minimi tra tutte le coppie di vertici di un grafo

Olt r e ad algor it mi che r isolvono il pr oblema del cammino minimo su gr af i con sor gent e singola, ve ne sono alcuni che consider ano il pr oblema di t r ovar e i cammini minimi t r a t ut t e le coppie di vertici in un grafo.

Qui riportiamo l algoritmo di Floyd-Warshall

.

(20)

Murano Aniello - Lab. di ASD

Lezione n.19 39

Si consider ano t ut t i i cammini da i a j in cui ver t ici int er medi sono nell insieme {1, ,k} e sia p un cammino minimo tra di essi.

E possibile def inir e una r elazione t r a p e i cammini minimi t r a i vertici i e j i cui vertici intermedi sono nell insieme

{1, ,k- 1}

Se k non e un vertice intermedio di p, allora tutti i vertici intermedi di p sono nell insieme

{1, ,k- 1}.

Questo significa che il peso di un cammino minimo da i a j in cui tutti i vertici intermedi sono in {1, ,k} è dato dal peso di un cammino minimo da i a j in cui tutti i vertci intermedi sono in {1, ,k- 1}.

Murano Aniello - Lab. di ASD 40

Se k è un ver t ice int er medio di p allor a possiamo spezzar e p così:

i j

p1 k p2

p1 e un cammino minimo da i a k in cui tutti i vertici intermedi sono nell insieme {1, ,k-1}.

p2 e un cammino minimo da i a k in cui tutti i vertici intermedi sono nell insieme {1, ,k-1}.

Q uest o signif ica che il peso di un cammino minimo da i a j in cui t ut t i i ver t ici int er medi sono in {1, ,k} è dat o dal peso di un cammino minimo da i a k in cui t ut t i i ver t ci int er medi sono in {1, ,k- 1} + il peso di un cammino minimo da k a j in cui t ut t i i vertci intermedi sono in {1, ,k- 1}.

Algoritmo di Floyd- Warshall (2/2)

(21)

This document was created with Win2PDF available at http://www.win2pdf.com.

The unregistered version of Win2PDF is for evaluation or non-commercial use only.

This page will not be added after purchasing Win2PDF.

Riferimenti

Documenti correlati

Progetto Lauree Scientifiche.

A questo punto la ricerca del minimo ha un costo pari all’estrazione dell’elemento di priorità massima dalla coda, e l’aggiornamento dei valori di d, essendo effettuato una sola

L’algoritmo proposto, a seguito della definizione della legge di risposta della superficie riflettente e della legge di divergenza del raggio emesso dal laser terrestre, corregge

Nascono i sistemi a chiave asimmetrica, composti da una chiave pubblica, nota a tutti ed usata per la cifratura, e da una chiave privata,.. nota ad una sola persona ed usata per

Si tratta di uno schema che calcola delle etichette π ammissibili (e ottime) per il problema duale con una caratteristica che lo differenzia dagli algoritmi label correcting

Irroratela quindi con un quarto di litro di vino e con altrettanto fumetto di pesce, poi passatela nel forno a 150 gradi per 45 minuti circa, unendo, a metà cottura, i

Vogliamo dimostrare che la matrice simmetrica A ha abbastanza autodimensione, cio` e vogliamo usare il Teorema fondamentale della diagonalizzazione.. Allora assumiamo il contrario,

 Se nessuna variabile artificiale è ancora in base, ho una base fatta da sole colonne del problema originario e posso partire con Fase 2 su esso.  Se ho ancora variabili