El Camionero Con Prisa

download El Camionero Con Prisa

of 17

Transcript of El Camionero Con Prisa

1

El Camionero con prisa

Un camionero conduce desde Concordia (Entre Ros) a Salta capital.Siguiendo una ruta dada y llevando un camin que le permite, con el tanque de nafta lleno, recorrer n kilmetros sin parar.Salta Km n

Concordia Km 0Licenciatura en Sistemas 2

Algoritmos y Complejidad

El Camionero con prisa

El camionero dispone de un mapa de rutas que le indica las distancias entre las estaciones de servicio que hay en el trayecto.

Como va apurado, el camionero desea detenerse a recargar, el menor nmero de veces posible.

Licenciatura en Sistemas Algoritmos y Complejidad

3

Planteo

Deseamos disear un algoritmo eficiente para determinar en qu estaciones de servicio tiene que parar

Demostrar que el algoritmo encuentra siempre la solucin ptima.

Licenciatura en Sistemas Algoritmos y Complejidad

4

Planteo

Supondremos que existen G estaciones de servicio en la ruta que sigue el camionero entre Concordia y Salta, incluyendo una en la ciudad destino, y que estn numeradas:0 (estacin en Concordia). . . . . . . .

G1 (situada en Salta)Licenciatura en Sistemas Algoritmos y Complejidad

5

Planteo

Supondremos adems que disponemos de un vector con la informacin que tiene el camionero sobre las distancias entre ellas:

TYPE DISTANCIA = ARRAY [1..G-1] OF CARDINAL;

de forma que el i-simo elemento del vector indica los kilmetros que hay entre las estaciones de servicio i1 e i. Para que el problema tenga solucin, hemos de suponer que ningn valor de ese vector es mayor que el nmero n de kilmetros que el camin puede recorrer sin recargar.Licenciatura en Sistemas Algoritmos y Complejidad

6

Planteo

Con todo esto, el algoritmo va a consistir en intentar recorrer el mayor nmero posible de kilmetros, sin recargar. Es decir, tratar de ir desde cada estacin de servicio en donde se pare a recargar a la ms lejana posible, as hasta llegar al destino.Licenciatura en Sistemas Algoritmos y Complejidad

7

Planteo

Para demostrar la validez de este algoritmo, proponemos lo siguiente, sean: x1,x2,...,xs las estaciones de servicio. En donde este algoritmo decide que hay que parar a recargar, y sea y1,y2,...,yt otro posible conjunto solucin de gasolineras.

Licenciatura en Sistemas Algoritmos y Complejidad

8

Llamaremos X a un camin que sigue la primera solucin, e Y a un camin que se gua por la segunda. Sea N el nmero total de kilmetros a recorrer (distancia entre las dos ciudades), y sea D[i] la distancia recorrida por el camionero hasta la i-sima gasolinera (1 i G1). Es decir, D[i] = d[k] k=1 i y D[G1] = N.Licenciatura en Sistemas Algoritmos y Complejidad

9

Lo que tenemos que demostrar es que s t, puesto que lo que queramos minimizar era el nmero de paradas a realizar. Para probarlo, basta con demostrar que xk yk para todo k.

Licenciatura en Sistemas Algoritmos y Complejidad

10

En primer lugar, como ambas descomposiciones son distintas, sea k el primer ndice tal que xk yk. Podemos suponer sin perder generalidad que k = 1, puesto que hasta xk1 los viajes son iguales, y en la gasolinera xk1 ambos camiones rellenan su tanque completamente.

Licenciatura en Sistemas Algoritmos y Complejidad

11

Por la forma en que funciona el algoritmo, si x1 y1 entonces x1 > y1, pues x1 era la gasolinera ms alejada a donde poda viajar el camionero sin repostar. Adems, tambin se tiene que x2 y2, pues x2 era la gasolinera ms alejada a donde poda viajar desde x1 el camionero sin repostar.

Licenciatura en Sistemas Algoritmos y Complejidad

12

Para probar este hecho, supongamos por reduccin al absurdo que y2 fuera estrictamente mayor que x2. Pero si Y consigue ir desde y1 a y2 es que hay menos de n kilmetros entre ellas, es decir, D[y2] D[y1] < n. Por tanto desde x1 tambin hay menos de n kilmetros hasta y2, esto es, D[y2] D[x1] < n puesto que D[y1] < D[x1].

Licenciatura en Sistemas Algoritmos y Complejidad

13

Entonces el mtodo no hubiera escogido x2 como siguiente gasolinera a x1 sino y2, porque el algoritmo busca siempre la gasolinera ms alejada de entre las que alcanza.

Licenciatura en Sistemas Algoritmos y Complejidad

14

Repitiendo el proceso, vamos obteniendo en cada paso que xk yk para todo k, hasta llegar a la ciudad destino, lo que demuestra la hiptesis.

Licenciatura en Sistemas Algoritmos y Complejidad

15

El siguiente procedimiento implementa este algoritmo, devolviendo un vector que indica en qu gasolineras ha de pararse y en cules no:

Licenciatura en Sistemas Algoritmos y Complejidad

16

TYPE SOLUCION = ARRAY [1..G-1] OF BOOLEAN; PROCEDURE Deprisa(n:CARDINAL; VAR d:DISTANCIA; VAR sol:SOLUCION); VAR i,numkilometros:CARDINAL; BEGIN FOR i:=1 TO G-1 DO sol[i]:=FALSE END; i:=0; numkilometros:=0; REPEAT REPEAT INC(i); numkilometros:=numkilometros+d[i]; UNTIL (numkilometros>n) OR (i=G-1); IF numkilometros>n THEN (* si nos hemos pasado... *) DEC(i); (* volvemos atras una gasolinera *) sol[i]:=TRUE; (* y repostamos en ella. *) numkilometros:=0; (* reset contador *) END UNTIL (i=G-1); END Deprisa;

Licenciatura en Sistemas Algoritmos y Complejidad

17