Teoria dos Grafos Aula 8

Documentos relacionados
Teoria dos Grafos Aula 8

Teoria dos Grafos Aula 9

Teoria dos Grafos Aula 7

Otimização em Grafos

Algoritmo de Dijkstra Estudo e Implementação

Teoria dos Grafos Aula 9

Edsger Wybe Dijkstra

INF 1010 Estruturas de Dados Avançadas

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Listas de Prioridade. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC.

Teoria dos Grafos Aula 6

Aula 28: Listas de Prioridades

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

Filas de Prioridades Letícia Rodrigues Bueno

Teoria dos Grafos Aula 11

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

Árvores de Suporte de Custo Mínimo

INF 1010 Estruturas de Dados Avançadas

Otimização em Grafos

Teoria dos Grafos Aula 22

Algoritmos em Grafos: Caminho Mínimo

Caminho mais curto e o algoritmo de Dijkstra

Heapsort Letícia Rodrigues Bueno

Teoria dos Grafos Aula 24

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes

Tecnicas Essencias Greedy e Dynamic

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Departamento de Matemática Aplicada

Lista de Prioridades. Estrutura de Dados II Prof. Erinaldo

GRAFOS Aula 06 Algoritmo de Caminho Mínimo: Dijkstra Max Pereira

Árvores Auto-ajustadas

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

Grafos Caminhos mais Curtos

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 11: Introdução aos Grafos

Algoritmos em Grafos

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

Ordenação de Dados (III) HeapSort

Teoria dos Grafos Aula 17

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

INF1010 Lista de Exercícios 2

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

Algoritmos e Estruturas de Dados 2006/2007

Teoria dos Grafos. Caminho mínimo - Algoritmo de Dijskstra

AED2 - Aula 22 Busca em largura, cálculo de distâncias

Caminho mais curto. 1 - Caminho não pesado

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

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

= comprimento (distância, valor) da aresta orientada do vértice i ao vértice j,, e:

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

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

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

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

Filas de Prioridade & Heaps

Análise de algoritmos

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 25

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

Teoria dos Grafos Aula 5

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

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

1 Distância em Grafos

Árvores B. Definição: Seja t a ordem da árvore B. Uma árvore B de ordem t é uma árvore ordenada que é vazia, ou que satisfaz as seguintes condições:

Sub-grafo. Árvore Geradora Mínima

CIC 111 Análise e Projeto de Algoritmos II

Teoria dos Grafos Aula 7

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

Análise de algoritmos

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

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

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

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

Busca em vetores. Para encontrar um elemento em um vetor desordenado é caro Porém, inserir ou remover é barato.

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

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

Prof. Marco Antonio M. Carvalho

Oalgoritmo de Dijkstra

06 Grafos: Caminhos Mínimos SCC0503 Algoritmos e Estruturas de Dados II

MATEMÁTICA DISCRETA PARA ENGENHARIA DE COMPUTAÇÃO

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

Teoria dos Grafos AULA

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.

ESTRUTURA DE DADOS CIÊNCIA E TECNOLOGIA DO RIO. Curso de Tecnologia em Sistemas para Internet

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

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

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

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

Caminhos mínimos de única origem

Algoritmos e Estrutura de dados II. Fila de Prioridade e Heaps

QUESTÕES DE PROVAS ANTIGAS

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina

Projeto e Análise de Algoritmos

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford. O problema tem subestrutura óptima

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

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

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

Teoria dos Grafos. Edson Prestes

5COP096 TeoriadaComputação

BCC204 - Teoria dos Grafos

Teoria dos Grafos. Edson Prestes

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

CES-11. Algoritmos e Estruturas de Dados. Representação. A estrutura heap. Heap é uma árvore binária com duas propriedades:

Transcrição:

Teoria dos Grafos Aula 8 Aula passada Grafos com pesos, caminhos e distâncias Ideia e implementação de alg. de Dijkstra Aula de hoje Corretude de Dijkstra Fila de prioridades e Heap Dijkstra eficiente Dijkstra o próprio (documentário)

Algoritmo de Dijkstra Ideias: Manter dois conjuntos de vértices (explorados e não-explorados) Manter comprimento do menor caminho conhecido até o momento para cada vértice Adicionar o vértice de menor caminho (explorar) Atualizar distâncias Como tornar a ideia em algoritmo?

Algoritmo de Dijkstra 1.Dijkstra(G, s) 2.Para cada vértice v 3. dist[v] = infinito 4.Define conjunto S = 0 // vazio 5.dist[s] = 0 6.Enquanto S!= V 7. Selecione u em V-S, tal que dist[u] é mínima 8. Adicione u em S 9. Para cada vizinho v de u faça 10. Se dist[v] > dist[u] + w((u,v)) então 11. dist[v] = dist[u] + w((u,v)) Como o algoritmo executa?

Executando o Algoritmo a 1 b 4 2 e 4 2 d 2 3 c 1 2 f 2 3 g Manter tabela com passos e distâncias Passo Conjunto S d(a) d(b) d(c) d(d) d(e) d(f) d(g) 0 {} 0 inf inf inf inf inf inf 1 {a} 1 inf 4 2 inf inf 2 {a,b} 5 3 2 inf inf 3 {a,b,e} 5 3 5 inf 4 {a,b,e,d} 4 5 inf 5 {a,b,e,d,c} 5 6 6 {a,b,e,d,c,f} 6 7 {a,b,e,d,c,f,g}

Analisando o Algoritmo Provar que algoritmo sempre produz resultado correto caminho mínimo entre dois vértices Teorema: Considere um vértice u pertencente ao conjunto S em qualquer ponto do algoritmo. Temos que dist[u] é a distância entre s e u.

Prova Prova por indução no tamanho de S Caso base: S = 1 S = {s}, dist[s] = 0, devido inicialização Hipótese: S = k Para S = k, assuma que dist[u] é igual a distância entre s e u Caso geral: S = k + 1 k+1 adiciona v à S, dando origem a P v seja (u,v) última aresta no caminho P v Pela hipótese, P u é caminho mínimo s-u

Prova Considere outro caminho s-v, P, que não passa por u Precisamos provar que P é maior (ou igual) a P v P passa pela aresta (x,y), com x em S e y fora de S (para algum x e y qualquer) Situação: s S u x y v No passo k+1, algoritmo escolhe v para adicionar a S (e não y) Então, caminho s y é maior ou igual a P v Como dist(y,v) >=0, caminho P será maior ou igual a P v Logo, P v é caminho mínimo e dist[v] será distância até v

Complexidade Qual é a complexidade do algoritmo? 1.Dijkstra(G, s) 2.Para cada vértice v 3. dist[v] = infinito 4.Define conjunto S = 0 // vazio 5.dist[s] = 0 6.Enquanto S!= V 7. Selecione u em V-S, tal que dist[u] é mínima 8. Adicione u em S 9. Para cada vizinho v de u faça 10. Se dist[v] > dist[u] + w((u,v)) então 11. dist[v] = dist[u] + w((u,v)) Depende do tempo para selecionar u tal que dist[u] seja mínima!

Algoritmo simples Complexidade Percorre vértices e encontra dist[u] mínimo Complexidade? O(n 2 ) Outra ideia? Fila de prioridades muito usada em grafos! Chave: distâncias Extrair o mínimo (vértice com menor distância) Atualizar chaves (distâncias)

Fila de Prioridade Estrutura de dados poderosa (priority queue) Mantém um conjunto de elementos S Cada elemento possui uma chave (número de prioridade) Permite inserir, remover e modificar elementos de S através de sua chave Complexidade de pior caso para remoção, inserção e modificação: O(log n) caso médio para algumas operações pode ser O(1), dependendo da implementação

Heap Heap: Implementação de fila de prioridade Estrutura de dados em forma de árvore Armazena conjunto de elementos, todos associados a uma chave Chave dos elementos define árvore Heap order 1) Min-heap: chave(u) <= chave(v), quando u é pai de v (usado para remover menor chave primeiro) 2) Max-heap: chave(u) >= chave(v), quando u é pai de v (usado para remover maior chave primeiro)

Heap Binário Heap Binário: árvore binária cheia fácil implementação Operações básicas adicionar, remover, atualizar chave Não serve para fazer busca (não está ordenada) 9 7 8 10 12 15 Max-heap ou Min-heap? Saindo da raiz, como chegar na chave 12?

Inserção e Remoção Inserção 1) adicionar elemento na última posição da árvore 2) trocar posição com pai até garantir heap-order (subir) Remoção 1) remover raiz e mover último elemento para raiz 2) trocar de posição com menor filho até garantir heap-order (descer) Exemplos Adicionar chave 5 Remover raiz 9 7 8 10 12 15 Atualização Chave pode mudar de valor Subir ou descer, de acordo

Complexidade Usando um heap quantas operações? 1.Dijkstra(G, s) 2.Para cada vértice v 3. dist[v] = infinito 4.Define conjunto S = 0 // vazio 5.dist[s] = 0 6.Enquanto S!= V 7. Selecione u em V-S, tal que dist[u] é mínima 8. Adicione u em S 9. Para cada vizinho v de u faça 10. Se dist[v] > dist[u] + w((u,v)) então 11. dist[v] = dist[u] + w((u,v)) Cada operação no heap: O(log n) n operações de remoção m operações de atualização Complexidade: O((n+m)log n) = O(m log n)

Dijkstra, o Próprio Edsger Wybe Dijkstra Renomado professor e pesquisador em Computação Recebeu Turing Award 1972 mais renomado prêmio da Computação Contribuições fundamentais em ling. de programação e verificação formal Algoritmo de Dijkstra utilizado em vários sistemas (redes, GPS, etc) Documentário: Discipline in Thought 11/5/1930 6/8/2002