## 1.1 EL ROL DE LOS ALGORITMOS EN LA COMPUTACIÓN (continuación)

Eficiencia de los algoritmos

Un objetivo natural del desarrollo de un programa computacional es optimizar como sea posible el consumo de los diversos recursos, aprovechándolos de la mejor manera que se encuentre. Se desea un uso eficiente de los recursos disponibles, sin desperdiciarlos. Para que un programa sea práctico, en términos de requerimientos de almacenamiento y tiempo de ejecución, debe organizar sus datos en una forma que apoye el procesamiento eficiente.

Siempre que se trata de resolver un problema, puede interesar considerar distintos algoritmos, con el fin de utilizar el más eficiente. Pero, ¿cómo determinar cuál es "el mejor"?. La estrategia empírica consiste en programar los algoritmos y ejecutarlos en un computador sobre algunos ejemplares de prueba. La estrategia teórica consiste en determinar matemáticamente la cantidad de recursos (tiempo, espacio, etc.) que necesitará el algoritmo en función del tamaño del ejemplar considerado.

El tamaño de un ejemplar x corresponde formalmente al número de dígitos binarios necesarios para representarlo en una computadora. Pero a nivel algorítmico consideraremos el tamaño como el número de elementos lógicos contenidos en el ejemplar.

Un algoritmo es eficiente cuando logra llegar a sus objetivos planteados utilizando la menor cantidad de recursos posibles, es decir, minimizando el uso memoria, de pasos y de esfuerzo humano.

Un algoritmo es eficaz cuando alcanza el objetivo primordial, el análisis de resolución del problema se lo realiza prioritariamente. Puede darse el caso de que exista un algoritmo eficaz pero no eficiente, en lo posible debemos de manejar estos dos conceptos conjuntamente.

La eficiencia de un programa tiene dos ingredientes fundamentales: espacio y tiempo. La eficiencia en espacio es una medida de la cantidad de memoria requerida por un programa. La eficiencia en tiempo se mide en términos de la cantidad de tiempo de ejecución del programa. Ambas dependen del tipo de computadora y compilador.

Medidas de Eficiencia

La calidad de un algoritmo puede ser avalada utilizando varios criterios. Uno de los criterios más importantes es el tiempo utilizado en la ejecución del algoritmos. Existen varios aspectos a considerar en cada criterio de tiempo. Uno de ellos está relacionado con el tiempo de ejecución requerido por los diferentes algoritmos, para encontrar la solución final de un problema o cálculo particular. Cuando se usa una computadora es importante limitar el consumo de recursos.

Recurso Tiempo:
• Aplicaciones informáticas que trabajan "en tiempo real" requieren que los cálculos se realicen en el menor tiempo posible.
• Aplicaciones que manejan un gran volumen de información si no se tratan adecuadamente pueden necesitar tiempos impracticables.

Recurso Memoria:
• Las máquinas tienen una memoria limitada.

Tamaño de los Datos

Variable o expresión en función de la cual intentaremos medir la complejidad del algoritmo.Para cada algoritmo la cantidad de recurso (tiempo, memoria) utilizados depende fuertemente de los datos de entrada. En general, la cantidad de recursos crece a medida que crece el tamaño de la entrada.

Se definen entonces las funciones de cantidad de recursos en base al tamaño (o talla) de la entrada. Suele depender del número de datos del problema. Este tamaño puede ser la cantidad de dígitos para un número, la cantidad de elementos para un arreglo, la cantidad de caracteres de una cadena, en problemas de ordenación es el número de elementos a ordenar, en matrices puede ser el número de filas, columnas o elementos totales, en algoritmos recursivos es el número de recursiones o llamadas propias que hace la función.

Cálculo de eficiencia en análisis iterativo

Cuando se analiza la eficiencia, en tiempo de ejecución, de un algoritmo son posibles distintas aproximaciones: desde el cálculo detallado (que puede complicarse en muchos algoritmos si se realiza un análisis para distintos contenidos de los datos de entrada, casos más favorables, caso peor, hipótesis de distribución probabilística para los contenidos de los datos de entrada, etc.) hasta el análisis asintótico simplificado aplicando reglas prácticas.

###