A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Busca em Grafos Katia S. Guimarães

Apresentações semelhantes


Apresentação em tema: "Busca em Grafos Katia S. Guimarães"— Transcrição da apresentação:

1 katia@cin.ufpe.br1 Busca em Grafos Katia S. Guimarães katia@cin.ufpe.br

2 2 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.

3 katia@cin.ufpe.br3 Busca em Árvores Enraizadas 1.Busca em pré-ordem Raiz visitada antes dos descendentes A B C E F D

4 katia@cin.ufpe.br4 Busca em Árvores Enraizadas 2. Busca em pós-ordem Raiz visitada depois dos descendentes B E F C D A

5 katia@cin.ufpe.br5 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)

6 katia@cin.ufpe.br6 Algoritmo Pré-ordem Algoritmo Pré-ordem(raiz) Se raiz não nula então Visite (raiz) Pré-ordem (left.raiz) Pré-ordem (right.raiz)

7 katia@cin.ufpe.br7 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)

8 katia@cin.ufpe.br8 Algoritmo In-ordem Algoritmo In-ordem(raiz) Se raiz não nula então In-ordem (left.raiz) Visite (raiz) In-ordem (right.raiz)

9 katia@cin.ufpe.br9 Busca em Grafos com Ciclos Se o grafo contém ciclos, é preciso cuidar para evitar que arestas sejam visitadas mais de uma vez. 37 2 5 1 4 6

10 katia@cin.ufpe.br10 Busca em Grafos com Ciclos Exemplo: A partir do grafo abaixo obtemos 37 2 5 1 4 6 1 6 4 2 3 75

11 katia@cin.ufpe.br11 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).

12 katia@cin.ufpe.br12 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.

13 katia@cin.ufpe.br13 Busca em Profundidade JAVA Applet para uma Busca em Profundidade JAVA Applet para Busca em grafo direcionado com pilha

14 katia@cin.ufpe.br14 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.

15 katia@cin.ufpe.br15 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 */

16 katia@cin.ufpe.br16 Busca em Profundidade A busca em profundidade biparticiona o conjunto de arestas em: 37 2 5 1 4 6 - Arestas de Árvore - Arestas de Retorno 1 6 4 2 3 75

17 katia@cin.ufpe.br17 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 75

18 katia@cin.ufpe.br18 Busca em Largura Cria um centro no vértice inicial e forma “níveis” ou “camadas” a partir deste nó. 37 2 5 1 4 6 1 6 45 23 7

19 katia@cin.ufpe.br19 Busca em Largura Applet para Busca em Largura

20 katia@cin.ufpe.br20 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 F Para 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 */

21 katia@cin.ufpe.br21 Busca em Largura A busca em largura biparticiona as arestas do grafo em arestas de árvore e arestas de cruzamento. 37 2 5 1 4 6 1 6 45 23 7

22 katia@cin.ufpe.br22 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


Carregar ppt "Busca em Grafos Katia S. Guimarães"

Apresentações semelhantes


Anúncios Google