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.

398 Capítulo 18. Complejidad algorítmica<br />

En definitiva, a la hora de elegir el tamaño de los datos de <strong>en</strong>trada n de un<br />

algoritmo, convi<strong>en</strong>e que repres<strong>en</strong>te la parte o la característica de los datos que<br />

influye <strong>en</strong> el coste del algoritmo.<br />

El coste esperado, el mejor y el peor<br />

Otro aspecto interesante de la complejidad <strong>en</strong> tiempo puede ilustrarse analizando<br />

el algoritmo de búsqueda secu<strong>en</strong>cial ord<strong>en</strong>ada estudiado <strong>en</strong> el apartado<br />

15.1.2, <strong>en</strong> el que se recorre un vector (ord<strong>en</strong>ado creci<strong>en</strong>tem<strong>en</strong>te) desde su<br />

primer elem<strong>en</strong>to, hasta <strong>en</strong>contrar el elem<strong>en</strong>to buscado, o hasta que nos <strong>en</strong>contremos<br />

un elem<strong>en</strong>to <strong>en</strong> el vector que es mayor que el elem<strong>en</strong>to elem buscado. La<br />

implem<strong>en</strong>tación <strong>en</strong> <strong>Pascal</strong> de dicho algoritmo (ya mostrada <strong>en</strong> el citado apartado)<br />

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

const<br />

N = 100; {tama~no del vector}<br />

type<br />

tIntervalo = 0..N;<br />

tVector = array[1..N] of integer;<br />

function BusquedaSecOrd(v: tVector; elem: integer): tIntervalo;<br />

{PreC.: v está ord<strong>en</strong>ado creci<strong>en</strong>tem<strong>en</strong>te, sin repeticiones}<br />

{Dev. 0 (si elem no está <strong>en</strong> v) ó i (si v[i] = elem)}<br />

var<br />

i: tIntervalo;<br />

begin<br />

i:= 0;<br />

repeat<br />

{Inv.: v[j] = elem ∀j, 1 ≤ j ≤ i}<br />

i:= i + 1<br />

until (v[i] >= elem) or (i = N);<br />

{v[i] = elem o v[j] = elem ∀j, 1 ≤ j ≤ N}<br />

if v[i] = elem th<strong>en</strong> {se ha <strong>en</strong>contrado el valor elem}<br />

BusquedaSecOrd:= i<br />

else<br />

BusquedaSecOrd:= 0<br />

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

Intuitivam<strong>en</strong>te se puede ver que, si se ti<strong>en</strong>e la bu<strong>en</strong>a fortuna de <strong>en</strong>contrar<br />

el elem<strong>en</strong>to al primer int<strong>en</strong>to, el tiempo es, digamos, de un paso (un int<strong>en</strong>to).<br />

En el peor caso (cuando el elem<strong>en</strong>to elem buscado es mayor o igual que todos<br />

los elem<strong>en</strong>tos del vector), se t<strong>en</strong>drá que recorrer todo el vector v, invirti<strong>en</strong>do n<br />

pasos. Informalm<strong>en</strong>te, se podría p<strong>en</strong>sar que <strong>en</strong> un caso “normal”, se recorrería<br />

la “mitad” del vector (n/2 pasos).

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

Saved successfully!

Ooh no, something went wrong!