Algoritmi e Strutture di Dati II 2 Grafi diretti Un grafo diretto (o grafo orientato) G è una coppia (V, E) dove • V è un insieme di nodi (o vertici); • E µ V £ V è un insieme di archi. Denotiamo con n = |V | il numero di nodi di G, e con m = |E| il numero di archi di G. Algoritmi e Strutture di Dati II 3 Un grafo diretto a b c d e f g h Algoritmi e Strutture di Dati II Successori e predecessori Dato un nodo u, i successori di u sono i vertici v tali che (u, v) 2 E. Il grado uscente di un nodo u è il numero di successori di u. I predecessori di u sono i vertici v tali che (v, u) 2 E. ll grado entrante di u è il numero di predecessori di u. Il grado di un nodo è la somma tra grado uscente e grado entrante del nodo. 4 Algoritmi e Strutture di Dati II 5 Cammini e cicli Un cammino è una sequenza di nodi collegati a due a due da archi. La lunghezza del cammino è il numero di archi del cammino. Un cammino semplice è un cammino senza nodi ripetuti. Esiste sempre un cammino di lunghezza zero da un nodo a se stesso. Un ciclo è un cammino da un nodo a se stesso che contiene almeno un arco. Un ciclo è semplice se il cammino ottenuto togliendo dal ciclo l’ultimo nodo è semplice. Un cappio è un ciclo di lunghezza uno. Algoritmi e Strutture di Dati II 6 Grafi indiretti Un grafo diretto (o grafo non orientato) G è una coppia (V, E) dove • V è un insieme di nodi (o vertici); • E µ V £ V è un insieme di archi non orientati. Un arco non orientato è un insieme {u, v}, con u 6= v. Algoritmi e Strutture di Dati II 7 Grafo indiretto a b c d e f g h Algoritmi e Strutture di Dati II 8 Quesiti 1. Qual è il numero massimo di archi di un grafo diretto di n nodi? 2. Qual è il numero massimo di archi di un grafo indiretto di n nodi? Algoritmi e Strutture di Dati II 9 Visite di grafi Gli algoritmi di visita di un grafo hanno come obiettivo l’esplorazione di tutti i nodi e gli archi del grafo. Vi sono due modi principali per esplorare un grafo: • Visita in ampiezza: di fratello in fratello. • Visita in profondità: di padre in figlio. Algoritmi e Strutture di Dati II 10 Le due visite a confronto 1 1 2 5 3 7 6 8 2 4 3 9 5 9 6 4 7 8 Algoritmi e Strutture di Dati II Ordinamento topologico Un DAG è un grafo diretto aciclico. Un ordinamento topologico di un DAG G = (V, E) è un ordinamento totale ¡ dei suoi vertici tale che: se (u, v) 2 E allora u ¡ v. 11 Algoritmi e Strutture di Dati II 12 watch 11/16 12/15 undershorts socks 17/18 shoes 13/14 pants shirt 1/8 6/7 9/10 belt tie jacket 2/5 3/4 Algoritmi e Strutture di Dati II 13 Ordinamento topologico socks undershorts pants shoes watch shirt belt tie jacket 17/18 11/16 12/15 13/14 9/10 1/8 6/7 2/5 3/4 Algoritmi e Strutture di Dati II 14 Raggiungibilità Un nodo v è raggiungibile da un nodo u (oppure u raggiunge v) se esiste un cammino da u a v. Definiamo due relazioni sull’insieme dei nodi: (a) la relazione di raggiungibilità R! tale che uR! v se v è raggiungibile da u; (b) la relazione di mutua raggiungibilità R uR! v e vR! u. tale che uR v se La relazione di mutua raggiungibilità è una relazione di equivalenza. Algoritmi e Strutture di Dati II Componenti fortemente connesse Dato un grafo diretto G = (V, E), le classi di equivalenza della relazione di mutua raggiungibilità sono dette componenti fortemente connesse (CFC) del grafo. In modo equivalente, una CFC di G = (V, E) è un insieme massimale di vertici U µ V tale che ogni coppia di vertici in U è mutuamente raggiungibile. Se C1 , . . . , Ck sono le CFC di G, allora: • Ci 6= ; per ogni i; • Ci \ Cj = ; per ogni i = 6 j; Sk • i=1 Ci = V . 15 Algoritmi e Strutture di Dati II 16 a b c d e f g h Algoritmi e Strutture di Dati II 17 Componenti connesse Nei grafi indiretti, la relazione di raggiungibilità R! coincide con la relazione di mutua raggiungibilità R . Le classi di equivalenza della relazione di raggiungibilità su grafi indiretti sono dette componenti connesse. a b c d e f g h Algoritmi e Strutture di Dati II 18 Foreste Un grafo si dice: • aciclico se non contiene cicli; • (fortemente) connesso se ammette una unica componente (fortemente) connessa. Una foresta è un grafo indiretto aciclico. a b c d e f g h Algoritmi e Strutture di Dati II 19 Alberi Un albero è un grafo indiretto aciclico e connesso. a b c d e f g h Algoritmi e Strutture di Dati II Proprietà degli alberi Sia T = (V, E) un albero. Allora: 1. Ogni due nodi di T sono connessi da un unico cammino semplice. 2. Rimuovendo un arco qualsiasi da T otteniamo un grafo sconnesso. 3. Aggiungendo un arco qualsiasi a T otteniamo un grafo ciclico. 4. |E| = |V | ° 1. 20 Algoritmi e Strutture di Dati II 21 Quesiti 1. Qual è il numero di archi di un albero di n nodi? 2. Qual è il numero di archi di una foresta di n nodi e k componenti connesse? Algoritmi e Strutture di Dati II 22 Grafi pesati Un grafo pesato è un grafo G = (V, E, w), dove w : E ! R è una funzione di peso che associa un numero reale chiamato peso (o costo) ad ogni arco. b c 8 4 9 2 i 4 11 a h 14 6 7 8 d 7 1 e 10 g 2 f Algoritmi e Strutture di Dati II 23 Albero di supporto Sia G = (V, E, w) un grafo pesato indiretto e connesso. Un albero di supporto T = (V, F ) di G è un albero che ha come insieme dei nodi l’insieme V dei nodi del grafo e come insieme degli archi un insieme F µ E. Il peso di un albero di supporto T = (V, F ) è X w(T ) = w(u, v) (u,v)2F Algoritmi e Strutture di Dati II 24 Albero di supporto di peso minimo Il problema dell’albero di supporto di costo minimo consiste nel trovare un albero di supporto di G di peso minimo. Tale albero non è necessariamente unico. b c 8 4 9 2 i 4 11 a h 14 6 7 8 d 7 1 e 10 g 2 f Algoritmi e Strutture di Dati II 25 Problema del cammino (di peso) minimo Dato un grafo diretto pesato G = (V, E, w), il peso di un cammino p = hv0 , v1 , . . . , vk i è la somma dei pesi dei propri archi, w(p) = k°1 X w(vi , vi+1 ) i=0 Dati due nodi u e v, un cammino minimo tra due nodi è, se esiste, un cammino di peso minimo che li collega. Algoritmi e Strutture di Dati II Due varianti del problema 1. Cammino minimo con una sorgente: dato un nodo sorgente s, trovare, per ogni nodo del grafo v, un cammino minimo da s a v; 2. Cammino minimo per tutte le coppie di nodi: per ogni coppia di nodi u, v del grafo trovare un cammino minimo da u a v. 26 Algoritmi e Strutture di Dati II 27 4 3 3 0 5 4 7 2 6 11 5 3 3 2 4 6 11 7 5 2 8 Algoritmi e Strutture di Dati II 28 −4 3 −1 4 3 6 0 5 11 5 −3 3 2 −°° −°° −6 8 −°° 7 °° Algoritmi e Strutture di Dati II 29 Grafo completo Un grafo completo è un grafo indiretto in cui ogni coppia di vertici distinti è connessa da un arco. a b f c e d Algoritmi e Strutture di Dati II Problema del commesso viaggiatore Dato un grafo indiretto G, un tour in G è un ciclo che passa esattamente una volta per ogni nodo di G. Sia G un grafo indiretto, completo e pesato con pesi non negativi. Il problema del commesso viaggiatore consiste nel trovare il tour in G di peso minimo. 30 Algoritmi e Strutture di Dati II 31 d a e f b c h g Algoritmi e Strutture di Dati II a 32 a d d e e b f b g f c c h h C = a, b, c, h, d, e, f, g, a C* = a, b, c, h, f, g, e, d, a w(C) = 19,074 w(C*) = 14,715 g