Grafos Deniciones básicas y Algoritmos elementales Andrés Becerra Sandoval Motivación I Los grafos nos sirven para representar: I automatas I redes de comunicación I circuitos I modelos de lenguaje I dependencias entre entidades I lugares y conexiones entre ellos I ... Búsquedas I En amplitud BFS - Breadth First Search DFS - Depth First Search I En profundidad DFS DFS(G,s) 1 2 for each vertex ∈ [ ] do [ ] ← BLANCO u color u 3 4 5 6 7 V G π[u ] ← NIL ←0 each vertex u ∈ V [G ] do if color [u ] = BLANCO then DFS-VISIT(u ) tiempo for DFS-visit DFS-visit(G , s ) 1 2 3 4 5 6 7 8 9 10 [ ] ← GRIS time ← time + 1 d [u ] ← time for each v ∈ Adj [u ] do if color [v ] = BLANCO then π[v ] ← u DFS-VISIT(v ) color [u ] ← NEGRO time ← time + 1 f [u ] ← time color u Análisis I V operaciones I La suma de los elementos de todas las listas es I Conclusión: ( O V + A) A Propiedades Para toda pareja de vértices u , v se cumple: I Los intervalos [ [d [u ], f [u ] ] y [ [d [v ], f [v ] ] son disjuntos y no hay descendencia entre ellos [d [u ], f [u ] [ [d [v ], f [v ] ] y u es I El intervalo de está contenido completamente dentro descendiente de v en el bosque de búsqueda por profundidad [d [v ], f [v ] [ [d [u ], f [u ] ] y v es I El intervalo de está contenido completamente dentro descendiente de u en el bosque de búsqueda por profundidad Corolario: I v es un descendiente propio de u en el bosque de búsqueda por profundidad sii [ [ ] < d [v ] < f [v ] < f [u ] d u Mas propiedades Theorem Ruta blanca En un árbol de búsqueda por profundidad v es descendiente de u sii [ ] en el tiempo d u en que se descubre u, el vértice v puede alcanzarse desde u a través de una ruta compuesta de vértices blancos unicamente. Clasicación de arcos I Arcos del árbol [llega a un nodo BLANCO] I Arcos hacia atrás (hacia un ancestro) [llega a un nodo GRIS] I Arcos hacia adelante (hacia un descendiente) [llega a un nodo NEGRO] I Arcos cruzados [llega a un nodo NEGRO] Theorem Para un grafo no dirigido no hay arcos hacia adelante ni cruzados. Ordenamiento topológico TOPOLOGICAL-SORT(G ) 1 2 3 llamar a DFS(G) calcula f[v] para todo v a medida que naliza cada vértice se pone en el inicio de una lista return la lista enlazada Componentes fuertemente conectados Componentes-Fuertemente-Conectados(G ) 1 llamar a DFS(G) 2 calcular G 3 llamar a DFS(G 4 con los vértices de cada árbol del bosque se forma un componente T T) calcula f[v] para todo v considerando los vértices por f[u] decreciente