Lezione n°15 Prof.ssa Rossella Petreschi Lezione del 26/11/2014 del Corso di Algoritmica
ST-NUMERAZIONE Una numerazione 1,2,…,n degli n vertici di G (V,E) è detta st-numerazione se: il vertice 1 è detto sorgente (s) e il vertice n è detto pozzo(t) ed s e t sono adiacenti; fra tutti i vertici adiacenti ad un qualunque j in V, j≠s,t, esistono sempre due vertici i ed k tali che i<j<k Vale: esiste una st-numerazione per ogni grafo 2-connesso; non è possibile trovare una st-numerazione valida per un grafo non 2-connesso. Un grafo è 2-connesso se è privo di punti di articolazione. Un vertice in G è punto di articolazione se la sua eliminazione aumenta il numero di componenti connesse in G. 2
EVEN e TARJAN 1976 TEOREMA Sia G(V,E) un grafo 2-connesso, siano s e t due nodi di V tali che (s,t) sia un arco di E. Allora esiste una st-numerazione tale che s sia il primo nodo e t sia l’ultimo. Dimostrazione La dimostrazione è data in forma costruttiva e consiste nel fornire un algoritmo di st-numerazione (basato sulla visita in profondità) Complessità Lineare in m 3
DFN, FATH e LOW Definiamo: DFN(v) : identifica l’ordine di visita di v nella visita in profondità del grafo. Tutti i vertici del grafo saranno poi identificati con il loro DFN. FATH(v) : riporta il numero di identificazione nella visita in profondità del padre di v LOW(v) : min (v,w), per ogni w estremo dello spigolo di riporto (u,w) (back edge) con u discendente e w ascendente di v nell’albero generato dalla visita in profondità. In modo equivalente: LOW(v) : min (v, LOW(x), w), per ogni x figlio di v e w estremo dello spigolo di riporto (v,w) (back edge). Queste tre funzioni si calcolano con una semplice modifica della visita in profondità 4
CALCOLO DELLE FUNZIONI Procedura DFS (G) T=Ø; Cont=1; for i=1 to n do marca vi come nuovo; for i=1 to n do RICERCA( vi). Procedura RICERCA (v) marca v come vecchio; DFN(v) = Cont; Cont=Cont+1; LOW(v)= DFN(v); for ogni vertice w nella lista di adiacenza di v do if w è marcato nuovo then aggiungi (v,w) a T; FATH (w)=v; RICERCA(w); LOW(v)=min(LOW(v),LOW(w)) else if FATH (v) ≠ w then LOW(v)=min(LOW(v),DFN(w)) 5
LA FUNZIONE PATH Inizialmente s,t e (s,t) sono identificati vecchi, tutti gli altri vertici e spigoli di G sono identificati nuovi. Si conoscono poi DFS(t)=1, DFS(s)=2. La funzione PATH(v) prende come valore un cammino da v ad un vertice vecchio. Si considerano 4 casi: 1. vi è un nuovo back edge (v,w) PATH = vw; marca (v,w) vecchio. 2. vi è un nuovo tree edge (v,w) PATH = vw0w1wk-1wk, con w = w0 e LOW(w)=wk ovvero ci si arrampica sull’albero finchè un back- edge non ci porta in un vertice u tale che DFN(u)=LOW(w); marca vecchio tutti i vertici e gli spigoli sul PATH. 3. vi è un nuovo back edge (w,v) PATH = vw0w1wk-1wk, con w = w0 e wk vecchio; ovvero il cammino va all’indietro fino al primo vecchio vertice; 4. Tutti gli spigoli incidenti in v sono vecchi PATH = Ø. 6
PROCEDURA DI ST-NUMERAZIONE Procedura ST-NUMERAZIONE (G) Inizializzazione: si marcano s,t e (s,t) come vecchi e tutti gli altri vertici e spigoli come nuovi;si inseriscono t ed s nello stack S, nell’ordine, cont =1;pop v da S; while v ≠ t do if PATH =Ø then STN(v)=cont; cont=cont +1; else push tutti i vertici di PATH in ordine inverso a v(v deve rimanere al top) pop v da S STN(t)=cont 7
EMBEDDING Dato un disegno planare di un grafo G, si ordini la lista di adiacenza di G in modo che tutti i vicini di ogni vertice v seguano il verso dell’orologio sul disegno dato. L’insieme delle liste così ordinato è chiamato incastonamento (embedding) di G. 1 2 3 6 5 2 5 4 3 1 3 2 4 6 1 4 2 5 6 3 5 4 2 1 6 6 4 5 1 3 8
RAPPRESENTAZIONE A CESPUGLIO Si consideri G(V,E) sui cui vertici è imposta una st-numerazione v1, …, vn e Gk (Vk,Ek) sottografo di G indotto dai vertici Vk= (v1, …,vk). Se k<n, deve esistere almeno uno spigolo con un estremo in Vke un estremo in V-Vk. Si costruisca Gk’ aggiungendo a Gktutti gli spigoli di questo tipo con la caratteristica che un vertice in V- Vk connesso a d vertici in Vk sarà rappresentato con d copie virtuali di grado 1. Una rappresentazione a cespuglio di Gk’ è un ebedding di Gk’ con tutti i vertici virtuali posizionati sulla faccia esterna(usualmente sulla stessa orizzontale). 9
ANCORA SUI CESPUGLI (Even 1979) Sia (s,t) disegnato sul bordo della faccia esterna di un embedding di G. Si consideri Gk sottografo piano di G. Per 1≤ k ≤n vale: tutti i vertici e gli spigoli di G-Gk sono disegnati sulla faccia esterna del sottografo piano Gk di G; per una qualunque forma a cespuglio di Gk , esiste una sequenza di permutazioni e di scambi che porta tutte le copie del vertice “k+1” ad occupare posizioni consecutive sulla linea orizzontale 10
PQ-TREE Una forma a cespuglio Bk è normalmente rappresentata tramite una struttura dati chiamata PQ-tree. I nodi di un PQ-tree sono divisi in tre classi: P-nodi, Q-nodi e foglie, dove: i P-nodi rappresentano punti di articolazione di Gk e i figli di un P-nodo possono essere permutati arbitrariamente i Q-nodi rappresentano le componenti biconnesse di Gke i figli di un Q-nodo possono essere solo scambiati le foglie sono i nodi virtuali in Bk le foglie si muovono in accordo ai movimenti dei P-nodi (o dei Q-nodi) Booth e Lueker hanno provato che le permutazioni e gli scambi nominati sopra possono essere trovati applicando ripetutamente 9 trasformazioni base 11