Algoritmi e Strutture Dati Grafi. Daniele Loiacono

Documenti analoghi
Esempi. non. orientato. orientato

Sommario. Rappresentazione dei grafi. Ordinamento topologico. Visita in ampiezza Visita in profondità

Grafi. Moreno Marzolla Dip. di Informatica Scienza e Ingegneria Università di Bologna. moreno.marzolla@unibo.it

Algoritmi di Visita di Grafi. Damiano Macedonio

Visite in Grafi BFS e DFS

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

Grafi diretti. Un grafo diretto (o grafo orientato) G è una coppia (V,E) dove. V è u n i n s i e m e d i nodi (o vertici);

Problema del cammino minimo

Grafi: visita generica

GRAFI. Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi!

Progettazione di algoritmi

Grafi: definizioni e visite

Algoritmi e Strutture Dati

Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Minimo albero di copertura

Introduzione ai grafi. Introduzione ai grafi p. 1/2

Introduzione ai grafi

Cammini minimi in grafi:

Strutture dati per rappresentare grafi

Problemi, istanze, soluzioni

Depth-first search. Visita in profondità di un grafo Algoritmo Esempio Complessità dell algoritmo Proprietà Ordinamento topologico

Algoritmi e Strutture Dati (Mod. B) Algoritmi su grafi Ricerca in profondità (Depth-First Search) Parte III

Grafi (orientati): cammini minimi

Algoritmi e Strutture Dati

Alberi e alberi binari I Un albero è un caso particolare di grafo

Gestione della produzione e della supply chain Logistica distributiva

Progettazione di Algoritmi

Grafi pesati Minimo albero ricoprente

GRAFI. fig.1 - GRAFI (1) Si avvisa il lettore che certe definizioni che verranno date differiscono da quelle presenti in letteratura.

Algoritmi e strutture dati

Progettazione di Algoritmi

«Sciente e Tecnologie dei Beni Culturali»

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Fondamenti di informatica

Alberto Montresor Università di Trento

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.

COMPLEMENTI DI SHORTEST-PATH. ASD Fabrizio d'amore

Grafi e reti di flusso

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

Alberi Binari di Ricerca

Dati e Algoritmi 1: A. Pietracaprina. Grafi (II parte)

Algoritmi e Strutture di Dati (3 a Ed.) Algoritmo dei tre indiani. Alan Bertossi, Alberto Montresor

Progettazione di algoritmi

Algoritmi di visita di un grafo

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Progettazione di Algoritmi

Esercizi proposti 10

11.4 Chiusura transitiva

Note per la Lezione 4 Ugo Vaccaro

Problema dell albero di cammini minimi (SPT, Shortest Path Tree) o problema dei cammini minimi :

Cammini minimi fra tutte le coppie

Algoritmi e Strutture Dati

UNIVERSITA DEGLI STUDI DI PERUGIA

Corso di elettrotecnica Materiale didattico: i grafi

Introduzione. Il routing permette la comunicazione tra due nodi differenti anche se non sono collegati direttamente

2.2 Alberi di supporto di costo ottimo

Algoritmi e Strutture Dati. Alberi

Esercizi vari. Alberto Montresor. 19 Agosto, 2014

Il problema del commesso viaggiatore

Cammini minimi. Definizioni. Distanza fra vertici. Proprietà dei cammini minimi. Algoritmi e Strutture Dati

AMPL Problemi su Reti

Esercizi su alberi binari

Espressioni aritmetiche

Luigi Piroddi

Ricerca Operativa. Claudio Arbib Universitàdi L Aquila. Esercizi di ottimizzazione combinatoria

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei

Algoritmo basato su cancellazione di cicli

Appunti di Algoritmi e Strutture Dati. Grafi. Gianfranco Gallizia

2.2 Alberi di supporto di costo ottimo

Alberi binari di ricerca

L algoritmo di Dijkstra

Strutture dati per insiemi disgiunti

Ottimizzazione su grafi: massimo flusso (parte 1) Ottimizzazione su grafi:massimo flusso (parte 1) p. 1/33

Alberi Binari di Ricerca

Dati e Algoritmi I (Pietracaprina) Esercizi svolti sui Grafi

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1.

Algoritmi e Strutture Dati. HeapSort

Alberi binari e alberi binari di ricerca

Transcript:

lgoritmi e Strutture ati Grafi

Riferimenti 2 Questo materiale è tratto dalle trasparenze del corso lgoritmi e Strutture ati del prof. lberto Montresor dell Università di Trento. (http://www.dit.unitn.it/~montreso/asd/index.shtml) T.H. ormen,.. Leiserson, R.L. Rivest,. Stein Introduction to lgorithms, Second dition Queste trasparenze sono disponibili su http://dei.polimi.it/upload/loiacono Materiale rilasciato con licenza reative ommons ttribution-nonommercial-sharelike License (http://creativecommons.org/licenses/by-nc-sa/2.5/)

os è un grafo? 3 e a d b c v 1 v 4 e 1 v 2 e 3 v 3 e 2 e 4 v 5

Problemi tipici sui grafi 4 Visite Visite in ampiezza (cammini minimi singola sorgente) Visite in profondità (ordinamento topologico, componenti fortemente connesse) ammini minimi a singola sorgente ra tutte le coppie di vertici lberi di connessione minimi Problemi di flusso...

efinizioni

Grafi orientati 6 Un grafo orientato G è definito dalla coppia (V, ) dove: V è l insieme finito dei vertici è l insieme degli archi (relazione binaria in V) V = {,,,,, } = { (,), (,),(,),(,),(,), (,),(,) }

Grafi non orientati 7 Un grafo non orientato G è definito dalla coppia (V, ) dove: V è l insieme finito dei vertici è l insieme degli archi (coppie ordinate di elementi di V) V = {,,,,, } = { (,), (,), (,), (,),(,),(,) }

Grafo pesato 8 In alcuni casi ogni arco ha un peso (o costo) associato Il costo può essere determinato tramite una funzione di costo c: R, dove R è l insieme dei numeri reali Quando tra due vertici non esiste un arco, si dice che il costo è infinito 3 1 4 4 7 2 sempio: c(,) =

Incidenza e adiacenza 9 In un grafo orientato, un arco (v,w) si dice incidente da v in w Un vertice w si dice adiacente a v se e solo se (v, w) Є In un grafo non orientato la relazione di adiacenza tra vertici è simmetrica (,) è incidente da a (,) è incidente da a (,) è incidente da a è adiacente ad è adiacente a,, è adiacente a e viceversa non è adiacente a, non è adiacente ad alcun vertice

Grado in un grafo non orientato 10 In un grafo non orientato, il grado di un vertice è il numero di archi che da esso si dipartono, ed hanno grado 2 e hanno grado 3 ha grado 0

Grado in un grafo orientato 11 In un grafo orientato il grado entrante di un vertice è il numero di archi incidenti in esso il grado uscente di un vertice è il numero di archi uscenti da esso In un grafo orientato il grado di un vertice è la somma del suo grado entrante e del suo grado uscente ha g. u. 2 e g. e. 1 ha g. u. 1 e g. e. 1 ha g. u. 0 e g. e. 3 ha g. u. 3 e g. e. 1 e hanno grado 3 ha grado 2 ha grado 4

ammini 12 Un cammino nel grafo G=(V,) è una sequenza di vertici <w 0, w 1,..., w n > tale che (w i, w i+1 ) Є per 0 i n 1 Il cammino <w 0, w 1, w 2,..., w n > contiene i nodi w 0, w 1,, w n e gli archi (w 0,w 1 ) (w 1,w 2 )...(w n-1,w n ) Lunghezza del cammino: # di archi che connettono i vertici nell ordine della sequenza sempio: <,,, > è un cammino nel grafo con lunghezza 3

ammini (2) 13 Un cammino si dice semplice se tutti i suoi vertici sono distinti (compaiono una sola volta nella sequenza) sempio: <,,, > è semplice...... ma il cammino <,,,,, > non è semplice, poiché èripetuto

ammini (3) 14 Se esiste un cammino c tra i vertici v e w, si dice che w è raggiungibile da v tramite c sempio: è raggiungibile da e viceversa s.: è raggiungibile da ma non viceversa

Grafi connessi 15 Se G è un grafo non orientato, diciamo che G è connesso se esiste un cammino da ogni vertice ad ogni altro vertice. Questo grafo non orientato è connesso. Questo grafo non orientato non è connesso.

Grafi fortemente connessi 16 Se G è un grafo orientato, diciamo che G è fortemente connesso se esiste un cammino da ogni vertice ad ogni altro vertice. Questo grafo orientato è fortemente connesso. Questo grafo orientato non è fortemente connesso; ad es., non esiste cammino da a.

Versione non orientata di un grado 17 Se G èun grafo orientato, il grafo ottenuto ignorando la direzione degli archi e gli autoanelli è detto il grafo non orientato sottostante o anche versione non orientata di G.

Versione orientata di un grafo 18 Se G èun grafo non orientato, il grafo ottenuto inserendo due archi orientati opposti per ogni arco non orientato del grafo è detto la versione orientata di G.

Grafi debolmente connessi 19 Se G è un grafo orientato che non è fortemente connesso, ma la sua versione non orientata è connessa, diciamo che G è debolmente connesso Questo grafo orientato non è fortemente connesso, ma è debolmente connesso

Sottografo 20 Sia G = (V, ) un grafo. Un sottografo di G è un grafo H = (V*, *) tale che V* V e * sempio: V* = {,, }, * = {(, )}.

Sottografo indotto 21 Sia G = (V, ) un grafo e V* V un insieme di vertici. Il sottografo di G indotto da V* è il grafo H=(V*, *) tale che * = {(v,w) (v,w), v,w V*} Sia G = (V, ) un grafo. Il sottografo H=(V*, *) di G è detto di supporto se: V* = V

omponenti connesse 22 Si dice componente connessa di un grafo non orientato G, un sottografo H di G che sia connesso e massimale Un sottografo connesso H di G viene detto massimale se si non si possono aggiungere ad H altri vertici o archi in modo che il grafo risultante sia ancora un sottografo connesso di G sempi: a f b a f b f b c e G d g c H1 e d H2 g d H3 g NO

omponenti fortemente connesse 23 Si dice componente fortemente connessa di un grafo orientato G, un sottografo H di G che sia fortemente connesso e massimale sempi: a f b a f b c e d g c e d g G H1 H2 H3

icli 24 Un ciclo in un grafo orientato è un cammino <w 0, w 1,, w n > di lunghezza almeno 3, tale che w 0 = w n Un ciclo è semplice se i nodi w 1,..., w n-1 sono tutti distinti s.: il cammino <,,,,, > è un ciclo semplice

Grafi aciclici 25 Un grafo senza cicli è detto aciclico. Un grafo orientato aciclico è chiamato G (irected cyclic Graph). sempi: aciclico non aciclico G

Grafo completo 26 Un grafo completo è un grafo che ha un arco tra ogni coppia di vertici. Un grafo completo con n= V veritci ha un numero di archi pari a: sempi: n 1 i= 1 n( n 1) i = 2 non completo completo

Grafi e lberi 27 Un albero libero è un grafo non orientato connesso, aciclico. Se qualche vertice è detto radice, otteniamo un albero radicato. radice

Strutture dati per i grafi

Matrice di adiacenza: grafo orientato 29 M[v, w] = 1 se (v, w) 0 altrimenti Memoria: V 2 sempio: 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0

Matrice di adiacenza: grafo non orientato 30 M(v, w) = 1 se (v, w) o (w,v) 0 altrimenti Memoria: V 2 o V ( V -1)/2 sempio: 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 1 0 1 0 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0

Matrice di adiacenza in grafi pesati 31 M(v, w) = c(v,w) se (v, w) altrimenti Memoria: V 2 o V ( V -1)/2 3 1 4 4 2 7 * 3 * 1 * * 3 * 4 * * * * 4 * 4 7 * 1 * 4 * -2 * * * 7-2 * * * * * * * *

Lista di adiacenza: grafo orientato 32 La lista di adiacenza di un vertice v è definita come { w V (v,w) } Un grafo può essere quindi rappresentato con un array di liste di adiacenze La memoria richiesta è a V + b (a e b costanti) sempio: a b

Liste di adiacenza: grafo non orientato 33 La lista di adiacenza di un vertice v è definita come { w V (v,w) (w,v) } Lo stesso arco viene memorizzato in due liste di adiancenze, quindi la memoria richiesta è a V + 2b (a e b costanti) sempio: a b

Sommario sulle strutture dati i sono due tipi standard di rappresentazioni di grafi in un computer: Matrice di adiacenza Spazio richiesto O(V 2 ) Verificare se il vertice v è adiacente a w richiede tempo O(1) lencare tutti gli archi costa O(V 2 ) Liste di adiacenza Spazio richiesto O(V+) Verificare se il vertice v è adiacente a w richiede tempo O(V) lencare tutti gli archi costa O(V+) Nota: nelle espressioni, V corrisponde a V e corrisponde a

Visita di un grafo

Visita di un grafo 36 ato un grafo G=<V,> ed un vertice s di V (detto sorgente), intendiamo con visita di G a partire dalla sorgente s un attraversamento tale che: ogni vertice di G raggiungibile da s venga visitato ogni nodo raggiunto sia visitato una volta sola L operazione di visita di un vertice può comportare diverse operazioni che dipendono dal problema per cui viene effettuata la visita del grafo Generalmente durante la visita ogni vertice viene marcato per evitare di visitarlo nuovamente Spesso viene anche memorizzato l albero di visita che descrive il percorso attraverso cui si può giungere ad un vertice sistono diversi algoritmi di visita, vedremo i principali: Visita in ampiezza (breadth-first search) Visita in profondità (depth-first search)

Visita in ampiezza (breadth first search, S) 37 ome funziona? Visita i vertici a distanze crescenti dalla sorgente: visita tutti i vertici a distanza k prima di visitare i vertici a distanza k+1 Output lbero (breadth-first) contenente tutti i vertici raggiungibili da s e tale che il cammino da s ad un nodo nell'albero corrisponde al cammino più breve nel grafo istanza minima da s a tutti i vertici raggiungibili numero di archi attraversati per andare da s ad un vertice

S: algoritmo di visita 38 S(G, s) for each v in V do mark[v] = white π[s] = nil =.enqueue(s) mark[s] = gray dist[s] = 0 while <> do u =.dequeue() visita il vertice u for each v in adj[u] do if (mark[v]==white) then mark[v] = gray dist[v] = dist[u]+1.enqueue(v) π[v] := u mark[u] = black è l insieme dei nodi scoperti, detto anche frontiera mark[v] è la marcatura del nodo v white: il nodo non è ancora stato raggiunto gray: il nodo è stato raggiunto ma non è ancora visitato (è in ) black: il nodo è stato visitato dist[v] è la distanza del nodo v dal vertice s π[v] è il predecessore di v nell albero di copertura osto: O( V + ) liste O( V 2 ) matrice

sempio 39 0 I H G oda:{}

sempio 40 1 0 1 I 1 H G oda:{,,i}

sempio 41 2 1 0 2 1 I 1 H G oda:{,i,,}

sempio 42 2 1 0 2 1 I 1 2 H G oda:{i,,,}

sempio 43 2 1 0 2 1 I 1 2 2 H G oda:{,,,h}

sempio 44 2 1 0 2 1 I 1 2 2 H G oda:{,,h}

sempio 45 2 1 0 2 1 I 1 2 2 H G oda:{,h}

sempio 46 2 1 0 2 1 I 1 2 2 H G 3 oda:{h,g}

sempio 47 2 1 0 2 1 I 1 2 2 H G 3 oda:{g}

sempio 48 2 1 0 2 1 I 1 2 2 H G 3 oda:{}

Visita in profondità (depth first search, S) 49 ome funziona? Visita i nodi andando il più lontano possibile nel grafo: prima di concludere la visita di un vertice, viene conclusa la visita di tutti i suoi successori Output: lbero (depth-first) contenente tutti i vertici raggiungibili da s seguendo il perorso effettuato dalla visita depth-first Istante di tempo in cui ogni vertice viene raggiunto e in cui la visita termina

S: algoritmo di visita 50 S(G,s) mark[s] = gray time = time+1 d[s] = time for each v in adj[s] do if mark[v] == white then π[v]= s S(G,v) visita il vertice s time = time+1 f[s] = time mark[s] = black mark[s] è la marcatura del nodo s come nel S d[s] e f[s] sono rispettivamente l istante in cui s viene raggiunto e in cui la sua visita termina π[s] è il predecessore di s nell albero di copertura osto: O( V + ) liste O( V 2 ) matrice

sempio 51 [1, ] I H G

sempio 52 [2, ] [1, ] I H G

sempio 53 [3, ] [2, ] [1, ] I H G

sempio 54 [3, ] [2, ] [1, ] I [4, ] H G

sempio 55 [3, ] [2, ] [1, ] I [4, ] [5, ] H G

sempio 56 [3, ] [2, ] [1, ] [6, ] I [4, ] [5, ] H G

sempio 57 [3, ] [2, ] [1, ] [6, 7] I [4, ] [5, ] H G

sempio 58 [3, ] [2, ] [1, ] [6, 7] I [4, ] [5, ] H G [8, ]

sempio 59 [3, ] [2, ] [1, ] [6, 7] I [4, ] [5, ] H G [8, ] [9, ]

sempio 60 [3, ] [2, ] [1, ] [6, 7] I [10, ] [4, ] [5, ] H G [8, ] [9, ]

sempio 61 [3, 16] [2, 17] [1, 18] [6, 7] I [10, 11] [4,15] [5,14 ] H G [8, 13] [9, 12]

Proprietà S 62 In qualsiasi visita di profondità di un grafo G=(V,), per ogni coppia di vertici u,v, una sola delle seguenti condizioni è vera: Gli intervalli [d[u], f[u]] e [d[v], f[v]] sono disgiunti u,v non sono discendenti l'uno dell'altro nell albero L'intervallo [d[u], f[u]] è interamente contenuto in [d[v], f[v]] u è discendente di v in un albero L'intervallo [d[v], f[v]] è interamente contenuto in [d[u], f[u]] v è discendente di u in un albero In un albero di un grafo G=(V,), il vertice v è un discendente del vertice u al tempo d[u], il vertice v può essere raggiunto da u lungo un cammino che è formato da soli nodi bianchi

pplicazioni

ammino minimo fra due nodi 64 La visita S può essere utilizzata per ottenere il percorso più breve fra due vertici (numero di archi) print-path(g, s, v) if v = s then print s else if π(v)= nil then print no path from s to v else print-path(g,s, π(v)) print v

Ordinamento topologico 65 ato un G G (direct acyclic graph), un ordinamento topologico su G è un ordinamento lineare dei suoi vertici tale per cui: se G contiene l arco (u,v), allora u compare prima di v nell ordinamento Per transitività, ne consegue che se v è raggiungibile da u, allora u compare prima di v nell'ordinamento Nota: possono esserci più ordinamenti topologici v u w v x y u w x u v w y x y

Ordinamento topologico (2) 66 Problema: ornire un algoritmo che dato un grafo orientato aciclico, ritorni un ordinamento topologico Soluzione diretta Trovare ogni vertice che non ha alcun arco incidente in ingresso Stampare questo vertice e rimuoverlo, insieme ai suoi archi Ripetere la procedura finché tutti vertici risultano rimossi.

67 v v v u w x w x x y y y output: output: u output: u w v x x output: u w y output: u w y v output: u w y v x

Ordinamento topologico (2) 68 Problema: ornire un algoritmo che dato un grafo orientato aciclico, ritorni un ordinamento topologico Soluzione diretta Trovare ogni vertice che non ha alcun arco incidente in ingresso Stampare questo vertice e rimuoverlo, insieme ai suoi archi Ripetere la procedura finché tutti vertici risultano rimossi. asato su S

69 ( topological-sort(g -for S(G) each v per in calcolare V[G] do i tempi v.ft - if la mark[v] visita consiste == white nell'aggiungere il then vertice S(G,v) alla testa di una lista -Nella restituire S() l'operazione la lista di di vertici visita consiste nell'aggiungere il vertice alla testa di una lista l return l u v w y x v 6/9 u v x w y u 1/10 w 2/5 x 7/8 output: u v x w y y 3/4