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

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

© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos IF672 - Algoritmos e Estruturas de Dados CIn - UFPE ©

Apresentações semelhantes


Apresentação em tema: "© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos IF672 - Algoritmos e Estruturas de Dados CIn - UFPE ©"— Transcrição da apresentação:

1 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos IF672 - Algoritmos e Estruturas de Dados CIn - UFPE © Copyright 2008 Algoritmos e Estruturas de Dados - Todos os direitos reservados Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo Arrais de Souza Murilo Raphael de Souza Lira Rafael Alberto Gomes Pereira Lima Rafael Brandão Lobo Rafael Loureiro de Carvalho Tiago Carneiro Pessoa Canto Vinicius Miranda Cesar if672.ufpe@gmail.com

2 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos Escolhendo um vértice inicial, é possível visitar os vértices seguindo uma determinada ordem. 0 1 2 3 4 Vértices já visitados A cada iteração, escolhemos uma aresta que parte de um vértice já visitado. 2 Aresta escolhida

3 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos A cada passo, os vértices são divididos em três grupos: 0 1 2 3 4 5 6 Vértices já escolhidos Vértices candidatos Vértices não visitados 7 3 5 6

4 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos Quando uma aresta é escolhida, os vértices podem mudar de grupo: 0 1 2 3 4 5 6 Vértices já escolhidos Vértices candidatos Vértices não visitados 7

5 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos Utilizando as arestas escolhidas na ordem da busca, é possível montar uma árvore de busca: 2 4 0 3 1 6 5 Início 0 0 0 2 4 1 3 5 1 1 2 2 6 3 3 4 4 5 5 6 6

6 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos As buscas mais comuns são: Busca em Profundidade (Depth-First Search) Escolhe arestas que partem do vértice mais recente Busca em Largura (Breadth-First Search) Escolhe arestas que partem do vértice mais antigo Buscas Gulosas (Greedy Search) Escolhe arestas com menor custo, menor caminho,...

7 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade Nesse algoritmo a busca inicia a partir de um nó raiz e percorre cada caminho de forma a ir o mais longe possível antes de passar para outro caminho. O caminho percorrido por esta busca forma uma árvore profunda. Pode ser implementada com recursão (pilha).

8 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha

9 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F A Pilha

10 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A

11 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A E

12 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A E D

13 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A E D G

14 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A E D G F

15 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A E D G

16 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A E D

17 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A E D C

18 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A E D

19 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A E

20 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha B A

21 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha A

22 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade A B C D G E F Pilha

23 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade Caminho percorrido A B C D G E F

24 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Profundidade void dfs(int inicio) { dfsRec(inicio); } void dfsRec(int v) { if (mark[v]) return; mark[v] = true; NoLista temp = adj[v].inicio; while (temp != null) { dfsRec(temp.vertice); temp = temp.next; } } Chamada recursiva para o vértice inicial Se o vértice já foi visitado, retorna Marca o vértice como visitado Lista de adjacências é percorrida Busca recursiva no vizinho Visita o próximo vizinho

25 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura Outra forma de percorrer um grafo é através da busca em largura (também chamada de busca por nível). Esse tipo de busca visita primeiro todos os nós próximos da raiz da busca antes de visitar os mais distantes. A árvore gerada pelo caminho percorrido é uma árvore larga (pouco profunda, mas com muitos filhos por nó). Pode ser implementada com ajuda de uma fila.

26 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura A B C D G E F Fila

27 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura A B C D G E F A Fila

28 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura A B C D G E F BC Fila

29 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura A B C D G E F CE Fila

30 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura A B C D G E F ED Fila

31 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura A B C D G E F D Fila

32 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura A B C D G E F FG Fila

33 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura A B C D G E F G Fila

34 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura A B C D G E F Fila

35 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura Caminho percorrido A B C D G E F

36 © Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Largura void bfs(int inicio) { fila.inserir(inicio); mark[inicio] = true; while (!fila.vazia()) { int v = fila.remover(); NoLista temp = adj[v].inicio; while (temp != null) { int w = temp.vertice; if (!mark[w]) { fila.inserir(w); mark[w] = true; } temp = temp.next; } } }


Carregar ppt "© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos IF672 - Algoritmos e Estruturas de Dados CIn - UFPE ©"

Apresentações semelhantes


Anúncios Google