Está en la página 1de 12

ANLISIS DE ALGORITMOS

ESTRUCTURA DE DATOS UNIDAD I

OBJETIVO
El estudiante seleccionar estructuras de datos, algoritmos de ordenamiento y bsqueda para optimizar el rendimiento de una aplicacin

1. Anlisis de algoritmos
1.1 Concepto de complejidad de algoritmos. Cuando se estudian algoritmos de todo tipo, es bueno evaluarlos antes de pasarlos a cdigo. De esta manera podremos decidir cul se adapta mejor a los requerimientos de nuestro programa. La resolucin prctica de un problema exige de: Un algoritmo o mtodo de resolucin Un programa o codificacin Una vez disponible un algoritmo que funciona correctamente, es necesario definir criterios para medir su rendimiento o comportamiento. Estos criterios se centran principalmente en su simplicidad y en el uso eficiente de los recursos.

Respecto al uso eficiente de los recursos, ste suele medirse en funcin de dos parmetros: el espacio, es decir, memoria que utiliza, y el tiempo, lo que tarda en ejecutarse. Dichos parmetros van a servir adems para comparar algoritmos entre s, permitiendo determinar el ms adecuado de entre varios que solucionan un mismo problema. A menudo se piensa que un algoritmo sencillo no es muy eficiente. Sin embargo, la sencillez es una caracterstica muy interesante a la hora de disear un algoritmo, pues facilita su verificacin, el estudio de su eficiencia y su mantenimiento.

1.2 Aritmtica notacin O Ignora los factores constantes, es decir, ignora si se hace una mejor o peor implementacin del algoritmo, adems de ser independiente de los datos de entrada del algoritmo. Un algoritmo de complejidad O(n) es mas rpido que uno de complejidad O(n2). Cada algoritmo se comporta de modo diferente, de acuerdo a como se le entregue la informacin; por eso es conveniente estudiar su comportamiento en casos extremos, como cuando los datos estn prcticamente ordenados o muy desordenados.

Los problemas matemticos se pueden dividir en dos grupos: Problemas indecidibles: no se resuelven mediante un algoritmo Problemas decidibles: para los que existe al menos un algoritmo capaz de resolverlos en un tiempo razonable. Que un problema sea dicidible no implica que se pueda encontrar su solucin debido al elevado nmero de operaciones a realizar para resolverlos, as que se dividen en dos: Intratables: aquellos para los que no es factible obtener una solucin Tratables: para los que existe al menos un algoritmo capaz de resolverlos en un tiempo razonable.

Cuando se estudian algoritmos de todo tipo, es bueno evaluarlos antes de pasarlos a cdigo. De esta manera podremos decidir cul se adapta mejor a los requerimientos de nuestro programa. 1.3 Complejidad La complejidad de un algoritmo se enfoca en dos aspectos: tiempo y espacio. 1.3.1 Complejidad de un algoritmo La complejidad del algoritmo, no tiene que ver con dificultad, sino con rendimiento y es independiente de la implementacin.

El tiempo de ejecucin de un algoritmo depende de diversos factores: Los datos de entrada que le suministremos, La calidad del cdigo generado por el compilador al crear el programa objeto, La naturaleza y rapidez de las instrucciones mquina del procesador concreto que ejecute el programa y la complejidad del algoritmo. Existen dos estudios posibles sobre el tiempo: Uno que proporciona una medida terica (a priori), que consiste en obtener una funcin que acote (por arriba o por abajo) el tiempo de ejecucin del algoritmo para unos valores de entrada dados. Y otro que ofrece una medida real (a posteriori), consistente en medir el tiempo de ejecucin del algoritmo para unos valores de entrada dados y en un ordenador concreto.

Ambas medidas son importantes, la primera nos ofrece estimaciones del comportamiento de los algoritmos de forma independiente del ordenador en donde sern implementados y sin necesidad de ejecutarlos, la segunda representa las medidas reales del comportamiento del algoritmo. Se puede medir fsicamente (ejecutando el programa, reloj) o calcularse contando instrucciones o multiplicando por el tiempo requerido por cada instruccin. Debido a que los programas siempre incluyen sentencias condicionales se habla de un rango de valores. (peor caso mejor caso). Por otro lado, debemos contar cuantas veces el algoritmo necesita comparar. Si una lista de n trminos necesita n comparaciones la complejidad es O(n).

Algunos ejemplos de complejidades comunes son: O(1) : Complejidad constante. O(n2) : Complejidad cuadrtica. O(n log(n)) : Complejidad logartmica. 1.3.2 Complejidad de espacio Tiene que ver con los requerimientos de memoria, es decir, el algoritmo pude necesitar memoria adicional para realizar su labor. Es comn en la programacin tener que sacrificar memoria por rendimiento.

1.4 Seleccin de un algoritmo

Para decidirlo, considera lo siguiente:


Qu grado de orden tendr la informacin que vas a manejar? Si la informacin va a estar casi ordenada y no quieres complicarte, un algoritmo sencillo como el ordenamiento burbuja ser suficiente. Si por el contrario los datos van a estar muy desordenados, un algoritmo poderoso como Quicksort puede ser el ms indicado. Qu cantidad de datos vas a manipular? Si la cantidad es pequea, no es necesario utilizar un algoritmo complejo, y es preferible uno de fcil implementacin.

Qu tipo de datos quieres ordenar? Algunos algoritmos slo funcionan con un tipo especfico de datos (enteros, enteros positivos, etc.) y otros son generales, es decir, aplicables a cualquier tipo de dato. Qu tamao tienen los registros de tu lista? Algunos algoritmos realizan mltiples intercambios (burbuja, insercin). Si los registros son de gran tamao estos intercambios son ms lentos.