Master Bioinformatica 2002: Visite di Grafi La struttura dati D è una PILA (STACK) Visita in profondità o Depth-First-Search (DFS)

Slides:



Advertisements
Presentazioni simili
Depth-first search Visita in profondità di un grafo Algoritmo Esempio
Advertisements

Strutture dati per insiemi disgiunti
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.
Il problema del minimo albero ricoprente in un grafo non cooperativo
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Estendere i linguaggi: i tipi di dato astratti
Algoritmi e Strutture Dati
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. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Algoritmi e Strutture Dati
Esercizi su alberi binari
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Il problema del minimo albero ricoprente in un grafo con archi privati
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.
Cammini minimi Algoritmo SPT.Acyclic
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Grafi.
Algoritmo di Kruskal Parte con tutti i vertici e nessun lato (sottografo aciclico, o foresta, ricoprente) Ordina i lati per costo non decrescente.
Algoritmi greedy Gli algoritmi greedy in genere non sono esatti, cioè determinano soluzioni non necessariamente ottime Per il problema dell’albero ricoprente.
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
Algoritmi su grafi I grafi sono strutture dati che vengono usate estensivamente in informatica. Ci sono migliaia di problemi computazionali che sono importanti.
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Algoritmi e Strutture Dati
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
Alberi binari Definizione della struttura dati: struct tree { };
Corso di Informatica 2 a.a. 2003/04 Lezione 6
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.
Master Bioinformatica 2002: Grafi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Capitolo 13 Cammini minimi: Ordinamento topologico Algoritmi e Strutture Dati.
Ordinamento topologico
Olimpiadi di Informatica 2010 Giornate preparatorie
1 Analisi ammortizzata Si considera il tempo richiesto per eseguire, nel caso pessimo, una intera sequenza di operazioni. Se le operazioni costose sono.
Algoritmi elementari su grafi
Ordinamento topologico
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Componenti fortemente connesse
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Capitolo 11 Visite di grafi Algoritmi e Strutture Dati.
B-Alberi Algoritmi su grafi
Capitolo 13 Cammini minimi: Bellman e Ford Algoritmi e Strutture Dati.
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
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Usi (meno scontati) della visita DFS
Usi (meno scontati) della visita DFS
Transcript della presentazione:

Master Bioinformatica 2002: Visite di Grafi La struttura dati D è una PILA (STACK) Visita in profondità o Depth-First-Search (DFS)

Master Bioinformatica 2002: Visite di Grafi B A B D C F H G A B C D F G H S A C E D H G F

A C E D H G F A B C D F G H A B C D F G H B A B C D F G H S A C E D H G F

B A B C D F S A C E D H G F A B C D F G H A B C D F G H

B A B C D F E S H A C E D G F A B C D F H A B C D F GG H GE

B A B C D F S H A C E D G F A B C D F H A B C D F GG H GE

B H A B C D S A C E D G F A B C D F H A B C D F GG H GE

A B C S B A C E D H G F A B C D F G H A B C D F G H E

A B S B A C E D H G F A B C D F G H A B C D F G H E

A S A B C D F G H A B C D F G H E B A C E D H G F

S A B C D F G H A B C D F G H E B A C E D H G F

A B C D F G H A B C D F G H E Vertici memorizzati nelle liste di adiacenza in ordine alfabetico: B A C E D H G F CONSIDERIAMO L’ORDINE IN CUI I VERTICI DIVENTANO GRIGI: viene creato l’albero E L’ORDINE IN CUI DIVENTANO NERI

Master Bioinformatica 2002: Visite di Grafi B A C E D H G F A B C D F G H E Usando un unico contatore si ottiene:

Master Bioinformatica 2002: Visite di Grafi Visita DFS (prima versione) DFS-VISITA (G, s) S  make_empty_stack color  s   gray push (S, s) while not_empty (S) do u  top (S) if c’è v bianco adiacente a u then color  v   gray P[v   u push (S, v) else color  u   black pop (S)

Master Bioinformatica 2002: Visite di Grafi DFS-VISITA (G, s) S  make_empty_stack color  s   gray push (S, s) while not_empty (S) do while c’è un v adiacente a top (S) non considerato do if color  v  = white then color  v   gray P[v   top(S) push (S, v) Seconda versione con ciclo sugli adiacenti sul top dello stack top(S) cambia ogni volta che viene aggiunto un vertice color  top(S)   black pop (S)

Master Bioinformatica 2002: Visite di Grafi A D B F B C A E D F C C A D B F S

D A D B F B C A E F C A D B F S E C E

D A D B F B C A E F C C A D B F S E C E E

D A D B F B C A E F C C A D B F S E C E E F

F B C A E D A B F C A D S C E E F B D

F B C A E D A B F C A D S C E E F B D

F B C A E D B F C A D S C E E F B D A

B F B F C C E E A D D A Gli intervalli di “attivazione” di due vertici sono: disgiunti uno interamente contenuto nell’altro Osservazione

Master Bioinformatica 2002: Visite di Grafi D B F CE A un vertice non viene “disattivato” finchè non sono stati ‘attivati”e poi “disattivati” tutti i suoi discendenti è l’ordine in cui si percorre l’albero delle chiamate ricorsive di una procedura ricorsiva Versione ricorsiva dell’algoritmo di visita in profondità

Master Bioinformatica 2002: Visite di Grafi DFS-VISITA-ricorsiva (G, u) color  u   gray while c’è v adiacente a u non considerato do if color  v  = white then P[v   u DFS-VISITA-ricorsiva (G, v) color  u   black

Master Bioinformatica 2002: Visite di Grafi C'è corrispondenza fra lo stack della procedura iterativa e lo stack delle attivazioni della procedura ricorsiva. Più precisamente, supponendo che gli adiacenti vengano visitati nello stesso ordine dalle due procedure, se ad un certo punto dell'esecuzione lo stack della procedura iterativa è (con v 1 = s e v r sul top), la corrispondente sequenza di attivazioni per la procedura ricorsiva sarà:.

Master Bioinformatica 2002: Visite di Grafi A D B F B C A E D F C SDFS-ric(G,B) DFS-ric(G,D) DFS-ric(G,A) DFS-ric(G,F) DFS-ric(G,C)

Master Bioinformatica 2002: Visite di Grafi D A D B F B C A E F S C DFS-ric(G,B) DFS-ric(G,D) DFS-ric(G,A) DFS-ric(G,F) DFS-ric(G,C)

Master Bioinformatica 2002: Visite di Grafi D A D B F B C A E F SDFS-ric(G,B) DFS-ric(G,D) DFS-ric(G,A) DFS-ric(G,F)

Master Bioinformatica 2002: Visite di Grafi D A D B F B C A E F S E DFS-ric(G,B) DFS-ric(G,D) DFS-ric(G,A) DFS-ric(G,F) DFS-ric(G,E)

Master Bioinformatica 2002: Visite di Grafi D A D B F B C A E F SDFS-ric(G,B) DFS-ric(G,D) DFS-ric(G,A) DFS-ric(G,F)

Master Bioinformatica 2002: Visite di Grafi D A D B F B C A E SDFS-ric(G,B) DFS-ric(G,D) DFS-ric(G,A)

Master Bioinformatica 2002: Visite di Grafi D A D F B C A E S DFS-ric(G,D) DFS-ric(G,A)

Master Bioinformatica 2002: Visite di Grafi D A F B C A E S DFS-ric(G,A)

Master Bioinformatica 2002: Visite di Grafi D F B C A E S

DFS con calcolo dei tempi di inizio e fine visita Introduciamo un contatore “time” per ricordare l’ordine delle attivazioni e disattivazioni e i due attributi d (attivazione) e f (disattivazione) INIZIALIZZA (G) for ogni u  V do color  u   white P[u   nil d[u]   f[u]   time  0 N.b. Se un vertice non viene “visitato” i suoi tempi di attivazione e disattivazione resteranno infiniti.

Master Bioinformatica 2002: Visite di Grafi DFS-VISITA-ricorsiva (G, u) color  u   gray while c’è v adiacente a u non considerato do if color  v  = white then P[v   u DFS-VISITA-ricorsiva (G, v) color  u   black time  time + 1 f[u]  time time  time + 1 d[u]  time

Master Bioinformatica 2002: Visite di Grafi Proprietà della visita in profondità : 1. Teorema delle parentesi In ogni visita DFS di un grafo (orientato o non orientato), per ogni coppia di vertici u, v una e una sola delle seguenti condizioni è soddisfatta: u d[u] < d[v] < f[v] < f[u] e u è un antenato di v in un albero della foresta DFS u d[v] < d[u] < f[u] < f[v] e u è un discendente di v in un albero della foresta DFS u d[u] < f[u] < d[v] < f[v] e tra u e v non esiste relazione di antenato - discendente

Master Bioinformatica 2002: Visite di Grafi Classificazione degli archi del grafo durante una DFS Arco di attraversamento: arco che collega due vertici che non sono in relazione antenato - discendente DEFINIZIONE Arco dell’albero: arco inserito nella foresta DFS Arco all’indietro: arco che collega un vertice ad un suo antenato in un albero della foresta DFS Arco in avanti: arco che collega un vertice ad un suo discendente in un albero della foresta DFS

Master Bioinformatica 2002: Visite di Grafi OSSERVAZIONE un arco (u, v) viene “percorso” quando si scopre v nella lista degli adiacenti ad u. In quel momento color[v] può essere: grigio: v è un antenato di u in un albero della foresta DFS, (u, v) è un arco all’indietro nero: la visita di v è già terminata, (u, v) è un arco in avanti se v è un discendente di u in tal caso d[u] < d[v] < f[v] < f[u] d[u] < d[v] di attraversamento altrimenti in tal caso d[v] < f[v] < d[u] < f[u] d[v] < d[u] bianco: (u, v) è un arco dell’albero

Master Bioinformatica 2002: Visite di Grafi (Vertici adiacenti scanditi in ordine alfabetico) D E BC A

Master Bioinformatica 2002: Visite di Grafi 1 D E BC A (Vertici adiacenti scanditi in ordine alfabetico)

Master Bioinformatica 2002: Visite di Grafi (Vertici adiacenti scanditi in ordine alfabetico) 1 D E BC A 2

Master Bioinformatica 2002: Visite di Grafi (Vertici adiacenti scanditi in ordine alfabetico) 1 D E BC A 2 3

Master Bioinformatica 2002: Visite di Grafi (Vertici adiacenti scanditi in ordine alfabetico) 1 D E BC A (D, A) arco all’indietro

Master Bioinformatica 2002: Visite di Grafi (Vertici adiacenti scanditi in ordine alfabetico) 1 D E BC A (D, A) arco all’indietro

Master Bioinformatica 2002: Visite di Grafi (Vertici adiacenti scanditi in ordine alfabetico) 1 D E BC A (D, A) arco all’indietro 6

Master Bioinformatica 2002: Visite di Grafi 1 D E BC A (D, A) arco all’indietro 6 (C, B) arco di attraversameto

Master Bioinformatica 2002: Visite di Grafi 1 D E BC A (D, A) arco all’indietro 6 7 (C, B) arco di attraversameto

Master Bioinformatica 2002: Visite di Grafi 1 D E BC A (D, A) arco all’indietro (E, D) arco di attraversameto (C, B) arco di attraversameto

Master Bioinformatica 2002: Visite di Grafi 1 D E BC A (D, A) arco all’indietro (E, D) arco di attraversameto (C, B) arco di attraversameto

Master Bioinformatica 2002: Visite di Grafi 1 10 D E BC A (D, A) arco all’indietro (E, D) arco di attraversameto (C, B) arco di attraversameto (A, E) arco in avanti

Master Bioinformatica 2002: Visite di Grafi Teorema In una visita DFS di un grafo non orientato, ogni arco è un arco dell’albero o un arco all’indietro. Teorema Un grafo, orientato o non orientato, è aciclico se e solo se una visita DFS (qualunque) non produce archi all’indietro.

Master Bioinformatica 2002: Visite di Grafi Ordinamento topologico di un DAG Un ordinamento topologico di un DAG G= (V, E) è un ordinamento di tutti i vertici tale che se c’è un arco (u, v) in E allora u precede v

Master Bioinformatica 2002: Visite di Grafi Semplici applicazioni degli algoritmi di visita Algoritmo che determina se un grafo orientato contiene un ciclo Algoritmo che determina se un grafo non orientato e’ connesso Algoritmo che conta le componenti connesse di un grafo non orientato Algoritmo che determina un ordinamento topologico di un DAG

Master Bioinformatica 2002: Visite di Grafi Esempio di DAG slip pantaloni cintura camicia cravatta giacca calze scarpe orologio

Master Bioinformatica 2002: Visite di Grafi Possibile ordinameto (non è unico) slip orologio calze pantaloni camicia scarpe cintura cravatta giacca

Master Bioinformatica 2002: Visite di Grafi Idea! In un DAG, al termine di una visita DFS vale per ogni arco (u,v) f(u) > f(v) Algoritmo: fai una visita DFS su tutto il grafo, dai in outpu l’elenco dei vertici ordinati per tempo f(u) di fine visita decrescente