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.

7.4. Refinami<strong>en</strong>to correcto de programas 149<br />

como los bucles while terminan cuando su condición de <strong>en</strong>trada (<strong>en</strong> nuestro<br />

caso, Sqr(i) < N) es falsa, a la salida del mismo se verifica que i ≥ m. Esto,<br />

junto con el invariante, nos garantiza que, a la salida del mismo el valor de i es<br />

el mínimo <strong>en</strong> esas condiciones, esto es, m. Por consigui<strong>en</strong>te, bastará con hacer<br />

para t<strong>en</strong>er <strong>en</strong> m el valor descrito.<br />

Búsqueda dicotómica<br />

m:= i<br />

Parti<strong>en</strong>do del intervalo {0, . . . , N} <strong>en</strong> que está m, se trata de reducir ese<br />

intervalo (conservando m d<strong>en</strong>tro) cuantas veces sea preciso hasta lograr que sea<br />

unitario, con lo que su único valor final será m.<br />

En otras palabras, si<strong>en</strong>do<br />

var<br />

izda, dcha: integer;<br />

los extremos del intervalo, y estableci<strong>en</strong>do<br />

izda:= 0;<br />

dcha:= N<br />

se logra que izda ≤ m ≤ dcha, y ahora se trata de hacer<br />

while not izda = dcha do<br />

Reducir {izda, . . . , dcha}, mant<strong>en</strong>i<strong>en</strong>do izda ≤ m ≤ dcha<br />

A la salida de este bucle será izda ≤ m ≤ dcha y izda = dcha, con lo que,<br />

efectivam<strong>en</strong>te, izda = m = dcha. Y <strong>en</strong>tonces bastará con añadir m:= izda.<br />

Debe señalarse además que, como el tamaño del intervalo disminuye <strong>en</strong> cada<br />

vuelta, la terminación del bucle es segura.<br />

El sigui<strong>en</strong>te paso es refinar la reducción del intervalo de la forma descrita,<br />

esto es: mant<strong>en</strong>i<strong>en</strong>do m <strong>en</strong> su interior y de forma que la reducción sea efectiva.<br />

Si<strong>en</strong>do c el valor c<strong>en</strong>tral <strong>en</strong>tero del intervalo,<br />

<br />

izda + dcha<br />

c =<br />

2<br />

el método 6 que escogemos para reducirlo consiste <strong>en</strong> comparar c 2 con N, para<br />

ver si m está a la izquierda de c, a su derecha o es el propio c:<br />

6 Y de aquí procede el nombre de búsqueda dicotómica, compárese con el método de bipartición<br />

para aproximar una raíz real de una ecuación.

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

Saved successfully!

Ooh no, something went wrong!