Anda di halaman 1dari 6

11/12/2008 5:12 PM

1
1
Estruturas de Dados
Grafos IV:
Busca em Profundidade
Prof. Ricardo J. G. B. Campello
Parte deste material baseado em adaptaes e extenses de slides
disponveis em http://ww3.datastructures.net (Goodrich & Tamassia).
2
Organizao
Definio e Motivao
Algoritmo DFS
Exemplo de Execuo DFS
Pseudo-cdigo
Anlise de Complexidade
Propriedades do Percurso DFS
Busca por Ciclos via DFS
11/12/2008 5:12 PM
2
3
Busca em Profundidade
Busca em Profundidade (DFS)
uma estratgia geral de
percurso em grafos
DFS em um grafo G:
Descobre o componente
conexo de G que contm o
vrtice de incio da busca
logo, se G conexo ou no
Visita todos os vrtices e
arestas de G conexo
Para percorrer todo um grafo
no conexo, DFS deve ser
executada mltiplas vezes,
sempre a partir de um vrtice
no visitado nas anteriores
DFS pode ser estendida para
resolver outros problemas em
grafos:
Encontrar um caminho entre
um dado par de vrtices, caso
exista
Encontrar um ciclo simples,
caso exista
Encontrar uma rvore
geradora de G conexo
Encontrar uma ordenao
topolgica em um digrafo
acclico, caso exista
4
Busca em Profundidade
Alternativamente, pode-se
marcar apenas os vrtices,
como no descobertos,
descobertos e explorados
vide pseudo-cdigo
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)
As demais so de retorno:
levam a vrtices antecessores
no parentesco de descobrimento
D B
A
C
E
11/12/2008 5:12 PM
3
5
Exemplo
D B
A
C
E
D B
A
C
E
aresta de descoberta
aresta de retorno
vrtice descoberto
vrtice no descoberto
arestas no processadas
vrtice explorado
D B
A
C
E
D B
A
C
E
6
Exemplo (cont.)
D B
A
C
E D B
A
C
E
D B
A
C
E
D B
A
C
E
11/12/2008 5:12 PM
4
7
Exemplo (cont.)
D B
A
C
E
D B
A
C
E
D B
A
C
E
D B
A
C
E
D B
A
C
E
8
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 (no y.label = EXPLORADO )
process_edge(e)
v.label EXPLORADO
Assume-se que inicialmente os vrtices de G so
rotulados como no descobertos.
Algoritmo DFS
Garante que cada aresta no
ser processada duas vezes.
Em particular, cada aresta
(v,y) s ser processada se y
tiver sido descoberto, mas
ainda no explorado, ou
seja:
- Na 2 avaliao desta aresta
ou
- Quando ciclo encontrado
Tempo O(n+m): lista de adjacncias ou estrutura alternativa
11/12/2008 5:12 PM
5
9
Propriedades
Propriedade 1:
DFS(G,v) explora todos os vrtices e arestas de um componente
conexo de v:
Por construo, todos os vrtices adjacentes a um vrtice explorado e as
arestas correspondentes sero necessariamente explorados. Se o vrtice
(aresta) est na parte conexa do grafo, ento necessariamente adjacente
(incidente) a um vrtice explorado ou a um vrtice adjacente a um vrtice
explorado, ou assim por diante, e portanto ser necessariamente explorado.
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.
D B
A
C
E
10
Busca por Ciclos
Vimos que cada aresta (v,y) s processada:
Na 2 avaliao desta aresta, ou
Quando ciclo encontrado (aresta de retorno)
Isso sugere a seguinte especializao de DFS para buscar ciclos:
Algoritmo DFS_Cycle(G, v)
v.label DESCOBERTO
para todo e incidentEdges(G, v)
y opposite(G, v, e)
se y.label = NO-DESCOBERTO
y.parent v
DFS(G, y)
seno
se ( no y = v.parent )
// Ciclo encontrado !
retorne v // Percorrer relaes de parentesco deste at o v original !!
D B
A
C
E
1
2
3
4 5
1 5 0
5 4 3 2 1 0
parent
11/12/2008 5:12 PM
6
11
Exerccios
1. 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:
2. Elabore outros grafos e repita o Exerccio 1 para exercitar a
busca DFS.
3. 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.
X U
V
W
Z
Y
a
c
b
e
d
f
g
h
12
Bibliografia
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, 2
nd
Edition, 2001.
S. Skiena e M. Revilla, Programming Challenges: The
Programming Contest Training Manual, Springer-Verlag, 2003.

Anda mungkin juga menyukai