Escolar Documentos
Profissional Documentos
Cultura Documentos
Grafos IV:
Busca em Profundidade
Ricardo J. G. B. Campello
Parte deste material baseado em adaptaes e extenses de slides disponveis em http://ww3.datastructures.net (Goodrich & Tamassia).
Exemplo de Execuo DFS Propriedades do Percurso DFS Busca por Ciclos via DFS
Busca em Profundidade
Busca em Profundidade (DFS) uma estratgia geral de caminhamento em grafos DFS em um grafo G:
Visita todos os vrtices e arestas de G
Algoritmos & Estruturas de Dados II
Busca em Profundidade
Um algoritmo do tipo DFS usa marcadores para direcionar o percurso (caminhamento) A forma mais geral marcar ambos vrtices e arestas As arestas so marcadas como de descoberta ou retorno
Arestas de descoberta levam a vrtices no descobertos
so tambm chamadas arestas de rvore (tree edges) B A
Para percorrer todo um grafo no conexo, DFS deve ser executada mltiplas vezes, sempre a partir de um vrtice no visitado nas anteriores
As demais so de retorno:
levam a vrtices antecessores no parentesco de descobrimento C
Algoritmo DFS
Algoritmo DFS(G, v) v.label DESCOBERTO process_vertex(v) para todo e incidentEdges(G, v) y opposite(G, v, e) se y.label = NO-DESCOBERTO y.parent v DFS(G, y) seno se ( y.label = EXPLORADO ) process_edge(e) v.label EXPLORADO
Assume-se que inicialmente os vrtices de G so rotulados como no descobertos.
Exemplo
vrtice no descoberto vrtice descoberto vrtice explorado arestas no processadas aresta de descoberta aresta de retorno
A B C D E
B C A B C A B C
Exemplo (cont.)
A B C
Algoritmos & Estruturas de Dados II
A D E B C D E
A B C D E B
A D C
8
Exemplo (cont.)
B A B C B
Algoritmos & Estruturas de Dados II
A D C E
Propriedades
Propriedade 1:
B C
E A D C E
Algoritmos & Estruturas de Dados II
A A B C C
9
Propriedade 2:
As arestas de descoberta de DFS(G,v) formam uma rvore geradora do componente conexo de v:
Uma aresta nunca considerada como de descoberta se conecta dois vrtices j descobertos, portanto um ciclo nunca formado com esse tipo de aresta.
10
E B D E
B C
A parent D C
3 4
E
2
0 0
0 1 2
5
3 4
1
5
11
12
V
a b d c
Exerccios
1.
X
h e g f
Referncias
M. T. Goodrich and R. Tamassia, Data Structures and Algorithms in C++/Java, John Wiley & Sons, 2002/2005. N. Ziviani, Projeto de Algoritmos, Thomson, 2a. Edio, 2004. T. H. Cormen, C. E. Leiserson, and R. L. Rivest, Introduction to Algorithms, MIT Press, 2nd Edition, 2001.
Algoritmos & Estruturas de Dados II
Ilustre graficamente, conforme o exemplo dado em aula, as execues passo a passo do algoritmo DFS com incio em cada um dos vrtices do grafo acima. Nota: Destaque, em cada execuo, quais as arestas de cruzamento, as arestas de retorno, a rvore geradora resultante e a relao (vetor) de parentesco entre os vrtices: Elabore outros grafos e repita o Exerccio 1 para exercitar a busca DFS. Explique porque a complexidade O(n+m) do tempo de execuo de DFS no vlida para grafos implementados com estrutura de dados matriz de adjacncias. Analise a complexidade nesse caso. Reescreva o pseudo-cdigo da busca DFS de forma no recursiva. Utilize uma pilha para eliminar a recursividade.
2. 3.
S. Skiena e M. Revilla, Programming Challenges: The Programming Contest Training Manual, Springer-Verlag, 2003.
4.
13
14