Vous êtes sur la page 1sur 8

11/12/2008 10:42 AM

Estruturas de Dados
Grafos III:
Busca em Largura
Prof. Ricardo J. G. B. Campello
Parte deste material baseado em adaptaes e extenses de slides
disponveis em http://ww3.datastructures.net (Goodrich & Tamassia).

Organizao
Definio 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


2

11/12/2008 10:42 AM

Busca em Largura
Busca em Largura (BFS) uma
estratgia geral de percurso em
grafos

BFS pode ser estendida para


resolver outros problemas em
grafos:

BFS em um grafo G:



Descobre o componente conexo


de G que contm o vrtice de
partida da busca

Encontrar um caminho entre


um dado par de vrtices,

com a menor quantidade de


arestas, caso exista

 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

Encontrar um ciclo simples,


caso exista
Encontrar uma rvore
geradora de G conexo

Busca em Largura
Um algoritmo do tipo BFS usa
marcadores para direcionar o
percurso (caminhamento)
A forma mais geral marcar
ambos vrtices e arestas

Alternativamente, pode-se
marcar apenas os vrtices,
como no descobertos,
descobertos e explorados


vide pseudo-cdigo

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

Exemplo de Execuo
vrtice no descoberto
vrtice descoberto
vrtice explorado
aresta inexplorada
aresta de descoberta
aresta de cruzamento

1
5
4

2
3

1
5

6
4

6
4

2
3
5

Exemplo de Execuo (cont.)


1
5

1
6

1
5

2
3

1
6

2
3

6
4

2
3
6

11/12/2008 10:42 AM

Exemplo de Execuo (cont.)


1
5

1
6

parent
5

6
4

3
7

Algoritmo BFS
Algoritmo BFS(G, v)
Q nova fila vazia
enqueue(Q, v)
v.label DESCOBERTO
enquanto ( no empty(Q) )
v dequeue(Q)
process_vertex(v)
v.label EXPLORADO
para todo e incidentEdges(G, v)
y opposite(G, v, e)
se y.label = NO-DESCOBERTO
enqueue(Q, y)
y.label DESCOBERTO
y.parent v
se ( no y.label = EXPLORADO )
process_edge(e)

Garante que cada aresta


ser processada apenas uma
vez, no duas (uma para
cada vrtice adjacente).

Assume-se que inicialmente os vrtices de


G so rotulados como no-descobertos.

11/12/2008 10:42 AM

Propriedades
Notao:

Gv: componente conexo que contm v.


5

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.

3
9

Caminhos
Mnimos

1
5

A propriedade 3 garante que a


sucesso de descobertas produz
caminhos com no. mnimo de
arestas da origem v at s v .

3
parent

0 0 1 6 5 1 1

Nota: Caminhos no so nicos.

Idia de Algoritmo Recursivo:




Caminho mnimo entre o vrtice v


de incio da busca e um vrtice s
qualquer dado por:
caminho mnimo entre v e o
antecessor (pai) de s na
sucesso de descobertas

caminho entre seu


antecessor e s via aresta
incidente aos dois
10

11/12/2008 10:42 AM

Ciclos
Como as arestas de descoberta
formam uma rvore geradora,
qualquer aresta de cruzamento
fecha um ciclo.

2
5

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.

1
2

Exemplo:


aresta (4,6)

Antecessor comum: vrtice 2

4
6

3
7
11

Anlise
A 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 o


respectivo 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) executam


em 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

Exerccios
1.

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 pseudocdigo BFS para tal.

13

Exerccios
2.

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

d
h

g
5

3.

Elabore outros grafos e repita o Exerccio 3 para exercitar a busca BFS.

14

11/12/2008 10:42 AM

Exerccios
4. 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

1
2

x
x

x
x

x
x

x
x

...

x
x

x
x

x
x

x
x
x

x
x

x
16

x
x

15

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, 2nd Edition, 2001.
S. Skiena e M. Revilla, Programming Challenges: The
Programming Contest Training Manual, Springer-Verlag, 2003.

16

Vous aimerez peut-être aussi