17.01.2015 Views

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

<strong>Algoritmi</strong> e <strong>Strutture</strong> <strong>Dati</strong><br />

Capitolo 11<br />

Grafi e visite di grafi


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Definizione<br />

Un grafo G = (V,E) consiste in:<br />

- un insieme V di vertici (o nodi)<br />

- un insieme E di coppie di vertici, detti archi:<br />

ogni arco connette due vertici<br />

Esempio 1: V = {persone che vivono in Italia},<br />

E = {coppie di persone che si sono strette la mano}<br />

Esempio 2: V = {persone che vivono in Italia},<br />

E = { (x,y) tale che x ha inviato una mail a y}<br />

2<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Terminologia (1/2)<br />

Esempio 1: relazione simmetrica<br />

Esempio 2: relazione non simmetrica<br />

grafo non orientato<br />

grafo orientato<br />

n = numero di vertici<br />

m = numero di archi<br />

L ed I sono adiacenti<br />

(L,I) è incidente a L<br />

I ha grado 4: δ(I) = 4<br />

∑ δ(v) = 2m<br />

v∈V<br />

3<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Terminologia (2/2)<br />

< L , I , E, C, B, A > è un cammino<br />

nel grafo di lunghezza 5<br />

Non è il più corto cammino tra L ed A<br />

La lunghezza del più corto cammino<br />

tra due vertici si dice distanza: L ed A<br />

hanno distanza 4<br />

4<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

<strong>Strutture</strong> dati<br />

per rappresentare grafi<br />

5<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Grafi non orientati<br />

6<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Grafi orientati<br />

7<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Prestazioni della lista di archi<br />

8<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Prestazioni delle liste di adiacenza<br />

9<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Prestazioni della matrice di adiacenza<br />

10<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Visite di grafi<br />

11<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Scopo e tipi di visita<br />

Una visita (o attraversamento) di un grafo G<br />

permette di esaminare i nodi e gli archi di G in<br />

modo sistematico<br />

Problema di base in molte applicazioni<br />

Esistono varie tipologie di visite con diverse<br />

proprietà. In particolare:<br />

– visita in ampiezza (BFS = Breadth First Search)<br />

– visita in profondità (DFS = Depth First Search)<br />

12<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Algoritmo di visita generica<br />

13<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Osservazioni<br />

Un vertice viene marcato quando viene incontrato<br />

per la prima volta: marcatura implementata tramite<br />

un vettore di bit di marcatura<br />

Visita genera un albero di copertura T del grafo<br />

Insieme di vertici F ⊆ T mantiene la frangia di T:<br />

– v ∈ (T-F) : v è chiuso, tutti gli archi incidenti su v sono<br />

stati esaminati<br />

– v ∈ F : v è aperto, esistono archi incidenti su v non<br />

ancora esaminati<br />

14<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Costo della visita<br />

Tempo di esecuzione dipende da struttura dati<br />

usata per rappresentare il grafo:<br />

– Lista di archi: O(m n)<br />

– Liste di adiacenza: O(m + n)<br />

– Matrice di adiacenza: O(n 2 )<br />

15<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Casi particolari di visite<br />

• Se frangia F implementata come coda si ha<br />

visita in ampiezza (BFS)<br />

• Se frangia F implementata come pila si ha<br />

visita in profondità (DFS)<br />

16<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Visita in ampiezza<br />

17<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Visita in ampiezza<br />

18<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Esempio: grafo non orientato (1/2)<br />

19<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Esempio: grafo non orientato (2/2)<br />

20<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Esempio: grafo orientato<br />

21<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Proprietà<br />

• Per ogni nodo v, il livello di v nell’albero BFS<br />

è pari alla distanza di v dalla sorgente s<br />

• Per ogni arco (u,v) di un grafo non orientato,<br />

gli estremi u e v appartengono allo stesso<br />

livello o a livelli consecutivi dell’albero BFS<br />

• Se il grafo è orientato, possono esistere archi<br />

(u,v) che attraversano all’indietro più di un<br />

livello<br />

22<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Visita in profondità<br />

23<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Visita in profondità<br />

24<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Esempio: grafo non orientato (1/2)<br />

25<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Esempio: grafo non orientato (2/2)<br />

26<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Esempio: grafo orientato (1/2)<br />

27<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Esempio: grafo orientato (2/2)<br />

28<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Proprietà<br />

• Sia (u,v) un arco di un grafo non orientato. Allora:<br />

– (u,v) è un arco dell’albero DFS, oppure<br />

– i nodi u e v sono l’uno discendente/antenato dell’altro<br />

• Sia (u,v) un arco di un grafo orientato. Allora:<br />

– (u,v) è un arco dell’albero DFS, oppure<br />

– i nodi u e v sono l’uno discendente/antenato<br />

dell’altro, oppure<br />

– (u,v) è un arco trasversale a sinistra, ovvero il vertice<br />

v è in un sottoalbero visitato precedentemente ad u<br />

29<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004


<strong>Algoritmi</strong> e strutture dati<br />

Fabrizio Grandoni<br />

Riepilogo<br />

• Nozione di grafo e terminologia<br />

• Diverse strutture dati per rappresentare grafi nella<br />

memoria di un calcolatore<br />

• L’utilizzo di una particolare rappresentazione può<br />

avere un impatto notevole sui tempi di esecuzione<br />

di un algoritmo su grafi (ad esempio, nella visita<br />

di un grafo)<br />

• Algoritmo di visita generica e due casi particolari:<br />

visita in ampiezza e visita in profondità<br />

30<br />

Demetrescu, Finocchi, Italiano McGraw-Hill © 2004

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!