Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
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