Fred Freitas - [email protected] Engenharia de Conhecimento Fred Freitas CIn - UFPE.
[email protected] Busca em Grafos Katia S. Guimarães [email protected].
Transcript of [email protected] Busca em Grafos Katia S. Guimarães [email protected].
![Page 2: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/2.jpg)
Busca em Grafos
OBJETIVO: 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: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/3.jpg)
Busca em Árvores Enraizadas
1. Busca em pré-ordem
Raiz visitada antes dos descendentes
A B C E F D
![Page 4: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/4.jpg)
Busca em Árvores Enraizadas
2. Busca em pós-ordem
Raiz visitada depois dos descendentes
B E F C D A
![Page 5: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/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: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/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: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/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: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/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: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/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
5
1
4
6
![Page 10: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/10.jpg)
Busca em Grafos com Ciclos
Exemplo: A partir do grafo abaixo obtemos
3 7
2
5
1
4
6 1
6 4
2
3
7 5
![Page 11: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/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: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/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: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/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: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/14.jpg)
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: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/15.jpg)
Algoritmo para Busca em Profundidade
Procedimento P(v)Marque v como visitado;Para toda aresta (v, w) incidente a v faça:
Se w não marcado então /* aresta de árvore */ { Inclua w em Q;
P(w) Remova w de Q }
senão se w pai(v) então /* aresta de retorno */ senão /* aresta de árvore */
![Page 16: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/16.jpg)
Busca em Profundidade
A busca em profundidade biparticiona o conjunto de arestas em:
3 7
2
5
1
4
6
- Arestasde Árvore
- Arestas de Retorno
1
6 4
2
3
7 5
![Page 17: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/17.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 18: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/18.jpg)
Busca em Largura
Cria um centro no vértice inicial e forma “níveis” ou “camadas” a partir deste nó.
3 7
2
5
1
4
61
6 4 5
2 3
7
![Page 19: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/19.jpg)
Busca em Largura
Applet para Busca em Largura
![Page 20: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/20.jpg)
Algoritmo para Busca em Largura
Tome um vértice qualquer v. Coloque v na fila F.
Enquanto F não for vazia façav 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 21: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/21.jpg)
Busca em Largura
A busca em largura biparticiona as arestas do grafo em arestas de árvore e arestas de cruzamento.
3 7
2
5
1
4
6
1
6 4 5
2 3
7
![Page 22: Katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br.](https://reader031.fdocuments.net/reader031/viewer/2022020713/552fc142497959413d8df763/html5/thumbnails/22.jpg)
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