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.

18.1. Conceptos básicos 397<br />

El coste dep<strong>en</strong>de de los datos<br />

Considérese el problema de decidir si un número natural es par o impar.<br />

Es posible usar la función Odd predefinida <strong>en</strong> <strong>Pascal</strong>, que permite resolver el<br />

problema <strong>en</strong> tiempo constante.<br />

Una segunda opción es emplear el algoritmo consist<strong>en</strong>te <strong>en</strong> ir restando 2<br />

repetidam<strong>en</strong>te mi<strong>en</strong>tras que el resultado de la sustracción sea mayor que 1, y<br />

finalm<strong>en</strong>te comprobar el valor del resto. Es fácil comprobar que se realizan n<br />

div 2 restas, lo que nos indica que, <strong>en</strong> este caso, el tiempo empleado dep<strong>en</strong>de del<br />

dato original n. Normalm<strong>en</strong>te, el tiempo requerido por un algoritmo es función<br />

de los datos, por lo que se expresa como tal: así, escribimos T (n) para repres<strong>en</strong>tar<br />

la complejidad <strong>en</strong> tiempo para un dato de tamaño n.<br />

Este tamaño de <strong>en</strong>trada n dep<strong>en</strong>de fuertem<strong>en</strong>te del tipo de problema que se<br />

va a estudiar. Así, por ejemplo, <strong>en</strong> el proceso de invertir el ord<strong>en</strong> de los dígitos<br />

de un número natural<br />

(4351, 0) ❀ (435, 1) ❀ (43, 15) ❀ (4, 153) ❀ (0, 1534)<br />

no importa el número <strong>en</strong> cuestión: el dato relevante para ver cuánto tiempo se<br />

tarda es la longitud del número que se invierte. Otro ejemplo: para sumar las<br />

compon<strong>en</strong>tes de un vector de números reales, el tiempo empleado dep<strong>en</strong>de del<br />

número n de compon<strong>en</strong>tes del vector. En este caso, se puede decir ambas cosas<br />

sobre el coste:<br />

• Que el coste de invertir un número, dígito a dígito, es lineal con respecto<br />

a su longitud (número de cifras)<br />

• Que el coste es la parte <strong>en</strong>tera de log 10(n)+1, o sea, una función logarítmica,<br />

si<strong>en</strong>do n el dato.<br />

Otra situación ejemplar se da <strong>en</strong> el caso del algoritmo de suma l<strong>en</strong>ta (véase<br />

el apartado 1.2.1) de dos números naturales a y b:<br />

while b > 0 do begin<br />

a:= a + 1;<br />

b:= b - 1<br />

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

Como se puede observar, el coste del algoritmo dep<strong>en</strong>de únicam<strong>en</strong>te del segundo<br />

parámetro, ya que se ejecutan exactam<strong>en</strong>te b iteraciones del cuerpo del<br />

bucle. Es, por tanto, un algoritmo de complejidad lineal con respecto a b, es<br />

decir, T (a, b) = b. Conclusión: no siempre todos los datos son importantes de<br />

cara a la complejidad.

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

Saved successfully!

Ooh no, something went wrong!