© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca Gulosa em Grafos IF672 - Algoritmos e Estruturas de Dados CIn - UFPE 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
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca Gulosa A cada passo, é escolhida uma aresta segundo algum critério de prioridade (aresta com menor custo, menor caminho, etc) analisando um histórico das operações realizadas até então. Por exemplo: sabendo o custo do caminho necessário para atingir o nó atual a partir de um nó inicial, escolher a aresta que irá proporcionar o menor caminho do nó atual para o próximo nó (Algoritmo de Dijkstra).
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra Algoritmo capaz de descobrir o menor caminho existente entre um nó de origem e um nó de destino. É um algoritmo completo (caso exista o menor caminho entre os nós de origem e destino, o algoritmo sempre* encontra o menor caminho), ótimo (não há nenhum caminho menor do que o encontrado) e eficiente. * O algoritmo de Dijkstra não é capaz de lidar com arestas de peso negativo. Applet
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra AB CD Fila de Prioridades 0 ∞ ∞ ∞ Qual é o menor caminho entre A e D? Comentários (cor) - Nó ainda não visitado: azul - Nó que está sendo visitado no momento: vermelho - Nó visitado: preto
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra AB CD Fila de Prioridades (A-A,0) 0 ∞ ∞ ∞ Comentários - Inserir o caso base no heap. - Altera o menor caminho conhecido para A. Qual é o menor caminho entre A e D?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra AB CD Fila de Prioridades 0 ∞ ∞ ∞ Comentários - Por enquanto que a fila não estiver vazia, remove o melhor (raiz) elemento da fila de prioridades. Obs.: Melhor é a aresta (X-Y,z) cujo valor z é o menor do heap. Qual é o menor caminho entre A e D?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra AB CD Fila de Prioridades (A-B,0+5), (A-D,0+11), (A-C,0+5) 0 ∞> 0+5=5 ∞> 0+11=11 Comentários - Percorre a lista de incidência do nó que estou visitando no momento. - Para cada nó verificar se ele não foi visitado (marcado) E custo> custo(origem)+custo(aresta). Qual é o menor caminho entre A e D?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra AB CD Fila de Prioridades (A-D,0+11), (A-C,0+5) Comentários - Remove a melhor aresta da fila de prioridades. Qual é o menor caminho entre A e D?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra AB CD Fila de Prioridades (A-C,0+5), (B-D,5+5) >5+5=10 Comentários -Percorre a lista de incidência do nó que estou visitando agora. - Para cada nó verificar se ele não foi visitado (marcado) E custo> custo(origem)+custo(aresta). Qual é o menor caminho entre A e D?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra AB CD Fila de Prioridades (B-D,5+5) Comentários - Remove a melhor aresta do heap. Qual é o menor caminho entre A e D?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra AB CD Fila de Prioridades (C-D,5+4) >5+4=9 Comentários -Percorre a lista de incidência do nó que estou visitando no momento. -Para cada nó verificar se ele não foi visitado (marcado) E custo> custo(origem)+custo(aresta). Qual é o menor caminho entre A e D?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra AB CD Fila de Prioridades Comentários - Remove a melhor aresta da fila de prioridades. Qual é o menor caminho entre A e D?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra AB CD Fila de Prioridades Comentários - O heap está vazio. Fim do while. Qual é o menor caminho entre A e D?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Dijkstra Inserir caso base na fila de prioridades (heap); Por enquanto que a fila de prioridades não estiver vazia; Remover a "melhor" aresta da fila de prioridades (heap); Se o nó destino desta aresta não tiver sido visitado; Marcar o nó destino como visitado; Percorrer a lista de incidência deste nó; Se o nó destino das arestas presentes na lista de incidência não tiver sido visitado E o menor caminho conhecido até então maior do que o caminho atual; Atualizar o menor caminho conhecido para o nó destino em questão; Se o nó destino já estiver no heap Atualizar a aresta em questão na fila de prioridades (heap). Senão Inserir a aresta em questão na fila de prioridades (heap).
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST MCST: Minimal Cost Spanning Tree. Algoritmo capaz de descobrir a árvore geradora de peso mínimo (AGPM). É um algoritmo completo, ótimo e eficiente. Que arestas eu posso apagar de um grafo sem gerar componentes desconexo de forma que a soma das arestas restantes seja a menor possível.
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST AB CD Fila de Prioridades 0 ∞ ∞ ∞ Qual é a AGPM do grafo abaixo? Comentários (cor) - Nó ainda não visitado: azul - Nó que está sendo visitado no momento: vermelho - Nó visitado: preto
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST AB CD Fila de Prioridades (A-A,0) 0 ∞ ∞ ∞ Comentários - Inserir o caso base na fila de prioridades. Qual é a AGPM do grafo abaixo?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST AB CD Fila de Prioridades 0 ∞ ∞ ∞ Comentários - Remover a melhor aresta do heap. Qual é a AGPM do grafo abaixo?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST AB CD Fila de Prioridades (A-B,5), (A-C,5), (A-D,11) 0 ∞> 5 ∞> 11 Comentários - Percorrer a lista de incidência do nó que está sendo visitado no momento verificando se o nó não foi visitado e custo> custo(aresta). Qual é a AGPM do grafo abaixo?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST AB CD Fila de Prioridades (A-C,5), (A-D,11) Comentários - Remover a melhor aresta do heap. Qual é a AGPM do grafo abaixo?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST AB CD Fila de Prioridades (A-C,5), (B-D,5) >5 Comentários - Percorrer a lista de incidência do nó que está sendo visitado no momento verificando se o nó não foi visitado e custo> custo(aresta). Qual é a AGPM do grafo abaixo?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST AB CD Fila de Prioridades (B-D,5) Comentários - Remover a melhor aresta do heap. Qual é a AGPM do grafo abaixo?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST AB CD Fila de Prioridades (C-D,4) >4 Comentários - Percorrer a lista de incidência do nó que está sendo visitado no momento verificando se o nó não foi visitado e custo> custo(aresta). Qual é a AGPM do grafo abaixo?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST Fila de Prioridades Comentários - Remover a melhor aresta do heap. AB CD Qual é a AGPM do grafo abaixo?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST AB CD Fila de Prioridades Comentários - A fila de prioridades está vazia. - Fim do algoritmo. Qual é a AGPM do grafo abaixo?
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados MCST Inserir caso base na fila de prioridades (heap); Por enquanto que a fila de prioridades não estiver vazia; Remover a "melhor" aresta da fila de prioridades (heap); Se o nó destino desta aresta não tiver sido visitado; Marcar o nó destino como visitado; Percorrer a lista de incidência deste nó; Se o nó destino das arestas presentes na lista de incidência não tiver sido visitado E a menor aresta conhecida até então for maior do que a aresta atual; Atualizar a menor aresta conhecida para o nó destino em questão; Se o nó destino já estiver no heap Atualizar a aresta em questão na fila de prioridades (heap). Senão Inserir a aresta em questão na fila de prioridades (heap).
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Heap Para que o custo dos algoritmos de Dijkstra e Prim (MCST) seja O((|E|+|V|)log|V|), deve-se usar um heap. Heap é uma estrutura de prioridades, na forma de árvore binária semi-completa, que representa uma ordem parcial entre os elementos do conjunto. As operações que você deverá usar são: Inserção; Remoção; Atualização.
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Inserção no Heap A inserção é feita na última posição do heap. Deve-se manter a propriedade do heap, ou seja, trocar o elemento inserido pelo pai se este for menor (em heaps mínimos) ou se este for maior (em heaps máximos). A inserção é bottom-up. Custo = O(log n), onde n é o número de elementos no heap.
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Remoção no Heap A remoção é feita na primeira posição do heap. Coloca-se o último elemento na raiz. Deve-se manter a propriedade do heap, por isso, fazemos o heapfy na raiz. A remoção é top-down. Custo = O(log n), onde n é o número de elementos no heap.
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Atualização no Heap Heap não é um estrutura de acesso de dados. Por isso, deve-se manter um vetor para se ter um acesso direto. Após a atualização deve-se manter a propriedade do heap, ou seja, trocar o elemento atualizado pelo pai se este for menor (em heaps mínimos) ou se este for maior (em heaps máximos). A atualização é bottom-up. Cuidado na atualização do vetor de acesso direto. Custo = O(log n), onde n é o número de elementos no heap.
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Inserção no Heap Vetor para simular acesso direto Heap
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Inserção no Heap Vetor para simular acesso direto Heap
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Inserção no Heap Vetor para simular acesso direto Heap
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Inserção no Heap Vetor para simular acesso direto Heap
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Atualização no Heap Vetor para simular acesso direto Heap
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Atualização no Heap Vetor para simular acesso direto Heap
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Atualização no Heap Vetor para simular acesso direto Heap
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Remoção no Heap Vetor para simular acesso direto Heap
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Remoção no Heap Vetor para simular acesso direto Heap
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Remoção no Heap Vetor para simular acesso direto Heap
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Relembrando : Remoção no Heap Vetor para simular acesso direto Heap