SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Problemas em Grafos
Caminho Mínimo - Algoritmo de Bellman-Ford
Gabriel Ramalho
Túlio Lemes
Vinicius Rodrigues
1.1 Definição do Problema:
O algoritmo de Bellman-Ford resolve o problema do caminho mais
curto de única origem para o caso mais geral. Diferentemente do algoritmo
de Dijkstra, o algoritmo de Bellman-Ford não impõe nenhuma restrição
sobre o sinal do peso das arestas, o que o torna uma solução mais
genérica.
Podemos tomar como exemplo eventos da vida real:
● Redes de computadores: Protocolos de roteamento do vetor de
distância
● Economia: Problema “Triangular Arbitrage”
1. Motivação
● O problema do caminho mínimo consiste na obtenção do
menor custo possível entre dois vértices em um grafo onde
suas arestas possuem pesos.
● Dado um grafo com pesos nas arestas e sabendo qual
vértice será a origem podemos calcular o valor mínimo e o
caminho necessário para chegar a qualquer outro nó.
1.2 Descrição Informal:
● Questão: Dado um grafo definido pelos seus vértices e suas
arestas temos que calcular a soma mínima dos pesos de suas
arestas para chegar do nó origem a qualquer outro nó.
● Entrada: Vértices, arestas e origem.
● Saída: Grafo com a distância mínima calculada em cada nó para
se chegar ao nó origem e também o nó antecessor para efetuar o
menor caminho.
1.3 Descrição Formal:
● O algoritmo está divido em três etapas (inicialização, relaxamento e
verificação de ciclos negativos). A primeira, a inicialização, é
responsável por padronizar as distâncias antes do inicio da resolução. O
relaxamento fica responsável pelo cálculo do caminho mínimo e a última
etapa se responsabiliza em verificar se é possível ou não calcular o
caminho mínimo partindo do princípio que não se pode ter um ciclo
negativo.
● A existência e cálculo do caminho mais curto são garantidos caso não
haja a presença de ciclos negativos durante o caminho da origem até
um nó v do grafo. Se há um ciclo negativo, em princípio, o problema não
tem solução, pois o “caminho” pode passar ao longo do ciclo infinitas
vezes obtendo caminhos cada vez menores.
1.4 Ideia
A inicialização é uma etapa simples, onde se padroniza os
valores de distância mínima para cada nó. Iremos percorrer todos os
vértices e iremos definir que a sua distância mínima no momento é
infinito, enquanto na origem iremos colocar 0.
1.4 Inicialização
● A técnica do relaxamento consiste em verificar se pode ser
encontrado um caminho mais curto para v (do que aquele
encontrado até o momento) passando pelo vértice u. Ou seja,
verificamos se caminho passando pelo vértice u é menor do que
a distância anteriormente calculada.
● Se distância(origem,u) + peso(u,v) < distancia(origem,v) então:
○ Distância(origem, v) (origem, u) + peso(u,v)
○ Nó predecessor u
1.4 Relaxamento
● Depois de executado (V-1) a técnica do relaxamento, precisamos
verificar se o grafo não contém um ciclo negativo.
● Para verificar se o grafo não contém um ciclo negativo executaremos a
técnica do relaxamento mais uma vez e se conseguirmos minimizar a
distância mínima para qualquer nó provaremos que existe um ciclo
negativo.
1.4 Checagem de Ciclos Negativos
1.4 Exemplo:
1.4 Exemplo:
Passo 1:
Definimos o vértice A como fonte:
Vértices: A B C D E
Distância 0 6 7 ∞ ∞
Distância de: A A A
1.4 Exemplo:
Passo 2:
Agora o vértice B como fonte:
Vértices: A B C D E
Distância 0 6 7 11 2
Distância de: A A A B B
1.4 Exemplo:
Passo 3:
Agora o vértice E como fonte:
Vértices: A B C D E
Distância 0 6 7 9 2
Distância de: A A A E B
1.4 Exemplo:
Passo 4:
Agora o vértice C como fonte:
Vértices: A B C D E
Distância 0 6 7 4 2
Distância de: A A A C B
1.4 Exemplo:
Passo 5:
Agora o vértice D como fonte:
Vértices: A B C D E
Distância 0 2 7 4 2
Distância de: A D A C B
1.4 Exemplo:
Passo 6:
Agora o vértice B como fonte:
Vértices: A B C D E
Distância 0 2 7 4 -2
Distância de: A D A C B
1.4 Exemplo:
Passo 7:
Agora o vértice E como fonte:
Vértices: A B C D E
Distância 0 2 7 4 -2
Distância de: A D A C B
1.4 Exemplo:
Conclusão:
1.4 Exemplo (Triangular Arbitrage):
● Com 1.000 dólares americanos podemos
comprar 1.000 × 0,741 = 741 euros, então
podemos comprar 741 × 1,366 = 1.012,206
dólares canadenses, e finalmente, 1.012,206
× 0,995 = 1.007,14497 dólares americanos
com nossos dólares canadenses, obtendo
7,14497 de lucro
● Se trocarmos os pesos das arestas pelo seu
respectivo log, verificamos a existência de
um ciclo negativo
● Portanto o problema pode ser modelado pela
busca de um ciclo negativo no grafo e
podemos utilizar o algorimo de Bellman-Ford
para isso
2. Algoritmo
BellmanFord (vértices, arestas, origem)
para cada vértice v em vértices faça: // Inicialização
se v é origem então:
v.distância = 0
senão:
v.distância = infinito
v.anterior = nulo
para i = 1 até tamanho(vértices) - 1: // Relaxamento
para cada aresta uv em arestas faça:
u = uv.origem
v = uv.destino
se v.distância > u.distância + uv.peso então:
v.distância = u.distância + uv.peso
v.anterior = u
para cada aresta uv em arestas faça: // Checagem de ciclos negativos
u = uv.origem
v = uv.destino
se v.distância < u.distância + uv.peso então:
erro "Ciclo de peso negativo"
3.1 Prova de Corretude:
Supondo que o grafo orientado ponderado G=(V, E) não possui ciclos
negativos atingíveis por s (origem). Provamos que o algortimo está correto
para o grafo G com base na propriedade de relaxamento de caminho.
Considere qualquer vértice v que seja acessível a partir de s, e seja p =
(v0
, v1
, … vk
), onde v0
= s e vk
= v, qualquer acíclico caminho mais curto de s
para v. O caminho p tem no máximo |V| - 1 arestas, e assim k <= |V| - 1.
Cada uma das |V| - 1 iterações do loop no algortimo relaxa todas as |E|
arestas.
Entre as arestas relaxadas na i-ésima iteração, para i = 1, 2, … k,
encontra-se (vi-1
, vi
). Então pela propriedade de relaxamento de caminho, d
[v] = d[vk
] = dist(s, vk
) = dist(s, v).
3. Análise do Algoritmo
3.2 Complexidade:
para cada vértice v em vértices faça: // Inicialização
se v é origem então:
v.distância = 0
senão:
v.distância = infinito
v.anterior = nulo
● Inicialização: V
3. Análise do Algoritmo
3.2 Complexidade:
para i = 1 até tamanho(vértices) - 1: // Relaxamento
para cada aresta uv em arestas faça:
u = uv.origem
v = uv.destino
se v.distância > u.distância + uv.peso então:
v.distância = u.distância + uv.peso
v.anterior = u
● Relaxamento: A * (V - 1)
3. Análise do Algoritmo
3.2 Complexidade:
para cada aresta uv em arestas faça: // Checagem de ciclos negativos
u = uv.origem
v = uv.destino
se v.distância < u.distância + uv.peso então:
erro "Ciclo de peso negativo"
● Checagem de ciclos negativos: A
3. Análise do Algoritmo
3.2 Complexidade:
● Inicialização: V
● Relaxamento: A * ( V - 1)
● Checagem de ciclos negativos: A
Total = V + (A*V-1) + A = O(A*V)
3. Análise do Algoritmo
4. Conclusão
Vantagens:
● Simples implementação
● Permite arestas com peso negativo
Desvantagens:
● Tempo maior de execução em comparação com o algoritmo de
Dijkstra
● Alto custo em relação aos casos onde o algoritmo guloso retorna
uma solução ótima
4. Conclusão
● Complexidade: O(A*V)
● Não permite ciclos negativos
● Menos eficiente que o algoritmo de Dijkstra
Bibliografia
● http://www.inf.ufrgs.br/~cgdaudt/inf05515/art2.pdf
● http://scanftree.com/Data_Structure/bellman-ford-algorithm
● http://www.ic.unicamp.br/~rezende/ensino/mo417/2010s2/Slides/Aula23.
pdf
● http://algs4.cs.princeton.edu/44sp/
● http://professor.unisinos.br/pjaques/material/est2/15-grafos-caminhos-
minimos-pesos-negativos.pdf

Mais conteúdo relacionado

Mais procurados

Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Thayse
 
Método de Newton-Raphson - @professorenan
Método de Newton-Raphson - @professorenanMétodo de Newton-Raphson - @professorenan
Método de Newton-Raphson - @professorenanRenan Gustavo
 
Introdução a Teoria dos Grafos
Introdução a Teoria dos GrafosIntrodução a Teoria dos Grafos
Introdução a Teoria dos GrafosChromus Master
 
Lista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e AutômatosLista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e AutômatosTárcio Sales
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoDelacyr Ferreira
 
Algoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoAlgoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoElaine Cecília Gatto
 
Aula 15: O oscilador harmônico
Aula 15: O oscilador harmônicoAula 15: O oscilador harmônico
Aula 15: O oscilador harmônicoAdriano Silva
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos GrafosBianca Dantas
 
mod2-mecanismos
mod2-mecanismosmod2-mecanismos
mod2-mecanismosdiogoa21
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Gercélia Ramos
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Aula 12 – Sistema de Numeração (Conversão de Bases)
Aula 12 – Sistema de Numeração (Conversão de Bases)Aula 12 – Sistema de Numeração (Conversão de Bases)
Aula 12 – Sistema de Numeração (Conversão de Bases)Vitor Hugo Melo Araújo
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
Resumo dos testes de convergência
Resumo dos testes de convergênciaResumo dos testes de convergência
Resumo dos testes de convergênciaPedro Neto
 

Mais procurados (20)

Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0
 
Método de Newton-Raphson - @professorenan
Método de Newton-Raphson - @professorenanMétodo de Newton-Raphson - @professorenan
Método de Newton-Raphson - @professorenan
 
Introdução a Teoria dos Grafos
Introdução a Teoria dos GrafosIntrodução a Teoria dos Grafos
Introdução a Teoria dos Grafos
 
SO-04 Escalonamento de Processos
SO-04 Escalonamento de ProcessosSO-04 Escalonamento de Processos
SO-04 Escalonamento de Processos
 
Determinantes - 2º B
Determinantes - 2º BDeterminantes - 2º B
Determinantes - 2º B
 
Lista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e AutômatosLista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e Autômatos
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
Algoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoAlgoritmos - Lógica de Programação
Algoritmos - Lógica de Programação
 
Aula 15: O oscilador harmônico
Aula 15: O oscilador harmônicoAula 15: O oscilador harmônico
Aula 15: O oscilador harmônico
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos Grafos
 
Sistemas lineares
Sistemas linearesSistemas lineares
Sistemas lineares
 
mod2-mecanismos
mod2-mecanismosmod2-mecanismos
mod2-mecanismos
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
 
Aula 6 aed - registros
Aula 6   aed - registrosAula 6   aed - registros
Aula 6 aed - registros
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Paa algoritmos gulosos
Paa  algoritmos gulososPaa  algoritmos gulosos
Paa algoritmos gulosos
 
Aula 12 – Sistema de Numeração (Conversão de Bases)
Aula 12 – Sistema de Numeração (Conversão de Bases)Aula 12 – Sistema de Numeração (Conversão de Bases)
Aula 12 – Sistema de Numeração (Conversão de Bases)
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
Resumo dos testes de convergência
Resumo dos testes de convergênciaResumo dos testes de convergência
Resumo dos testes de convergência
 
Curso de Java #10 - Estruturas Condicionais (Parte 2)
Curso de Java #10 - Estruturas Condicionais (Parte 2)Curso de Java #10 - Estruturas Condicionais (Parte 2)
Curso de Java #10 - Estruturas Condicionais (Parte 2)
 

Semelhante a Algoritmo Bellman-Ford para caminho mínimo em grafos com arestas de peso negativo

Graph Theory - Exercises - Chapter 3
Graph Theory - Exercises - Chapter 3Graph Theory - Exercises - Chapter 3
Graph Theory - Exercises - Chapter 3Michel Alves
 
Caminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraCaminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraMarcos Castro
 
O caixeiro viajante é np completo
O caixeiro viajante é np completoO caixeiro viajante é np completo
O caixeiro viajante é np completoMarcelo Carvalho
 
Professor helanderson sousa
Professor helanderson sousaProfessor helanderson sousa
Professor helanderson sousaDayanne Sousa
 
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Murilo Adriano Vasconcelos
 
Árvores Espalhadas Mínimas
Árvores Espalhadas MínimasÁrvores Espalhadas Mínimas
Árvores Espalhadas MínimasDiego Cavalca
 
Modelagem e inversão em coordenadas esféricas na gravimetria
Modelagem e inversão em coordenadas esféricas na gravimetriaModelagem e inversão em coordenadas esféricas na gravimetria
Modelagem e inversão em coordenadas esféricas na gravimetriaLeonardo Uieda
 
Resolução da lista 5
Resolução da lista 5Resolução da lista 5
Resolução da lista 5Ronaldo Chaves
 
Complexidade do Algoritmo: Caminho mínimo Floyd Warshall
Complexidade do Algoritmo: Caminho mínimo Floyd WarshallComplexidade do Algoritmo: Caminho mínimo Floyd Warshall
Complexidade do Algoritmo: Caminho mínimo Floyd WarshallLucas Vinícius
 
Trabalho escrito física leis de Kepler By: Henrique
Trabalho escrito física leis de Kepler By: HenriqueTrabalho escrito física leis de Kepler By: Henrique
Trabalho escrito física leis de Kepler By: HenriqueHenrique Silva
 
A robustez de circuitos sequenciais
A robustez de circuitos sequenciaisA robustez de circuitos sequenciais
A robustez de circuitos sequenciaisLucas Vinícius
 

Semelhante a Algoritmo Bellman-Ford para caminho mínimo em grafos com arestas de peso negativo (20)

Fluxo a Custo Mínimo
Fluxo a Custo MínimoFluxo a Custo Mínimo
Fluxo a Custo Mínimo
 
Graph Theory - Exercises - Chapter 3
Graph Theory - Exercises - Chapter 3Graph Theory - Exercises - Chapter 3
Graph Theory - Exercises - Chapter 3
 
Caminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraCaminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de Dijkstra
 
Lecture01.pptx
Lecture01.pptxLecture01.pptx
Lecture01.pptx
 
O caixeiro viajante é np completo
O caixeiro viajante é np completoO caixeiro viajante é np completo
O caixeiro viajante é np completo
 
Professor helanderson sousa
Professor helanderson sousaProfessor helanderson sousa
Professor helanderson sousa
 
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
 
Árvores Espalhadas Mínimas
Árvores Espalhadas MínimasÁrvores Espalhadas Mínimas
Árvores Espalhadas Mínimas
 
Movimentocircular1 fisica
Movimentocircular1   fisicaMovimentocircular1   fisica
Movimentocircular1 fisica
 
Extracaotrab Gn3
Extracaotrab Gn3Extracaotrab Gn3
Extracaotrab Gn3
 
Floyd-Warshall
Floyd-WarshallFloyd-Warshall
Floyd-Warshall
 
Modelagem e inversão em coordenadas esféricas na gravimetria
Modelagem e inversão em coordenadas esféricas na gravimetriaModelagem e inversão em coordenadas esféricas na gravimetria
Modelagem e inversão em coordenadas esféricas na gravimetria
 
Fisica 2011
Fisica 2011Fisica 2011
Fisica 2011
 
potencial elétrico.
potencial elétrico.potencial elétrico.
potencial elétrico.
 
Resolução da lista 5
Resolução da lista 5Resolução da lista 5
Resolução da lista 5
 
Complexidade do Algoritmo: Caminho mínimo Floyd Warshall
Complexidade do Algoritmo: Caminho mínimo Floyd WarshallComplexidade do Algoritmo: Caminho mínimo Floyd Warshall
Complexidade do Algoritmo: Caminho mínimo Floyd Warshall
 
Proxima postagem
Proxima postagemProxima postagem
Proxima postagem
 
fisca
fiscafisca
fisca
 
Trabalho escrito física leis de Kepler By: Henrique
Trabalho escrito física leis de Kepler By: HenriqueTrabalho escrito física leis de Kepler By: Henrique
Trabalho escrito física leis de Kepler By: Henrique
 
A robustez de circuitos sequenciais
A robustez de circuitos sequenciaisA robustez de circuitos sequenciais
A robustez de circuitos sequenciais
 

Mais de Gabriel Albuquerque

Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...Gabriel Albuquerque
 
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"Gabriel Albuquerque
 
Star Wars e a Cultura da Convergência
Star Wars e a Cultura da ConvergênciaStar Wars e a Cultura da Convergência
Star Wars e a Cultura da ConvergênciaGabriel Albuquerque
 
Cultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e CasesCultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e CasesGabriel Albuquerque
 
Algoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco MínimoAlgoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco MínimoGabriel Albuquerque
 
Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaGabriel Albuquerque
 

Mais de Gabriel Albuquerque (11)

Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
 
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
 
Teoria dos Grafos
Teoria dos GrafosTeoria dos Grafos
Teoria dos Grafos
 
Star Wars e a Cultura da Convergência
Star Wars e a Cultura da ConvergênciaStar Wars e a Cultura da Convergência
Star Wars e a Cultura da Convergência
 
Cultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e CasesCultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e Cases
 
Tecnologia Bluetooth
Tecnologia BluetoothTecnologia Bluetooth
Tecnologia Bluetooth
 
Algoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco MínimoAlgoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco Mínimo
 
Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma Máxima
 
Algoritmo Shell Sort
Algoritmo Shell SortAlgoritmo Shell Sort
Algoritmo Shell Sort
 
WordPress
WordPressWordPress
WordPress
 
OOCSS - Object Oriented CSS
OOCSS - Object Oriented CSSOOCSS - Object Oriented CSS
OOCSS - Object Oriented CSS
 

Algoritmo Bellman-Ford para caminho mínimo em grafos com arestas de peso negativo

  • 1. Problemas em Grafos Caminho Mínimo - Algoritmo de Bellman-Ford Gabriel Ramalho Túlio Lemes Vinicius Rodrigues
  • 2. 1.1 Definição do Problema: O algoritmo de Bellman-Ford resolve o problema do caminho mais curto de única origem para o caso mais geral. Diferentemente do algoritmo de Dijkstra, o algoritmo de Bellman-Ford não impõe nenhuma restrição sobre o sinal do peso das arestas, o que o torna uma solução mais genérica. Podemos tomar como exemplo eventos da vida real: ● Redes de computadores: Protocolos de roteamento do vetor de distância ● Economia: Problema “Triangular Arbitrage” 1. Motivação
  • 3. ● O problema do caminho mínimo consiste na obtenção do menor custo possível entre dois vértices em um grafo onde suas arestas possuem pesos. ● Dado um grafo com pesos nas arestas e sabendo qual vértice será a origem podemos calcular o valor mínimo e o caminho necessário para chegar a qualquer outro nó. 1.2 Descrição Informal:
  • 4. ● Questão: Dado um grafo definido pelos seus vértices e suas arestas temos que calcular a soma mínima dos pesos de suas arestas para chegar do nó origem a qualquer outro nó. ● Entrada: Vértices, arestas e origem. ● Saída: Grafo com a distância mínima calculada em cada nó para se chegar ao nó origem e também o nó antecessor para efetuar o menor caminho. 1.3 Descrição Formal:
  • 5. ● O algoritmo está divido em três etapas (inicialização, relaxamento e verificação de ciclos negativos). A primeira, a inicialização, é responsável por padronizar as distâncias antes do inicio da resolução. O relaxamento fica responsável pelo cálculo do caminho mínimo e a última etapa se responsabiliza em verificar se é possível ou não calcular o caminho mínimo partindo do princípio que não se pode ter um ciclo negativo. ● A existência e cálculo do caminho mais curto são garantidos caso não haja a presença de ciclos negativos durante o caminho da origem até um nó v do grafo. Se há um ciclo negativo, em princípio, o problema não tem solução, pois o “caminho” pode passar ao longo do ciclo infinitas vezes obtendo caminhos cada vez menores. 1.4 Ideia
  • 6. A inicialização é uma etapa simples, onde se padroniza os valores de distância mínima para cada nó. Iremos percorrer todos os vértices e iremos definir que a sua distância mínima no momento é infinito, enquanto na origem iremos colocar 0. 1.4 Inicialização
  • 7. ● A técnica do relaxamento consiste em verificar se pode ser encontrado um caminho mais curto para v (do que aquele encontrado até o momento) passando pelo vértice u. Ou seja, verificamos se caminho passando pelo vértice u é menor do que a distância anteriormente calculada. ● Se distância(origem,u) + peso(u,v) < distancia(origem,v) então: ○ Distância(origem, v) (origem, u) + peso(u,v) ○ Nó predecessor u 1.4 Relaxamento
  • 8. ● Depois de executado (V-1) a técnica do relaxamento, precisamos verificar se o grafo não contém um ciclo negativo. ● Para verificar se o grafo não contém um ciclo negativo executaremos a técnica do relaxamento mais uma vez e se conseguirmos minimizar a distância mínima para qualquer nó provaremos que existe um ciclo negativo. 1.4 Checagem de Ciclos Negativos
  • 10. 1.4 Exemplo: Passo 1: Definimos o vértice A como fonte: Vértices: A B C D E Distância 0 6 7 ∞ ∞ Distância de: A A A
  • 11. 1.4 Exemplo: Passo 2: Agora o vértice B como fonte: Vértices: A B C D E Distância 0 6 7 11 2 Distância de: A A A B B
  • 12. 1.4 Exemplo: Passo 3: Agora o vértice E como fonte: Vértices: A B C D E Distância 0 6 7 9 2 Distância de: A A A E B
  • 13. 1.4 Exemplo: Passo 4: Agora o vértice C como fonte: Vértices: A B C D E Distância 0 6 7 4 2 Distância de: A A A C B
  • 14. 1.4 Exemplo: Passo 5: Agora o vértice D como fonte: Vértices: A B C D E Distância 0 2 7 4 2 Distância de: A D A C B
  • 15. 1.4 Exemplo: Passo 6: Agora o vértice B como fonte: Vértices: A B C D E Distância 0 2 7 4 -2 Distância de: A D A C B
  • 16. 1.4 Exemplo: Passo 7: Agora o vértice E como fonte: Vértices: A B C D E Distância 0 2 7 4 -2 Distância de: A D A C B
  • 18. 1.4 Exemplo (Triangular Arbitrage): ● Com 1.000 dólares americanos podemos comprar 1.000 × 0,741 = 741 euros, então podemos comprar 741 × 1,366 = 1.012,206 dólares canadenses, e finalmente, 1.012,206 × 0,995 = 1.007,14497 dólares americanos com nossos dólares canadenses, obtendo 7,14497 de lucro ● Se trocarmos os pesos das arestas pelo seu respectivo log, verificamos a existência de um ciclo negativo ● Portanto o problema pode ser modelado pela busca de um ciclo negativo no grafo e podemos utilizar o algorimo de Bellman-Ford para isso
  • 19. 2. Algoritmo BellmanFord (vértices, arestas, origem) para cada vértice v em vértices faça: // Inicialização se v é origem então: v.distância = 0 senão: v.distância = infinito v.anterior = nulo para i = 1 até tamanho(vértices) - 1: // Relaxamento para cada aresta uv em arestas faça: u = uv.origem v = uv.destino se v.distância > u.distância + uv.peso então: v.distância = u.distância + uv.peso v.anterior = u para cada aresta uv em arestas faça: // Checagem de ciclos negativos u = uv.origem v = uv.destino se v.distância < u.distância + uv.peso então: erro "Ciclo de peso negativo"
  • 20. 3.1 Prova de Corretude: Supondo que o grafo orientado ponderado G=(V, E) não possui ciclos negativos atingíveis por s (origem). Provamos que o algortimo está correto para o grafo G com base na propriedade de relaxamento de caminho. Considere qualquer vértice v que seja acessível a partir de s, e seja p = (v0 , v1 , … vk ), onde v0 = s e vk = v, qualquer acíclico caminho mais curto de s para v. O caminho p tem no máximo |V| - 1 arestas, e assim k <= |V| - 1. Cada uma das |V| - 1 iterações do loop no algortimo relaxa todas as |E| arestas. Entre as arestas relaxadas na i-ésima iteração, para i = 1, 2, … k, encontra-se (vi-1 , vi ). Então pela propriedade de relaxamento de caminho, d [v] = d[vk ] = dist(s, vk ) = dist(s, v). 3. Análise do Algoritmo
  • 21. 3.2 Complexidade: para cada vértice v em vértices faça: // Inicialização se v é origem então: v.distância = 0 senão: v.distância = infinito v.anterior = nulo ● Inicialização: V 3. Análise do Algoritmo
  • 22. 3.2 Complexidade: para i = 1 até tamanho(vértices) - 1: // Relaxamento para cada aresta uv em arestas faça: u = uv.origem v = uv.destino se v.distância > u.distância + uv.peso então: v.distância = u.distância + uv.peso v.anterior = u ● Relaxamento: A * (V - 1) 3. Análise do Algoritmo
  • 23. 3.2 Complexidade: para cada aresta uv em arestas faça: // Checagem de ciclos negativos u = uv.origem v = uv.destino se v.distância < u.distância + uv.peso então: erro "Ciclo de peso negativo" ● Checagem de ciclos negativos: A 3. Análise do Algoritmo
  • 24. 3.2 Complexidade: ● Inicialização: V ● Relaxamento: A * ( V - 1) ● Checagem de ciclos negativos: A Total = V + (A*V-1) + A = O(A*V) 3. Análise do Algoritmo
  • 25. 4. Conclusão Vantagens: ● Simples implementação ● Permite arestas com peso negativo Desvantagens: ● Tempo maior de execução em comparação com o algoritmo de Dijkstra ● Alto custo em relação aos casos onde o algoritmo guloso retorna uma solução ótima
  • 26. 4. Conclusão ● Complexidade: O(A*V) ● Não permite ciclos negativos ● Menos eficiente que o algoritmo de Dijkstra
  • 27. Bibliografia ● http://www.inf.ufrgs.br/~cgdaudt/inf05515/art2.pdf ● http://scanftree.com/Data_Structure/bellman-ford-algorithm ● http://www.ic.unicamp.br/~rezende/ensino/mo417/2010s2/Slides/Aula23. pdf ● http://algs4.cs.princeton.edu/44sp/ ● http://professor.unisinos.br/pjaques/material/est2/15-grafos-caminhos- minimos-pesos-negativos.pdf