Grafi: visita generica
|
|
|
- Veronica Valenti
- 9 anni fa
- Visualizzazioni
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 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
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
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
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
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,
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
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 è
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
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
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
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)
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.
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
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
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
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
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
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
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
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
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
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 =
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]
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
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
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
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
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])
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
