Vous êtes sur la page 1sur 6

Algoritmo de Bellman-Ford

Evander Cludio L. Dos Santos


1
, Ronecly Dantas A. Couto, Camilla A. Borges.
Instituto de Cincias Exatas e da Terra Universidade Federal de Mato Grosso
(UFMT)

Barra do Garas, MT Brasil
evanderclaudio@hotmail.com, roneclydantas@hotmail.com,
camillajapa@hotmail.com
Resumo. O algoritmo de bellman ford ter como objetivo encontrar menor
caminho em um dgrafo de uma nica origem. Embora faa o mesmo q o
Algoritmo de Dijkstra ele possui uma vantagem, trabalho com arestas com
pesos negativos! mais simples e fcil de compreender e em casos raros
mais rpido que o algoritmo de Dijkstra.
















1. Introduo
O algoritmo de Dijkstra resolve o Problema dos Caminhos Mnimos quando (G, w) no
possui arestas de custo negativo. Uma das diculdades com arestas negativas e a
possvel existncia de ciclos de custo negativo ou simplesmente ciclos negativos.
O algoritmo de Bellman-Ford calcula um caminho mais curto de uma nica fonte
em um dgrafo ponderado. Bellman-Ford usado principalmente para grafos com bordas
com peso negativo. O algoritmo tem o nome de seus criadores: Richard Bellman e Lester
Ford Jr.
um pouco mais lento que Dijkstra, mas mais simples e fcil de compreender e
permite pesos negativos nas arestas, enquanto que Dijkstra no permite.
2. Algoritmos
Em sua estrutura bsica Bellman-Ford muito semelhante ao algoritmo de Dijkstra. O
algoritmo usa o relaxamento, diminuindo progressivamente uma estimativa d[v] no peso
de um caminho mais curto da origem s at cada vrtice v V at alcanar o peso real de
caminho mais curto (s,v).
O algoritmos de Bellman-Ford simplesmente relaxa todas as bordas, e faz isso
| V | - 1 vezes, onde | V | o nmero de vrtices no grfico. As repeties permitem
distncias mnimas com preciso propagar por todo o grfico, uma vez que, na ausncia
de ciclos negativos, o caminho mais curto s pode visitar cada n no mximo uma
vez. Ao contrrio da abordagem gulosa, que depende de certas premissas estruturais
derivadas de pesos positivos, essa abordagem direta se estende para o caso geral.

O algoritmo de Bellman-Ford recebe um grafo orientado (G,w) (possivelmente
com arestas de custo negativo) e um vrtice origem s de G. Ele devolve um valor
booleano: FALSE se existe um ciclo negativo atingvel a partir de s, ou TRUE e neste
caso devolve tambm uma Arvore de Caminhos Mnimos com raiz s.

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




Na linha 1 so inicializados os valores d e de todos os vrtices. So feita |V| - 1
passagem sobre as arestas do grafo. Cada passagem uma iterao do loop for das
linhas 2 a 4 e consiste em relaxar cada aresta do grafo uma vez. Depois de fazer |V| - 1
passagens as linhas 5 a 8 procuram por um ciclo de peso negativo e retornam o valor
booleano apropriado. Se no existir nenhum ciclo de peso negativo, o algoritmo
calcular pesos de caminhos mais curtos corretos para todos os vrtices acessveis partir
da origem.
Veja o exemplo do Algoritmo nas figuras abaixo.

Figure 1. A figura foi retirada do livro Algoritmos: Teoria e Pratica. Demonstrando a
execuo do algoritmo, partindo do vrtice origem s.
3. Analise do algoritmo
Fazendo |V| = n e |E| = m, temos que:
Linha 1-2: O(n);
Linha 3: (m);
Linha 4: (1);
Linha 5: (m);
Linha 6: (1);
Linha 7: (1);
Linha 8: (1);
Logo o lao 2-4 leva (nm) e o lao 5-7 leva O(m). Assim, o algortmo de Bellman-
Ford executa em (mn), mas para um grafo denso, temos que m = (n), assim o tempo
de execuo fica (n).



4. Exemplos de aplicao
4.1. Aplicao em roteamento
Um exemplo de aplicao, uma variao do algoritmo de Bellman-Ford usado em
routing protocols (protocolos de roteamento), por exemplo, o Routing Information
Protocol (RIP). O algoritmo envolve um nmero de ns (roteadores) dentro de
um Sistema Autnomo, uma coleo de redes IP normalmente de propriedade de um
ISP. composto das seguintes etapas:
Cada n calcula as distncias entre si e todos os outros ns dentro do AS e
armazena essas informaes como uma tabela.
Cada n envia sua tabela para todos os ns vizinhos.
Quando um n recebe tabelas de distncia de seus vizinhos, ele calcula as rotas mais
curtas para todos os outros ns e atualiza sua prpria tabela para refletir as
alteraes.
4.2. Babel
[1]

Joaozinho e Mariazinha so dois irmos que esto muito empolgados com suas aulas de
idiomas, cada um est fazendo vrios diferentes cursinhos. Ao chegar em casa comentam
sobre gramtica, vocabulrio, cultura dos pases etc. Numa dessas conversas perceberam
que algumas palavras so comuns a mais de um idioma, mesmo que no necessariamente
tenham o mesmo significado. Por exemplo, amigo existe em portugus e espanhol e
tem o mesmo significado, enquanto que date uma palavra comum entre francs e
ingls, mas que pode ter significados diferentes, uma vez que date tambm se refere a
um encontro em ingls, alm de data de calendrio. J red em espanhol se refere a
uma rede, enquanto que em ingls se refere cor vermelha. Outro exemplo seria actual
que, em ingls significa algo real e, em espanhol, tem o significado de presente, atual
(como em portugus).
Empolgados com essas descobertas, resolveram escrever num caderno todas as
palavras em comum que conseguiram pensar, associando cada uma a um par de idiomas.
Observador como , Joozinho props um desafio a Mariazinha: dados um idioma de
origem e um de destino, escrever uma srie de palavras sendo que a primeira
necessariamente deveria pertencer ao idioma de origem e a ltima ao de destino. Duas
palavras adjacentes nessa sequencia deveriam necessariamente pertencer a um mesmo
idioma. Por exemplo, se o idioma de origem fosse portugus e o de destino francs,
Mariazinha poderia escrever a sequncia amigo actual date (portugus/espanhol,
espanhol/ingls, ingls/francs).
Restries: Mariazinha deve encontrar a soluo que tenha o menor comprimento da
sequncia total no contando os espaos entre as palavras e duas palavras consecutivas
no podem ter a mesma letra inicial.
Sendo assim, a soluo anterior passa a ser invlida, pois amigo e actual tm
a mesma letra inicial. possvel, porm, encontrar outra soluo, que no caso seria
amigo red date, cujo comprimento total 12. Joozinho fez uma extensa pesquisa na
internet e compilou uma enorme lista de palavras e desafiou Mariazinha a resolver o



problema. Como possvel que haja mais de uma soluo, ele pediu para que ela apenas
respondesse o comprimento da seqncia encontrada dadas as restries ou se no h
soluo possvel. Voc seria capaz de ajudar Mariazinha?
4.2.1 Entrada
A entrada contm vrios casos de teste. A primeira linha de um caso de teste contm um
inteiro M (1 <= M < 2000), representando o total de palavras compiladas por Joozinho.
A segunda linha contm duas cadeias de caracteres distintas O e D, separadas por um
espao em branco, indicando os idiomas de origem e destino respectivamente. Cada uma
das M linhas seguintes contm trs cadeias de caracteres I1, I2 e P, separadas por um
espao em branco, representando dois idiomas e uma palavra comum entre ambos (I1 e
I2 so sempre diferentes). Todas as cadeias de caracteres tero tamanho mnimo 1 e
mximo 50 e contero apenas letras minsculas. Um mesmo par de idiomas pode ter
vrias palavras diferentes associadas a ele, porm uma mesma palavra P nunca ser
repetida. O final da entrada indicado por uma linha que contm apenas um zero.
4.2.2 Sada
Para cada caso de teste da entrada seu programa deve imprimir um nico inteiro, o
comprimento da menor sequncia que satisfaa as restries de Joozinho, ou impossvel
(em minsculas, sem acento) caso no seja possvel.
References

Bellman, Richard (1958), "Em um problema de roteamento", Trimestral de Matemtica
Aplicada 16: 87-90, MR 0102435 .
Ford, LR, Jr. ; Fulkerson, DR (1962), Fluxos em Redes, Princeton University Press .
Cormen, Thomas H. ; Leiserson, Charles E. , Rivest, Ronald L. . Introduction to
Algorithms . MIT Press e McGraw-Hill . , Segunda edio. MIT Press e McGraw-
Hill, 2001. ISBN 0-262-03293-7 . Artigo 24.1: O algoritmo de Bellman-Ford, pp
588-592. Problema 24-1, pp 614-615.
Heineman, George T.; Pollice, Gary; Selkow, Stanley (2008), "Captulo 6: Algoritmos
Graph", algoritmos, em poucas palavras, O'Reilly Media , pp 160-164, ISBN 978-
0-596-51624 - 6
Yen, Jin Y. (1970), "Um algoritmo para encontrar rotas mais curtas de todos os ns de
origem para um determinado destino em redes geral", Trimestral de Matemtica
Aplicada 27: 526-530, MR 0253822.
Autor no identificado. One Source Shortest Path: The Bellman-
ford Algorithm, post: 2007-11-29,



http://compprog.wordpress.com/2007/11/29/one-source-shortest-path-the-
bellman-ford-algorithm/, 21/07/2011.
Autor no identificado. Bellman-Ford Algorithm,
http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Grap
hAlgor/bellFordAlgor.htm
Camponogara, Eduardo. Caminhos mnimos numa fonte, 29/04/2011.
[1] Autor no identificado. bellman-ford-floyd-warshall,
https://docs.google.com/viewer?a=v&q=cache:bPHlxh7NafcJ:www.inf.uri.com.br/
neilor/material/Alg3/bellman-ford-floyd-warshall.pdf+bellman-ford&hl=pt-
BR&gl=br&pid=bl&srcid=ADGEESh5jiXyLHTlslprhwVYOQRmOL1FH78-
6csvECatyffnf9J1YOQ5QhjwBIgfKTJwlIV8oWYJn7ICCyBSOAuJDcWdmlVLL5
wDMswlmvy1qns0-
V91ONROD_10SxRMZYVsZknJ16Tm&sig=AHIEtbQIBxb3Rq5230Gt3pun5Jal
MF1B8Q, 21/07/2011.

Vous aimerez peut-être aussi