Você está na página 1de 7

Programao Dinmica Aplicada em Problemas de Caminhos Mnimos

Daniele C. Oliveira Programa de Ps Graduao em Computao - Faculdade de Computao Universidade Federal de Uberlndia (UFU)
daniele-oliveira@doutorado.ufu.br

Abstract. This article describes some algorithms to find the shortest path between vertices of a graph using Dynamic Programming. The algorithms presented in this article are the Reliable Shortest Paths, the Floyd-Warshall algorithm to solve the problem All-pairs Shortest Paths and Held-Karp algorithm for solving the Traveling Salesman Problem. Resumo. Este artigo descreve alguns algoritmos para encontrar o caminho mnimo entre vrtices de um grafo utilizando Programao Dinmica. Os algoritmos apresentados neste artigo so o Shortest Reliable Paths, o Algoritmo de Floyd-Warshall para a resoluo do problema All-pairs Shortest Paths e o Algoritmo de Held-Karp para resoluo do Problema do Caixeiro Viajante.

1. Introduo
Muitas vezes necessrio descobrir qual o menor caminho que liga um pouto ao outro em um grafo, ou o menor caminho entre duas cidades. Para resolver estes problemas possvel utilizar a Programao Dinmica, que muitas vezes traz uma soluo simples, ou mais rpida comparado algoritmos utilizando recurso. Trs problemas importantes, nesse contexto, envolve o problema do menor caminho confivel, muito utilizado em Redes de computadores, o problema dos menores caminhos entre quaisquer pares de vrtices, e o problema do Caixeiro Viajante. Este artigo prope apresentar uma soluo conhecida para cada um desses problemas utilizando a Programao Dinmica. O artigo mostrar a construo dos subproblemas para a criao do algoritmo. Este trabalho est assim dividido: a Seo 2 apresentar o problema do Shortest Reliable Path, a Seo 3 apresentar o algoritmo Floyd-Warshall que resolve por Programao Dinmica o problema All-pairs Shortest Paths, a Seo 4 apresentar o Problema do Caixeiro Viajante e o algoritmo de Held-Karp, por fim a Seo 5 apresentar as Concluses.

2. Shortest Reliable Path


Muitos problemas em Redes de computadores envolvem encontrar o menor caminho para transmisso de pacotes de dados atravs de ns, como roteadores. Nesses casos simplesmente encontrar o caminho de menor custo, que o que o algoritmo de Dijktra se prope, no suficiente. [1]

O Algoritmo de Dijktra se preocupa em retornar o caminho de menor custo, ou seja, o caminho cuja somatria dos pesos das arestas mnimo. O caminho retornado por esse algoritmo pode ser longo, ou seja, envolvendo muitas arestas. Por exemplo, a Figura 1 apresenta um Grafo Ponderado, com 6 ns. Se aplicarmos o algoritmo de Dijktra para encontrar o caminho mnimo entre o vrtice inicial S e o vrtice final T, seria retornado o caminho de custo 5 com 4 arestas: No entanto, possvel traar um caminho com apenas 2 arestas, cujo custo um pouco maior que o caminho de Dijkstra. O caminho abaixo passa por apenas 2 arestas e tem custo igual a 6.

Figura 1 Encontrar o caminho mnimo entre S e T com poucas arestas [1]

No caso de transmisso de pacotes por uma rede provvel que o segundo caminho seja mais vantajoso do que o primeiro, mesmo tendo custo maior. Isso se deve pelas incertezas que envolvem o percurso em redes de computadores, adicionar um salto no percurso pode acarretar, por exemplo, em perda de pacotes. [1] Assim, o ideal que o algoritmo seja capaz de retornar, alm do caminho de custo mnimo, os caminhos com baixos custos e que utilizem no mximo um nmero de arestas.

2.1 Shortest Reliable Paths em Programao Dinmica Para resolver o problema do Caminho mnimo confivel com Programao Dinmica deve-se primeiro escolher um subproblema, de modo que toda informao vital para a resoluo do problema seja armazenada e levada diante [1]. Neste caso, pode-se definir: Para cada vrtice e cada inteiro , o tamanho do menor caminho entre e que utiliza arestas. Os valores iniciais de para todos os vrtices exceto . Com base nessas informaes, pode-se definir o subproblema como: { }

Aplicando o Algoritmo na Figura 1, pode-se gerar a matriz de distncias da Tabela 1. As colunas identificam a quantidade de arestas utilizadas no percurso, enquanto que as linhas apresentam o vrtice final do percurso. Pode-se observar que para alcanar o vrtice T, possvel traar um caminho (em amarelo) de e de custo igual a 5, esse o caminho que o Algoritmo de Dijsktra retornaria. Alm desse caminho, possvel traar um caminho de (em azul) e um caminho de , ambos de custo igual a 6.
Tabela 1. Aplicao do algoritmo Shortest Reliable Paths

K 0 S A Vrtices B C D T 0 1 1 2 5 2 10 3 8 5 6 3 4 6 8 4 6 4 8 5 7 7 5 5 7 8 10 6 8

3. All-pairs Shortest Paths


Muitas vezes deseja-se descobrir o caminho mnimo que liga quaisquer pares de vrtices de um grafo. Uma possvel soluo utilizar o algoritmos geral de Caminho Mnimo, o tanto de vezes quanto for o tamanho do conjunto de vrtices de um Grafo . No | | | | entanto essa soluo teria uma complexidade de . | | possvel criar uma soluo para este problema com complexidade utilizando Programao Dinmica, essa soluo chamada de Algoritmo de FloydWarshall.

3.1. Algoritmo de Floyd-Warshall O Algoritmo de Floyd-Warshall baseado na seguinte situao: o menor caminho entre os vrtices e utiliza um nmero de vrtices intermedirios, ou possivelmente nenhum vrtice intermedirio. Com base nisso, em um primeiro passo, ser considerado que no ser permitido usar vrtices intermedirios. Isso significa, que o menor caminho entre e ser o custo da aresta que liga a , se existir. [1] A partir desse ponto ser expandido, gradualmente, o conjunto de vrtices intermedirios permitidos, at que todos os vrtices sejam permitidos estar em todos os caminhos. Mais formalmente, o problema ser definido da seguinte forma [1]: Seja { } o conjunto de vrtices do grafo

o tamanho do caminho mnimo entre e , em que apenas os ns { } so permitidos como intermedirios Inicialmente, ser igual ao custo da aresta que liga a , se existir, e caso contrrio.

O prximo passo definir o subproblema que auxiliar na resoluo do problema All-pairs Shortest Paths. O subproblema, ento, ser expandir o conjunto de ns intermedirios adicionando o n . Ao adicionar esse novo vrtice, ser necessrio reexaminar todos os pares para verificar se ao usar o vrtice como um n intermedirio ser produzido um caminho mais curto [1]. Neste ponto, j so conhecidos os tamanhos do menor caminho de at e de at , que foram previamente calculados em subproblemas anteriores [1]. Assim, como mostra a Figura 2, possvel verificar qual o caminho ser mais curto, usando ou no o vrtice .

Figura 2 Comparao dos caminhos entre i a j, usando ou no o vrtice intermedirio k. [1]

Assim, ser usado para compor o caminho de condio abaixo seja satisfeita [1]:

se e somente se a

O Algoritmo completo de Floyd-Marshall est apresentado no Quadro 1, e como pode ser observado tem complexidade | | .
Quadro 1. Algoritmo Floyd-Marshall [1] for i = 1 to n: for j = 1 to n: dist(i, j, 0) = for all (i, j) E: dist(i, j, 0) = C(i, j) for k = 1 to n: for i = 1 to n: for j = 1 to n: dist(i, j, k) = min{dist(i, k, k-1) + dist(k, j, k-1), dist(i, j, k-1)}

4. The Traveling Salesman Problem


Um problema muito conhecido e bastante difundido o Problema do Caixeiro Viajante (The Traveling Salesman Problem). O problema definido assim: Um Caixeiro deve visitar apenas uma vez todas as diferentes cidades partindo de uma cidade base, e retornando ela. Qual caminho minimiza a distncia total percorrida pelo caixeiro? [2] Ou seja, deseja-se saber qual o percurso de menor distncia passando por todas as cidades, visitando apenas uma vez por cada uma, e retornar ao ponto de origem. Este um problema considerado NP-Completo, portanto muito difcil de ser resolvido, inclusive computacionalmente [2]. No Grafo da Figura 3 difcil, mas possvel calcular que o percurso timo teria tamanho igual a 10.

Figura 3 O percurso do Caixeiro Viajante timo tem tamanho 10 [1]

Usualmente o problema do Caixeiro Viajante dado por: Seja Grafo Ponderado, onde [3]: { } o conjunto de cidades a matriz de distancias entre cidades, com

um

O problema consiste em encontrar o percurso com distncia mnima, comeando em 1, passando por todas as cidades e retornando a 1. Existem diversas maneiras de resolver o problema, e at hoje so pesquisadas outras formas, aplicando diferentes tcnicas. Um forma resolver o problema aplicando a fora bruta, que consistiria em verificar todos os percursos possveis, a fim de retornar o menor. Considerando que todas possibilidades de percurso dada pela frmula , a complexidade dessa soluo seria [1]. Outra forma de resolver o problema utilizar a Programao Dinmica. Como ser visto na seo 4.1, essa soluo bem mais rpida do que a fora bruta, apesar de no ser polinomial.

4.1. O Caixeiro Viajante em Programao Dinmica A soluo do Problema do Caixeiro Viajante por Programao Dinmica foi proposta por Held, Karp em 1962. Essa soluo ficou conhecida pelos seus nomes, Algoritmo Held-Karp.

A soluo baseada na seguinte situao Suponha que o percurso inicia na cidade 1, visita-se algumas cidades parando quando alcanar a cidade , faltando cidades para visitar antes de retornar a 1. [2] Para formular o subproblema necessrio definir quais informaes devem ser utilizadas para ampliar o caminho. Primeiramente necessrio conhecer o vrtice em questo, pois ele ajudar a determinar qual ser a prxima cidade mais conveniente para a prxima visita. Alm disso, necessrio, tambm conhecer quais cidades j foram visitadas, de forma a no repeti-las. [1] A partir dessas informaes possvel definir o subproblema [1]: Dado um subconjunto de cidades , que inclui a cidade 1, e uma cidade seja o tamanho do menor caminho que passa por cada n de exatamente uma vez, comeando em 1 e terminando em . A partir desse subproblema possvel construir o algoritmo. Considerando: Se | | Se | | {} , ento , ento , para

Assim, tem-se que:

{}

O Algoritmo Held-Karp pode ser visto no Quadro 2. possvel observar que a complexidade do algoritmo . O Algoritmo divide o problema em subconjuntos de vrtices possveis analisados, o clculo de feito para vrtices, e por fim essas instrues so executadas n vezes [4].
Quadro 2. Algoritmo Held-Karp [1] { } : : } 1

{}

5. Concluso
O uso da Programao Dinmica, muitas vezes produz um algoritmo mais rpido do que as solues recursivas existentes. Foi possvel observar, que a formulao dos subproblemas bastante simples e eficiente. No caso do Caixeiro Viajante, no conhecido, ainda, uma soluo polinomial. A Programao Dinmica traz um algoritmo exponencial, que ainda assim tem menor complexidade comparado ao algoritmo de Fora Bruta.

References
[1] Dasgupta, S., Papadimitriou, C. H., & Vazirani, U. V. (2006). Algorithms. [2] Bellman, R. (1962). Dynamic programming treatment of the travelling salesman problem. Journal of the ACM (JACM), 9(1), 61-63. [3] Bellmore, M., & Nemhauser, G. L. (1968). The traveling salesman problem: a survey. Operations Research, 16(3), 538-558. [4] Held, M., & Karp, R. M. (1962). A dynamic programming approach to sequencing problems. Journal of the Society for Industrial & Applied Mathematics, 10(1), 196-210.