Académique Documents
Professionnel Documents
Culture Documents
Roberto Carlos Martnez Moreno Algoritmos Computacionales Dra. Satu Elisa Schaeffer Verano 2011 http://roberto-mtz.blogspot.com
RECORRIDOS DE GRAFOS
Hay abundantes problemas que se pueden interpretar como un grafo. Un grafo G=(V,E) se basa en un conjunto V de vrtices (o nodos), y un conjunto E de aristas (edges o arcs) Existen diferentes razones para analizar los grafos, entre ellos buscar uno o mas vrtices. Vrtice
p r o f u d i d a d
Arista
2 3 5 6 7 8 4
11 12 10
13 14
15 16 9
Para no inspeccionar a un vrtice que ya visitamos varias veces, debemos de sealar los vrtices que ya visitamos para que as solo visitamos a un vrtice que no ha sido marcado como visitado.
2 3 5 6 7 8 4
11 12 10
13 14
15 16 9
ALGORITMO
1. funcin DFS(vrtice X). 2. sealamos X como visitado. 3. para cada vrtice V prximo a X, si no se ha visitado; marcamos como visitado. 4. llamamos DFS(vrtice V). DFS(vrtice X){ visitado[X] = Verdad; para cada V prximo{ si visitado[V] = Falso { DFS(V); } } }
NOTA
Es importante decir que este algoritmo se puede escribir de las dos maneras, recursivo e iterativo, de ambas versiones es lo mismo, solo que en iterativo se hace explcito una pila, esto se remplaza en el modo recursivo con las llamadas.
EJEMPLO
1 2 3 6 7 8 9 4 10 11 12 15 13 14 5 16
EJEMPLO
C G I
EJEMPLO
C
EJEMPLO
Despues de la llamada recursiva, ira a su prximo segun su adyecente, ahora se va a G, se marca como visitado, por lo tanto el inicial es G y sus prximos son C, M, O.
C G I
EJEMPLO
C
EJEMPLO
Como el vrtice G ya esta visitado, termina la recursin en esa rama, el siguiente prximo de G es O, que no ha sido visitado, lo marcamos; ahora sus prximos son GyC
C G I
EJEMPLO
Sus prximos ya han sido visitados, por lo tanto terminamos la recursin, ahora el actual es C, teniendo como prximos a G, O, I. Como G y O ya fueron M visitados, nos vamos a I y lo marcamos como visitado
C G I
EJEMPLO
Entonces termina la recursin y termina el recorrido por DFS
C G I
ANLISIS ASINTTICO
Suponiendo que el grafo est conectado. La bsqueda en profundidad visita cada vrtice una ves ya que los visitados no volvern a ser revisados y checa cada arista cada que se desplaza. Es por eso que, la complejidad del DFS es O(V+E)
APLICACIONES
Soluciones en la inteligencia articial. Encontrar un componente conectado (teora de los grafos) Detectar ciclos Clasicacin topogrca. La resolucin de laberintos u otros puzzles. Generar laberintos Construccin de caminos
REFERENCIAS
http://elisa.dyndns-web.com/~elisa/teaching/aa/pdf/aa.pdf http://www.inf.ed.ac.uk/teaching/courses/cs2/LectureNotes/CS2Bh/ADS/ ads10.pdf http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/ GraphAlgor/depthSearch.htm http://www.cs.us.es/cursos/cc-2009/material/dfs.pdf http://www.youtube.com/watch?v=or9xlA3YYzo&feature=share http://www.algolist.net/Algorithms/Graph/Undirected/Depth-rst_search