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.2. Divide y v<strong>en</strong>cerás 453<br />

20.2 Divide y v<strong>en</strong>cerás<br />

La idea básica de este esquema consiste <strong>en</strong> lo sigui<strong>en</strong>te:<br />

1. Dado un problema P , con datos D, si los datos permit<strong>en</strong> una solución<br />

directa, se ofrece ésta;<br />

2. En caso contrario, se sigu<strong>en</strong> las sigui<strong>en</strong>tes fases:<br />

(a) Se divid<strong>en</strong> los datos D <strong>en</strong> varios conjuntos de datos más pequeños,<br />

Di.<br />

(b) Se resuelv<strong>en</strong> los problemas P (Di) parciales, sobre los conjuntos de<br />

datos Di, recursivam<strong>en</strong>te.<br />

(c) Se combinan las soluciones parciales, resultando así la solución final.<br />

El esquema g<strong>en</strong>eral de este algoritmo puede expresarse así:<br />

procedure Resolver P (D: datos; var S: solucion);<br />

begin<br />

if los datos D admit<strong>en</strong> un tratami<strong>en</strong>to directo th<strong>en</strong><br />

Resolver P(D) directam<strong>en</strong>te<br />

else begin<br />

Repartir D <strong>en</strong> varios conjuntos de datos, D1, . . . , Dk<br />

(más cercanos al tratami<strong>en</strong>to directo).<br />

Resolver P (D1), . . . , P (Dk)<br />

(llamemos S1, . . . , Sk a las soluciones obt<strong>en</strong>idas).<br />

Combinar S1, . . . , Sk, g<strong>en</strong>erando la solución, S, de P (D).<br />

<strong>en</strong>d<br />

<strong>en</strong>d; {Resolver P }<br />

Como ejemplo, veamos que el problema de ord<strong>en</strong>ar un vector admite dos soluciones<br />

sigui<strong>en</strong>do este esquema: los algoritmos Merge Sort y Quick Sort (véanse<br />

los apartados 15.2.5 y 15.2.4, respectivam<strong>en</strong>te).<br />

Tal como se pres<strong>en</strong>tó <strong>en</strong> el apartado antes citado, el primer nivel de diseño<br />

de Merge Sort puede expresarse así:<br />

si v es de tamaño 1 <strong>en</strong>tonces<br />

v ya está ord<strong>en</strong>ado<br />

si no<br />

Dividir v <strong>en</strong> dos subvectores A y B<br />

fin {si}<br />

Ord<strong>en</strong>ar A y B usando Merge Sort<br />

Mezclar las ord<strong>en</strong>aciones de A y B para g<strong>en</strong>erar el vector ord<strong>en</strong>ado.

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

Saved successfully!

Ooh no, something went wrong!