Il 0% ha trovato utile questo documento (0 voti)
5 visualizzazioni40 pagine

File System Grafi24 - 1

Il documento tratta la teoria dei grafi, distinguendo tra grafi non direzionati e direzionati, e descrivendo le loro applicazioni pratiche, come nelle reti sociali e nei sistemi di navigazione. Viene presentata la terminologia fondamentale, le rappresentazioni dei grafi e le proprietà come percorsi, cicli e alberi. Infine, si discutono le tecniche per rappresentare e analizzare i grafi, inclusi i concetti di adiacenza e connettività.

Caricato da

tamexid239
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
5 visualizzazioni40 pagine

File System Grafi24 - 1

Il documento tratta la teoria dei grafi, distinguendo tra grafi non direzionati e direzionati, e descrivendo le loro applicazioni pratiche, come nelle reti sociali e nei sistemi di navigazione. Viene presentata la terminologia fondamentale, le rappresentazioni dei grafi e le proprietà come percorsi, cicli e alberi. Infine, si discutono le tecniche per rappresentare e analizzare i grafi, inclusi i concetti di adiacenza e connettività.

Caricato da

tamexid239
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 40

Grafi (I parte)

Progettazione di Algoritmi a.a. 2023-24


Matricole congrue a 1
Docente: Annalisa De Bonis

1
Grafi non direzionati

• Grafi non direzionati. G = (V, E)


 V = insieme nodi.
 E = insieme archi.
 Esprime le relazioni tra coppie di oggetti.
 Parametri del grafo: n = |V|, m = |E|.

V = { 1, 2, 3, 4, 5, 6, 7, 8 }
E = { 1-2, 1-3, 2-3, 2-4, 2-5, 3-5, 3-7, 3-8, 4-5, 5-6,7-8 }
n=8
m = 11

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 2
Esempio di applicazione

• Archi: strade (a doppio senso di circolazione)


• Nodi: intersezioni tra strade
• Pesi archi: lunghezza in km

F
13
A

4 E
7 8
D
11
G
7
16 24
B
H
10
C

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 3
Grafi direzionati

 Gli archi hanno una direzione


• L’arco (u,v) è diverso dall’arco (v,u)
• Si dice che l’arco e=(u,v) lascia u ed entra in v
• e che u è l’origine dell’arco e v la destinazione dell’arco

6
1
V = { 1, 2, 3, 4, 5, 6 }
E = {1-6, 2-1, 3-1, 3-4, 4-2, 5-4, 5-6, 6-2 }
2 n=6
m=8
5

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 4
Grafi direzionati

• Grafi non direzionati G = (V, E) possono essere visti come un caso


particolare degli archi direzionati in cui per ogni arco (u,v) c’è
l’arco di direzione opposta (v,u)

5 5
1 1

2 2

3 3

4 4

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis
5
Esempio di applicazione

• Archi: strade (a senso unico di circolazione)


• Nodi: intersezioni tra strade
• Pesi archi: lunghezza in km

F
13
A

4 E
7 8
D
11
G
7
16 24
B
H
10
C

6
Alcune applicazione dei grafi

• Rete di amicizia su un social network: ogni utente è un nodo; ogni volta


che due utenti diventano amici, si crea un arco del grafo.

• Google maps: i nodi rappresentano città, intersezioni di strade, siti di


interesse, ecc. e gli archi rappresentano le connessioni dirette tra i
nodi.

• La rappresentazione mediante un grafo permette di trovare il


percorso più corto per andare da un posto all’altro mediante un
algoritmo.

• World Wide Web: le pagine web sono i nodi e il link tra due pagine è un
arco. Google utilizza questa rappresentazione per esplorare il World
Wide Web

7
World Wide Web

• Web graph.
 Nodo: pagina web.
 Edge: hyperlink da una pagina all’altra.

cnn.com

netscape.com novell.com cnnsi.com timewarner.com

hbo.com

sorpranos.com

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 8
Ecological Food Web

• Food web graph.


 Nodo = specie
 Arco dalla preda al predatore.

Reference: http://www.twingroves.dètrict96.k12.il.us/Wetlands/Salamander/SalGraphics/salfoodweb.giff

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 9
Alcune applicazioni dei grafi

Graph Nodi Archi


trasporto intersezioni di strade strade
trasporto aeroporti voli diretti
comunicazione computer cavi di fibra ottica
World Wide Web web page hyperlink
rete sociale persone relazioni
rete del cibo specie preda-predatore
scheduling task vincoli di precedenza
circuiti gate wire

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 10
Terminologia

• Consideriamo due nodi u e v di un grafo G connessi


dall’arco e = (u,v)

• Si dice che
– u e v sono adiacenti
– u e v sono le estremità dell’arco (u,v)
– l’arco (u,v) incide sui vertici u e v
– u è un nodo vicino di v
– v è un nodo vicino di u

• Dato un vertice u di un grafo G


– grado di u = numero archi incidenti su u
• è indicato con deg(u)

11
Numero di archi di un grafo non direzionato

m = numero di archi di G;
n= numero di nodi di G . Degree (grado) = numero di vicini di u

1. La somma di tutti i gradi dei nodi di G è 2m :

Dim. Ciascun arco incide su due vertici e quindi viene contato


due volte nella sommatoria in alto. L’arco (x,y) è contato sia in
deg(x) che in deg(y).

2. Il numero m di archi di un grafo G non direzionato è al più


n(n-1)/2 .
Dim. Il numero di coppie non ordinate distinte che si possono
formare con n nodi è n(n-1)/2 .
Posso scegliere il primo nodo dell’arco in n modi e il secondo in
modo che sia diverso dal primo nodo, cioè in n-1 modi. Dimezzo
in quanto l’arco (u,v) è uguale all’arco (v,u)

12
Numero di archi di un grafo direzionato

m = numero di archi di G;
n= numero di nodi di G

Il numero m di archi di G è al più n2


Dim. Il numero di coppie ordinate distinte che si possono
formare con n nodi è n2 . Posso scegliere il primo nodo dell’arco
in n modi e il secondo in altri n modi (se ammettiamo archi con
entrambe le estremità uguali).

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 13
Graph Representation: Adiacenza Matrix

• Matrice di adiacenza. Matrice nxn con Auv = 1 se (u, v) è an arco.


 Spazio proporzionale a n2.
 Controllare se (u, v) è un arco richiede tempo Q(1).
 Identificare tutti gli archi richiede tempo Q(n2).

1 2 3 4 5 6 7 8
1 0 1 1 0 0 0 0 0
2 1 0 1 1 1 0 0 0
3 1 1 0 0 1 0 1 1
4 0 1 0 0 1 0 0 0
5 0 1 1 1 0 1 0 0
6 0 0 0 0 1 0 0 0
7 0 0 1 0 0 0 0 1
8 0 0 1 0 0 0 1 0

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 14
Rappresentazione di un grafo: liste di adiacenza

• Liste di adiacenza. Array di liste in cui ogni lista è associata ad un nodo.


 Ad ogni arco corrisponde un elemento della lista.
 Se esiste l’arco (u,v) allora la lista associata ad u contiene v
 In un grafo non direzionato l’arco (u,v) corrisponde ad un elemento della lista
associata ad u e ad un elemento della lista associata a và somma lunghezze liste=2m
 In un grafo direzionato l’arco (u,v) corrisponde ad un elemento della lista associata
ad u à somma lunghezze liste=m
 Spazio proporzionale a m + n.
 Controllare se (u, v) è un arco richiede tempo O(deg(u)).
 Individuare tutti gli archi richiede tempo Q(m + n).
1 2 3

2 1 3 4 5

3 1 2 5 7 8

4 2 5

5 2 3 4 6

6 5

7 3 8

8 3 7
Progettazione di Algoritmi a.a. 2023-24
A. De Bonis 15
Percorsi e connettività

• Def. Un percorso in un grafo non direzionato G = (V, E) è una


sequenza P di nodi v1, v2, …, vk-1, vk con la proprietà che ciascuna
coppia di vertici consecutivi vi, vi+1 è unita da un arco in E.

• Def. Un percorso è semplice se tutti i nodi sono distinti.

• Def. Un grafo non direzionato è connesso se per ogni coppia di nodi


u e v, esiste un percorso tra u e v.

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 16
Applicazione del concetto di percorso

l Esempi:
Web graph. Voglio capire se è possibile, partendo da una pagina web
e seguendo gli hyperlink nelle pagine via via attraversate, arrivare ad
una determinata pagina

cnn.com

netscape.com novell.com cnnsi.com timewarner.com

hbo.com

sorpranos.com

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 17
Applicazione del concetto di percorso

In alcuni casi può essere interessante scoprire il percorso più


corto, cioe` composto dal minimo numero di archi, tra due nodi.

Esempio:

• Grafo : rete di trasporti dove i nodi sono gli aeroporti e gli


archi i collegamenti diretti tra aeroporti.

• Voglio arrivare da Napoli a New York facendo il minimo


numero di scali.

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 18
Cicli

• Def. Un ciclo è un percorso v1,v2, …,vk-1,vk in cui v1 = vk, k > 2.

• Def. Un ciclo v1,v2, …,vk-1,v1 è semplice se i primi k-1 nodi del


ciclo sono tutti distinti tra di loro

ciclo (semplice) C = 1-2-4-5-3-1


ciclo (non semplice) C’ = 1- 3 -7 -8- 3 - 5 - 2- 1

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 19
Alberi

• Def. Un grafo non direzionato è un albero (tree) se è


connesso e non contiene cicli

• Teorema. Sia G un grafo non direzionato con n nodi. Ogni


due delle seguenti affermazioni implica la restante
affermazione.
– 1e2 3;1e3 2; 2e3 1
1. G è connesso.
2. G non contiene cicli.
3. G ha n-1 archi.

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 20
Alberi con radice

• Albero con radice. Dato un albero T, si sceglie un nodo radice r e si


considerano gli archi di T come orientati a partire da r
• Dato un nodo v di T si dice
 Genitore di v: il nodo che w precede v lungo il percorso da r a v (v
viene detto figlio di w)
 Antenato di v: un qualsiasi nodo w lungo il percorso che va da r a v (v
viene detto discendente di w)

• Foglia: nodo senza discendenti

radice r
Genitore di v

Figlio di v
Un albero Lo stesso albero con radice 1 21

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis
Alberi con radice

• Scegliere un nodo come radice, rende più semplice dimostrare la


seguente affermazione
• se G è connesso e non contiene cicli, in altre parole, se G è un albero
allora il numero di archi è n-1 (dove n è il numero di nodi).
• Dim.
• Per ogni nodo diverso dalla radice c’e` un arco distinto che lo connette
al proprio padre ànumero di archi ≥ n-1
• Per ogni arco c’è un nodo distinto (non radice) che è congiunto al padre
da quell’arco à numero di archi ≤ n-1
3.1 Basic Definitions and Applications 77
• le due diseguaglianze à numero di archi= n-1
3
1

4 2
8

1 2 5 7
7

5
6
9 3 4 6 8 9

Figure 3.1 Two drawings of the same tree. On the right, the tree is rooted at node 1.

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 22
directed graph is a bit more subtle, since it’s possible for u to have a path to
Importanza degli alberi: rappresentano strutture gerarchiche

• Alberi filogenetici. Descrivono la storia evolutiva delle specie


animali.

La filogenesi afferma l’esistenza di una specie ancestrale che diede origine a


mammiferi e uccelli ma non alle altre specie rappresentate nell’albero (cioè,
mammiferi e uccelli condividono un antenato che non è comune ad altre
specie nell’albero). La filogenesi afferma inoltre che tutti gli animali
discendono da un antenato non condiviso con i funghi, gli alberi e i batteri, e
così via.
Progettazione di Algoritmi a.a. 2023-24
A. De Bonis 23
Importanza degli alberi: rappresentano strutture gerarchiche

• File system. Un file system tipicamente consiste di file


organizzati in gruppi chiamati directory.
– Una directory può contenere file e altre directory,
– Un file system gerarchico è organizzato secondo una struttura
gerarchica ad albero con radice
• nodi interni: directory
• foglie: file

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 24
Visite di grafi

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis
Connettività

• Problema della connettività tra s e t. Dati due nodi s e t,


esiste un percorso tra s e t?

• Problema del percorso più corto tra s e t. Dati due nodi s e t,


qual è la lunghezza del percorso più corto tra s e t
• Applicazioni.
 Attraversamento di un labirinto.
 Erdős number.
 Minimo numero di dispositivi che devono essere attraversati dai dati
in una rete di comunicazione per andare dalla sorgente alla
destinazione
 Minimo numero di scali in un viaggio aereo

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 26
Breadth First Search (visita in ampiezza)

• BFS. Esplora il grafo a partire da una sorgente s muovendosi in


tutte le possibile direzioni e visitando i nodi livello per livello (N.B.: il
libro li chiama layer e cioè strati).

• I layer sono descritti di seguito

s L1 L2 L n-1

• BFS algorithm.
 L0 = { s }.
 L1 = tutti i vicini di s.
 L2 = tutti i nodi che non appartengono a L0 o L1, e che sono uniti da un
arco ad un nodo in L1.
 Li+1 = tutti i nodi che non appartengono agli strati L0 ,L1,…,Li e che
sono uniti da un arco ad un nodo in Li.

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 27
Breadth First Search

• distanza tra u e v= lunghezza del percorso piu` corto tra u e v

• Teorema. Per ogni i, Li consiste di tutti i nodi a distanza i


da s. Di conseguenza, c’è un percorso da s a t se e solo t appare in
qualche livello.

s L1 L2 L n-1

L1: livello dei nodi a distanza 1 da s


L2: livello dei nodi a distanza 2 da s

Ln-1: livello dei nodi a distanza n-1 da s

Il teorema si puo` dimostrare in modo molto semplice usando l’induzione

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 28
Breadth First Search
• Teorema. Per ogni i, Li consiste di tutti i nodi a distanza i
da s. Di conseguenza, c’è un percorso da s a t se e solo t appare in
Li, per un certo i∈{0,1,…,j}.
Dim. per induzione sull’indice del layer:
Base induttiva: per j=0, la tesi è vera perche’ L0={s} e s è l’unico nodo a
distanza 0 da se stesso
Passo induttivo: Supponiamo vera la tesi fino ad un certo j e dimostriamo
che è vera per j+1. Assumiamo quindi che per i=0,1,…,j, il layer
Li consista di tutti i nodi a distanza i da s.
.
Per def. di Lj+1, un nodo u è in Lj+1 se e solo se valgono le seguenti 1 e 2:
1. u non appartiene a L0,L1,…,Lj
2. u è unito da un arco ad un nodo di Lj

un nodo u soddisfa la 1 e la 2 ßà la distanza di u da s è j+1


(ricordiamo che stiamo assumendo l’ipotesi induttiva)

dimostrazione nelle prossime slide


Progettazione di Algoritmi a.a. 2023-24
A. De Bonis 29
Breadth First Search
un nodo u soddisfa sia la 1 che la 2ßà la distanza di u da s è j+1

dim.

• è immediato vedere che vale l’implicazione à


• vediamo perche’:
• per la 2 esiste un arco da un certo nodo z di Lj ad u e siccome per
ipotesi induttiva, z è a distanza j da s allora esiste un percorso di
lunghezza j+1 da s ad u
• per la 1 il vertice u non è in L0∪L1∪ … ∪Lj e di conseguenza u è a
distanza > j da s (infatti per ipotesi induttiva tutti i nodi a
distanza ≤j da s sono in L0∪L1∪ … ∪Lj )

• le affermazioni in rosso implicano che esiste un percorso da s ad


u di j+1 archi e questo è il piu` corto possibile à la distanza da u
ad s è j+1

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 30
Breadth First Search
• dimostriamo che vale l’implicazione ß
• Supponiamo che u sia a distanza j+1 da s e dimostriamo che valgono la 1 e la 2.

• Per ipotesi induttiva la 1 deve essere necessariamente soddisfatta (infatti per


ipotesi induttiva L0,L1, … ,Lj contengono solo nodi a distanza ≤ j da s)

• Dimostriamo che vale anche la 2.


• Sia P un percorso di j+1 archi da s ad u. Questo percorso esiste dal momento
che la distanza da s di u è proprio j+1. Indichiamo con v il predecessore di u
lungo P (P termina con l’arco (v,u)).
• Il sottopercorso P’ di P che arriva fino a v ha lunghezza j e di conseguenza la
distanza di v da s è ≤ j.
• Se la distanza di v da s fosse <j allora esisterebbe un percorso da s ad u con
meno di j+1 archi contraddicendo l’ipotesi che la distanza di u da s e` j+1
• Quindi la distanza da s a v e proprio j e per ipotesi induttiva v si trova in Lj
à u è unito da un arco ad un nodo di Lj

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 31
Breadth First Search

Pseudocodice (schema dell’algoritmo)

1. BFS(s)
2. L0={ s }
3 For(i=0;i≤n-2;i++)
4. Li+1= ∅ ;
5. Foreach nodo u in Li
6. Foreach nodo v adiacente ad u
7. if( v non appartiene ad L0,…,Li+1)
8. Li+1=Li+1 { v }
9. EndIf
10. Endforeach
11. Endforeach
12. Endfor
• Occorre un modo per capire se un nodo è gia stato visitato in
•precedenza. Il tempo di esecuzione dipende dal modo scelto, da

•come è implementato il grafo e da come sono rappresentati gli

insiemi Li che rappresentano i livelli


Progettazione di Algoritmi a.a. 2023-24
A. De Bonis 32
Esempio di esecuzione di BFS

a b c
L0={1}
a. L1={2,3}
b. L2={4,5,7,8}
c. L3={6}

33
Breadth First Search Tree (Albero BFS)

§ Proprietà. L’algoritmo BFS produce un albero che ha come


radice la sorgente s e come nodi tutti i nodi del grafo
raggiungibili da s.

§ L’albero si ottiene in questo modo:


§ Consideriamo il momento in cui un vertice v viene scoperto, cioè il
momento in cui visitato per la prima volta.
– Ciò avviene durante l’esame dei vertici adiacenti ad un un certo
vertice u di un certo livello Li (linea 6).
– In questo momento, oltre ad aggiungere v al livello Li+1 (linea 8),
aggiungiamo l’arco (u,v) e il nodo v all’albero

Progettazione di Algoritmi a.a. 2023-24


A. De Bonis 34
Breadth First Search Tree
l Proprietà. Si consideri un’esecuzione di BFS su G = (V, E), e sia (x, y) un arco di G. I
livelli di x e y differiscono di al più di 1.

l Dim. Sia Li il livello di x ed Lj quello di y. Supponiamo senza perdere di generalità che


x venga scoperto prima di y cioè che i ≤ j. Consideriamo il momento in cui l’algoritmo
esamina gli archi incidenti su x.

l Caso 1. Il nodo y è stato già scoperto:


Siccome per ipotesi y viene scoperto dopo x allora sicuramente y viene inserito
a) o nel livello i dopo x, se y è adiacente a qualche nodo nel livello i-1 (es. x=2, y=3).
b) o nel livello i+1, se è adiacente a qualche nodo del livello i esaminato nel For each
alla linea 5 prima di x). (es. x=3,y=5)
Quindi in questo caso si ha j= i oppure j=i+1.

l Caso 2. Il nodo y non è stato ancora scoperto:


Siccome tra gli archi incidenti su x c’è anche (x,y) allora y viene inserito in questo
momento in Li+1 . Quindi in questo caso j=i+1. (es. x=2, y=5)

G PROGETTAZIONE DI ALGORITMI a.a. 2023-24


A. DE BONIS 35
Implementazione di BFS con liste di adiacenza e array Discovered
• Ciascun insieme Li è rappresentato da una lista L[i]
• Usiamo un array di valori booleani Discovered per associare a ciascun nodo il valore
vero o falso a seconda che sia già stato scoperto o meno
• Durante l’algoritmo costruiamo anche l’albero BFS
1. BFS(s):
2. Poni Discovered[s] = true e Discovered[v] = false per tutti gli altri v
3. Inizializza L[0] in modo che contenga solo s
4. Poni il contatore dei livelli i = 0
5. Inizializza il BFS tree T con un albero vuoto
6. While i<=n-2
7. Inizializza L[i+1] con una lista vuota //nodi raggiungibili da L[i]
8. Foreach u ∈ L[i] //L[i] è vuota se non ci sono altri nodi raggiungibili
9. Foreach arco (u, v) incidente su u
10. If Discovered[v] = false
11. Poni Discovered[v] = true
12. Aggiungi v alla lista L[i+1]
13. Aggiungi l’arco (u, v) all’albero T
14. Endif
15. Endfor
16. EndFor
17. i=i+1
18. Endwhile
36
Implementazione di BFS per grafo implementato con liste di adiacenza

1. BFS(s):
2. Poni Discovered[s] = true e Discovered[v] = false per tutti gli altri v O(n)
3. Inizializza L[0] in modo che contenga solo s
4. Poni il contatore dei livelli i = 0 O(1)
5. Inizializza il BFS tree T con un albero vuoto
6. While i<=n-2 n volte
O(n)
7. Inizializza L[i+1] con una lista vuota n-1 volte
8. Foreach u ∈ L[i] Sul totale di tutte le iterazioni del while, al più n volte
9. Foreach arco (u, v) incidente su u Sul totale di tutte le
10. If Discovered[v] = false then iterazioni del While al più
2m volte. O(m)
11. Poni Discovered[v] = true
12. Aggiungi v alla lista L[i+1]
13. Aggiungi l’arco (u, v) all’albero T
Foreach più esterno viene eseguito al più
14. Endif n volte in quanto ogni nodo raggiungibile
15. Endfor da s appartiene ad una sola lista Li
16. Endfor Foreach più interno viene eseguito al piu`
Algoritmo è volte
17. i=i+1 O(n+m)
18. Endwhile
37
Breadth First Search Tree
l Proprietà. Si consideri un’esecuzione di BFS su G = (V, E), e sia (x, y) un arco di G. I
livelli di x e y differiscono di al più di 1.

l Dim. Sia Li il livello di x ed Lj quello di y. Supponiamo senza perdere di generalità che


x venga scoperto prima di y cioè che i ≤ j. Consideriamo il momento in cui l’algoritmo
esamina gli archi incidenti su x.

l Caso 1. Il nodo y è stato già scoperto:


Siccome per ipotesi y viene scoperto dopo x allora sicuramente y viene inserito
a) o nel livello i dopo x, se y è adiacente a qualche nodo nel livello i-1 (es. x=2, y=3).
b) o nel livello i+1, se è adiacente a qualche nodo del livello i esaminato nel For each
alla linea 5 prima di x). Quindi in questo caso si ha j= i oppure j=i+1. (es. x=3,y=5)

l Caso 2. Il nodo y non è stato ancora scoperto:


Siccome tra gli archi incidenti su x c’è anche (x,y) allora y viene inserito in questo
momento in Li+1 . Quindi in questo caso j=i+1. (es. x=2, y=5)

G PROGETTAZIONE DI ALGORITMI a.a. 2023-24


A. DE BONIS 38
Implementazione di BFS con coda FIFO

L’algoritmo BFS si presta ad essere implementato con un coda


Ogni volta che viene scoperto un nodo u, il nodo u viene inserito nella coda
Vengono esaminati gli archi incidenti sul nodo al front della coda

BFS(s)
1. Inizializza Q con una coda vuota
2. Inizializza il BFS tree T con un albero vuoto
3. Poni Discovered[s] = true e Discovered[v] = false per tutti gli altri v
4. Inserisci s in coda a Q con una enqueue
5. While(Q non è vuota)
6. estrai il front di Q con una deque e ponilo in u
7. Foreach arco (u,v) incidente su u
8. If(Discovered[v]=false)
9. poni Discovered[v]= true
10. aggiungi v in coda a Q con una enqueue
11. aggiungi (u,v) al BFS tree T
12. Endif
13. Endfor
14. Endwhile
Dimostrare per esercizio che il tempo di esecuzione è O(n+m)
(svolto in classe)

39
Esempio di esecuzione di BFS con coda FIFO

elementi della coda durante l’esecuzione (front = elemento più a sinistra)


all’inizio Q= 1
dopo I iterazione del while Q= 2 3 • Viene estratta la sorgente e
vengono inseriti i nodi del livello 1.
dopo II iterazione del while Q = 3 4 5
• Poi man mano vengono estratti i
dopo III iterazione del while Q = 4 5 7 8 nodi del livello 1 ed inseriti quelli
dopo IV iterazione del while Q = 5 7 8 del livello 2.
dopo V iterazione del while Q = 7 8 6 • Quando non ci sono piu` elementi
del livello 1, cominciano ad essere
dopo VI iterazione del while Q = 8 6
estratti i nodi del livello 2 e via via
dopo VII iterazione del while Q = 6 inseriti quelli del livello 3 e così via.
dopo VIII iterazione del while Q è vuota

40

Potrebbero piacerti anche