1 busca em grafos katia s. guimarães [email protected]
TRANSCRIPT
![Page 2: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/2.jpg)
Busca em GrafosOBJETIVO: Visitar todos os vértices e arestas do
grafo de forma sistemática, para evitar repetições e conseqüente desperdício.
Se o grafo é uma árvore enraizada, isto é, uma árvore na qual os vértices obedecem a uma hierarquia, a tarefa é simples.
![Page 3: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/3.jpg)
Busca em Árvores Enraizadas1. Busca em pré-
ordem
Raiz visitada antes dos descendentes
A B C E F D
![Page 4: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/4.jpg)
Busca em Árvores Enraizadas2. Busca em pós-
ordem
Raiz visitada depois dos descendentes B E F C D A
![Page 5: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/5.jpg)
Busca em Árvores Enraizadas
3. Busca em in-ordem Raiz é visitada entre os descendentes
Só faz sentido para árvores binárias ou similares (2-3, B, etc.)
(Applet)
![Page 6: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/6.jpg)
Algoritmo Pré-ordem
Algoritmo Pré-ordem(raiz) Se raiz não nula então Visite (raiz)
Pré-ordem (left.raiz)Pré-ordem (right.raiz)
![Page 7: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/7.jpg)
Algoritmo Pós-ordem
Algoritmo Pós-ordem(raiz) Se raiz não nula então
Pós-ordem (left.raiz)Pós-ordem (right.raiz)Visite (raiz)
![Page 8: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/8.jpg)
Algoritmo In-ordem
Algoritmo In-ordem(raiz) Se raiz não nula então In-ordem (left.raiz)
Visite (raiz)In-ordem (right.raiz)
![Page 9: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/9.jpg)
Busca em Grafos com Ciclos Se o grafo contém ciclos, é preciso
cuidar para evitar que arestas sejam visitadas mais de uma vez.
3 7
2
51
4
6
![Page 10: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/10.jpg)
Busca em Grafos com CiclosExemplo: A partir do grafo abaixo obtemos
3 7
2
51
4
6 1
6 4
2
3
7 5
![Page 11: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/11.jpg)
Busca em Grafos com Ciclos Se o grafo não é uma árvore, nós
definimos um subgrafo dele que é uma árvore, para servir de “espinha dorsal”.
Algoritmo básico:– Tome um vértice qualquer s. Marque s. – Enquanto houver arestas não visitadas,
tome uma aresta (v, w) incidente a algum vértice já marcado. Marque (v, w) (explorada) e v, w (visitados).
![Page 12: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/12.jpg)
Busca em Grafos com Ciclos
Há duas técnicas principais para busca:
– Busca em Profundidade Tomar a aresta não marcada incidente ao vértice visitado mais recentemente.
– Busca em Largura Tomar a aresta não marcada incidente ao vértice visitado menos recentemente.
![Page 13: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/13.jpg)
Busca em Profundidade JAVA Applet para uma Busca em Profundidade
JAVA Applet para Busca em grafo direcionado com pilha
![Page 14: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/14.jpg)
14
Controle para Busca em Profundidade
Main Procedure Inicialize pilha Q como vazia; Desmarque todos os vértices e arestas; Tome um vértice v qualquer; Inclua v em Q; P(v); Remova v de Q.
![Page 15: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/15.jpg)
Algoritmo para Busca em Profundidade
Procedimento P(v)Marque v como visitado (cinza);Para toda aresta (v, w) incidente a v faça:
Se w não marcado então /* aresta de árvore */ {d[w] time;
time++; pred[w] v; P(w)
fim[w] time; time++}
senão se w pai(v) então /* aresta de retorno */
senão /* aresta de árvore */
![Page 16: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/16.jpg)
16
Árvore de Busca em Profundidade
A busca em profundidade biparticiona o conjunto de arestas em:
3 7
2
51
4
6
- Arestasde Árvore
- Arestas de Retorno
1
6 4
2
3
7 5
![Page 17: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/17.jpg)
17
Teorema 23.6 (Teorema dos parênteses)
Em qualquer busca em profundidade de um grafo (direcionado ou não direcionado) G = (V, E), para quaisquer dois vértices u e v, exatamente uma das três condições vale:
- Os intervalos [d[u],f[u]] e [d[v], f[v]] são disjuntos,
- O intervalo [d[u],f[u]] está contido no intervalo [d[v],f[v]], e u é um descendente de v na árvore de busca em profundidade, ou
- Vice-versa.
![Page 18: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/18.jpg)
18
Corolário 23.7
(Nesting dos intervalos dos descendentes) Vértice v é um descendente próprio do
vértice u na floresta de busca em profundidade de um grafo G sse d[u] < d[v] < f[v] < f[u].
![Page 19: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/19.jpg)
Variações de Busca em Profundidade
O algoritmo de Busca em Profundidadeé usado como controle para muitas aplicações em tempo linear.Ex. Componentes Biconexos (Tolerância a falhas em redes)
Ex: No grafo ao lado, os seguintes subgrafos gerados permanecem conexos se cair um link qualquer:
G{1, 6} G{3, 7} G{1, 2, 3, 4, 5}
1
6 4
2
3
7 5
![Page 20: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/20.jpg)
20
Busca em Largura Cria um centro no vértice inicial e forma
“níveis” ou “camadas” a partir deste nó.
3 7
2
51
4
61
6 4 5
2 3
7
![Page 21: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/21.jpg)
6
21
Vértices Brancos, Cinza e Pretos - Brancos – Valor inicial - Cinza – Após serem descobertos - Pretos – Após a descoberta de todos os adjacentes.
1
6 4 5
2 3
7
1
6 4 5
2 3
7
4 5
2 3
7
1s ss
6
![Page 22: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/22.jpg)
22
Busca em Largura
Applet para Busca em Largura
![Page 23: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/23.jpg)
23
Algoritmo para Busca em Largura
Tome um vértice qualquer v. Coloque v na fila F. Enquanto F não for vazia faça
v Primeiro elemento da fila FPara toda aresta (v, w) incidente a v faça
Se w não marcado então Inclua w em F /* aresta de árvore
*/ senão se v = pai (w) então /* aresta de árvore */ senão /* aresta de cruzamento */
![Page 24: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/24.jpg)
24
Ao término de Busca em Largura A busca em largura biparticiona as
arestas do grafo em arestas de árvore e arestas de cruzamento.
3 7
2
51
4
6
1
6 4 5
2 3
7
![Page 25: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/25.jpg)
25
Correção de Busca em Largura (BL) Teorema 23.4 (Correção de BL)
Seja G = (V, E) um grafo direcionado ou não direcionado, e suponha que o algoritmo BL é executado em G a partir de um dado vértive s V. Então, durante a sua execução, BL descobre todo vértice v V alcançável a partir do nó fonte s, e ao término,
d[v] = distância (s, v) para todo v V ...
![Page 26: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/26.jpg)
26
Busca em Largura vs. Distâncias
Teorema 23.4 (Correção de Busca em Largura) ...... Além disso, para qualquer vértice v <> s
alcançável a partir de s, um dos menores caminhos de compr. mínimo de s a v é o caminho de s a pred(v) seguido pela aresta (pred(v), v).
![Page 27: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/27.jpg)
27
Variações de Busca em Largura
O algoritmo de Busca em Largura também é largamente usado como controle para aplicações em tempo linear.
Ex. Broadcast de mensagens em uma rede
![Page 28: 1 Busca em Grafos Katia S. Guimarães katiag@cin.ufpe.br](https://reader036.vdocuments.pub/reader036/viewer/2022081512/570638401a28abb8238f12f3/html5/thumbnails/28.jpg)
28
Referência Bibliográfica
Leiam o Capítulo 23 do livro de Cormen, Leiserson, Rivest (Págs. 465 a 497).
Não esqueçam os problemas.