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.

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

tamaño del problema. Además, estas medidas son indep<strong>en</strong>di<strong>en</strong>tes del computador<br />

sobre el que se ejecute el algoritmo.<br />

Nuestro objetivo <strong>en</strong> este tema es proporcionar las herrami<strong>en</strong>tas necesarias<br />

para el cálculo de la complejidad de los algoritmos. De esta forma, <strong>en</strong> caso<br />

de disponer de más de un algoritmo para solucionar un problema, t<strong>en</strong>dremos<br />

elem<strong>en</strong>tos de juicio para decidir cuál es mejor desde el punto de vista de la<br />

efici<strong>en</strong>cia.<br />

Con frecu<strong>en</strong>cia, no es posible mejorar simultáneam<strong>en</strong>te la efici<strong>en</strong>cia <strong>en</strong> tiempo<br />

y <strong>en</strong> memoria, buscándose <strong>en</strong>tonces un algoritmo que t<strong>en</strong>ga una complejidad<br />

razonable <strong>en</strong> ambos aspectos. Actualm<strong>en</strong>te, y gracias a los avances de la técnica,<br />

quizás es más importante el estudio de la complejidad <strong>en</strong> el tiempo, ya que<br />

la memoria de un computador puede ser ampliada fácilm<strong>en</strong>te, mi<strong>en</strong>tras que el<br />

problema de la l<strong>en</strong>titud de un algoritmo suele ser más difícil de resolver.<br />

Además, el cálculo de las complejidades <strong>en</strong> tiempo y <strong>en</strong> espacio se lleva a cabo<br />

de forma muy similar. Por estas razones, se ha decidido dedicar este capítulo<br />

es<strong>en</strong>cialm<strong>en</strong>te al estudio de la complejidad <strong>en</strong> el tiempo.<br />

18.1 Conceptos básicos<br />

El tiempo empleado por un algoritmo se mide <strong>en</strong> “pasos”<br />

Para medir el tiempo empleado por un algoritmo se necesita una medida<br />

adecuada. Claram<strong>en</strong>te, si se aceptan las medidas de tiempo físico, obt<strong>en</strong>dremos<br />

unas medidas que dep<strong>en</strong>derán fuertem<strong>en</strong>te del computador utilizado: si<br />

se ejecuta un mismo algoritmo con el mismo conjunto de datos de <strong>en</strong>trada <strong>en</strong><br />

dos computadores distintos (por ejemplo <strong>en</strong> un PC-XT y <strong>en</strong> un PC-P<strong>en</strong>tium)<br />

el tiempo empleado <strong>en</strong> cada caso difiere notablem<strong>en</strong>te. Esta solución llevaría a<br />

desarrollar una teoría para cada computador, lo que resulta poco práctico.<br />

Por otro lado, se podría contar el número de instrucciones ejecutadas por el<br />

algoritmo, pero esta medida dep<strong>en</strong>dería de aspectos tales como la habilidad del<br />

programador o, lo que es más importante, del l<strong>en</strong>guaje de programación <strong>en</strong> el<br />

que se implem<strong>en</strong>te, y tampoco se debe desarrollar una teoría para cada l<strong>en</strong>guaje<br />

de programación.<br />

Se debe buscar <strong>en</strong>tonces una medida abstracta del tiempo que sea indep<strong>en</strong>di<strong>en</strong>te<br />

de la máquina con que se trabaje, del l<strong>en</strong>guaje de programación, del<br />

compilador o de cualquier otro elem<strong>en</strong>to de hardware o software que influya <strong>en</strong><br />

el análisis de la complejidad <strong>en</strong> tiempo. Una de las posibles medidas, que es<br />

la empleada <strong>en</strong> este libro y <strong>en</strong> gran parte de la literatura sobre complejidad,<br />

consiste <strong>en</strong> contar el número de pasos (por ejemplo, operaciones aritméticas,<br />

comparaciones y asignaciones) que se efectúan al ejecutarse un algoritmo.

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

Saved successfully!

Ooh no, something went wrong!