[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [obm-l] Problema do Camelo - solucao
Problema do Camelo :
Um camelo deve fazer uma entrega de 1000 litros de água ao Sindicato dos
Beduínos, que fica a 1000 km de distância de seu oásis de partida. O camelo
pode carregar até 100 litros de água e deve beber (continuamente) 1 litro de
água por quilômetro. Ele pode deixar depósitos de água em qualquer ponto do
caminho. De quanta água (no mínimo) ele precisa para cumprir sua missão?
-------------------------------
Obs:
1- O que se pretende é : qual o total mínimo da água necessária , no oásis
de partida , para as sucessivas idas e vindas , alcançando pontos cada vez
mais distantes, de forma a finalmente totalizar o transporte dos 1000 litros
a 1000 km de distância.
2- O camelo só precisa LEVAR a água , isto é , não precisa fazer a última
viagem de volta.
-------------------------------
Solução:
Chamemos o ponto inicial de INI e o final de FIM.
Cada ponto , entre INI e FIM , que vá servir como ponto de reabastecimento ,
chamaremos de "base intermediária" , ou simplesmente BASE . Claro que para
servir como ponto de reabastecimento, em algum momento o camelo lá deixará
alguma quantidade de água.
### Reorganização da política ###
Sejam A e B duas bases consecutivas , ao longo do caminho. Pois todas as
trajetórias que passam entre A e B (idas e vindas) podem ser segmentadas em
um ponto P intermediário qualquer , sem nenhum custo extra , de forma que
essa nova base pode acumular , numa 1a. fase , toda a água que seria levada
para mais adiante, e , numa 2a. fase essa base servirá como novo ponto
inicial para a finalização do processo global.
ORIGINAL:
|A|--------1------->|B|
|A|<-------2--------|B|
.
.
|A|--------3------->|B|
SEGMENTADO:
|A|---1-->|P|---4-->|B|
|A|<--2---|P|<--5---|B|
.
.
|A|---3-->|P|---6-->|B|
Repare que o custo do transporte é proporcional ao comprimento do percurso,
e neste processo de "compartimentação" , apenas segmentamos os percursos , e
os percorremos em outra ordem, sem alterar o comprimento total.
Assim fica claro que qualquer política sempre pode ser reorganizada, sem
ganhos ou perdas, de modo a levarmos inicialmente toda a água do ponto
inicial INI para a primeira base , e então , toda a água desta base para a
próxima , e assim sucessivamente , até alcançarmos o último ponto.
O inverso da segmentação também é válido : se entre A e P existem (2N+1)
percursos (idas+voltas) , e se entre P e B também existem (2N+1) percursos ,
então P pode ser eliminado , e o transporte pode ser feito com (2N+1)
percursos "compostos" , diretamente entre A e B .
Para verificarmos essa afirmação, chamemos de "a" e "b" as distâncias entre
"A" e "P" , e entre "P" e "B" , respectivamente . Temos então que, no máximo
, a água que haveria em P seria "100*N - (2N+1)*a" , de modo que em B
poderia haver "100*N - (2N+1)*a - (2N+1)*b" , que é o mesmo que "100*N -
(2N+1)(a+b)" .
### Política ótima ###
Observe-se que para se fazer o transporte de determinada quantidade de água
entre 2 bases consecutivas, a política ótima é "sair com 100 litros , e
voltar com o mínimo suficiente para o percurso de volta, até a última ida,
qdo então levaremos o resíduo que houver na base de partida" .
Entre outras coisas, vamos optar por eliminar pontos que segmentem
desnecessariamente os percursos.
Observemos também que cada litro a mais no final do percurso , implica em
uma quantidade maior na base anterior, e assim sucessivamente . Portanto ,
vamos resolver o problema vindo do final para o início, otimizando o gasto
com a água .
Isso exige , por exemplo , que façamos o no. mínimo de viagens entre cada
trecho, além de exigir que "enchamos o tanque" ao máximo em cada partida
(100 l ou o resíduo que houver ).
Bem, para chegarmos ao final com 1000 l , precisamos de no mínimo 11 viagens
de ida , a partir de algum ponto anterior aos 1000km . Para otimizar o custo
dessas viagens (que se reflete exponencialmente no início) , devemos fazer
as partidas com "o tanque cheio" , isto é , com 100 litros de cada vez .
Isso garante que o custo das viagens seja o menor possível, além de
"empurrar ao máximo" para o início a localização dessa base.
Portanto , a última base terá 1100 litros , e estará a 100/21 km do final
(total de 21 viagens) .
Para colocarmos 1100 litros na última base , precisaremos de 12 viagens de
ida a partir da penúltima base . Portanto , a penúltima base estará recuada
de mais 100/23 km , e terá 1200 litros . E assim , sucessivamente .
Explicando de outra forma:
O "desperdício de água" (custo do transporte de água) entre 2 pontos é igual
ao comprimento total dos segmentos que ligam esses 2 pontos.
Portanto, devemos minimizar a quantidade de segmentos , e maximizar o seu
comprimento em cada trecho (vindo de trás p/ frente), visto que no próximo
trecho mais segmentos serão necessários .
Assim, se no último ponto queremos ter 1000 L , devemos colocar 1100 L a
100/21 km de distância do final. Para isso, precisamos de 1200 L a 100/23 km
deste último ponto, e assim sucessivamente , até chegarmos a "quase" o
início.
Apenas no último trecho (lá no início) é que faremos , das 2N+1 viagens , N
partidas com 100L , e a última somente com o necessário para totalizarmos os
100*N litros da primeira base.
Assim , listando os depósitos de água , e seus posicionamentos (do final
para o início) até a primeira base , temos o seguinte:
------------------------------
1000 L - ponto final (FIM)
1100 L - 100/21 km para o final
1200 L - 100/23 km para a próxima base
.
.
.
N*100 L - 100/(2*N-1) km para a próxima base <- PRIMEIRA BASE
??? L - ponto inicial (INI) , ??? km para a primeira base
------------------------------
A distância da primeira base ao ponto final será :
S = 100/21 + 100/23 + ... + 100/(2N-1) , N o maior possível , que ainda
permita "S < 1000"
A distância entre o início e a primeira base é "1000 -S" , e o gasto
("desperdício") nesse primeiro trecho será (1000-S)*(2N+1) , de forma que o
gasto total será :
[1000 - ( 100/21 + 100/23 +...+ 100/(2N-1) ) ] * (2N+1) + 100N Litros
[]´s
Rogério.
_________________________________________________________________
MSN Hotmail, o maior webmail do Brasil. http://www.hotmail.com
=========================================================================
Instruções para entrar na lista, sair da lista e usar a lista em
http://www.mat.puc-rio.br/~nicolau/olimp/obm-l.html
=========================================================================