aula35. grafos iii busca em largura
DESCRIPTION
Aulas de grafosTRANSCRIPT
-
11/12/2008 10:42 AM
1
1
Estruturas de Dados
Grafos III:Busca em Largura
Prof. Ricardo J. G. B. Campello
Parte deste material baseado em adaptaes e extenses de slidesdisponveis em http://ww3.datastructures.net (Goodrich & Tamassia).
2
OrganizaoDefinio e Motivao
Algoritmo BFS Exemplo de Execuo BFS
Pseudo-cdigo
Propriedades do Percurso BFS
Algumas Aplicaes de BFS Caminhos com nmero mnimo de arestas
Busca de ciclos
Anlise de Complexidade do Algoritmo BFS
-
11/12/2008 10:42 AM
2
3
Busca em LarguraBusca em Largura (BFS) uma estratgia geral de percurso em grafos
BFS em um grafo G: Descobre o componente conexo
de G que contm o vrtice de partida da busca
logo, se G conexo ou no
Visita todos os vrtices e arestas de G se este for conexo
Para percorrer todo um grafo no conexo, BFS deve ser executada mltiplas vezes, sempre a partir de um vrtice no visitado nas anteriores
BFS pode ser estendida para resolver outros problemas em grafos:
Encontrar um caminho entre um dado par de vrtices, com a menor quantidade de arestas, caso exista
Encontrar um ciclo simples, caso exista
Encontrar uma rvore geradora de G conexo
4
Busca em LarguraAlternativamente, pode-se marcar apenas os vrtices, como no descobertos, descobertos e explorados
vide pseudo-cdigo
CB
A
E
D
F
Um algoritmo do tipo BFS usa marcadores para direcionar o percurso (caminhamento)
A forma mais geral marcar ambos vrtices e arestas
As arestas so marcadas como de descoberta ou cruzamento
Arestas de descoberta levam a vrtices no descobertos
so tambm chamadas arestas de rvore (tree edges)
Arestas de cruzamento so as demais arestas
-
11/12/2008 10:42 AM
3
5
Exemplo de Execuo
65
1
4
2
aresta de descobertaaresta de cruzamento
vrtice descobertovrtice no descoberto
aresta inexplorada
3
65
1
4
2
3
65
1
4
2
3
vrtice explorado
6
65
1
4
2
3
65
1
4
2
3
65
1
4
2
3
65
1
4
2
3
Exemplo de Execuo (cont.)
-
11/12/2008 10:42 AM
4
7
65
1
4
2
3
65
1
4
2
3
Exemplo de Execuo (cont.)
65
1
4
2
3
0 0 1 6 5 1 1
0 1 2 3 4 5 6
parent
8
Algoritmo BFS(G, v)Q nova fila vaziaenqueue(Q, v)v.label DESCOBERTOenquanto ( no empty(Q) )
v dequeue(Q)process_vertex(v)v.label EXPLORADOpara todo e incidentEdges(G, v)
y opposite(G, v, e)se y.label = NO-DESCOBERTO
enqueue(Q, y)y.label DESCOBERTOy.parent v
se ( no y.label = EXPLORADO )process_edge(e)
Assume-se que inicialmente os vrtices de G so rotulados como no-descobertos.
Algoritmo BFSGarante que cada arestaser processada apenas umavez, no duas (uma paracada vrtice adjacente).
-
11/12/2008 10:42 AM
5
9
PropriedadesNotao:
Gv: componente conexo que contm v.
Propriedade 1:
BFS(G, v) explora todos os vrtices e arestas de Gv.
Propriedade 2:
As arestas de descoberta formam uma rvore geradora de Gv.
Propriedade 3:
Qualquer vrtice s v a um no. mnimo de i arestas de v ser descoberto por um vrtice a um no. mnimo de i 1 arestas de v.
65
1
4
2
3
65
1
4
2
3
10
Caminhos Mnimos
A propriedade 3 garante que a sucesso de descobertas produz caminhos com no. mnimo de arestas da origem v at s v .Nota: Caminhos no so nicos.
11561006543210
parent
65
1
4
2
3
Idia de Algoritmo Recursivo:
Caminho mnimo entre o vrtice vde incio da busca e um vrtice squalquer dado por:
caminho entre seu antecessor e s via aresta
incidente aos dois
caminho mnimo entre v e o antecessor (pai) de s na sucesso de descobertas
+
-
11/12/2008 10:42 AM
6
11
CiclosComo as arestas de descoberta formam uma rvore geradora, qualquer aresta de cruzamento fecha um ciclo.
O ciclo dado pela aresta de cruzamento em questo mais os caminhos mais curtos a partir do ltimo antecessor comum dos seus vrtices adjacentes no parentesco de descobertas.
Exemplo:
aresta (4,6)
Antecessor comum: vrtice 2
45
2
6
3
7
1
45
2
6
3
7
1
AnliseA rotulao de um vrtice leva tempo O(1). Cada um dos n vrtices rotulado trs vezes:
NO DESCOBERTO DESCOBERTO EXPLORADO O(n).Inserir ou remover um vrtice da fila leva tempo O(1). Cada vrtice inserido e removido uma vez da fila Q O(n).
Para cada vrtice, cada uma de suas arestas incidentes e orespectivo vrtice adjacente verificado:
Para um vrtice v tem-se que isso leva tempo O(deg(v))*. Logo, lembrando que vG deg(v) = 2m, tem-se O(m) no total.
Portanto, assumindo que process_vertex(v) e process_edge(v) executamem tempo O(1), tem-se que BFS executa em tempo O(n+m).
* PS. Esse tempo vlido para as implementaes de grafos em lista de adjacncias e estrutura alternativa.
-
11/12/2008 10:42 AM
7
13
Exerccios1. O teorema das quatro cores declara que qualquer mapa
planar pode ser colorido utilizando apenas quatro cores sem que qualquer regio seja colorida com a mesma cor de uma regio vizinha. Aps permanecer aberto como uma conjectura por mais de 100 anos, esse teorema foi provado em 1976 com a ajuda de um computador. Um problema mais simples que este determinar se um grafo qualquer que seja no direcionado, simples e conexo pode ser bicolorido, isto , ter seus vrtices pintados com duas cores sem que vrtices adjacentes sejam pintados com uma mesma cor. Explique como resolver esse problema com BFS e modifique o pseudo-cdigo BFS para tal.
14
Exerccios2. Ilustre graficamente, conforme o exemplo dado em aula, as execues
passo a passo do algoritmo BFS com incio em cada um dos vrtices do grafo abaixo. Nota: Destaque, em cada execuo, quais as arestas de cruzamento, as arestas de descoberta, a rvore geradora resultante e a relao (vetor) de parentesco entre os vrtices:
3. Elabore outros grafos e repita o Exerccio 3 para exercitar a busca BFS.
1 2
3
4
5
6
a
b
c
d
eg
fh
-
11/12/2008 10:42 AM
8
15
Exerccios4. Considere que a matriz abaixo represente as conexes areas bilaterais existentes (x) ou
no (em branco) entre um dado conjunto de 16 cidades. Aplique BFS para descobrir as rotas com o menor nmero de conexes ligando a cidade 1 s demais cidades e apresente as 15 rotas. Dica: Visualize o grafo como um grid 4 x 4, sendo a cidade 1 na posio (1,1), a cidade 2 na posio (1,2), etc, at a cidade 16 na posio (4,4).
x x x
x x x
x x x
x x x
x x x
x x x x
x x x x x
x x
x x x x x
x x x
x x x x
x x x
x x
x x x
x x
x x
1
2
3
...
16
16
BibliografiaM. 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.
S. Skiena e M. Revilla, Programming Challenges: The Programming Contest Training Manual, Springer-Verlag, 2003.