09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

460 Capítulo 20. Esquemas algorítmicos fundam<strong>en</strong>tales<br />

En efecto, se puede alterar el procedimi<strong>en</strong>to descrito de modo que cada operación<br />

realizada se registre <strong>en</strong> una tabla y cada operación por realizar se consulte<br />

previam<strong>en</strong>te <strong>en</strong> esa tabla por si ya se hubiera calculado. En el ejemplo anterior,<br />

se podría anotar junto a los puntos del propio mapa el mejor trayecto que conduce<br />

a ellos cada vez que se calcule. De este modo, no será necesario repetir esos<br />

cálculos cuando vuelvan a requerirse. Los cambios descritos son mínimos:<br />

• Se crea una tabla global (donde registraremos los mejores trayectos y las<br />

correspondi<strong>en</strong>tes distancias), y se rell<strong>en</strong>a inicialm<strong>en</strong>te con los trayectos y<br />

distancias de los puntos consecutivos (que son los datos del problema).<br />

• Entonces <strong>en</strong> vez de comprobar si un camino es directo, se hará lo sigui<strong>en</strong>te:<br />

si consecutivos(P,Q) <strong>en</strong>tonces<br />

el mejor trayecto es la secu<strong>en</strong>cia [P,Q] y su longitud es longArco(P,Q)<br />

comprobaremos si está ya tabulado:<br />

si tabulado(P,Q) <strong>en</strong>tonces<br />

extraer de la tabla el trayecto, trPQ, y su longitud, distPQ<br />

...<br />

• Por último, al finalizar un cálculo, se debe añadir a la tabla la acción<br />

sigui<strong>en</strong>te:<br />

Registrar <strong>en</strong> la tabla el trayecto (TrPQ) y la distancia (distPQ) hallados<br />

Esta solución es bastante satisfactoria. Sin embargo, este tipo de problemas<br />

permite, <strong>en</strong> g<strong>en</strong>eral, establecer un ord<strong>en</strong> <strong>en</strong>tre los subproblemas requeridos y, por<br />

consigui<strong>en</strong>te, <strong>en</strong>tre los cálculos necesarios. En el ejemplo anterior, los cálculos<br />

pued<strong>en</strong> hacerse por fases: una vez hallado (y anotado) el mejor trayecto que lleva<br />

a cada uno de los puntos de una fase i, es s<strong>en</strong>cillo y rápido hallar (y anotar) los<br />

mejores caminos hasta los puntos de la fase sigui<strong>en</strong>te, i+1. Más aún, como ya no<br />

se necesita la información correspondi<strong>en</strong>te a la fase i-ésima, es posible prescindir<br />

de ella, con el consigui<strong>en</strong>te ahorro de memoria.<br />

20.3.3 Formulación de problemas de programación dinámica<br />

El problema del cambio de moneda (véase el apartado 20.1.2) se puede formular<br />

también de modo que los valores de las monedas no guardan relación<br />

alguna: se dispone de una colección ilimitada de monedas, de valores v1, . . . , vn

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!