Beruflich Dokumente
Kultur Dokumente
Busca em Largura
Prof. Humberto Brando humberto@unifal-mg.edu.br aula disponvel no site: http://www.dcc.ufmg.br/~humberto/
Universidade Federal de Alfenas Departamento de Cincias Exatas verso da aula: 0.1
Um dos algoritmos mais simples da rea; Serve de base para vrios outros algoritmos:
Base para Caminho mais curto (Dijkstra);
Utilizado para calcular rotas de custo mnimo em um par de localidades em um mapa, por exemplo;
Busca em largura
O algoritmo da Busca em Largura calcula a distncia (menor nmero de arestas) desde o vrtice s (raiz) at todos os vrtices acessveis; Ele tambm produz uma rvore Primeiro na Extenso, com raiz em s, que contm todos os vrtices acessveis;
Busca em largura
Para cada vrtice v acessvel a partir de s, o caminho na rvore primeiro na extenso de s at v corresponde a um caminho mais curto de s at v, ou seja, um caminho que contm um nmero mnimo de arestas; Observao: Esta informao no possvel ser obtida na busca em profundidade: d(s,t)=2 na rvore gerada pela DFS 4.
Busca em largura
Assim como a Busca em Profundidade (DFS), o algoritmo da Busca em Largura (BFS) funciona sobre grafos orientados e tambm no orientados;
Busca em largura
A busca em largura recebe esse nome porque expande a fronteira entre vrtices descobertos e no descobertos uniformemente ao longo da extenso da fronteira; Isto , o algoritmo g descobre todos os vrtices distncia k a partir de s, antes de descobrir quaisquer vrtices distncia k+1; (ponto chave) Comparativo com o movimento da gua;
Busca em largura
O controle do descobrimento dos ns na busca em largura feito de forma semelhante ao controle utilizado na busca em profundidade anteriormente apresentada:
N branco = No visitado/no conhecido; N cinza = N conhecido/no visitado; Seus adjacentes no foram inseridos na fila; N preto = N conhecido/N visitado; Todos os seus adjacentes foram inseridos na fila;
Busca em largura
Um vrtice descoberto na primeira vez em que encontrado; Neste momento ele se torna no branco; branco Assim como na DFS, DFS os vrtices de cor cinza e preta distinguem os vrtices j localizados em duas categorias; categorias Vrtices de cor cinza podem ter alguns vrtices adjacentes brancos; Eles representam a fronteira entre vrtices descobertos e no descobertos;
Busca em largura
A Busca em largura constri uma rvore primeiro na extenso, contendo inicialmente apenas sua raiz; extenso Sempre que um vrtice v descoberto no curso da varredura da lista de adjacncias de um vrtice u j descoberto, o vrtice v e a aresta (u,v) so adicionados rvore; rvore Neste caso, dizemos que u predecessor ou pai de v na rvore primeiro na extenso;
Busca em largura
Como um vrtice descoberto no mximo uma vez, vez este possui apenas um pai; pai Conceito de Ancestral: Se u est no caminho na rvore a partir da raiz s at o vrtice v, ento u ancestral de v, e v um descendente de u. Tudo depende do n escolhido para raiz; As vezes prefixado, como em algumas aplicaes da rea de redes;
Busca em largura
Segundo Cormen Cormen, a Busca em Largura (BFS BFS) pressupe que o grafo G=(V,A) representado por uma lista de adjacncia; Vimos no TP1 que com o uso de interfaces este detalhe pode ser ocultado para os programadores;
Busca em largura
Assim como na DFS, a BFS faz uso de algumas estruturas auxiliares durante a pesquisa: cor[u]; //indicativo de atingibilidade; [u]; [ ] //indica //i di o vrtice ti predecessor d de d u(pai); ( i) d[u]; //indica a distncia desde a origem d(s,u) - em arestas; Q; //indica a fila (FIFO) ponto chave do algoritmo.
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ] [u ] NULL
12 13 14 15 16 17 18 para cada v Adj[u ] se cor[v] = BRANCO cor[v] CINZA d [v] = d [u ] + 1 [v ] u ENFILEIRA(Q, v) cor[u ] PRETO
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
recebe como parmetro o [u ] NULLgrafo 13 G(V,A) e um vrtice para iniciar a busca O procedimento BFS 12
14 15 16 17 18
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
9 ENFILEIRA(Q, s )
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
[u ] NULL
12 13 14 15 16 17 18
para cada v Adj[u ] se cor [v]do = grafo, BRANCO Para cada vrtice
diferente do vrtice inicial cor [v ] CINZA s, faa...
[u ] NULL
12 13
Indica que eles esto 15 descobertos (ainda no conhecidos) BRANCOS
14 16 17 18
d [v] = d [u ] + 1 [v ] u
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ] [u ] NULL 12 13 para cada v Adj[u ] se cor[v] = BRANCO
Raiz s at cada vrtice
Busca em Largura
BFS (G, s ) 2 3 4 cor[u ] BRANCO d [u ] [u ] NULL 1 para cada vrtice u V [G ] { s} 10 enquanto !vazia(Q) predecessor/pai; 11 12 13 14 15 16 17 18 u DESENFILEIRA(Q) para cada v Adj[u ] se cor[v] = BRANCO cor[v] CINZA d [v] = d [u ] + 1
Indica que cada vrtice ainda no tem
14Indica que acor [v ] CINZA distncia da 15infinita (a princpio) d [v] = d [u ] + 1 16 [v ] u 17 18 ENFILEIRA(Q, v) cor[u ] PRETO
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
Busca em Largura
BFS (G, s ) 1 para cada vrtice u Vdistncia( [G ] {ss, }s) = 10 enquanto !vazia(Q) 0 2 cor[u ] BRANCO bvio! 11 u DESENFILEIRA(Q) 3 4 d [u ]
[u ] NULL
12 13
[u ] NULL
12 13 14 15 16 17 18
partida s Cinza... O
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ] [u ] NULL 12 13 14 para cada v Adj[u ] se cor[v] = BRANCO cor[v] CINZA
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ] [u ] NULL
Uma estrutura auxiliar de 12 para cada fila iniciada como vazia;
13 14 15 16 17 18
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
17 18
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
[u ] NULL
12 13 14 15 16 17 18
[u ] NULL
12 13 14 15 16 17 18
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
[u ] NULL
12 13 14 15 16 17 18
para cada v Adj[u ] se cor[v] = BRANCO cor[v] CINZA d [v] = d [u ] + 1 [v ] u ENFILEIRA(Q, v) cor[u ] PRETO
[u ] NULL
12 13 14 15 16 17 18
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
12 13 14 15 16 17 18
para cada v Adj[u ] se cor[v] = BRANCO cor[v] CINZA d [v] = d [u ] + 1 [v ] u ENFILEIRA(Q, v) cor[u ] PRETO
[u ] NULL
Colora-o de CINZA...
12 13 14 15 16 17 18
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
[u ] NULL
12 13 14 15 16 17 18
para cada v Adj[u ] se cor[v] = BRANCO cor[v] CINZA d [v] = d [u ] + 1 [v ] u ENFILEIRA(Q, v) cor[u ] PRETO
[u ] NULL
12 13 14 15 16 17 18
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ]
[u ] NULL
explorar seus adjacentes
12 13 14 15 16 17 18
para cada v Adj[u ] se cor[v] = BRANCO cor[v] CINZA d [v] = d [u ] + 1 [v ] u ENFILEIRA(Q, v) cor[u ] PRETO
[u ] NULL
12 13 14 15 16 17 18
adjacentes de u, o vrtice
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
9 ENFILEIRA(Q, s )
Busca em Largura
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) Lembrando que este procedimento se repete 2 cor[ u ] BRANCO 11 u DESENFILEIRA(Q) 3 4 d [u ] [u ] NULL
at que a fila esteja vazia...
Busca em Largura
12 13 14 15 16 17 18
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
Incio da BFS. Apenas o vrtice s conhecido (cinza). O mesmo inserido na fila (FIFO).
Busca em Largura
Busca em Largura
O vrtice s marcado como preto: todos seus vizinhos so conhecidos... Diferente da DFS.
2
Os vrtices r e w so adicionados na rvore primeiro na extenso, e tambm as arestas (s,r) e (s,w) Retira s da fila, e comea parte para seus adjacentes...
1
Os vrtices adjacentes a s so marcados como cinzas, e tambm indicado a distncia at a raiz.
Adjacentes de s so enfileirados...
Busca em Largura
Busca em Largura
Busca em Largura
Busca em Largura
Busca em Largura
Busca em Largura
Busca em Largura
Busca em Largura
rvore gerada na busca
Busca em largura
Anlise de complexidade
BFS (G, s ) 1 para cada vrtice u V [G ] {s} 10 enquanto !vazia(Q) 2 cor[u ] BRANCO 11 u DESENFILEIRA(Q) 3 d [u ] 12 para cada v Adj[u ]
Busca em largura
Anlise de complexidade
Obviamente que a complexidade da busca em largura depende diretamente da representao do grafo 10 enquanto !vazia(Q ) utilizada;
11 12 13 14 15 16 17 18 u DESENFILEIRA(Q) para cada v Adj p j[u ] se cor[v] = BRANCO cor[v] CINZA d [v] = d [u ] + 1
13 14 15 16 17 18
[v] u
ENFILEIRA(Q, v) cor[u ] PRETO
[v ] u
ENFILEIRA(Q, v) cor[u ] PRETO
Exerccios
Qual o tempo de execuo da BFS se o grafo for representado por uma matriz de adjacncias? Mostre os valores dos vetores e d resultantes da BFS(G u), para o grafo G a seguir: BFS(G,u)
Prova
1 Prova:
Sexta-feira; 19/09/2008.
Reposio de aula:
Quinta-feira; 18/09/2008; 11h; Aula tira dvidas; Prdio S. Sala a definir.
Busca em Largura
Estes slides esto disponveis no endereo: http://www.dcc.ufmg.br/~humberto/ Bibliografia recomendada para esta aula:
Algoritmos Teoria e Prtica, Traduo da 2 edio. Thomas H. Cormen, Charles E E. Leiserson Leiserson, Ronald L L. Rivest Rivest, Clifford Stein. Stein 2002, 2002 936 pp. pp Editora Campus/Elsevier, ISBN 8535209263. Observao: Existem erros de digitao no algoritmo da busca em largura da 2 edio. Leia como .