Escolar Documentos
Profissional Documentos
Cultura Documentos
Abstract. This paper present solutions across dynamic programing and greedy
algorithms to the problem of gas station. Such problem is made up of get the
low number of stops for supply in a course, where are known the vehicle
autonomy and the distance between each gas station. The solve solutions are
analyzed and compared.
1. Introdução
O problema dos postos de combustível consiste em obter o menor número de paradas
para abastecimento em um trajeto, onde se conhece a autonomia do veículo e as
distâncias entre os postos de combustível existentes no trajeto. A autonomia do veículo
refere-se a distância percorrida pelo mesmo após ser abastecido por completo. Deve ser
considerado que as distâncias entre os postos devem ser menores ou iguais a autonomia
do veículo, além disso, no ponto inicial o veículo encontra-se totalmente abastecido
[Cormen 2002].
O problema dos postos de combustível tem diversas aplicações reais, como em
programas que traçam rotas entre cidades e consideram as paradas para abastecimento.
Neste artigo são apresentadas possíveis soluções para o problema descrito, bem
como as análises de desempenho das mesmas. Os algoritmos presentes neste artigo
fazem uso de um pseudo-código semelhante a linguagem Pascal.
A seção 2 apresenta uma solução com o uso de programação dinâmica sendo
constituída de três subseções. A primeira subseção mostra a subestrutura ótima para o
problema, a segunda obtém a expressão de cálculo e a terceira exibe o algoritmo e a
análise do mesmo.
A seção 3 descreve uma solução através do uso de algoritmos gulosos. Esta
seção possui duas subseções. Uma subseção contendo o algoritmo com sua análise.
Outra contendo a prova de que o algoritmo é correto e a subestrutura ótima.
2. Solução através da Programação Dinâmica
A programação dinâmica é uma técnica utilizada na solução de problemas que possuem
subproblemas relacionados, ou seja, os subproblemas compartilham subproblemas. Uma
solução convencional trabalharia mais que o necessário, pois resolveria o mesmo
problema mais de uma vez. No caso da programação dinâmica utiliza-se como artifício
o armazenamento das soluções dos subproblemas, assim se o mesmo subproblema for
encontrado, não será necessário resolvê-lo novamente [Knuth, 1998].
0, se i ≤ 1
Pi Pi - 1 + 1, se DPUPi - 1 + Di - 1 > autonomia
Pi - 1
0, se i ≤ 1
DPUPi Di - 1 , se DPUPi - 1 + Di - 1 > autonomia
DPUPi – 1 + Di - 1
7. else Pi ← Pi – 1
8. DPUPi ← Di - 1 + Di – 1
9. return Pn + 1
4. Conclusão
Na análise dos algoritmos paradas_dinamico e paradas_guloso pode-se constatar que
possuem o mesmo tempo. O algoritmo paradas_guloso pode ser considerado melhor,
visto que no algoritmo paradas_dinamico é ocupado um espaço O(n). No entanto, se
modificarmos o algoritmo paradas_dinamico para retornar o vetor P como resposta,
consegue-se um resultado mais completo, já que o vetor P contém o número de paradas
para todos os percursos a partir do ponto inicial.
Os algoritmos apresentados através de programação dinâmica e da técnica gulosa
têm um tempo muito, isto é, polinomial. Um algoritmo que tente resolver o problema
dos postos de combustível através de força bruta, testando todas as possibilidades,
levaria um tempo muito maior, exponencial.
Pode-se constatar também que, no problema dos postos de combustível os
algoritmos construídos através de programação dinâmica e os algoritmos gulosos
possuem o mesmo tempo. Entretanto para a maioria dos problemas que possuem
solução através de algoritmos gulosos, tem-se um tempo menor do que em um
algoritmo que utiliza a programação dinâmica.
Referências
Cormen, T. H.; et al. (2002). “Algoritmos: Teoria e prática”, 2a ed. Rio de Janeiro:
Editora Campus.
Brassard, G. and Bratley, P. (1998). “Fundamentals of Algorithmics”. Prentice Hall of
India
Knuth, D. E. (1998). “The Art of Computer Programming”. Vol. 3 - Sorting and
Searching. Addison-Wesley.