Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15
GRAFI PLANARI Un grafo si dice planare se è possibile disegnarlo sul piano in modo che nessuna coppia dei suoi spigoli si intersechi.
Formula di Eulero In un grafo planare connesso con n vertici, m spigoli e f facce, vale: n - m + f =2 Prova (per induzione su m): Passo base: vero sia se m=0 e n=1, f=1; sia se m=1 e n=2, f=1; Ipotesi induttiva: vero per tutti i valori fino ad m -1; Tesi: vale per G con m archi, n vertici e f facce G albero e v foglia, allora G-v ha m-1 archi, n-1 vertici e f facce per cui (n-1)-(m-1)+f=2 e conseguentemente n-m+f=2; G ha almeno un ciclo ed s è uno spigolo del ciclo, allora G-s ha m-1 archi, n vertici e f-1 facce per cui n-(m-1)+(f-1)=2 e conseguentemente n-m+f=2
Dalla formula di Eulero Se G è un grafo planare con n ≥ 3 vertici ed m spigoli, vale che m ≤ 3n – 6 Prova. Si consideri un embedding di G planare massimale (si possono sempre aggiungere spigoli senza incrementare il numero dei vertici). Poiché ogni faccia è limitata da 3 spigoli ed ogni spigolo è sul bordo di due facce, vale: 2m = 3f (ovvero f = 2/3m) Per la formula di Eulero si ha: n- m +2/3m = 2, da cui l’asserto Se G anche bipartito, vale m ≤ 2n – 4 Prova. Analoga alla precedente. L’unica differenza sta nel fatto che i un grafo bipartito non ci sono cicli dispari, per cui 2m=4f (ovvero f = 1/2m)
TEOREMA DI KURATOWSKI(1930) Un grafo è planare sess non contiene sottografi omeomorfi a K 5 e K 3,3
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.
UN PO’ DI STORIA 1961(Auslander e Parter) primo algoritmo a complessità polinomiale (quadratico) 1974(Hopcroft e Tarjan ) primo algoritmo a complessità lineare (per aggiunta di cammini) 1967(Lempel, Even e Cederbaum ) primo algoritmo per aggiunta di vertici (quadratico) 1976(Even e Tarjan ) algoritmo lineare per st-numerazione 1976(Booth e Lueker ) si introducono i PQ trees 1985(Chiba, Nishizeki,Abe,Ozawa) "A linear algorithm for embedding planar graphs using PQ–trees”" 19??(De Fraisseix e Rosenstiehl) costruttivo, visita in profondità, mai pubblicato 1993(Shih e Hsu ) costruttivo, visita in profondità, lineare ……………………………
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
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à
CALCOLO DELLE FUNZIONI Procedura DFS (G) T=Ø; Cont=1; for i=1 to n do marca v i come nuovo; for i=1 to n do RICERCA( v i ). 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))