Documente Academic
Documente Profesional
Documente Cultură
Febrero 2008
Outline
Separabilidad y biconectividad
Outline
Separabilidad y biconectividad
Separabilidad
Una noci on muy importante es la de separabilidad hay en el grafo lugares (v ertices o aristas) estrat egicas, que si les quitas se desconecta el grafo? para dos v ertices del grafo, puedo estar seguro que existen al menos dos caminos distintos que me lleve de uno a otro? aplicaciones importantes: estudio de la robustez de una red (agua, electricidad, transportes)
Separabilidad y biconectividad
Separabilidad
Separabilidad y biconectividad
Puente
Un puente (o arista de separaci on) es una arista que, si la quitas, separar a el grafo en que esta en dos sub-grafos desconectados Un grafo es separable por arista cuando tiene al menos un puente Un grafo es conectado por aristas (edge-connected ) cuando no es separable Una vez quitadas las puentes en el grafo, se obtiene sus componentes conectadas por aristas, que son sub-grafos m aximos sin puentes
Separabilidad y biconectividad
Puente
8 1
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 7 / 53
Separabilidad y biconectividad
Puente
8 1
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 7 / 53
Separabilidad y biconectividad
Puente
8 1
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 7 / 53
Separabilidad y biconectividad
Puente y DFS
Existe una conexi on estrecha en la noci on de puente y el arbol de llamadas por DFS Aristas de tipo back no pueden ser puentes, por qu e? Propiedad: en un recorrido DFS, una arista de tipo tree edge v w es un puente si y solamente si no existe ninguna back edge que conecta un descendiente de w con un ancestro de v (1) (2) si existiera un back edge habria al menos dos caminos diferentes de a a b : no ser a un puente v w (2) (1) si no tenemos un puente entre v y w , entonces existe un camino alternativo para ir de w a v : es un back edge
, J.B. Hayet Programacion, Febrero 2008 8 / 53
Separabilidad y biconectividad
Puente y DFS
Existe una conexi on estrecha en la noci on de puente y el arbol de llamadas por DFS Aristas de tipo back no pueden ser puentes, por qu e? Propiedad: en un recorrido DFS, una arista de tipo tree edge v w es un puente si y solamente si no existe ninguna back edge que conecta un descendiente de w con un ancestro de v (1) (2) si existiera un back edge habria al menos dos caminos diferentes de a a b : no ser a un puente v w (2) (1) si no tenemos un puente entre v y w , entonces existe un camino alternativo para ir de w a v : es un back edge
, J.B. Hayet Programacion, Febrero 2008 8 / 53
Separabilidad y biconectividad
Puente y DFS
De manera equivalente, en un puente v w , la u nica liga desde el sub-arbol enraizado en w que apunte hacia un nodo que no sea en este arbol es w v mismo: desconectarle llevar a a desconectar el sub-grafo correspondiendo a este arbol de llamadas De esta observaci on se puede deducir un algoritmo de prueba basado en DFS: hay que examinar, en cada tree edge, si se puede alcanzar un v ertice ya visitado
Separabilidad y biconectividad
Puente y DFS
Recordar que si numeramos los v ertices en el orden preorden ord [v ]: (v w ) tree edge ord [v ] < ord [w ] (v w ) back edge ord [v ] > ord [w ] Idea: memorizar el preorden mas bajo low [w ] que se pueda alcanzar al usar al m aximo un back edge y uno(s) tree edges a partir de w Una arista v w es una puente ssi low [w ] = ord [w ]
Separabilidad y biconectividad
Puente y DFS
8 1
0 0 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1
0 0 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1
5 2 3 9
0 0 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1
5 2 3 9
0 0 3 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1
5 2 3 9
0 0 3 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1
5 2 3 9 4 3 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1
5 2 3 9 4 5 3 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1
5 2 3 6 9 4 5 3 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1
5 2 3 64 9 4 5 3 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1
5 2 3 64 9 44 54 3 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1 7 5 2 3 64 9 44 54 30 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1 7 5 2 3 64 9 44 54 30 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1 7 5 2 3 64 9 44 54 30 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
8 1 1 7 5 2 3 64 9 44 54 30 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
88
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
8 10 1 71 5 20 3 64 9 44 54 30 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
88
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
8 10 1 71 5 20 3 64 9 44 54 30 2
, J.B. Hayet Programacion, Febrero 2008 11 / 53
88
0 0
6 7
Separabilidad y biconectividad
Puente y DFS
Del libro de Sedgewick :
t e m p l a t e < c l a s s Graph > c l a s s EC : p u b l i c SEARCH<Graph > { in t bcnt ; v e c t o r < i n t > low ; v o i d s e a r c h C ( Edge e ) { int w = e .w; o r d [ w ] = c n t ++; low [ w ] = o r d [ w ] ; typename Graph : : a d j I t e r a t o r A(G , w ) ; f o r ( i n t t = A . beg ( ) ; ! A . end ( ) ; t = A . n x t ( ) ) i f ( o r d [ t ] == 1) { s e a r c h C ( Edge (w , t ) ) ; i f ( low [ w ] > low [ t ] ) low [ w ] = low [ t ] ; i f ( low [ t ] == o r d [ t ] ) b c n t ++; // w t i s a b r i d g e } J.B. Hayet Programacion, Febrero 2008
, 12 / 53
Separabilidad y biconectividad
Puente y DFS
Del libro de Sedgewick :
e l s e i f ( t != e . v ) i f ( low [ w ] > o r d [ t ] ) low [ w ] = o r d [ t ] ; } void s e a r c h ( ) { f o r ( i n t v = 0 ; v < G . V ( ) ; v++) i f ( o r d [ v ] == 1) s e a r c h C ( Edge ( v , v ) ) ; } public : EC( const Graph &G) : SEARCH<Graph >(G) , b c n t ( 0 ) , low (G . V ( ) , 1) { s e a r c h ( ) ; } i n t c o u n t ( ) const { r e t u r n b c n t +1; } };
Separabilidad y biconectividad
Puente y DFS
Otra vez, algoritmo lineal (|V |2 o |V | + |A|, para cada representaci on adecuada) Claramente, una b usqueda con otra representaci on o con otro punto de ida no cambiar a el resultado, que es caracter stico del grafo
Separabilidad y biconectividad
Puente y DFS
0 8 11 5 21 1 31 0 41 1 2 66 6 9 76 86 3 5 3 8
51
6 6
J.B. Hayet
7
, Programacion, Febrero 2008 15 / 53
Separabilidad y biconectividad
Las deniciones y caracterizaciones previas se interesan a aristas criticas. Ahora, qu e pasa con v ertices? al quitar v ertices, quitamos tambi en las aristas correspondientes el equivalente de la noci on de puente: un punto de articulaci on (o v ertice de separaci on) es un v ertice tal que si lo quitamos, el grafo se separar a en al menos dos sub-grafos separados un grafo sin v ertices de separaci on se dice conectado por v ertices (vertex-connected )
Separabilidad y biconectividad
Biconectividad
Un grafo es biconectado si entre cada par de v ertices del grafo ertices existen al menos dos caminos disjuntos en v
1
Mas fuerte que la conectividad por aristas: aqu se necesita que cada v ertices puedan ser conectados con caminos sin v ertices en com un mientras en el primer caso, se requiere caminos sin aristas en com un
, J.B. Hayet Programacion, Febrero 2008 17 / 53
Separabilidad y biconectividad
Biconectividad
Propiedad: un grafo es biconectado ssi no tiene v ertices de separaci on (1) (2) considerar dos v ertices v y w que aparecer an en las componentes separadas al quitar el v ertice de separaci on s ; todos los caminos de v a w tienen que contener a s : si hab a un camino que no pase por s violar a el hecho de que est an en componentes separadas; tons no es biconectado (2) (1) mas complicado. . . ertices pasa Propiedad: un grafo es biconectado ssi por toda par de v un ciclo
Separabilidad y biconectividad
Biconectividad
se puede denir una relaci on entre aristas como: a en relaci on con a ssi a = a o existe un ciclo dentro del grafo que incluya a ya la relaci on as denida (relaci on de cociclicidad) es una relaci on de equivalencia (por qu e?) las clases de equivalencia corresponden a las componentes biconectadas de G
Separabilidad y biconectividad
V ertices de separaci on
Algoritmo de fuerza bruta: para todos los v ertices, vericar el grafo obtenido quitando el v ertice y reponerlo en el grafo. |V | pruebas que hacer Cada prueba lleva O (|V | + |A|) o O (|V |2 ) (usar DFS, por ejemplo) Total: O (|V |2 + |A||V |) o |V |3
Separabilidad y biconectividad
V ertices de separaci on
Como encontrarles por DFS? un v ertice es de separaci on ssi existe en el arbol de DFS un subarbol enraizado en uno de los hijos de u en que no haya aristas back hacia uno de los ancestros de u un v ertice-hoja en el arbol no puede ser un v ertice de separaci on la ra z de un arbol DFS es un v ertice de separaci on ssi tiene mas de dos hijos de tipo tree edges Es casi el mismo algoritmo que para encontrar puentes!
Separabilidad y biconectividad
88
0 0
6 7
Separabilidad y biconectividad
V ertices de separaci on
u es un v ertice de separaci on ssi tiene un hijo v en el arbol DFS tal que Low [v ] ord [u ] Remarcar que un puente no implica necesariamente que los dos v ertices del puente sean v ertices de separaci on (por qu e?) Remarcar que un v ertice de separaci on no pertenece necesariamente a un puente (por qu e?)
Separabilidad y biconectividad
V ertices de separaci on
Ahora, como determinar cuales son las componentes biconectadas? usar una pila! en el DFS, poner en la pila los tree y back edges que nos encontramos; cuando nos damos cuenta de que un v ertice es de separaci on por un tree edge v w , quitar de la pila todos los edges hasta encontrar v w , y seguir el DFS
Separabilidad y biconectividad
V ertices de separaci on
En nuestro ejemplo:
0-1 1-3 3-2 2-6 6-7 7-9 9-6 2-0 3-5 5-1 5-8
Remarcar que los v ertices de separaci on pueden pertenecer a varias componentes! todo eso en tiempo linear
J.B. Hayet Programacion, Febrero 2008 25 / 53
Separabilidad y biconectividad
V ertices de separaci on
En nuestro ejemplo:
8 1
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 26 / 53
Separabilidad y biconectividad
Generalizaci on
un grafo es k conectado si cada par de v ertices esta conectado por al menos k caminos disjuntos la conectividad por v ertices de un grafo es el n umero m nimo de v ertices que hay que quitar del grafo para separarlo en dos partes (ejemplo: un grafo con v ertice de separaci on es 1-conectado o 0) teorema de Whitney: un grafo es k conectado ssi su conectividad por v ertices es no menos de k un grafo es k conectado por aristas ssi entre cada par de v ertices existe al menos k caminos disjuntos en aristas la conectividad por aristas de un grafo es el n umero m nimo de aristas que hay que quitar para separar el grafo en dos partes
Outline
DFS
DFS corresponde fundamentalmente a un recorrido v ertice por v ertice usando una pila en que ponemos cada vez los vertices adyacentes no visitados el uso de la pila esta escondido por las recursiones corresponde a una estrategia de exploraci on de laberintos: cada vez que nos encontramos con varias elecciones posibles para seguir, tomamos la m as recientemente descubierta; importa explorar lo mas profundamente posible lo mas r apidamente posible
DFS
Una re-escritura posible:
t e m p l a t e < c l a s s Graph > c l a s s DFS : p u b l i c SEARCH<Graph > { v o i d s e a r c h C ( Edge e ) { s t a c k <Edge> s ; s . push ( e ) ; w h i l e ( ! s . empty ( ) ) { i n t a=o r d [ ( e = s . t o p ( ) ) . w ] ; s . pop ( ) ; i f ( a == 1) { int v = e . v , w = e .w; o r d [ w ] = c n t ++; typename Graph : : a d j I t e r a t o r A(G , w ) ; f o r ( i n t t = A . beg ( ) ; ! A . end ( ) ; t = A . n x t ( ) ) i f ( o r d [ t ] == 1) Q. push ( Edge (w , t ) ) ; } };
, J.B. Hayet Programacion, Febrero 2008 30 / 53
BFS
la losof a de BFS (Breadth-First-Search) es muy diferente, tiene por principal meta enfocar sobre las distancias entre los v ertices y encontrar caminos mas cortos la idea es explorar en c rculos conc entricos alrededor del punto inicial DFS/BFS: exploraci on impetuosa/exploraci on prudente con varias personas
BFS
La implementaci on es muy simple: usar al lugar de un stack (LIFO) un queue (FIFO), y en cada nuevo v ertice encontrado, poner los adyacentes no visitados en la cola. Saldr an una vez que habr an salido los v ertices del mismo nivel que el v ertice padre, y los v ertices hijos de los primeros hermanos de este mismo v ertice padre Propiedad: de la cola que se usa, los v ertices entran y salen en el orden de su distancia a partir del v ertice inicial Propiedad: la cola que se usa contiene 0 o mas v ertices de distancia k hacia el v ertice inicial seguidos de 0 o mas v ertices de distancia k + 1 hacia el v ertice inicial para alg un k
BFS
8 1 0-0
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 33 / 53
BFS
8 1 0-0 0-1 0-2
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 33 / 53
BFS
8 1 0-0 0-1 0-2 1-3 1-5 2-3 2-6 5
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 33 / 53
BFS
8 1 0-0 0-1 0-2 1-3 1-5 2-3 2-6 3-5 5-8 6-7 6-9 5
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 33 / 53
BFS
8 1 0-0 0-1 0-2 1-3 1-5 2-3 2-6 3-5 5-8 6-7 6-9 7-9
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 33 / 53
BFS
8 1 0-0 0-1 0-2 1-3 1-5 2-3 2-6 3-5 5-8 6-7 6-9 7-9
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 33 / 53
BFS
t e m p l a t e < c l a s s Graph > c l a s s BFS : p u b l i c SEARCH<Graph > { v e c t o r <i n t > s t ; v o i d s e a r c h C ( Edge e ) { QUEUE<Edge> Q; Q. p u t ( e ) ; w h i l e ( !Q. empty ( ) ) i f ( o r d [ ( e = Q. g e t ( ) ) . w ] == 1) { int v = e . v , w = e .w; o r d [ w ] = c n t ++; s t [ w ] = v ; typename Graph : : a d j I t e r a t o r A(G , w ) ; f o r ( i n t t = A . beg ( ) ; ! A . end ( ) ; t = A . n x t ( ) ) i f ( o r d [ t ] == 1) Q. p u t ( Edge (w , t ) ) ; } }
, J.B. Hayet Programacion, Febrero 2008 34 / 53
BFS
el st permite recuperar r apido el camino mas corto hacia el nodo inicial se puede establecer, como con DFS, un arbol de visitas
BFS: arbol
0
BFS: arbol
el BFS establece un bosque generador del grafo todos las aristas del arbol corresponden a aristas del grafo se puede procesar componente conectada por componente conectada los v ertices terminales pueden ser de tres categor as:
ligas padres ligas hacia v ertices del mismo nivel ligas hacia v ertices del nivel justo arriba (no puede haber m as, por qu e?)
BFS: arbol
Propiedad: para todo nodo w del arbol BFS enraizado en v , el camino v w corresponde al camino mas corto entre v y w Prueba: no hay camino v w mas corto antes de que surge al sacar w de la cola, y de la misma manera no camino hacia w puede ser encontrado despu es (ser an de tama no al previo)
BFS: remarca
de todos modos, al a nadir a la cola una arista que contiene un v ertice que ya esta entre las aristas ya presentes no sirve mucho: no estar a examinado (es la primera instancia que cuenta) una posibilidad, en consecuencia, es marcar el v ertice no al momento de examinarle sino al momento mismo de a nadirle a la cola
BFS: remarca
Implementaci on f acil;
v o i d s e a r c h C ( Edge e ) { QUEUE<Edge> Q; Q. p u t ( e ) ; o r d [ e . w ] = c n t ++; w h i l e ( !Q. empty ( ) ) { e = Q. g e t ( ) ; s t [ e . w ] = e . v ; typename Graph : : a d j I t e r a t o r A(G , e . w ) ; f o r ( i n t t = A . beg ( ) ; ! A . end ( ) ; t = A . n x t ( ) ) i f ( o r d [ t ] == 1) { Q. p u t ( Edge ( e . w , t ) ) ; o r d [ t ] = c n t ++; } } }
BFS: complejidad
BFS visita los v ertices y las aristas en el grafo en tiempo proporcional 2 a |V | (matriz de adyacencia) y |A| + |V | (listas de adyacencia) para cada v ertice visitado, checamos todas sus aristas todos los v ertices dentro de cada componente conectada est an o (1) en el arbol BFS, o (2) en la cola o (3) en situaci on de estar alcanzado desde un v ertice de la cola. Todos se mover an de (3) a (2) y a (1). Algoritmo lineal
calcular los caminos mas cortos a partir de cada nodo almacenar los resultados en tablas (distancias/st) preprocesamiento en |V ||A|, espacio en |V |2 pedidas en tiempo constante (tama no) y tiempo proporcional al tama no del camino (camino)
B usqueda generalizada
Outline
B usqueda generalizada
Generalizaci on
al n y al cabo, BFS y DFS dieren por poco: la estructura que esta usada para almacenar los v ertices adyacentes de los v ertices visitados uno sale para procesarlo el mas recientemente descubierto, otro sale para procesarlo el que ha sido descubierto hace m as tiempo se puede generalizar la estrategia a cualquier tipo de cola generalizada (CG)
B usqueda generalizada
Generalizaci on
La estrategia de recorrido se puede enunciar como: Inicializar un arbol vac o y una CG con una arista v v Iterar hasta que la CG sea vac a:
Mover una arista de la CG hasta el arbol Si el v ertice hacia que llega no ha sido visitado ya, visitarle y a nadir todas las aristas que le conectan a v ertices visitados
Remarca: al usar un stack no tenemos exactamente el mismo DFS que lo que vimos, por qu e?
B usqueda generalizada
Generalizaci on
Tal cual, aparece un problema de eciencia: muchas aristas no estar an procesadas de todos modos aunque est an presentes en la CG BFS: son las primeras entradas que estaran procesadas; entonces es suciente marcar los v ertices correspondientes la primera vez y no ingresar mas aristas conteniendoles (ignore the new) DFS: es mas complicado, necesita una estrategia para olvidar la arista introducida hace mas tiempo (forget the old) Mas generalmente, el recorrido con CG necesita un mecanismo de reemplazamiento para asegurarse que no tenemos aristas compartiendo el mismo v ertice: ser a la propiedad intr nseca de la CG
B usqueda generalizada
Generalizaci on
Ejemplo:
B usqueda generalizada
Generalizaci on
Se puede establecer que con el uso de una CG, se puede recorrer todos los v ertices y aristas: en tiempo |V |2 /(|V | + |A|) a nadiendo en el peor caso el tiempo para |V | inserciones, |V | acciones de quitar y |A| operaciones de update de la CG
B usqueda generalizada
sacar los elementos de manera random! alterna comportamiento de tipo DFS con comportamiento de tipo BFS todo depende mucho del update: se puede no hacer; se puede considerar solo la arista mas reciente por un v ertice dado; se puede alternar comportamientos aleatoriamente
B usqueda generalizada
, 51 / 53
B usqueda generalizada
DFS
BFS
Random
B usqueda generalizada
Si se puede asociar valores a aristas, entonces puede ser interesante quitar de la CG para ponerlas en el arbol las aristas de prioridad mas alta El update requiere operaciones de mantenimiento mas pesadas (ordenamiento) Uso en muchos algoritmos!