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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

20.3. <strong>Programación</strong> dinámica 457<br />

caso no hay trayecto posible <strong>en</strong>tre los nodos a <strong>en</strong>lazar, lo que puede consignarse,<br />

por ejemplo, indicando una distancia infinita <strong>en</strong>tre esos puntos).<br />

Estas ideas pued<strong>en</strong> expresarse como sigue, desarrollando a la vez un poco<br />

más el algoritmo 5 descrito antes:<br />

procedure MejorTray (P, Q: puntos; fP , fQ: nums.fase; var Tr: trayecto;<br />

var Dist: distancia);<br />

begin<br />

if consecutivos(P,Q) th<strong>en</strong><br />

Tr:=[P, Q]<br />

Dist:=longArco(P, Q), dato del problema<br />

else begin<br />

Sea fmed ← (fP + fQ) div 2,<br />

y sean {o1, . . . , ok} los puntos de paso de la etapa i-ésima<br />

Se parte de distPQ ← ∞ y trP Q ← [ ]<br />

para todo O ∈ {o1, . . . , ok} hacer begin<br />

MejorTray(P,O, fP , fmed,TrPO, DistPO)<br />

MejorTray(O,Q, fmed, fQ, TrOQ, DistOQ)<br />

if DistPQ > DistPO + DistOQ th<strong>en</strong> begin<br />

DistPQ:= DistPO + DistOQ;<br />

TrPQ := TrPO concat<strong>en</strong>ado con TrOQ<br />

<strong>en</strong>d {if}<br />

<strong>en</strong>d; {para todo}<br />

Tr:= TrPQ<br />

Dist:= DistPQ<br />

<strong>en</strong>d {else}<br />

<strong>en</strong>d; {MejorTray}<br />

20.3.2 Mejora de este esquema<br />

El planteami<strong>en</strong>to anterior se caracteriza por su inefici<strong>en</strong>cia debida al gran<br />

número de llamadas recursivas. En el caso anterior, por ejemplo, el recorrido az<br />

puede descomponerse de múltiples formas, como se recoge <strong>en</strong> el sigui<strong>en</strong>te árbol:<br />

✁☛<br />

✁<br />

ab be ac ce ad de ab bf ac cf ad df ab bg ac cg ad dg<br />

❆ ❆❯ ✁☛<br />

✁❆<br />

❆❯ ✁☛<br />

✁❆<br />

❆❯ ✁☛<br />

✁❆<br />

❆❯ ✁☛<br />

✁❆<br />

❆❯ ✁☛<br />

✁❆<br />

❆❯ ✁☛<br />

✁❆<br />

❆❯ ✁☛<br />

✁❆<br />

❆❯ ✁☛<br />

✁❆<br />

<br />

<br />

✠<br />

❆❯<br />

❅ <br />

<br />

❅❘<br />

✠ ❅ <br />

<br />

❅❘<br />

✠ ❅ ✏az<br />

✏ <br />

✏ <br />

✏✏<br />

✏✏<br />

✏✏<br />

✏✮ ✏<br />

❄<br />

✑❍<br />

✑ ❍❍❥<br />

✑❍<br />

✑ ❍❍❥<br />

✑❍<br />

✑ ❍❍❥<br />

✑✰<br />

ae<br />

ez ✑✰<br />

af<br />

fz ✑✰<br />

ag<br />

gz<br />

. . . ae . . . . . .<br />

❅❘<br />

5 Se advierte que este algoritmo es trem<strong>en</strong>dam<strong>en</strong>te inefici<strong>en</strong>te y, por tanto, nada recom<strong>en</strong>dable;<br />

<strong>en</strong> el sigui<strong>en</strong>te apartado se verán modos mejores de afrontar esta clase de problemas.

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

Saved successfully!

Ooh no, something went wrong!