Gli algoritmi di visita dei grafi
Transcript
Gli algoritmi di visita dei grafi
APA I e II 21 Gli algoritmi di visita dei grafi Gli algoritmi di visita dei grafi Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Algoritmi di visita Visita di un grafo G=(V, E): a partire da un vertice dato, seguendo gli archi con una certa strategia, elencare i vertici incontrati, eventualmente aggiungendo altre informazioni. Algoritmi: in profondità (depth-first search, DFS) in ampiezza (breadth-first search, BFS). A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 2 1 APA I e II 21 Gli algoritmi di visita dei grafi Visita in profondità A partire da un vertice s: visita tutti i vertici del grafo (raggiungibili da s e non) etichetta ogni vertice v con tempo di scoperta/ tempo di fine elaborazione pre[v]/post[v] etichetta ogni arco: z grafi orientati: T(ree), B(ackward), F(orward), C(ross) z grafi non orientati: T(ree), B(ackward) genera una foresta di alberi della visita in profondità. A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 3 Principi base Profondità: espande l’ultimo vertice scoperto che ha ancora vertici non ancora scoperti adiacenti. Scoperta di un vertice: prima volta che si incontra nella visita (discesa ricorsiva). Completamento: fine dell’elaborazione del vertice (uscita dalla ricorsione). Scoperta/Completamento: tempo discreto che avanza mediante contatore time. A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 4 2 APA I e II 21 Gli algoritmi di visita dei grafi I vertici si distinguono (concettualmente) in: bianchi: non ancora scoperti grigi: scoperti, ma non completati neri: scoperti e completati. A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 5 Classificazione degli archi Grafo orientato: T: archi dell'albero della visita in profondità B: connettono un vertice u ad un suo antenato v nell’albero: pre(v)<pre(u) e post(v)>post(u) F: connettono un vertice u ad un suo discendente v nell’albero: pre(v)>pre(u) e post(v)<post(u) C: archi rimanenti. Grafo non orientato: solo archi T e B. A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 6 3 APA I e II 21 Gli algoritmi di visita dei grafi Strutture dati grafo come lista delle adiacenze vettore pre dei tempi di scoperta vettore post dei tempi di completamento possibilità di gestire il vettore π dei predecessori per la costruzione della foresta degli alberi di visita in profondità etichette degli archi T, B, F, C. A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 7 Algoritmo static int time, pre[maxV], post[maxV]; void GRAPHsearch(Graph G) { int v; time = 0; for (v=0; v < G->V; v++) { pre[v] = -1; post[v] = -1; } for (v=0; v < G->V; v++) if (pre[v]== -1) dfsR(G, EDGE(v,v)); } A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 8 4 APA I e II 21 Gli algoritmi di visita dei grafi dfsR con lista adiacenze void dfsR(Graph G, Edge e) { link t; int i, v, w = e.w; Edge x; show("tree" , e) ; pre[w] = time++; for (t = G->adj[w]; t != NULL; t = t->next) if (pre[t->v] == -1) dfsR(G, EDGE(w, t->v)); else { v = t->v; x = EDGE(w, v); if (post[v] == -1) show("back", x); else if(pre[v]>pre[w]) show("down", x) else show("cross", x) ; } post[w] = time++; } A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 9 Esempio time = -1 r s t v w x A.A. 2004/2005 21 Gli algoritmi di visita dei grafi π 10 5 APA I e II 21 Gli algoritmi di visita dei grafi π time = 0 r r s t w x 0/ v A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 11 π time = 1 r s r s 0/ 1/ v w A.A. 2004/2005 t x 21 Gli algoritmi di visita dei grafi 12 6 APA I e II 21 Gli algoritmi di visita dei grafi π time = 2 r s r s 0/ 1/ t w 2/ v w A.A. 2004/2005 x 21 Gli algoritmi di visita dei grafi 13 π time = 3 r s r s 0/ 1/ t w 2/3 v A.A. 2004/2005 w x 21 Gli algoritmi di visita dei grafi 14 7 APA I e II 21 Gli algoritmi di visita dei grafi π time = 4 r s r 0/ s t w 1/4 2/3 v w A.A. 2004/2005 x 21 Gli algoritmi di visita dei grafi 15 π time = 5 r s r s 0/ 1/4 5/ 2/3 v w A.A. 2004/2005 t v w x 21 Gli algoritmi di visita dei grafi 16 8 APA I e II 21 Gli algoritmi di visita dei grafi π time = 6 r s r s 0/ 1/4 5/6 2/3 v w A.A. 2004/2005 t v w x 21 Gli algoritmi di visita dei grafi 17 π time = 7 r s r s 0/7 1/4 5/6 2/3 v w A.A. 2004/2005 t v w x 21 Gli algoritmi di visita dei grafi 18 9 APA I e II 21 Gli algoritmi di visita dei grafi π time = 8 r s r s 0/7 1/4 5/6 2/3 v w A.A. 2004/2005 t t v w 8/ x 21 Gli algoritmi di visita dei grafi 19 π time = 9 r s r s 0/7 1/4 8/ 5/6 2/3 9/ v w A.A. 2004/2005 t t v x w x 21 Gli algoritmi di visita dei grafi 20 10 APA I e II 21 Gli algoritmi di visita dei grafi π time = 10 r s r s 0/7 1/4 8/ 5/6 2/3 9/10 v w x A.A. 2004/2005 t t v w 21 Gli algoritmi di visita dei grafi 21 π time = 11 r s r s t 0/7 1/4 8/11 5/6 2/3 9/10 v w x A.A. 2004/2005 x t v x w 21 Gli algoritmi di visita dei grafi 22 11 APA I e II 21 Gli algoritmi di visita dei grafi Complessità (lista adiacenze) Θ(|V|) Θ(|E|) Inizializzazione visita ricorsiva da u T(n) = Θ(|V|+|E|). Con la matrice delle adiacenze: T(n) = Θ(|V|2). A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 23 Esempio b a s c d f e b g T 2/5 3/4 c T C 6/7 s T 1/8 B T A.A. 2004/2005 a F C d 21 Gli algoritmi di visita dei grafi 0/9 e 10/15 T C T B 11/12 f C 13/14 g 24 12 APA I e II 21 Gli algoritmi di visita dei grafi s e a T F f B T C g C T B d b T T C T C c A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 25 Visita in ampiezza A partire da un vertice s: determina tutti i vertici raggiungibili da s calcola la distanza minima da s di tutti i vertici da esso raggiungibili. genera un albero della visita in ampiezza. Ampiezza: espande tutta la frontiera tra vertici già scoperti/non ancora scoperti. A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 26 13 APA I e II 21 Gli algoritmi di visita dei grafi Principi base Scoperta di un vertice: prima volta che si incontra nella visita. Vertici: bianchi: non ancora scoperti grigi: scoperti, ma non completati neri: scoperti e completati. Dato vertice u: pre[u] = distanza di u da s st[u]: padre di u nell’albero della visita. A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 27 Strutture dati grafo come matrice delle adiacenze coda Q dei vertici grigi vettore st dei predecessori vettore pre delle distanze minime. A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 28 14 APA I e II 21 Gli algoritmi di visita dei grafi Algoritmo (matrice delle adiacenze) } void bfs(Graph G, Edge e) { int v, w; int flag=0; QUEUEput(e); while (!QUEUEempty()) if (pre[(e = QUEUEget()).w] == -1) { pre[e.w] = flag ? pre[e.v]+1:0; flag=1; st[e.w] = e.v; for (v = 0; v < G->V; v++) if (G->adj[e.w][v] == 1) if (pre[v] == -1) 21 Gli algoritmi di visita dei grafi QUEUEput(EDGE(e.w, v)); A.A. 2004/2005 29 Esempio st Q r s t u v w x y A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 30 15 APA I e II 21 Gli algoritmi di visita dei grafi Q st s r s t u ∞ 0 ∞ ∞ ∞ ∞ ∞ ∞ v w x y A.A. 2004/2005 21 Gli algoritmi di visita dei grafi Q r 31 st w r A.A. 2004/2005 s r s t u 1 0 ∞ ∞ ∞ 1 ∞ ∞ v w x y 21 Gli algoritmi di visita dei grafi s w 32 16 APA I e II 21 Gli algoritmi di visita dei grafi Q w st v s r r s t u 1 0 ∞ ∞ 2 1 ∞ ∞ v w x y A.A. 2004/2005 w v 21 Gli algoritmi di visita dei grafi Q v t 33 st x s r A.A. 2004/2005 r s t u 1 0 2 ∞ 2 1 2 ∞ v w x y 21 Gli algoritmi di visita dei grafi v w t x 34 17 APA I e II 21 Gli algoritmi di visita dei grafi t Q st x s r r s t u 1 0 2 ∞ 2 1 2 ∞ w x y A.A. 2004/2005 v w t 21 Gli algoritmi di visita dei grafi x Q 35 st s u r r s t 1 0 2 3 2 1 2 ∞ w x y A.A. 2004/2005 x u 21 Gli algoritmi di visita dei grafi v w t x u 36 18 APA I e II 21 Gli algoritmi di visita dei grafi u Q st s y r r s t 1 0 2 3 2 1 2 3 w x y A.A. 2004/2005 u v w t u y 21 Gli algoritmi di visita dei grafi 37 st s y Q r r s t 1 0 2 3 2 1 2 3 w x y A.A. 2004/2005 x u 21 Gli algoritmi di visita dei grafi v w t u x y 38 19 APA I e II 21 Gli algoritmi di visita dei grafi st s Q r r s t 1 0 2 3 2 1 2 3 w x y A.A. 2004/2005 u v w t u x y 21 Gli algoritmi di visita dei grafi 39 Complessità Operazioni sulla coda Scansione della matrice delle adiacenze T(n) = Θ(|V|2). Con la lista delle adiacenze: T(n) = O(|V|+|E|). A.A. 2004/2005 21 Gli algoritmi di visita dei grafi 40 20 APA I e II 21 Gli algoritmi di visita dei grafi Proprietà Cammini minimi: la visita in ampiezza determina la minima distanza tra s e ogni vertice raggiungibile da esso. st s Cammino minimo da s a u: s, w, t, u lunghezza = 3 r v w t u A.A. 2004/2005 21 Gli algoritmi di visita dei grafi x y 41 21