Grafi: visita generica

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Grafi: visita generica"

Transcript

1 .. Grafi: visita generica Una presentazione alternativa (con ulteriori dettagli) Algoritmi di visita Scopo: visitare tutti i vertici di un grafo (si osservi che per poter visitare un vertice occorre prima scoprirlo ) Realizzazione: Dividiamo l insieme dei vertici in tre insiemi colorati in modo diverso Bianco: Vertici non ancora scoperti (e quindi non visitati) Grigio: Vertici scoperti i cui adiacenti non sono ancora stati tutti scoperti, quindi vertici utili per continuare la visita Nero: Vertici visitati (e quindi scoperti) e non più utili per continuare a scoprire altri vertici (i loro adiacenti sono stati tutti già scoperti) Una versione astratta dell algoritmo di visita generica INIZIALIZZA (G) for ogni u V do color [u] white Proprietà 1: Il colore di un vertice può solo passare da white a gray a black.

2 Invarianti del while: INV1: Se (u,v) E[G] e u è nero, allora v è grigio o nero. INV2: Tutti i vertici grigi o neri sono raggiungibili da s. INV3: Qualunque cammino da s a un vertice bianco deve contenere almeno un vertice grigio. Dimostrazione. Se s è grigio: vero. Se s è nero: se non ci fosse nessun vertice grigio ci sarebbe un vertice bianco adiacente ad uno nero, che è impossibile per l'invariante INV1. Teorema. Al termine dell'algoritmo di visita, un vertice è nero se e solo se è raggiungibile da s. Dimostrazione. ( ) Per INV2 all'uscita del while tutti i vertici neri sono raggiungibili da s. ( ) Da INV3 e dalla condizione di uscita del ciclo (non ci sono vertici grigi) si ricava che non ci può essere nessun vertice bianco raggiungibile da s.

3 {G = <V, E> & v V color[v] = white} {Se (u,v) E[G] e u è nero, allora v è grigio o nero & & Tutti i vertici grigi o neri sono raggiungibili da s & & Qualunque cammino da s a un vertice bianco deve contenere almeno un vertice grigio} {v V è nero se e solo se v è raggiungibile da s} Versione astratta dell algoritmo di visita generica con costuzione del sottografo dei predecessori L algoritmo può essere modificato in modo da ricordare, per ogni vertice che viene scoperto, quale vertice grigio ha permesso di scoprirlo, ossia ricordare l arco percorso. Ad ogni vertice u si associa un attributo π[u] che rappresenta il vertice che ha permesso di scoprirlo. L algoritmo di inizializzazione deve essere esteso per inizializzare π: INIZIALIZZA (G) for ogni vertice u V[G] do color [u] white π[u] nil color [s] gray scegli un vertice grigio u if esiste un vertice bianco v Adj[u] then color [v] gray π[v] u else color [u] black Proprietà 2: Al termine dell'esecuzione di VISITA (G,s) tutti e soli i vertici neri diversi da s hanno un predecessore diverso da nil.

4 Sottografo dei predecessori G π =(V π, E π ): V π = {v V: π [v] nil} {s} E π = {(π[v], v) E: v V π -{s}} Come conseguenza immediata della Proprietà 2, al termine dell'esecuzione di VISITA (G,s) V π è l'insieme di tutti i vertici neri, cioè di tutti i vertici raggiungibili da s. Teorema. Il sottografo dei predecessori costruito dall'algoritmo di visita è un albero. Dimostrazione. Basta dimostrare che è invariante del while la seguente proprietà: <V π, E π > è connesso e E π = V π - 1. Osservazione: il sottografo dei predecessori costruito dalla versione dell algoritmo di visita appena descritto corrisponde all albero di scoperta generato dalla versione dell algoritmo di visita generica descritto nei lucidi illustati due lezioni prima (e in [Dem]). In certe applicazioni può essere necessario visitare tutti i vertici di un grafo. Ciò può essere fatto nel modo seguente: VISITA_TUTTI_I_VERTICI (G) INIZIALIZZA (G) for ogni u V do if color [u] =white then VISITA (G, u) Un algoritmo per stampare il cammino dal sorgente a un vertice u: Print-Path (G, s, u) if u = s then stampa u else if π[u] = nil then stampa non esiste cammino else Print-Path (G, s, π[u]) stampa u

5 Versione concreta dell algoritmo di visita generica con costruzione del sottografo dei predecessori Per gestire l'insieme dei vertici grigi in modo efficiente, si può utilizzare una struttura dati D i cui elementi siano ordinati, e su cui siano definite le operazioni: make_empty first (D) add (D, x) remove-first (D) not_empty (D) crea una struttura vuota restituisce il primo elemento di D (senza modificare D) aggiunge l'elemento x a D toglie da D il primo elemento restituisce true se D non è vuota e false altrimenti Se add (D,x) aggiunge x come primo elemento di D, D è una PILA (STACK); altrimenti, se add (D,x) aggiunge x come ultimo elemento di D, D è una CODA (QUEUE). L'algoritmo diventa: D make_empty color [s] gray add (D, s) while ci not sono empty(d) vertici grigi do u un first vertice (D) grigio if c è v bianco ADJ [u] then color [v] gray π[v] u add (D, v) else color [u] black remove_first (D) Analisi della complessità (nel caso di liste di adiacenza) Per analizzare la complessità occorre specificare come viene implementato nell'algoritmo di visita il test: if c è v bianco ADJ [u] Si può realizzare il test con un ciclo che percorre dall inizio la lista di adiacenza di u fino a trovare il primo vertice bianco, se c'è. le liste di adiacenza possono essere percorse più volte Sappiamo però dalla proprietà 1 che un vertice grigio o nero non può ridiventare bianco.

6 non è necessario scandire ogni volta la lista di adiacenza di u dall'inizio, ma è sufficiente ricordarsi ogni volta dove si è arrivati nella scansione e ripartire da quel punto la volta successiva. Questo può essere realizzato facilmente associando ad ogni vertice il valore corrente del puntatore alla lista degli adiacenti. Si ottiene una implementazione più efficiente perché le liste di adiacenza vengono percorse al massimo una volta. Ogni vertice viene inserito in D al massimo una volta, e quindi eliminato da D al massimo una volta. Se si assume che le operazioni di inserimento ed eliminazione richiedano tempo costante O(1), il tempo totale dedicato alle operazioni su D è O(V). Con la implementazione descritta sopra, le liste di adiacenza vengono scandite al massimo una volta. Quindi il tempo speso per la scansione delle liste di adiacenza è O(E). Poichè il tempo necessario per l'inizializzazione è O(V), il tempo totale di esecuzione è O(V+E). Esercizio Dimostrate che l algoritmo ottenuto dall algoritmo di visita generica (sia per la versione astratta che per quella concreta ) con costruzione del sottografo dei predecessori (ovvero dell albero di scoperta) rendendo D una coda, visita i nodi non appena sono stati scoperti, rendendo D una pila, visita i nodi non appena sono stati scoperti.

Visite in Grafi BFS e DFS

Visite in Grafi BFS e DFS Visite in Grafi BFS e DFS Visita di un Grafo Obiettivo: Visitare una sola volta tutti i nodi del grafo. Es.: visitare un porzione del grafo del Web Difficoltà: Presenza di cicli: Marcare i nodi visitati

Dettagli

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

Sommario. Rappresentazione dei grafi. Ordinamento topologico. Visita in ampiezza Visita in profondità Visite Grafi Sommario Rappresentazione dei grafi Visita in ampiezza Visita in profondità Ordinamento topologico Visita in ampiezza La visita in ampiezza breadth-first-search (BFS) di un grafo dato un vertice

Dettagli

Grafi. V = {a, b, c, d} E = {(a, b), (a, c), (c, a), (d, d), (b, d)}

Grafi. V = {a, b, c, d} E = {(a, b), (a, c), (c, a), (d, d), (b, d)} Grafi Grafo orientato (o diretto) = (V,E) V = nodi o vertici - E = archi (edges) V = {a, b, c, d} E = {(a, b), (a, c), (c, a), (d, d), (b, d)} archi uscenti da un nodo x: (x, y) archi incidenti su un nodo

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Introduzione ai grafi Grafi: Definizione e Algoritmi di visita Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2007/08 Introduzione ai

Dettagli

Grafi: ordinamento topologico

Grafi: ordinamento topologico .. Grafi: ordinamento topologico Che cosa e e come si calcola Che cosa e un ordinamento topologico F. Damiani - Alg. & Lab. 04/05 Una definizione di ordinamento topologico Definizione. Funzione σ: V {1,

Dettagli

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

Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill) Grafi: visite Una breve presentazione Visite di grafi Scopo e tipi di visita Una visita (o attraversamento) di un grafo G permette di esaminare i nodi e gli archi di G in modo sistematico Problema di base

Dettagli

Esempi. non. orientato. orientato

Esempi. non. orientato. orientato Definizione! Un grafo G = (V,E) è costituito da un insieme di vertici V ed un insieme di archi E ciascuno dei quali connette due vertici in V detti estremi dell arco.! Un grafo è orientato quando vi è

Dettagli

Grafi (orientati): cammini minimi

Grafi (orientati): cammini minimi .. Grafi (orientati): cammini minimi Una presentazione alternativa (con ulteriori dettagli) Un algoritmo greedy per calcolare i cammini minimi da un vertice sorgente in un grafo orientato e pesato, senza

Dettagli

Problema del cammino minimo

Problema del cammino minimo Algoritmi e Strutture di Dati II Problema del cammino minimo Un viaggiatore vuole trovare la via più corta per andare da una città ad un altra. Possiamo rappresentare ogni città con un nodo e ogni collegamento

Dettagli

Cammini Minimi. Algoritmo di Dijkstra

Cammini Minimi. Algoritmo di Dijkstra Cammini Minimi Algoritmo di Dijkstra Cammino in un grafo Dato un grafo G=(V,E), un Cammino (Percorso) in G è un insieme di vertici v 1, v 2,.., v k tali che (v i, v i+1 ) E v 1 v 2 v 3 v k In un grafo

Dettagli

Algoritmi e Strutture Dati Grafi. Daniele Loiacono

Algoritmi e Strutture Dati Grafi. Daniele Loiacono 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)

Dettagli

Minimo albero di copertura

Minimo albero di copertura apitolo 0 Minimo albero di copertura efinizione 0.. ato un grafo G = (V, E) non orientato e connesso, un albero di copertura di G è un sottoinsieme T E tale che il sottografo (V, T ) è un albero libero.

Dettagli

Grafi pesati Minimo albero ricoprente

Grafi pesati Minimo albero ricoprente Algoritmi e Strutture Dati Definizioni Grafi pesati Minimo albero ricoprente Sia G=(V,E) un grafo non orientato e connesso. Un albero ricoprente di G è un sottografo T G tale che: T è un albero; T contiene

Dettagli

Progettazione di algoritmi

Progettazione di algoritmi Progettazione di algoritmi Discussione dell'esercizio [vincoli] Prima di tutto rappresentiamo il problema con un grafo G: i nodi sono le n lavorazioni L 1, L 2,, L n, e tra due nodi L h, L k c'è un arco

Dettagli

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

Depth-first search. Visita in profondità di un grafo Algoritmo Esempio Complessità dell algoritmo Proprietà Ordinamento topologico Depth-first search Visita in profondità di n grafo Algoritmo Esempio Complessità dell algoritmo Proprietà Ordinamento topologico Depth-first search Dato n grafo G=(V,E) e n specifico ertice s chiamato

Dettagli

Esercitazione 3. Osserviamo che, dato un grafo con pesi distinti, questo ammette un unico MST.

Esercitazione 3. Osserviamo che, dato un grafo con pesi distinti, questo ammette un unico MST. Esercitazione 3 Problema 6: Sia G = (V, E) un grafo con pesi distinti sugli archi ed e E un arco di G. Progettare un algoritmo lineare in grado di determinare se esiste un MST di G che contiene l arco

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 12 Grafi e visite di grafi Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione Un grafo G=(V,E) consiste in: - un insieme V di vertici (o nodi) - un insieme

Dettagli

Grafi Tutte le strade portano a Roma

Grafi Tutte le strade portano a Roma Grafi Tutte le strade portano a Roma Un vertice v in un grafo orientato G si dice di tipo Roma se ogni altro vertice w in G può raggiungere v con un cammino orientato che parte da w e arriva a v. 1 Descrivere

Dettagli

Note per la Lezione 22 Ugo Vaccaro

Note per la Lezione 22 Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 0 09 Note per la Lezione Ugo Vaccaro Nella lezione scorsa abbiamo introdotto la vista in ampiezza di grafi. Essenzialmente, esso è un metodo per esplorare in

Dettagli

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

Dati e Algoritmi 1: A. Pietracaprina. Grafi (II parte) Dati e Algoritmi 1: A. Pietracaprina Grafi (II parte) 1 Breath-First Search (algoritmo iterativo) Si assume una rappresentazione tramite liste di adiacenza. L ordine con cui si visitano i vicini di un

Dettagli

Esercizi svolti a lezione

Esercizi svolti a lezione Esercizi svolti a lezione Problema 1 In un corso di laurea sono previsti un certo numero di esami obbligatori. Esistono inoltre dei vincoli di propedeuticità: se un esame A è propedeutico ad un esame B

Dettagli

Dati e Algoritmi I (Pietracaprina) Esercizi svolti sui Grafi

Dati e Algoritmi I (Pietracaprina) Esercizi svolti sui Grafi Dati e Algoritmi I (Pietracaprina) Esercizi svolti sui Grafi Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1 (Esercizio C-14.34 del testo [GTG14]) Sia G = (V, E) un grafo non diretto con n =

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]

Dettagli

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

Introduzione ai grafi. Introduzione ai grafi p. 1/2 Introduzione ai grafi Introduzione ai grafi p. 1/2 Grafi Un grafo G é costituito da una coppia di insiemi (V,A) dove V é detto insieme dei nodi e A é detto insieme di archi ed é un sottinsieme di tutte

Dettagli

Algoritmi e Strutture Dati. Capitolo 13 Cammini minimi: Algoritmo di Bellman e Ford

Algoritmi e Strutture Dati. Capitolo 13 Cammini minimi: Algoritmo di Bellman e Ford Algoritmi e Strutture Dati Capitolo 13 Cammini minimi: Algoritmo di Bellman e Ford Cammini minimi in grafi: una trilogia Cammini minimi in grafi: Episodio II: cammini minimi a singola sorgente (per grafi

Dettagli

Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo

Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo Laboratorio 9 ( Java ) Classe astratta per BFS su grafo Testo esercitazione Scaricare il file EseBFS.zip, scompattarlo ed analizzare le classi in esso contenute con particolare attenzione alla classe astratta

Dettagli

In questa lezione Strutture dati elementari: Pila Coda

In questa lezione Strutture dati elementari: Pila Coda In questa lezione Strutture dati elementari: Pila Coda 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni che li modificano (insiemi dinamici). Le

Dettagli

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

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica (IN0 Fondamenti) Grafi e alberi: introduzione Marco Liverani ([email protected])

Dettagli

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore

Dettagli