Algoritmi e Strutture Dati (Mod. B)

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture dati Mod B
Advertisements

Depth-first search Visita in profondità di un grafo Algoritmo Esempio
Ordinamento ottimo Ricerca
Master Bioinformatica 2002: Grafi Problema: cammini minimi da tutti i vertici a tutti i vertici Dato un grafo pesato G =(V,E,w), trovare un cammino minimo.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Estendere i linguaggi: i tipi di dato astratti
Cammini minimi con una sorgente
RB-alberi (Red-Black trees)
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Depth-first search Visita in profondità di un grafo Algoritmo Esempio
Alberi binari di ricerca
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Cammini minimi con sorgente singola
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Esercizi su alberi binari
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Visite di grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Un albero è un grafo.
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Trovare il percorso minimo da b ad ogni altro vertice
Grafi.
Algoritmi e Strutture Dati 20 aprile 2001
Algoritmi e Strutture Dati
Algoritmo di Kruskal Parte con tutti i vertici e nessun lato (sottografo aciclico, o foresta, ricoprente) Ordina i lati per costo non decrescente.
Algoritmi e Strutture Dati
Algoritmi su grafi I grafi sono strutture dati che vengono usate estensivamente in informatica. Ci sono migliaia di problemi computazionali che sono importanti.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 K 4 è planare? Sì!
Usi (meno scontati) della visita DFS
Componenti fortemente connesse
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Cammini minimi tra tutte le coppie
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 08/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Grafi Rappresentazione mediante liste di adiacenza:
Cammini minimi da un sorgente
Ordinamento topologico Cammino minimo dalla sorgente
Usi (meno scontati) della visita DFS. Informazioni utili: tenere il tempo clock=1 pre(v)=clock clock=clock+1 post(v)=clock; clock=clock+1 pre(v): tempo.
Alberi di copertura minimi. Dato un grafo pesato G = (V,E), si richiede di trovare un albero T = (V,E’), E’  E, tale che la somma dei pesi associati.
Usi (meno scontati) della visita DFS lezione basata sul capito 3 del libro Algorithms, di Dasgupta, Papadimitriou, Vazirani, McGraw-Hill.
Algoritmi online Maria Simi, a.a. 2007/08 Problemi di esplorazione  Gli agenti per il problem-solving assumono:  ambienti deterministici e osservabili.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Algoritmi e Strutture Dati Strutture Dati Elementari.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Ordinamento topologico
Olimpiadi di Informatica 2010 Giornate preparatorie
Capitolo 12 Minimo albero ricoprente Algoritmi e Strutture Dati.
Algoritmi elementari su grafi
Ordinamento topologico
Componenti fortemente connesse
Capitolo 11 Visite di grafi Algoritmi e Strutture Dati.
Master Bioinformatica 2002: Visite di Grafi La struttura dati D è una PILA (STACK) Visita in profondità o Depth-First-Search (DFS)
Laureando: Enrico Sperindio Relatore: Prof. GIORGIO ROMANIN JACUR
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
Grafi: rappresentazione e visita
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Transcript della presentazione:

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

Sottografo di copertura Un sottografo di G=(V,E) è un grafo H = (V*, E*) tale che V*  V e E*  E. H’ è un sottografo di copertura (o di supporto o sotto-grafo “spanning”) di G se V* = V e E*  E a b c d e G H a b c d e a b c d H’

Albero di copertura Un grafo H=(V*, E*) è un albero di copertura (o albero “spanning”) del grafo G=(V,E) se H è un grafo di copertura di G H è un albero a b c d e G a b c d e H a b c d e H’

Visita in Profondità (DFS) Tecnica di visita di un grafo È una variazione della visita in preordine per alberi binari Si parte da un veritice s Viene processato (diversamente che per BFS) il vertice s Ricorsivamente si processano tutti i vertici adiacenti ad s Bisogna evitare di riprocessare vertici già visitati Bisogna anche qui evitare i cicli Nuovamente, quando un vertice è stato visitato e (poi) processato viene marcato opportunamente (colorandolo)

cioè finché non si incontra un vertice già visitato DFS: intuizioni I passi dell’algoritmo DFS si sceglie un vertice non visitato s si sceglie un vertice non visitato adiacente ad s. da s si attraversa quindi un percorso di vertici adiacenti (visitandoli) finché possibile: cioè finché non si incontra un vertice già visitato appena si resta “bloccati” (tutti gli archi da un vertice sono stati visitati), si torna indietro (backtracking) di un passo (vertice) nel percorso visitato (aggiornando il vertice s al vertice corrente) si ripete il processo ripartendo dal passo .

b a c e f d b a c e f d b b a c e f d f Albero di copertura Depth-first Archi dell’albero Archi di ritoro e d c a

Il tempo viene usato per studiare le proprietà di DFS Algoritmo DFS Manterremo traccia del momento (tempo) in cui ogni vertice v viene visitato (scoperto) e del momento in cui viene processato (terminato) Useremo due array d[v] e f[v] che registreranno il momento in cui v verrà visitato e quello in cui verrà processato. La variabile globale tempo serve a registrare il passaggio del tempo. Il tempo viene usato per studiare le proprietà di DFS

Algoritmo DFS DSF(G:grafo) Inizializzazione del for each vertice u  V do colore[u] = Binaco pred[u] = NIL tempo = 0 Inizializzazione del grafo e della variabile tempo for each vertice u  V do if colore[u] = Binaco then DFS-Visita(u) Abbreviazione per: tempo=tempo+1 d[u]=tempo f[u]=tempo DSF-Visita(u:vertice) colore[u] = Grigio d[u] = tempo = tempo + 1 for each vertice v  Adiac[u] do if colore[v] = Binaco then pred[v] = u DFS-Visit(v) colore[u] = Nero f[u] = tempo = tempo + 1

DFS: simulazone DSF(G:grafo) b a c e f d DSF-Visita(u:vertice) for each vertice u  V do colore[u] = Binaco pred[u] = NIL tempo = 0 do if colore[u] = Binaco then DFS-Visita(u) b a c e f d DSF-Visita(u:vertice) colore[u] = Grigio d[u] = tempo = tempo + 1 for each vertice v  Adiac[u] do if colore[v] = Binaco then pred[v] = u DFS-Visit(v) colore[u] = Nero f[u] = tempo = tempo + 1

Alberi di copertura multipli DSF(G:grafo) for each vertice u  V do colore[u] = Binaco pred[u] = NIL tempo = 0 do if colore[u] = Binaco then DFS-Visita(u) a b c d e f g f b a g c d e DSF-Visita(u:vertice) colore[u] = Grigio d[u] = tempo = tempo + 1 for each vertice v  Adiac[u] do if colore[v] = Binaco then pred[v] = u DFS-Visit(v) colore[u] = Nero f[u] = tempo = tempo + 1

Tempo di esecuzione di DFS DSF(G:grafo) for each vertice u  V do colore[u] = Binaco pred[u] = NIL tempo = 0 do if colore[u] = Binaco then DFS-Visita(u) (|V|) (|V|) ( |E | ) DSF-Visita(u:vertice) colore[u] = Grigio d[u] = tempo = tempo + 1 for each vertice v  Adiac[u] do if colore[v] = Binaco then pred[v] = u DFS-Visit(v) colore[u] = Nero f[u] = tempo = tempo + 1 ( |Eu| ) ( |Eric(u)| ) Ma solo per vertici non ancora visitati

Tempo di esecuzione di DFS DSF(G:grafo) for each vertice u  V do colore[u] = Binaco pred[u] = NIL tempo = 0 do if colore[u] = Binaco then DFS-Visita(u) (|V|+ |E | )

Proprietà di DFS: struttura a parentesi Teorema: In ogni DFS di un grafo G, per ogni coppia di vertici u e v, una sola delle condizioni seguenti vale: Gli intervalli [ d[u], f[u] ] e [d[v], f[v] ] sono intera- mente disgiunti L’intervallo [ d[u], f[u] ] è interamente contenuto nell’intervallo [d[v], f[v] ] e u è in discendente di v nell’albero DF. L’intervallo [ d[v], f[v] ] è interamente contenuto nell’intervallo [d[u], f[u] ] e v è in discendenten di u nell’albero DF.

Struttura a parentesi: intuizione f d b g f c a e b a g e c d d[f] f[f] d[e] f[e] d[b] f[b] d[a] f[a] f[c] d[d] f[d] d[g] f[g] d[c]

Proprietà di DFS: struttura a parentesi Dimostazione: Due sono i casi d[u] < d[v] d[u] > d[v] Due sottocasi: d[v] < f[u]. Quindi v è stato visitato mentre u era ancora grigio. Questo implica che v è discendente di u. Inoltre, v è stato visitato più recentemente di u; perciò la sua lista di archi uscenti è esplorata, e v viene processato (e a f[v] viene assegnato un valore). Quindi [d[v], f[v] ] è completamente incluso in [d[u], f[u] ] f[u] < d[v]. Poichè d[u] < f[u], allora [ d[u], f[u] ] e [d[v], f[v] ] sono totalmente disgiunti

Proprietà di DFS: struttura a parentesi Dimostazione: Due sono i casi d[u] < d[v]  d[u] > d[v]  Due sottocasi: il ragionamento è simile a prima ma con i ruoli di u e v invertiti d[u] < f[v]. Risulta che [d[u], f[u] ] è completamente incluso in [d[v], f[v] ] f[v] < d[u]. Poichè d[u] < f[u], allora [ d[v], f[v] ] e [d[u], f[u] ] sono totalmente disgiunti

Proprietà di DFS: struttura a parentesi Corollario: Un vertice v è un discendente proprio di u nella foresta DF di un grafo G se e solo se d[u] < d[v] < f[v] < f[u]. Dimostrazione: Immediata conseguenza del teorema precedente.

Proprietà di DFS: percorso bianco Teorema: Nella foresta DF di un grafo G, un vertice v è discendente del vertice u se e solo se al tempo d[u] in cui la ricerca visita u, il vertice v può essere raggunto da u lungo un percorso composto da soli vertici bianchi. Dimostrazione: solo se: Assumiamo che v sia discendente di u nella foresta DF e che w sia un arbitrario vertice nel percorso percorso tra u e v nella foresta DF. Allora anche w è discendente di u. Per il corollario precedente, d[u] < d[w], quindi w è bianco al tempo d[u]

Proprietà di DFS: percorso bianco Teorema: Nella foresta DF di un grafo G, un vertice v è discendente del vertice u se e solo se al tempo d[u] in cui la ricerca visita u, il vertice v può essere raggunto da u lungo un percorso composto da soli vertici bianchi. Dimostrazione: se: Assumiamo che v sia raggiungibile da u lungo un percorso bianco al tempo d[u] ma che v non diventi un discendente di u nell’albero DF. Assumiamo inoltre che gli altri vertici del percorso di-ventino discendenti di u. Sia w il predecessore di v nel percorso (v è un discende-nte di w).

Proprietà di DFS: percorso bianco Teorema: Nella foresta DF di un grafo G, un vertice v è discendente del vertice u se e solo se al tempo d[u] in cui la ricerca visita u, il vertice v può essere raggunto da u lungo un percorso composto da soli vertici bianchi. Dimostrazione: se: Per il Corollario precedente, abbiamo che f[w] < f[u]. Poiché vAdiac[w], la chiamata a DFS-Visita(w) garanti-sce che v venga processato (terminato) prima di w. Perciò, f[v] < f[w]< f[u]. Poiché v è bianco al tempo d[u], vale d[u]< d[v]. Il Corollario ci dice allora che v deve essere un discende-nte di u nell’albero DF.