Analisis de algoritmos

419 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
419
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Analisis de algoritmos

  1. 1. ESTRUCTURAS DE DATOS UNIDAD 1 ANÁLISIS DE ALGORITMOS COMPLEJIDAD DE ALGORITMOSLa teoría de complejidad de los algoritmos tiene que ver directamente con su eficiencia. LaEficiencia de un algoritmo está determinada por la cantidad de recursos que consume unprograma durante su ejecución. A menor consumo de recursos (Tiempo/Espacio) será mayorla eficiencia.Los recursos son básicamente 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 número 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 número 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 tamaño de la entrada, que es una medida de la cantidad de datos que se deberán procesar.El tiempo de ejecución y el espacio en memoria requerida se expresan en función del tamañode los datos de entrada, denotado por “n”. De esta manera quien determina el consumo de losrecursos será la cantidad de datos procesados, de ahí que el tiempo y el espacio dependen de‘n’, Tiempo en función de ‘n’ T( n) y Espacio en función de ‘n’ E(n).La noción del tamaño de los datos de entrada tiene una definición para cada problema enparticular y una regla que suele funcionar es: 1) Si la entrada de datos es un solo entero, el tamaño para ‘n’ es el valor del entero. 2) Si la entrada es una secuencia de datos , el tamaño para ‘n’ es la cantidad de elementos de la secuencia. 3) Si la entrada de datos es estructurada, el tamaño para ‘n’ es el número de elementos del dato.Formas para medir la complejidad de un programaExisten dos formas de medición de la complejidad:1) Prueba empírica: Consiste en implementar el programa y probarlo por medio de suejecución, midiendo el tiempo y el espacio en una máquina concreta y con datos específicos.2) Análisis de Complejidad: Consiste en estimar el tiempo y el espacio a partir del análisis delas instrucciones que componen el algoritmo. 1
  2. 2. ESTRUCTURAS DE DATOSLa comparación de ambos métodos nos da el siguiente resultado:Para la prueba empírica: a) El resultado es dependiente de la máquina 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 máquina determinada y datos concretos.Para el análisis del algoritmo: a) Es independiente de la máquina b) Es más informativo c) Se aplica sin necesidad de implementar el programa d) Nos da valores aproximadosNotaciones AsintóticasLas notaciones asintóticas son aquellas que permiten caracterizar el ritmo de crecimiento deuna función, en este caso las notaciones asintóticas nos permiten caracterizar elcomportamiento de T(n) y E(n). Las notaciones estudian el comportamiento de los algoritmospara volúmenes de datos de gran tamaño que es justo cuando la eficiencia del algoritmo esmás crítica.Con la notación asintótica no se pretende establecer el tiempo exacto de ejecución o el espaciode memoria ocupado sino que simplemente se clasifica el algoritmo en función del tamaño delos datos de entrada. Las notaciones Asintóticas más comunes son: Notación Definición O(f) Conjunto de funciones cuyo crecimiento es menor o igual a f Ω(f) Conjunto de funciones cuyo ritmo de crecimiento es mayor o igual a f Ѳ(f) Conjunto de funciones con el mismo ritmo de crecimiento en E(n) y T(n) ARITMÉTICA DE LA NOTACIÓN OOcupando el tamaño de la entrada como el tamaño o el parámetro que define el tiempo deejecución de un programa es posible describir por ejemplo a la función T(n)=n2+2n y estafunción proporciona la información necesaria para clasificarla en los diferentes algoritmos.Reglas para el cálculo de una función de tiempo 2
  3. 3. ESTRUCTURAS DE DATOS1) Sentencias simples: Se refiere a sentencias de asignación, operaciones aritméticas,entradas y salidas. Esta sentencia requiere un trabajo constante siendo su orden decomplejidad igual a 1.Ejemplo:Suma= 0 12) Ciclos: Su tiempo de ejecución es al menos el tiempo de ejecución de las instruccionesdentro de él, multiplicado por el número de la iteraciones, sumándole los componentes delciclo.EjemploSuma= 0 1For(i=0;i<n;i++) 1, n+1,n = 2n+2 T(n) = 4n+3 Esto es si n = 2 Suma+=i ; 2n *Es dos porque se está realizando una suma y una asignación3) Ciclos anidados: Se analizan desde el ciclo interno hasta el más externo. Una vez que seobtiene la complejidad del ciclo interno se multiplica por el número de iteraciones del cicloexterno obteniendo la complejidad final para el ciclo externo de la misma forma que un ciclosimple.Ejemplo:For(j=1;j<=n;j++) 1, n+1, n = 2n+2 + 4n2+2n T(n)= 4n2+4n+2 For(i=0;i<n;i++) 1, n+1,n = 2n+2 (4n+2)(n)= 4n2+2n Suma+=i ; 2n4) Condicionales: La comparación es de complejidad constante igual a 1 que se debe sumarcon el peor de los casos entre el verdadero y el falso.Ejemplo:If (n>i) 1+3 = 4 Suma+=i*j; 3 Else Suma=i; 1Para simplificar el estudio de la complejidad se han adoptado ciertas convenciones y una deellas es la del concepto de ORDEN, que indica el grado de Complejidad del algoritmo.A partir de la función de tiempo, para determinar el orden el orden del algoritmo se eliminantodos los términos excepto el de mayor grado, después se elimina el coeficiente del término. 3
  4. 4. ESTRUCTURAS DE DATOSEl concepto de orden de complejidad indica el grado o clasificación de complejidad delalgoritmo, así para T(n)=7n 2+11n+6 tenemos que n2 es el orden de complejidad delalgoritmo, es decir O(n2).Ordenes de ComplejidadEntre los principales órdenes de complejidad se encuentran los siguientes: O (1) Orden Constante O (log n) Orden Logarítmico O(n) Orden lineal O(n log n) Orden Cuasi-lineal O (n2) Orden Cuadrático O (n3) Orden cúbico O (n a) Orden Polinomial O (an) Orden Exponencial O (n!) Orden FactorialLa complejidad constante: Indica cuando las instrucciones se ejecutan una sola vez.Complejidad Logarítmica: Suele aparecer en determinados algoritmos y se considera uncaso especial pues en el doble de tiempo permiten resolver problemas notablemente mayoresy para resolver un problema doblemente mayor solo hace falta un poco más de tiempo peronunca el doble.Complejidad Lineal: Es una complejidad buena y también muy usual su comportamiento esmás natural es decir con el doble de datos a procesar nos dará el doble de tiempo deejecución. Aparece en la evaluación de ciclos simples siempre que la complejidad de lasinstrucciones anteriores sea constante.Complejidad Cuasi-lineal: Se encuentra en algoritmos de tipo divide y vencerás como elmétodo de ordenación QuickSort. Se considera una buena complejidad si n se duplica eltiempo de ejecución es ligeramente mayor de el doble.Complejidad Cuadrática: Aparece en ciclos doblemente anidados y si n se duplica el tiempode ejecución puede aumentar hasta 4 veces.Complejidad Cúbica: Se da en ciclos de triple anidación si n se duplica el tiempo de ejecuciónse multiplica hasta 8 veces.Complejidad Polinomial: Estos algoritmos se encuentran con dificultad a problemas detamaño creciente y se encuentran en el límite de lo tratado. La complejidad es bastante mala. 4
  5. 5. ESTRUCTURAS DE DATOSComplejidad Exponencial: Estos algoritmos no suelen ser muy útiles en la práctica por elelevadísimo tiempo de ejecución. Se dan en programas recursivos que contienen dos o másllamadas internas.Ejemplo grafico de la comparación de Complejidad Cuadrática y Exponencial 1000 800 600 400 200Dado un algoritmo se debe conocer su complejidad temporal clasificándolo en uno de losórdenes de complejidad anteriores. COMPLEJIDADDado un algoritmo de debe conocer su complejidad Temporal por medio de alguna de las dosformas de medirla, recomendándose siempre el Análisis del Algoritmo. La ComplejidadEspacial del algoritmo dependerá de la memoria que requiera, y puede ser para diferentesconceptos: a) Variables estáticas y Locales b) Variables dinámicas c) Parámetros de funcione y métodos d) Indicadores de archivosLa cantidad de memoria que consume un programa durante su ejecución depende de lasvariables que haya creando dinámicamente y además de la sucesión de llamadas a funcionespor lo que se puede complicar considerablemente el análisis.El caso más sencillo de analizar será el de los algoritmos no recursivos que no utiliza memoriadinámica y que siguen tres reglas para el cálculo de su complejidad espacial1.- Una variable de tipo elemental ocupa una cantidad de espacio constante que será deacuerdo 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 SELECCIÓN DE UN ALGORITMO 5
  6. 6. ESTRUCTURAS DE DATOSEl impacto relativo de los factores que determinan el consumo de recursos de un procesodepende de la cantidad de datos a procesar y almacenar.1.- Para un tamaño de datos de entrada pequeño el lenguaje, el compilador y el equipo tienenun impacto considerable en el tiempo de ejecución. Esto se debe a que si la entrada de datoses pequeña, el número de instrucciones que se ejecutan también será menor por lo que lavelocidad individual de cada instrucción elemental determinará en mayor medida el tiempode ejecución sobre todo al comparar el mismo algoritmo en un equipo diferente.2:- Para un tamaño de datos de entrada grande, el lenguaje, el compilador y el equipo pierdenimportancia y lo más importante pasa a ser el algoritmo, esto se debe a que un cambio en elequipo afecta el tiempo de ejecución en un factor constante mientras que el cambio en elalgoritmo puede llegar a incrementar, duplicar, elevar al cuadrado, al cubo etc… el tiempo deejecución.3.- La eficiencia es especialmente importante en: Aplicaciones Interactivas, Sistemasoperativos multiproceso, Aplicaciones que se usan reiteradamente. 6

×