You are on page 1of 6

ESTRUCTURAS DE DATOS

UNIDAD 1 ANLISIS DE ALGORITMOS


COMPLEJIDAD DE ALGORITMOS La teora de complejidad de los algoritmos tiene que ver directamente con su eficiencia. La Eficiencia de un algoritmo est determinada por la cantidad de recursos que consume un programa durante su ejecucin. A menor consumo de recursos (Tiempo/Espacio) ser mayor la eficiencia. Los recursos son bsicamente dos: 1) El tiempo de procesador o Complejidad Temporal : Se denota por T y expresa el tiempo que tarda en ejecutarse un programa. Esto depender del nmero de instrucciones elementales que ejecuta y la rapidez de cada una de las instrucciones. 2) Espacio en memoria o Complejidad Espacial: Se denota por la letra E y expresa la cantidad de memoria que requiere un programa. Depende principalmente del nmero de variables que utiliza y del espacio que cada variable ocupa. Factores de los que depende la eficiencia de un programa. Los factores que determinan la eficiencia de un programa son: a) El algoritmo utilizado. b) El tamao de la entrada, que es una medida de la cantidad de datos que se debern procesar. El tiempo de ejecucin y el espacio en memoria requerida se expresan en funcin del tamao de los datos de entrada, denotado por n. De esta manera quien determina el consumo de los recursos ser la cantidad de datos procesados, de ah que el tiempo y el espacio dependen de n, Tiempo en funcin de n T( n) y Espacio en funcin de n E(n). La nocin del tamao de los datos de entrada tiene una definicin para cada problema en particular y una regla que suele funcionar es: 1) Si la entrada de datos es un solo entero, el tamao para n es el valor del entero. 2) Si la entrada es una secuencia de datos , el tamao para n es la cantidad de elementos de la secuencia. 3) Si la entrada de datos es estructurada, el tamao para n es el nmero de elementos del dato. Formas para medir la complejidad de un programa Existen dos formas de medicin de la complejidad: 1

ESTRUCTURAS DE DATOS

1) Prueba emprica: Consiste en implementar el programa y probarlo por medio de su ejecucin, midiendo el tiempo y el espacio en una mquina concreta y con datos especficos. 2) Anlisis de Complejidad: Consiste en estimar el tiempo y el espacio a partir del anlisis de las instrucciones que componen el algoritmo. La comparacin de ambos mtodos nos da el siguiente resultado: Para la prueba emprica: a) El resultado es dependiente de la mquina b) Es poco informativo c) Requiere implementar el algoritmo y ejecutarlo varias veces d) Nos da valores exactos, como el tiempo en segundos y el espacio de memoria en bytes, pero solo para una mquina determinada y datos concretos. Para el anlisis del algoritmo: a) Es independiente de la mquina b) Es ms informativo c) Se aplica sin necesidad de implementar el programa d) Nos da valores aproximados Notaciones Asintticas Las notaciones asintticas son aquellas que permiten caracterizar el ritmo de crecimiento de una funcin, en este caso las notaciones asintticas nos permiten caracterizar el comportamiento de T(n) y E(n). Las notaciones estudian el comportamiento de los algoritmos para volmenes de datos de gran tamao que es justo cuando la eficiencia del algoritmo es ms crtica. Con la notacin asinttica no se pretende establecer el tiempo exacto de ejecucin o el espacio de memoria ocupado sino que simplemente se clasifica el algoritmo en funcin del tamao de los datos de entrada. Las notaciones Asintticas ms comunes son: Notacin O(f) (f) (f) Definicin Conjunto de funciones cuyo crecimiento es menor o igual a f Conjunto de funciones cuyo ritmo de crecimiento es mayor o igual a f Conjunto de funciones con el mismo ritmo de crecimiento en E(n) y T(n) ARITMTICA DE LA NOTACIN O 2

ESTRUCTURAS DE DATOS

Ocupando el tamao de la entrada como el tamao o el parmetro que define el tiempo de ejecucin de un programa es posible describir por ejemplo a la funcin T(n)=n2+2n y esta funcin proporciona la informacin necesaria para clasificarla en los diferentes algoritmos.

Reglas para el clculo de una funcin de tiempo 1) Sentencias simples: Se refiere a sentencias de asignacin, operaciones aritmticas, entradas y salidas. Esta sentencia requiere un trabajo constante siendo su orden de complejidad igual a 1. Ejemplo: Suma= 0 1

2) Ciclos: Su tiempo de ejecucin es al menos el tiempo de ejecucin de las instrucciones dentro de l, multiplicado por el nmero de la iteraciones, sumndole los componentes del ciclo. Ejemplo Suma= 0 For(i=0;i<n;i++) Suma+=i ; una asignacin 1 1, n+1,n = 2n 2n+2 T(n) = 4n+3 Esto es si n = 2

*Es dos porque se est realizando una suma y

3) Ciclos anidados: Se analizan desde el ciclo interno hasta el ms externo. Una vez que se obtiene la complejidad del ciclo interno se multiplica por el nmero de iteraciones del ciclo externo obteniendo la complejidad final para el ciclo externo de la misma forma que un ciclo simple. Ejemplo: For(j=1;j<=n;j++) 4n2+4n+2 For(i=0;i<n;i++) Suma+=i ; 1, n+1, n 1, n+1,n = 2n = 2n+2 2n+2 + 4n 2+2n (4n+2)(n)= 4n2+2n T(n)=

4) Condicionales: La comparacin es de complejidad constante igual a 1 que se debe sumar con el peor de los casos entre el verdadero y el falso. Ejemplo: If (n>i) 1+3 = 4 Suma+=i*j; Else 3 3

ESTRUCTURAS DE DATOS

Suma=i; 1 Para simplificar el estudio de la complejidad se han adoptado ciertas convenciones y una de ellas es la del concepto de ORDEN, que indica el grado de Complejidad del algoritmo. A partir de la funcin de tiempo, para determinar el orden el orden del algoritmo se eliminan todos los trminos excepto el de mayor grado, despus se elimina el coeficiente del trmino. El concepto de orden de complejidad indica el grado o clasificacin de complejidad del algoritmo, as para T(n)=7n 2+11n+6 tenemos que n2 es el orden de complejidad del algoritmo, es decir O(n 2). Ordenes de Complejidad Entre los principales rdenes de complejidad se encuentran los siguientes: O (1) Orden Constante O (log n) Orden Logartmico O(n) Orden lineal O(n log n) Orden Cuasi-lineal O (n2) Orden Cuadrtico O (n3) Orden cbico O (n a) Orden Polinomial O (an) Orden Exponencial O (n!) Orden Factorial La complejidad constante: Indica cuando las instrucciones se ejecutan una sola vez. Complejidad Logartmica: Suele aparecer en determinados algoritmos y se considera un caso especial pues en el doble de tiempo permiten resolver problemas notablemente mayores y para resolver un problema doblemente mayor solo hace falta un poco ms de tiempo pero nunca el doble. Complejidad Lineal: Es una complejidad buena y tambin muy usual su comportamiento es ms natural es decir con el doble de datos a procesar nos dar el doble de tiempo de ejecucin. Aparece en la evaluacin de ciclos simples siempre que la complejidad de las instrucciones anteriores sea constante. Complejidad Cuasi-lineal: Se encuentra en algoritmos de tipo divide y vencers como el mtodo de ordenacin QuickSort. Se considera una buena 4

ESTRUCTURAS DE DATOS

complejidad si n se duplica el tiempo de ejecucin es ligeramente mayor de el doble. Complejidad Cuadrtica: Aparece en ciclos doblemente anidados y si n se duplica el tiempo de ejecucin puede aumentar hasta 4 veces. Complejidad Cbica: Se da en ciclos de triple anidacin si n se duplica el tiempo de ejecucin se multiplica hasta 8 veces. Complejidad Polinomial: Estos algoritmos se encuentran con dificultad a problemas de tamao creciente y se encuentran en el lmite de lo tratado. La complejidad es bastante mala. Complejidad Exponencial: Estos algoritmos no suelen ser muy tiles en la prctica por el elevadsimo tiempo de ejecucin. Se dan en programas recursivos que contienen dos o ms llamadas internas. Dado un algoritmo se debe conocer su complejidad temporal clasificndolo en uno de los rdenes de complejidad anteriores. COMPLEJIDAD Dado un algoritmo de debe conocer su complejidad Temporal por medio de alguna de las dos formas de medirla, recomendndose siempre el Anlisis del Algoritmo. La Complejidad Espacial del algoritmo depender de la memoria que requiera, y puede ser para diferentes conceptos: a) Variables estticas y Locales b) Variables dinmicas c) Parmetros de funcione y mtodos d) Indicadores de archivos La cantidad de memoria que consume un programa durante su ejecucin depende de las variables que haya creando dinmicamente y adems de la sucesin de llamadas a funciones por lo que se puede complicar considerablemente el anlisis. El caso ms sencillo de analizar ser el de los algoritmos no recursivos que no utiliza memoria dinmica y que siguen tres reglas para el clculo de su complejidad espacial 1.- Una variable de tipo elemental ocupa una cantidad de espacio constante que ser de acuerdo a su tipo. 2.- Una variable de tipo tupla ocupa la suma de sus campos. 3.- Una variable de tipo tabla con n elementos ocupara n veces el espacio de cada elemento SELECCIN DE UN ALGORITMO 5

ESTRUCTURAS DE DATOS

El impacto relativo de los factores que determinan el consumo de recursos de un proceso depende de la cantidad de datos a procesar y almacenar. 1.- Para un tamao de datos de entrada pequeo el lenguaje, el compilador y el equipo tienen un impacto considerable en el tiempo de ejecucin. Esto se debe a que si la entrada de datos es pequea, el nmero de instrucciones que se ejecutan tambin ser menor por lo que la velocidad individual de cada instruccin elemental determinar en mayor medida el tiempo de ejecucin sobre todo al comparar el mismo algoritmo en un equipo diferente. 2:- Para un tamao de datos de entrada grande, el lenguaje, el compilador y el equipo pierden importancia y lo ms importante pasa a ser el algoritmo, esto se debe a que un cambio en el equipo afecta el tiempo de ejecucin en un factor constante mientras que el cambio en el algoritmo puede llegar a incrementar, duplicar, elevar al cuadrado, al cubo etc el tiempo de ejecucin. 3.- La eficiencia es especialmente importante en: Aplicaciones Interactivas, Sistemas operativos multiproceso, Aplicaciones que se usan reiteradamente.

You might also like