0 calificaciones0% encontró este documento útil (0 votos)
277 vistas6 páginas
O algoritmo de bellman ford ter como objetivo encontrar menor
caminho em um dígrafo de uma única origem. Embora faça o mesmo que o Algoritmo de Dijkstra ele possui uma vantagem, trabalho com arestas com pesos negativos! É mais simples e fácil de compreender e em casos raros é
mais rápido que o algoritmo de Dijkstra.
O algoritmo de bellman ford ter como objetivo encontrar menor
caminho em um dígrafo de uma única origem. Embora faça o mesmo que o Algoritmo de Dijkstra ele possui uma vantagem, trabalho com arestas com pesos negativos! É mais simples e fácil de compreender e em casos raros é
mais rápido que o algoritmo de Dijkstra.
O algoritmo de bellman ford ter como objetivo encontrar menor
caminho em um dígrafo de uma única origem. Embora faça o mesmo que o Algoritmo de Dijkstra ele possui uma vantagem, trabalho com arestas com pesos negativos! É mais simples e fácil de compreender e em casos raros é
mais rápido que o algoritmo de Dijkstra.
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.