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

Documentos relacionados
Análise e Síntese de Algoritmos

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

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

Caminhos mínimos de única origem

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

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

Grafos e Algoritmos de Busca

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

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

Análise e Síntese de Algoritmos. Algoritmos em Grafos CLRS, Cap. 22

Otimização em Grafos

Grafos: caminhos mínimos

Análise e Síntese de Algoritmos

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

Análise e Síntese de Algoritmos

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

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

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de todos os pares

O grau de saída d + (v) de um vértice v é o número de arcos que tem

Caminhos mínimos de todos os pares

INSTITUTO FEDERAL DO ESPÍRITO SANTO CURSO BACHARELADO EM SISTEMAS DE INFORMAÇÃO

Problema do Caminho Mínimo

Projeto e Análise de Algoritmos

Grafos Caminhos mais Curtos

Algoritmo de Dijkstra (um para todos ; arestas de peso não negativo ; guloso)

Grafos Parte 2. SCC-603 Algoritmos e Estruturas de Dados II. Profª. Rosane Minghim / Baseado em material de professores dos anos anteriores

Universidade Federal de Alfenas

PAA-DCC-UFAM. Grafos. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

Grafos parte 2* Algoritmos e Estruturas de Dados II SCC-203 Rosane 2010/2011. *Baseado em material de professores dos anos anteriores

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

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

Otimização em Grafos

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

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

Teoria dos Grafos Aula 22

Teoria dos Grafos Aula 5

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

Sub-grafo. Árvore Geradora Mínima

GRAFOS Aula 07 Algoritmos de Caminho Mínimo: Bellman-Ford / Floyd-Warshall Max Pereira

Teoria dos Grafos Aula 24

Algoritmo de Dijkstra em LISP

Algoritmos em Grafos: Caminho Mínimo

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

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

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

INF 1010 Estruturas de Dados Avançadas

Busca em Profundidade e em Largura

CIC 110 Análise e Projeto de Algoritmos I

Algoritmos e Estruturas de Dados

Análise e Síntese de Algoritmos. Caminhos Mais Curtos para Todos os Pares CLRS, Cap. 25

Grafos: algoritmos de busca

Árvores Árvores Geradoras de Custo Mínimo 0/16

Grafos: caminhos (matriz adjacência)

grafo nós vértices arcos arestas

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

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

5COP096 TeoriadaComputação

ESTRUTURAS DISCRETAS (INF 1631) GRAFOS. 1. O que é um grafo? Defina um grafo orientado. Defina um grafo não-orientado.

INF 1010 Estruturas de Dados Avançadas

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

Teoria dos Grafos Aula 6

Problemas de Fluxo em Redes

Busca em Profundidade. Componentes Conexos. Grafos. Maria Adriana Vidigal de Lima. Fevereiro

Teoria dos Grafos Aula 8

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

CAMINHOS, CIRCUITOS, CAMINHOS MÍNIMOS E CONEXIDADE

Algoritmos de Caminho Mínimo Parte 1

Caminho Mínimo de Fonte Única em Grafos com Pesos Negativos Letícia Rodrigues Bueno

Teoria dos Grafos. Árvores

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

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

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

Problema da Árvore Geradora Mínima (The Minimum Spanning Tree Problem-MST)

Grafos Direcionados. > Grafos Direcionados Representações Computacionais 1/36

Estruturas de Dados Grafos

Algoritmos Combinatórios: Backtracking com Bounding

Disciplina: Matemática Discreta Agostinho Iaqchan Ryokiti Homa

Árvores: Conceitos Básicos e Árvore Geradora

Desafios de Programação TCC Turma A-1

Algoritmos em Grafos

Algoritmo de Dijkstra Estudo e Implementação

Fluxo Máximo a Custo Mínimo

Caminho mais curto e o algoritmo de Dijkstra

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

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

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.

Teoria dos Grafos Aula 8

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

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

Algoritmo Aproximado. Prof. Anderson Almeida Ferreira [DPV]9.2 [ZIV]9.2.2 e 9.2.3

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

Conceitos Básicos Isomorfismo de Grafos Subgrafos Passeios em Grafos Conexidade

Algoritmos e Estruturas de Dados. Grafos Semestre de Inverno 13/14

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

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

2 Relação entre soma dos graus e número de arestas

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

Caminho mais curto. 1 - Caminho não pesado

Transcrição:

Caminhos Mínimos Com Uma Fonte 1/74 Caminhos Mínimos Com Uma Fonte Eduardo Camponogara Departamento de Automação e Sistemas Universidade Federal de Santa Catarina DAS-9003: a Algoritmos

Caminhos Mínimos Com Uma Fonte 2/74 Sumário Algoritmo Bellman-Ford Algoritmo de Dijkstra Grafos Acíclicos

Caminhos Mínimos Com Uma Fonte 3/74 Sumário Algoritmo Bellman-Ford Algoritmo de Dijkstra Grafos Acíclicos

Caminhos Mínimos Com Uma Fonte 4/74 Cenário Um motorista deseja encontrar o caminho mais curto da cidade de Florianópolis/SC a Marilha/SP. Dado um mapa das rodovias brasileiras, no qual pares de cidades adjacentes são marcados, como podemos determinar a rota mais curta?

Caminhos Mínimos Com Uma Fonte 5/74 Cenário Um motorista deseja encontrar o caminho mais curto da cidade de Florianópolis/SC a Marilha/SP. Dado um mapa das rodovias brasileiras, no qual pares de cidades adjacentes são marcados, como podemos determinar a rota mais curta? Uma possibilidade consiste em enumerarmos todos os possíveis caminhos de Florianópolis a Marilha. Adicionar as distâncias em cada rota. Selecionar a rota mais curta.

Caminhos Mínimos Com Uma Fonte 6/74 Questão O método é satisfatório?

Caminhos Mínimos Com Uma Fonte 7/74 Desenvolvimentos Veremos como resolver problemas deste tipo de forma eficaz. Em problemas de caminhos mínimos, nos é dado um grafo direcionado G = (V,E) cujas arestas têm pesos. Os pesos são induzidos por uma função w : E R. O peso de um caminho p = (v 0,v 1,...,v k ) é a soma dos pesos das arestas: k 1 w(p) = w(v i,v i+1 ) i=0

Caminhos Mínimos Com Uma Fonte 8/74 Definição Definimos o peso (comprimento) do caminho de menor peso (mais curto) de um vértice u para v como: { min{w(p) : p é caminho de u v} δ(u,v) = + se não existir caminho

Caminhos Mínimos Com Uma Fonte 9/74 No exemplo do problema Florianópolis-Marilha, podemos modelar o mapa como um grafo: os vértices representam as cidades as arestas representam as rodovias, estradas, etc. os pesos das arestas representam as distâncias entre duas cidades

Caminhos Mínimos Com Uma Fonte 10/ 74 Variantes 1. Caminhos mínimos com um destino Encontre o caminho mais curto para um vértice t a partir de cada vértice u V. 2. Caminho mínimo entre um par de vértices Encontre o caminho mais curto de u para v 3. Todos os caminhos mínimos Encontre o caminho mínimo entre cada par u,v V

Caminhos Mínimos Com Uma Fonte 11/ 74 Pesos negativos Pesos negativos Em algumas instâncias do problema de caminhos mínimos com fonte única, podem existir arestas com pesos negativos. Se o grafo G = (V,E) não tiver ciclo com peso negativo alcançável a partir da fonte s, então δ(s,v) permanece bem definido para todo v V, mesmo se o grafo contiver algum ciclo negativo.

Caminhos Mínimos Com Uma Fonte 12/ 74 Pesos negativos Pesos negativos 10 4 1 1 1 2 3 1

Caminhos Mínimos Com Uma Fonte 13/ 74 Pesos negativos Pesos negativos Alguns algoritmos, como o algoritmo de Dijkstra, assumem que todos os pesos são não-negativos. Algoritmos como Bellman-Ford e Floyd-Warshall, entretanto, podem operar com arestas de peso negativo, desde que não existam ciclos de peso negativo. Tipicamente, estes algoritmos detectam a presença de ciclo negativo.

Caminhos Mínimos Com Uma Fonte 14/ 74 Representação Representação Estamos interessados não apenas na distância do caminho mais curto, mas também no caminho em si. A representação do caminho mais curto é similar àquela usada na busca em largura (breadth-first search) Dado um grafo G = (V,E), mantemos para cada vértice v V o seu predecessor π[v] que é outro vértice ou nil. Os algoritmos de caminhos mínimos definem os atributos π de maneira que a cadeia de predecessores originada em v, de trás pra frente, nos dá o caminho mais curto de s para v.

Caminhos Mínimos Com Uma Fonte 15/ 74 Representação Representação O grafo predecessor G π = (V π,e π ) induzido por π, após o término do algoritmo, produz a árvore de caminhos mínimos. G π é definido como segue: V π = {v V : π[v] nil} {s} E π = {(π[v],v) : v V π {s}}

Caminhos Mínimos Com Uma Fonte 16/ 74 Relaxações Relaxações Algoritmos de caminhos mínimos usam a técnica de relaxação, que decresce um limite superior (upper bound) para a distância mínima para cada vértice. Até que o limite superior se torne a própria distância: δ 1 (u) δ 2 (u)... δ k (u) = δ(s,u) Os algoritmos também exploram a propriedade de que o caminho mais curto entre dois vértices também é formado de caminhos mais curtos.

Caminhos Mínimos Com Uma Fonte 17/ 74 Relaxações Relaxações Lema Dado um grafo direcionado com peso nas arestas, G = (V,E), e a função peso nas arestas w : E R. Seja p = (v 1,v 2,...,v k ) um caminho mais curto de v 1 para v k em G. Para quaisquer 1 i < j k, seja p ij = (v i,v i+1,...,v j ) o subcaminho de p de v i para v j. Então, p ij é um caminho mínimo de v i para v j.

Caminhos Mínimos Com Uma Fonte 18/ 74 Relaxações Relaxações Lema Seja dado um grafo direcionado com peso nas arestas, G = (V,E), e a função peso nas arestas w : E R. Seja s um vértice correspondente à fonte. Então, para toda aresta (u,v) E, δ(s,v) δ(s,u)+w(u,v)

Caminhos Mínimos Com Uma Fonte 19/ 74 Relaxações Relaxações Vários algoritmos são baseados na técnica de relaxação. Para cada vértice v V, mantemos um atributo d[v], que é um limite superior (upper bound) no comprimento do caminho mais curto de s para v: d[v] δ(s,v) d[v] é uma estimativa para δ(s,v)

Caminhos Mínimos Com Uma Fonte 20/ 74 Relaxações Relaxações Initialize-Single-Source(G, s) 1) for each v V[G] 2) do d[v] 3) π[v] nil 4) d[s] = 0 Após a inicialização, π[v] = nil para todo v V, d[s] = 0, d[v] = para todo v V {s}.

Caminhos Mínimos Com Uma Fonte 21/ 74 Relaxações Relaxações Relax(u,v) 1) if d[v] > d[u]+w(u,v) 2) then d[v] d[u]+w(u,v) 3) π[v] u O propósito de relaxar uma aresta (u,v) consiste de testar se podemos melhorar a estimativa do caminho mais curto para v encontrado até então, por meio do caminho até u.

Caminhos Mínimos Com Uma Fonte 22/ 74 Relaxações Relaxações 5 u 2 v 9 5 u 2 v 6 Relax(u,v) Relax(u,v) 5 7 5 6

Caminhos Mínimos Com Uma Fonte 23/ 74 Propriedades Propriedades A corretude de algoritmos de caminhos mínimos é baseada em propriedades de caminhos mínimos e das relaxações.

Caminhos Mínimos Com Uma Fonte 24/ 74 Propriedades Desigualdade triangular Lema Para cada aresta (u,v) E, temos δ(s,v) δ(s,u)+w(u,v)

Caminhos Mínimos Com Uma Fonte 25/ 74 Propriedades Limite superior Lema Sempre temos d[v] δ(s,v) para todo vértice v V, e uma vez que d[v] = δ(s,v), a estimativa d[v] não muda.

Caminhos Mínimos Com Uma Fonte 26/ 74 Propriedades Inexistência de caminho Lema Se não existe caminho de s para v, então sempre temos d[v] = δ(s,v) = +

Caminhos Mínimos Com Uma Fonte 27/ 74 Propriedades Convergência Lema Se s u v é um caminho em G para certos vértices u,v V, e se d[u] = δ(s,u) em qualquer momento antes de relaxarmos a aresta (u,v), então após a relaxação da aresta (u,v) temos d[v] = δ(s,v) daí pra frente.

Caminhos Mínimos Com Uma Fonte 28/ 74 Propriedades Propriedade de relaxação de caminho Lema Seja p = (v 0,v 1,...,v k ) um caminho mais curto de s = v 0 para v k e as arestas de p são relaxadas na ordem (v 0,v 1 ), (v 1,v 2 ),..., (v k 1,v k ). Então d[v k ] = δ(s,v k ) Esta propriedade é garantida independentemente de quaisquer passos de relaxação ocorridos, até mesmo se eles são intermediários aos passos de relaxação das arestas em p.

Caminhos Mínimos Com Uma Fonte 29/ 74 Propriedades Subgrafo predecessor Lema Uma vez que d[v] = δ(s,v) para todo v V, o grafo predecessor G π é uma árvore de caminhos mínimos com raiz em s.

Caminhos Mínimos Com Uma Fonte 30/ 74 Algoritmo Bellman-Ford Sumário Algoritmo Bellman-Ford Algoritmo de Dijkstra Grafos Acíclicos

Caminhos Mínimos Com Uma Fonte 31/ 74 Algoritmo Bellman-Ford Algoritmo Bellman-Ford O algoritmo de Bellman-Ford resolve o problema de caminhos mínimos com uma fonte no caso geral, onde as arestas podem possuir peso negativo. O algoritmo retorna um valor Booleano indicando se foi ou não encontrado um ciclo de comprimento negativo alcançável a partir de s. Se não há ciclo negativo alcançável a partir de s, o algoritmo produz a árvore de caminhos mínimos com raiz em s e os seus respectivos comprimentos (pesos).

Caminhos Mínimos Com Uma Fonte 32/ 74 Algoritmo Bellman-Ford Algoritmo Bellman-Ford Bellman-Ford(G,w,s) 1) Initialize-Single-Source(G, s) 2) for i 1 to V[G] 1 3) do for each (u,v) E[G] 4) do Relax(u,v) 5) for each (u,v) E[G] 6) do if d[v] > d[u]+w(u,v) 7) then return FALSE 8) return TRUE

Caminhos Mínimos Com Uma Fonte 33/ 74 Algoritmo Bellman-Ford Grafo 6 t 5 2 x s 2 8 4 3 7 7 y 9 z

Caminhos Mínimos Com Uma Fonte 34/ 74 Algoritmo Bellman-Ford Bellman-Ford: inicialização 6 t 5 2 x s 0 2 8 4 3 7 7 y 9 z

Caminhos Mínimos Com Uma Fonte 35/ 74 Algoritmo Bellman-Ford Bellman-Ford: iteração 1 6 t 6 5 2 x s 0 2 8 4 3 7 7 7 y 9 z

Caminhos Mínimos Com Uma Fonte 36/ 74 Algoritmo Bellman-Ford Bellman-Ford: iteração 2 6 t 6 5 2 4 x s 0 2 8 4 3 7 7 7 y 9 2 z

Caminhos Mínimos Com Uma Fonte 37/ 74 Algoritmo Bellman-Ford Bellman-Ford: iteração 3 6 t 2 5 2 4 x s 0 2 8 4 3 7 7 7 y 9 2 z

Caminhos Mínimos Com Uma Fonte 38/ 74 Algoritmo Bellman-Ford Bellman-Ford: iteração 4 6 t 2 5 2 4 x s 0 2 8 4 3 7 7 7 y 9 2 z

Caminhos Mínimos Com Uma Fonte 39/ 74 Algoritmo Bellman-Ford Tempo de execução do algoritmo Bellman-Ford Fezendo V = n e E = m, podemos verificar que: Passo 1: O(n) Passo 2: Θ(n) Passo 3-4: Θ(1) Logo, o laço 2-4 leva Θ(nm) Laço 5-7 leva O(m) Conclusões: Portanto, Bellman-Ford executa em tempo Θ(nm). Para um grafo denso, m = Θ(n 2 ), o tempo de execução do algoritmo é Θ(n 3 ).

Caminhos Mínimos Com Uma Fonte 40/ 74 Algoritmo Bellman-Ford Bellman-Ford: corretude Lema Seja G = (V,E) um grafo direcionado com peso nas arestas Seja s V a fonte Seja w : E R a função peso Assuma que G não contém ciclos de peso negativo alcançáveis a partir de s Então, após V 1 passos do laço 2-4 do algoritmo Bellman-Ford, teremos d[v] = δ(s,v) para todo vértice v alcançável a partir de s.

Caminhos Mínimos Com Uma Fonte 41/ 74 Algoritmo Bellman-Ford Bellman-Ford: corretude Corolário Seja G = (V,E) um grafo direcionado com peso nas arestas Seja s V a fonte Seja w : E R a função peso Assuma que G não contém ciclos de peso negativo alcançáveis a partir de s Então, então para cada v V, existe um caminho de s para v se e somente se Bellman-Ford termina com d[v] < quando ele é aplicado sobre G.

Caminhos Mínimos Com Uma Fonte 42/ 74 Algoritmo Bellman-Ford Bellman-Ford: corretude Teorema Suponha que o algoritmo de Bellman-Ford executa sobre um grafo direcionado, G = (V,E), com função peso das arestas w : E R e tendo s como fonte. Se G não contém ciclos negativos, alcançáveis a partir de s, então: o algoritmo retorna TRUE; d[v] = δ(s,v) para todo v V; e o subgrafo predecessor Gπ é uma árvore de caminhos mínimos com raiz em s. Se G contém um ciclo negativo (alcançável a partir de s), então o algoritmo retorna FALSE.

Caminhos Mínimos Com Uma Fonte 43/ 74 Algoritmo de Dijkstra Sumário Algoritmo Bellman-Ford Algoritmo de Dijkstra Grafos Acíclicos

Caminhos Mínimos Com Uma Fonte 44/ 74 Algoritmo de Dijkstra Algoritmo de Dijkstra Princípios O algoritmo de Dijkstra resolve o problema de caminhos mínimos com uma fonte em um grafo direcionado G = (V,E), cujas arestas apresentam pesos não-negativos. O algoritmo mantém um conjunto S de vértices para os quais a distância do caminho mais curto a partir de s já foi computada. Ou seja, para todo v S, temos d[v] = δ(s,v). O algoritmo iterativamente seleciona um vértice u V S que possua a menor estimativa de distância, d[u] = min{d[v] : v V S}, e insere u em S. Ao mesmo tempo que relaxa as arestas que emanam de u.

Caminhos Mínimos Com Uma Fonte 45/ 74 Algoritmo de Dijkstra Algoritmo de Dijkstra S V S v 1 u 1 v 2 u 2 u 3 v 3 u 4

Caminhos Mínimos Com Uma Fonte 46/ 74 Algoritmo de Dijkstra Algoritmo de Dijkstra Dijkstra(G,w,s) 1) Initialize-Single-Source(G, s) 2) S 3) Q = V[G] 4) while Q 5) do u Extract min(q) 6) S S {u} 7) for each (u,v) Adj[u] 8) do Relax(u,v,w)

Caminhos Mínimos Com Uma Fonte 47/ 74 Algoritmo de Dijkstra Algoritmo de Dijkstra Uma vez que o algoritmo de Dijkstra sempre escolhe o vértice de V S mais próximo do conjunto S, dizemos que o algoritmo faz uso de uma técnica gulosa. Algoritmos gulosos tipicamente produzem soluções subótimas. No caso do problema de caminhos mínimos com uma fonte, o algoritmo guloso obtém a solução ótima. A chave para mostrar que o algoritmo produz uma solução ótima é o fato que quando u é inserido em S, d[u] = δ(s,u).

Caminhos Mínimos Com Uma Fonte 48/ 74 Algoritmo de Dijkstra Corretude do algoritmo de Dijkstra S V S p 1 π[u] u s p 3 p 2 x y

Caminhos Mínimos Com Uma Fonte 49/ 74 Algoritmo de Dijkstra Corretude do algoritmo de Dijkstra Teorema Se executarmos o algoritmo de Dijkstra em um grafo direcionado G = (V,E), onde w : E R +, Então, quando o algoritmo termina, d[v] = δ(s,v) para todo v V.

Caminhos Mínimos Com Uma Fonte 50/ 74 Algoritmo de Dijkstra Corretude do algoritmo de Dijkstra Demonstração Vamos mostrar que para cada u V, temos d[u] = δ(s,u) no momento em que u é inserido em S, e esta igualdade permanece. Com o propósito de contradição, suponha que u é o primeiro vértice tal que d[u] δ(s,u). Seja p = (p 1,π[u],u) o caminho produzido pelo algoritmo. Seja p = ( p 2,x,y, p 3 ) um caminho mais curto de s até u. y é o primeiro vértice em p que não pertence a S. Temos que w( p) < w(p).

Caminhos Mínimos Com Uma Fonte 51/ 74 Algoritmo de Dijkstra Corretude do algoritmo de Dijkstra Demonstração Sabemos que d[x] = δ(s,x). Caso contrário, u não seria o primeiro vértice com distância incorreta. Uma vez que y pertence a um caminho mais curto, temos que d[y] = δ(s,y) no momento em que x foi inserido em s. A aresta (x,y) foi relaxada no momento em que x foi inserido em S, fazendo com que d[y] se tornasse δ(s,y).

Caminhos Mínimos Com Uma Fonte 52/ 74 Algoritmo de Dijkstra Corretude do algoritmo de Dijkstra Demonstração Contudo, temos que: δ(s,u) < d[u] δ(s,y)+w( p 3 ) < d[u] d[y]+w( p 3 ) < d[u] [pois δ(s,y) = d[y]] d[y] < d[u] w( p 3 ) d[y] < d[u] [pois w( p 3 ) 0] Mas isto é uma contradição. O algoritmo teria escolhido y como o próximo vértice a ser inserido em S, não teria escolhido u.

Caminhos Mínimos Com Uma Fonte 53/ 74 Algoritmo de Dijkstra Análise do algoritmo de Dijkstra Vetor como fila de prioridades Neste caso, extract-min leva tempo O(n) e há n operações extract-min, com n = V e m = E. Uma vez que cada aresta é examinada no máximo uma vez, a operação relax é executada no máximo uma vez, levando tempo O(1). Podemos concluir que o algoritmo leva tempo O(n 2 +m) = O(n 2 ).

Caminhos Mínimos Com Uma Fonte 54/ 74 Algoritmo de Dijkstra Análise do algoritmo de Dijkstra Heap binário como fila de prioridades Quando o grafo é esparso, entretanto, é mais prático utilizarmos uma fila de prioridades implementada com heap binário. Neste caso, extract-min leva tempo O(lgn) e há n operações extract-min, com n = V e m = E. Cada aresta (u,v) é examinada uma vez, forçando uma operação relax(u,v,w) que custa no máximo O(lgn), quando a distância d[v] for reduzida. Portanto o algoritmo executa em tempo O(nlgn+mlgn) = O(mlgn) assumindo que m n.

Caminhos Mínimos Com Uma Fonte 55/ 74 Algoritmo de Dijkstra Análise do algoritmo de Dijkstra Heap Fibonacci como fila de prioridades Neste caso, extract-min leva tempo O(lgn) e há n operações extract-min, com n = V e m = E. Cada aresta (u,v) é examinada uma vez, forçando uma operação relax(u,v,w) que custa no máximo O(1) (tempo amortizado), quando a distância d[v] for reduzida. Portanto o algoritmo executa em tempo amortizado O(nlgn+m). Quando o grafo é denso, temos m = n 2 e o algoritmo executa em tempo O(n 2 ). Quando o grafo é esparso, temos O(nlgn) já que m = Θ(n).

Caminhos Mínimos Com Uma Fonte 56/ 74 Algoritmo de Dijkstra Dijkstra: grafo u 1 v 10 s 2 3 9 4 6 7 5 x 2 y

Caminhos Mínimos Com Uma Fonte 57/ 74 Algoritmo de Dijkstra Dijkstra: iteração 1 u 1 v 10 s 0 2 3 9 4 6 7 5 x 2 y

Caminhos Mínimos Com Uma Fonte 58/ 74 Algoritmo de Dijkstra Dijkstra: iteração 2 u 10 1 v 10 s 0 2 3 9 4 6 7 5 5 x 2 y

Caminhos Mínimos Com Uma Fonte 59/ 74 Algoritmo de Dijkstra Dijkstra: iteração 3 8 u 1 v 14 10 s 0 2 3 9 4 6 7 5 5 x 2 7 y

Caminhos Mínimos Com Uma Fonte 60/ 74 Algoritmo de Dijkstra Dijkstra: iteração 4 u 1 v 8 13 10 s 0 2 3 9 4 6 7 5 5 x 2 7 y

Caminhos Mínimos Com Uma Fonte 61/ 74 Algoritmo de Dijkstra Dijkstra: iteração 5 8 u 1 9 v 10 s 0 2 3 9 4 6 7 5 5 x 2 7 y

Caminhos Mínimos Com Uma Fonte 62/ 74 Algoritmo de Dijkstra Dijkstra: iteração 6 8 u 1 9 v 10 s 0 2 3 9 4 6 7 5 5 x 2 7 y

Caminhos Mínimos Com Uma Fonte 63/ 74 Grafos Acíclicos Sumário Algoritmo Bellman-Ford Algoritmo de Dijkstra Grafos Acíclicos

Caminhos Mínimos Com Uma Fonte 64/ 74 Grafos Acíclicos Grafos Acíclicos Relaxando as arestas segundo a ordem topológica de um grafo direcionado acíclico G = (V,E), leva ao cômputo da árvore de caminhos mínimos em tempo Θ( V + E ). Caminhos mínimos são sempre definidos em grafos acíclicos, pois mesmo na presença de arestas com pesos negativos, não existe ciclo de comprimento negativo.

Caminhos Mínimos Com Uma Fonte 65/ 74 Grafos Acíclicos Algoritmo Dag-Shortest-Paths(G, w, s) 1) topologically sort the vertices of G 2) Initialize-Single-Source(G, s) 3) for each u taken in topologically sorted order 4) do for each vertex v Adj[u] 5) do Relax(u,v,w)

Caminhos Mínimos Com Uma Fonte 66/ 74 Grafos Acíclicos Tempo de Execução Ordenação topológica pode ser realizada em tempo Θ( V + E ) utilizando o algoritmo de busca em profundidade. Cada vértice é examinado exatamente uma vez, quando sua lista de adjacência é examinada e a operação Relax é executada. Logo, o laço 3-5 executa em tempo Θ( V + E ). O tempo total de execução é, portanto, Θ( V + E ).

Caminhos Mínimos Com Uma Fonte 67/ 74 Grafos Acíclicos Exemplo 6 1 r s t u v x 5 2 7 0 1 2 3 4 2

Caminhos Mínimos Com Uma Fonte 68/ 74 Grafos Acíclicos Vértice r 6 1 r s t u v x 5 2 7 0 1 2 3 4 2

Caminhos Mínimos Com Uma Fonte 69/ 74 Grafos Acíclicos Vértice s 6 1 r s t u v x 5 2 7 0 2 6 1 2 3 4 2

Caminhos Mínimos Com Uma Fonte 70/ 74 Grafos Acíclicos Vértice t 6 1 r s t u v x 5 2 7 0 2 6 1 2 6 4 3 4 2

Caminhos Mínimos Com Uma Fonte 71/ 74 Grafos Acíclicos Vértice u 6 1 r s t u v x 5 2 7 0 2 6 1 2 5 4 3 4 2

Caminhos Mínimos Com Uma Fonte 72/ 74 Grafos Acíclicos Vértice v 6 1 r s t u v x 5 2 7 0 2 6 1 2 5 3 3 4 2

Caminhos Mínimos Com Uma Fonte 73/ 74 Grafos Acíclicos Vértice x 6 1 r s t u v x 5 2 7 0 2 6 1 2 5 3 3 4 2

Caminhos Mínimos Com Uma Fonte 74/ 74 Grafos Acíclicos Conclusões Fim! Obrigado pela presença