File System Grafi24 - 1
File System Grafi24 - 1
1
Grafi non direzionati
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
F
13
A
4 E
7 8
D
11
G
7
16 24
B
H
10
C
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
5 5
1 1
2 2
3 3
4 4
F
13
A
4 E
7 8
D
11
G
7
16 24
B
H
10
C
6
Alcune applicazione dei grafi
• 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
hbo.com
sorpranos.com
Reference: http://www.twingroves.dètrict96.k12.il.us/Wetlands/Salamander/SalGraphics/salfoodweb.giff
• 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
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
12
Numero di archi di un grafo direzionato
m = numero di archi di G;
n= numero di nodi di G
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
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à
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
hbo.com
sorpranos.com
Esempio:
radice r
Genitore di v
Figlio di v
Un albero Lo stesso albero con radice 1 21
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.
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.
s L1 L2 L n-1
dim.
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
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)
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.
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
40