DFS

download DFS

of 18

Transcript of DFS

BSQUEDA DE PROFUNDIDAD (DFS)

Roberto Carlos Martnez Moreno Algoritmos Computacionales Dra. Satu Elisa Schaeffer Verano 2011 http://roberto-mtz.blogspot.com

RECORRIDOS DE GRAFOSHay 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. Vrticep r o f u d i d a d

Arista

DFS; DEPTH-FIST SEARCH1La bsqueda en profundidad o DFS Visita todos los vrtices de una ramicacin de un grafo, antes de continuar con el siguiente. Recorre cualquier vrtice muy profundo o lejano del origen antes que otros cercanos. Se puede implementar recursivamente.

2 3 5 6 7 8 4

11 12 10

13 14

15 16 9

DFS; DEPTH-FIST SEARCH1

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

DFS; DEPTH-FIST SEARCHCuando ya no hay nodos que visitar en el camino que hemos recorrido, entonces regresa (Backtracking), volviendo atrs, volviendo al vertice mas proximo que no ha terminado de explorar. Si se hace una visita antes de la recursin, es preorden, despus es postorden.1 2 3 5 6 7 8 9 4 10 11 12 15 16 13 14

ALGORITMO1. 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.

EJEMPLO1 2 3 6 7 8 9 4 10 11 12 15 13 14 5 16

EJEMPLOC G I

M

O

EJEMPLOC

Si llamamos inicial mente a C, lo marcamos como visitado, sus prximos son G, I, O

G

I

M

O

EJEMPLODespues 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

M

O

EJEMPLOC

Ahora marcamos como visitado a M, que es el siguiente, su prximo es G.

G

I

M

O

EJEMPLOComo 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 GyCC G I

M

O

EJEMPLOSus 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 visitadoC G I

O

EJEMPLOEntonces termina la recursin y termina el recorrido por DFSC G I

M

O

ANLISIS ASINTTICOSuponiendo 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)

APLICACIONESSoluciones 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

REFERENCIAShttp://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