Algoritmo de Dijkstra Estudo e Implementação

Documentos relacionados
Teoria dos Grafos Aula 8

Algoritmo da IFT 2 / 16. Algoritmo da IFT Estrutura da fila de prioridade Resolvendo empates. Algoritmo 1 Algoritmo geral da IFT

Otimização em Grafos

Filas de Prioridades Letícia Rodrigues Bueno

Algoritmos em Grafos: Caminho Mínimo

Algoritmo de Dijkstra Wikipédia, a enciclopédia livre

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Árvores de Suporte de Custo Mínimo

INF 1010 Estruturas de Dados Avançadas

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma

Teoria dos Grafos Aula 6

Projeto e Análise de Algoritmos. Método Guloso

Grafos: componentes fortemente conexos, árvores geradoras mínimas

PROJETO E ANÁLISE DE ALGORITMOS (INF 2926)

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

INF1010 Lista de Exercícios 2

Lista de Prioridades. Estrutura de Dados II Prof. Erinaldo

Estrutura de Dados. Plano de Ensino. Vilson Heck Junior. Campus Lages. Instituto Federal de Santa Catarina

Grafos Caminhos mais Curtos

Grafos: árvores geradoras mínimas. Graça Nunes

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Busca em Largura. Adaptado de Humberto C. B. Oliveira

GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes

Algoritmos em Grafos COM11087-Tópicos Especiais em Programação I

Teoria dos Grafos Aula 7

ESTRUTURAS DE DADOS. prof. Alexandre César Muniz de Oliveira. 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8.

Projeto e Análise de Algoritmos

Distâncias Mínimas. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Distâncias Mínimas 2014/ / 27

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

Melhores momentos AULA 14

Estruturas de Dados. Filas em que a prioridade de remoção não é cronológica. Maior prioridade não é do elemento que ingressou primeiro

Demonstração. Relação invariante chave. Implementações do algoritmo de Prim. Implementação grosseira

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

QUESTÕES DE PROVAS ANTIGAS

Teoria dos Grafos Aula 5

Otimização em Grafos

GRAFOS Aula 05 Algoritmos de percurso: busca em largura e profundidade Max Pereira

3. Conteúdo de um vértice v é conteúdo dos filhos de v.

Grafos: Busca. Algoritmos e Estruturas de Dados 2. Graça Nunes

TGR BCC Representação Computacional de Grafos. Prof. Ricardo José Pfitscher

ICET CURSO: Ciência da Computação e Sistemas de Informação (Estrutura de Dados) Estudos Disciplinares Campus: Data: / / Nome:

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford

Caminho Mínimo de Fonte Única em Grafos sem Pesos Negativos

Aula 28: Listas de Prioridades

Filas de Prioridade & Heaps

Teoria dos Grafos Aula 24

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

Teoria dos Grafos Aula 3

Algoritmo Floyd-Warshall. Problema dos caminhos mínimos entre todos os pares. Programação dinâmica

Grafos parte 2. Percorrendo um grafo. Correção. Eficiência. Percorrendo um Grafo. Percorrendo um Grafo. Percorrendo um Grafo

Árvores Vermelho-Preto

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

AULA 13 PROJETO E ANÁLISE DE ALGORITMOS. Problema do caminho mais curto de uma única origem em grafos Karina Valdivia Delgado

Algoritmos em Grafos

Grafos: caminhos mínimos em Listas de Adjacência. Profa. Graça Nunes

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 1 8: Figura 1 9: Figura 1 10:

Transcrição:

Teoria dos Grafos 0/0 Algoritmo de Dijkstra Estudo e Implementação Professora: Claudia Boeres Alunos: José Alexandre Macedo Maycon Maia Vitali

Problema do Caminho Mínimo Qual o caminho mínimo entre um vértice e os demais de um grafo?

Problema do Caminho Mínimo Aplicações Calculo de rotas

Problema do Caminho Mínimo Aplicações Algoritmos de roteamento (Vetor de Distâncias)

Problema do Caminho Mínimo Aplicações Pré computação para heurísticas do Caixeiro Viajante

Solução mais simples... O algoritmo de busca em largura (BFS) calcula o caminho mínimo entre os vértices de grafos não valorados 0 0

Algoritmo de Dijkstra Encontra o caminho mínimo de origem única Características Funciona para grafos ponderados Apenas para arestas com peso positivo Os grafos podem conter ciclo

Algoritmo de Dijkstra Relembrando o algoritmo...

Algoritmo de Dijkstra Estruturas necessárias

Algoritmo de Dijkstra

Algoritmo de Dijkstra Vértice inicial Função de peso Remove vértice com distância mínima do conjunto Q

0

0

0 {,,,,, }

0 {,,,,, }

0 {,,,, }

0 {,,,, } {}

0 {,,,, } {}

0 {,,,, } {}

0 {,,,, } {}

0 {,,,, } {}

0 {,,,, } {}

0 {,,,, } {}

0 {,,,, } {}

0 {,,,, } {}

0 {,,, } {}

0 {,,, } {, }

0 {,,, } {, }

0 {,,, } {, }

0 9 {,,, } {, }

0 9 {,,, } {, }

0 9 {,,, } {, }

0 9 {,,, } {, }

0 9 {,,, } {, }

0 9 {,,, } {, }

{,,, } {, } 0 9

{,,, } {, } 0 9

{,,, } {, } 0 9

{,, } {, } 0 9

{,, } {,, } 0 9

{,, } {,, } 0 9

{,, } {,, } 0 9

{,, } {,, } 0 9

{,, } {,, } 0 9

{,, } {,, } 0 9

{, } {,, } 0 9

{, } {,,, } 0 9

{, } {,,, } 0 9

{, } {,,, } 0 9

{, } {,,, } 0 9

{, } {,,, } 0 9

{, } {,,, } 0 9

{, } {,,, } 0 9

{} {,,, } 0 9

{} {,,,, } 0 9

{} {,,,, } 0 9

{} {,,,, } 0 9

{} {,,,, } 0 9

{} {,,,, } 0 9

{} {,,,, } 0 9

{} {,,,, } 0 9

0 9 {} {,,,,, }

0 9 {} {,,,,, }

FIM! 0 9 {} {,,,,, }

Implementação Estruturas de dados considerada Lista de adjacência com pesos nos nós v0 v v v v v v0 v v v0 v v Algoritmo implementado utilizando heaps

Hã?! heap!? Características dos heaps (árvores especiais): Se B é filho de A, então valor(b) > valor(a) Implementações de fila de prioridade Heaps mais comuns heap binário: STL priority_queue do C++ heap binomial heap de fibonacci: implementado no trabalho

Heap Binário Implementações de min-heap ou max-heap Implementado pela STL priority_queue do C++ Complexidade: Inserção O(log n) Remoção do mínimo O(log n)

Heap de Fibonacci Composto por várias árvores enraizadas Cada nó x possui como apontadores: p[x] para seu pai child[x] para qualquer um de seus filhos left[x] e right[x] para seus irmão Fila circular duplamente encadeada No nós raiz, left[x] e right[x] apontam para os nós raízes vizinhos. min[h] aponta para o valor mínimo do heap

Exemplo de Heap de Fibonacci

Exemplo de Heap de Fibonacci

Heap de Fibonacci: Inserção

Heap de Fibonacci: Inserção Inserir um elemento no heap = O(?)

Heap de Fibonacci: Inserção Inserir um elemento no heap = O()

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo

Heap de Fibonacci: Extrair Mínimo O(log n)

Implementação: Complexidade Estruturas de Dados Consideradas Tipo de grafos Heap Binário Vetor Estático Heap de Fibonacci INSERÇÃO O(log n) O() O() REMOVE-MIN O(log n) O(n) O(log n) Grafo Genérico Grafo Denso e v(v-)/ = O(v²) Grafo Esparso e v- = O(v) Heap Binário O((v + e) log v) O(v² log v) O(v log v) Vetor Estático O(v²) O(v²) O(v²) Heap de Fibonacci O(e + v log v) O(v² + v log v) = O(v²) O(v + v log v) = O(v log v)

Implementação Linguagem C++ Bateria de Testes Grafos Denso Esparso Completo Número de vértices variando entre 0 e 000 (de 0 em 0 com um total de 00 amostras)

Esparso (, Mb) Testes

Testes Esparso (, Mb) Denso (,9 Gb)

Testes Esparso (, Mb) Denso (,9 Gb) Completo (, Gb)

Testes Esparso (, Mb) Denso (,9 Gb) Completo (, Gb) ~9Gb de Grafos!!

Resultados (Grafos Esparso)

Resultados (Grafos Denso)

Resultados (Grafos Completo)

Conclusão Qual a melhor estrutura?