Contenidos

1

Estructuras de Datos y Algoritmos
Tema 6. Análisis de algoritmos

• • • •

Noción de algoritmo Eficiencia de algoritmos Complejidad de algoritmos Análisis de algoritmos

Iván Cantador Silvia Teresita Acuña, José R. Dorronsoro
Escuela Politécnica Superior

Universidad Autónoma de Madrid

Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid

Contenidos

2

Noción de algoritmo. Definición
• ¿Cómo hacer una paella?

3

• • • •

Noción de algoritmo Eficiencia de algoritmos Complejidad de algoritmos Análisis de algoritmos

Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid

Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid

Seguidamente. Se deja cocer la paella durante treinta minutos. 3. Se deja reposar cinco minutos.3 cucharadas de tomate . se echa el pimentón.1 pizca de azafrán 4 Noción de algoritmo.En la receta de la paella: ingredientes. y cuando empieza a humear.5 litros de agua . siguiendo un orden establecido • Finita: el número de operaciones a ejecutar para resolver el problema asociado al algoritmo es limitado 5 • Instrucciones de elaboración 1.En la receta de la paella: el castellano receta cocinero utensilios de cocina plato • Una lista ordenada de sentencias con las que resolver el problema asociado al algoritmo . se sofríe el tomate y cuando empieza a oscurecer. A continuación. utensilios de cocina necesarios 6 Noción de algoritmo.En la receta de la paella: el plato en sí si se hubiesen ejecutado satisfactoriamente todas las instrucciones de preparación.5 cucharitas de pimentón . 4. etc.5 cucharadas de aceite .0. 7.425 gramos de arroz . 2. 6. Elementos • Elementos de un algoritmo • Una definición de la entrada del algoritmo . con cuidado de que no se queme. tapada por un paño. Definición • Un algoritmo es una secuencia bien definida. Elementos • Elementos de un algoritmo • Resolución de un problema en la vida real ENTRADA ingredientes 7 ALGORITMO EJECUTOR DEL ALGORITMO SALIDA • Un lenguaje formal en el que definir el algoritmo .150 gramos de pollo . Se añade el arroz y las hebras de azafrán. teniendo cuidado de repartir bien todo el arroz por la paella. dorándolos a fuego medio. se añade la verdura troceada y se sofríe durante un par de minutos. haciendo un hueco en medio de la paellera. rectificando de sal. y se deja hervir a fuego vivo hasta que el arroz esté en su punto y el caldo se evapore por completo. ordenada y finita de operaciones que permiten hallar la solución a un problema • Bien definida: las operaciones se enuncian en un lenguaje formal. 5. o “nada” en caso de que alguna instrucción no se pudiera haber ejecutado con éxito ALGORITMO + TADs PROGRAMA (escrito en un lenguaje de programación) EJECUTOR DEL ALGORITMO CPU (ejecutando las instrucciones del programa) SALIDA DATOS DE SALIDA (retorno del programa) Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . Definición • Receta: Paella valenciana • Ingredientes para 6 personas . Se calienta el aceite en la paella.) FUNCIONES BÁSICAS (primitivas ofrecidas por el SO) • Una definición de la salida del algoritmo .Noción de algoritmo. Se mueve bien y se añade agua hasta el borde de la paellera.50 gramos de judías verdes . variables en memoria.1. Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Noción de algoritmo.50 gramos de alcachofas . atendiendo a una sintaxis arbitraria (acordada) • Ordenada: las operaciones se ejecutan de manera secuencial. se echa el pollo troceado.En la receta de la paella: las instrucciones de preparación del plato • Resolución de un problema en un ordenador ENTRADA DATOS DE ENTRADA (argumentos.

Pseudocódigo • Ejemplo: calcular la suma de los elementos de una lista de números • Opción 3 entrada: entero LISTA[] salida: entero SUMA instrucciones: SUMA = 0 para i = 1 hasta longitud(LISTA) hacer: SUMA = SUMA + LISTA[i] i = i + 1 devolver SUMA 11 Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . evitando entrar en aspectos concretos de la sintaxis del lenguaje de programación a usar • Varía de un programador a otro pues no hay una estructura estándar • Supone un mecanismo ágil para el estudio y diseño de programas de ordenador Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid 8 Noción de algoritmo. Pseudocódigo • Ejemplo: calcular la suma de los elementos de una lista de números • Opción 2 entrada: lista de enteros LISTA salida: entero SUMA instrucciones: SUMA = 0 para cada ELEMENTO de LISTA hacer: SUMA = SUMA + ELEMENTO devolver SUMA 10 Noción de algoritmo. Pseudocódigo • Ejemplo: calcular la suma de los elementos de una lista de números • Opción 1 entrada: lista de números enteros LISTA salida: número entero SUMA instrucciones: inicializar SUMA a 0 recorrer los elementos de LISTA para cada ELEMENTO recorrido: sumar ELEMENTO a SUMA devolver SUMA 9 Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Noción de algoritmo. instrucciones de programación y palabras clave • Su objetivo es permitir a una persona (al programador) centrarse en los aspectos lógicos de la solución a un problema. Pseudocódigo • Pseudocódigo = pseudo(supuesto) + código(instrucción) • Describe un algoritmo utilizando una mezcla de frases en lenguaje natural.Noción de algoritmo.

Pseudocódigo 15 • Secuencias: bloque de instrucciones elementales de ejecución consecutiva. // sentencia R = A % B.programación estructurada 14 Noción de algoritmo. devolver SUMA. Pseudocódigo • Ejemplo: calcular la suma de los elementos de una lista de números • Opción 4 entero sumar(entero LISTA[]) SUMA = 0.) Delimitación de selecciones y repeticiones (:) Comentarios Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid .convenios • • • • • Sangrado/tabulado de bloques Definición de entradas y salidas de procedimientos/funciones Delimitación de secuencias (. Pseudocódigo 13 • Pseudocódigo = pseudo (supuesto) + código(instrucción) • Es una expresión o representación genérica de un algoritmo • Captura el funcionamiento básico de un algoritmo sin ceñirse a las restricciones de un lenguaje • Es cercano a la programación: tiene más o menos las mismas convenciones de legibilidad. 12 Noción de algoritmo. concreción (ordenación y claridad de ideas) y comprensión Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Noción de algoritmo. • Pseudocódigo . Pseudocódigo • Pseudocódigo . mientras R != 0: // repetición A = B.Noción de algoritmo. para i = 1 hasta longitud(LISTA): SUMA = SUMA + LISTA[i]. R = A % B. De por sí sólo se ejecutan una vez • Selecciones o bifurcaciones: bloques secuenciales de ejecución condicional • Repeticiones: bloque secuencial que se ejecuta repetidamente mientras se cumple alguna condición • Ejemplo: algoritmo de Euclides // mcd: encuentra el máximo común divisor de dos números entero mcd(entero A. i++. devolver B. B = R. entero B) si B > A: // selección intercambiar A y B.

espacio de almacenamiento.Está excesivamente ligado al compilador y a la máquina donde se realice la ejecución. . por lo que en algunos casos las medidas no son extrapolables . Noción de eficiencia • Dados dos algoritmos distintos que solucionan un mismo problema. etc. Medida de la eficiencia • Determinación teórica de la eficiencia de un algoritmo • Consiste en determinar matemáticamente la cantidad de recursos (tiempo. lo cual no es siempre fácil de realizar . mucho tiempo Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid 18 Eficiencia de algoritmo. Medida de la eficiencia • Determinación empírica de la eficiencia de un algoritmo • Consiste en ejecutar el algoritmo en una máquina real para instancias de diferente tamaño del problema considerado.Puede depender de la pericia del programador . espacio) que consume un algoritmo en función del “tamaño” de las instancias de problemas que resuelve .Por “tamaño” se puede entender varias cosas: número de ítems de entrada. nuestro objetivo principal será mejorar la eficiencia temporal • ¿Cómo analizar el tiempo de ejecución? Considerando el rendimiento: relacionar velocidad y tamaño de entrada • Existen dos formas de valorar la eficiencia de los algoritmos • Empíricamente • Analíticamente (de forma teórica) Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Eficiencia de algoritmo. el que menos tiempo emplee y menos espacio de almacenamiento necesite • Habitualmente. y por lo tanto. sus propiedades son probablemente distintas • Tardan tiempos distintos en solucionar el problema (eficiencia temporal) • Precisan de tamaños de almacenamiento distintos (eficiencia espacial) 17 • • • • Noción de algoritmo Eficiencia de algoritmos Complejidad de algoritmos Análisis de algoritmos • Una pregunta obvia que surge a la hora de considerar ambos algoritmos es: ¿cuál de ambos es mejor? • Lógicamente.La eficiencia se convierte en una función tN que permite calcular el tiempo/espacio requerido por el algoritmo para problemas de tamaño de entrada N 19 Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid .Contenidos 16 Eficiencia de algoritmo.Requiere una adecuada selección de los datos de entrada. y obtener los resultados de tiempos consumidos y espacios utilizados • Inconvenientes . valor(es) de los ítems.Requiere múltiples ejecuciones de un mismo algoritmo.

i. 4 y 5 como sentencias básicas. 7 se ejecutan 1 vez Se observa que 4. indice U) i = P. 3. • Para calcular taeminimo. 4. 6 se ejecutan B – A veces Se observa que 5 se ejecutan B – A + 1 veces Se observa que 5 se ejecuta <= B – A veces Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid 1 2 3 4 5 6 7 Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . indice A. U). Cálculo del tae • Ejemplo de cálculo del tae: algoritmo de ordenación por selección (SelectSort) 1 2 3 4 5 6 7 indice minimo(tabla T. 5. 2. return m.Eficiencia de algoritmo. mientras i <= B: si T[i] < T[m]: m = i. B) = 3 + 4 * nº iteraciones bucle + 1 = 4 + 4 * nº iteraciones bucle = 4 + 4 * (B – A) Como nº iteraciones bucle = B – A ≤ U – P: taeminimo(T. indice B) m = A. Cálculo del tae • Ejemplo de cálculo del tae: algoritmo de ordenación por selección (SelectSort) 1 2 3 4 5 SelectSort(tabla T. P. indice B) m = A. Ip) taeA(I) = número de veces que se ejecutan las sentencias básicas del algoritmo A sobre la entrada I 20 Eficiencia de algoritmo. Cálculo del tae • Ejemplo de cálculo del tae: SelectSort • Cálculo de taeminimo última vez que se ejecuta la comparación (3) 23 taeminimo(T. i++. entonces hay que calcular primero taeminimo Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Eficiencia de algoritmo. m = minimo(T. se definen 1. i = A + 1. 4. indice A. i = A + 1. 6. que será las “sentencias básicas” esto independiza el análisis de la máquina • El tae se medirá como el número veces que se ejecutan las sentencias básicas . 21 • Para calcular taeSelectSort. mientras i <= B: si T[i] < T[m]: m = i. A. i++. swap(T[i]. U ) ≤ 4 + 4 (U – P) indice minimo(tabla T. 5 se ejecutan U – P veces Se observa que 2 se ejecuta U – P + 1 veces Se observa que como la sentencia 3. i++. I2. i. U) no es una “sentencia básica” (porque llama a una función). mientras i < U: m = minimo(T. se definen 1. 22 Eficiencia de algoritmo. 2. indice P. 7 como sentencias básicas Se observa que 1. 2. …. y: Se observa que 1 se ejecuta 1 vez Se observa que 3. T[m]).Es decir: dado un algoritmo A y una entrada I = (I1. Medida de la eficiencia • Determinación teórica de la eficiencia de un algoritmo • Una opción es analizar sobre el pseudocódigo o el código tiempos abstractos de ejecución (tae) • Para analizar el tae hay que fijar una unidad de medida. return m.

P. representativa del algoritmo 26 Eficiencia de algoritmo. tae = ηA(I) = tn. } 27 • De este modo. Función tn • La función tn se identifica a partir de una o varias “operaciones básicas” • Una operación básica (nueva unidad de medida de eficiencia) es aquella sentencia tal que el trabajo total realizado por un algoritmo (en tiempo o en espacio) es proporcional al número de veces que se ejecuta la sentencia • Debe aparecer en el bucle más interno donde se resuelve el algoritmo y debe ser “relevante”. con ηA(I) = tn = número de veces que A ejecuta su operación básica sobre I tn = N Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . T[m]). mientras i < U: m = minimo(T. indice P.Eficiencia de algoritmo. indice U) i = P. indice U) { i = P. U) ≤ 2 + 8(U − P) + 4∑ (U − i ) i=P U −1 25 última vez que se ejecuta la comparación (2) taeSelectSort(T. U ) + 1 i=P U −1 = 2 + 8( N − 1) + 4∑ ( N − i ) P=1. mientras i <= U: si K == T[i]: posibles operaciones básicas return i. U=N i =1 N −1 ≤ 1 + 4(U − P ) + ∑ (4 + 4 (U − i )) + 1 i=P U −1 = 2 + 8( N − 1) + 4∑ N − 4∑ i i =1 i =1 N −1 N −1 = 2 + 8(U − P) + 4∑ (U − i ) i=P U −1 = 2 + 8 N − 8 + 4 N ( N − 1) − 4 N ( N − 1) 2 1 2 3 4 5 SelectSort(tabla T. i++. i++. Función tn • Operación básica • Ejemplo: búsqueda lineal indice BusquedaLineal(clave K. i. Cálculo del tae • Ejemplo de cálculo del tae: SelectSort • Cálculo de taeSelectSort taeSelectSort(T.U )) + 1 = 1 + 4(U − P) + ∑ taeminimo (T . P. i. tabla T. Cálculo del tae • Ejemplo de cálculo del tae: SelectSort • Cálculo de taeSelectSort U −1 i=P 24 Eficiencia de algoritmo. return ERROR. U) = 1 + ∑ (4 + taeminimo (T . = 2 + 8N − 8 + 4 N 2 − 4 N − 2 N 2 + 2 N taeSelectSort(T. indice P. U) ≤ 2 N 2 + 6 N − 6 Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Eficiencia de algoritmo. i. P. swap(T[i]. U).

return m. T[m]).Eficiencia de algoritmo. i. Función tn • Operación básica • Ejemplo: búsqueda binaria (T ordenada de forma creciente) ind BusquedaBinaria(tabla T. indice minimo(tabla T. i++. else: P = M + 1. clave K) { mientras P <= U: M = (P + U) / 2. indice B) m = A. indice U. Función tn • Operación básica • Ejemplo: ordenación por selección SelectSort(tabla T. swap(T[i]. indice P. si T[M] == K: return M. indice minimo(tabla T. indice U. else: P = M + 1. clave K) { mientras P <= U: M = (P + U) / 2. } 29 tn ≅ log2N Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Eficiencia de algoritmo. swap(T[i]. mientras i <= B: si T[i] < T[m]: posibles operaciones básicas m = i. indice P. U). indice A. posibles operaciones básicas else si K < T[M]: U = M . return m. indice U) i = P. mientras i < U: m = minimo(T. return ERROR. indice U) i = P.1. T[m]). U). Función tn • Operación básica • Ejemplo: ordenación por selección SelectSort(tabla T. i = A + 1. } 28 Eficiencia de algoritmo. 30 Eficiencia de algoritmo. i++. i++. 31 tn ≅ N2/2 Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . posibles operaciones básicas else si K < T[M]: U = M . indice B) m = A. si T[M] == K: return M. Función tn • Operación básica • Ejemplo: búsqueda binaria (T ordenada de forma creciente) ind BusquedaBinaria(tabla T. indice A. indice P. return ERROR. i++. i. mientras i <= B: si T[i] < T[m]: posibles operaciones básicas m = i. indice P. i = A + 1.1. mientras i < U: m = minimo(T.

Eficiencia de algoritmo. el algoritmo tardaría en ejecutarse c*(log2N+1) segundos . Función tn • La operación básica seleccionada sólo tiene que ser proporcional al trabajo realizado por el algoritmo 32 Eficiencia de algoritmo. Orden de complejidad • Una función tn es aquella que predice la eficiencia de un algoritmo con una precisión limitada por un multiplicador constante c 35 • • • • Noción de algoritmo Eficiencia de algoritmos Complejidad de algoritmos Análisis de algoritmos • El análisis teórico de la eficiencia de algoritmos predice de forma aproximada el comportamiento (tiempo de ejecución) real del algoritmo tn c3tn c2tn c1tn n Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid .De este modo. tn predice el tiempo consumido por el algoritmo con la precisión de un multiplicador constante c • Dadas dos funciones tn y un que representan la eficiencia temporal (o espacial) de dos algoritmos • Instancia concreta del problema .Si para una ejecución de esa operación se emplean c segundos. el algoritmo de búsqueda binaria realiza log2N+1 operaciones M = (P + U) / 2 .Por ejemplo.El mejor algoritmo será el que proporcione un menor valor de función tn. Función tn 33 • Permite evitar el cálculo exacto del tiempo de ejecución del algoritmo . un para un N dado • Caso general del problema . un a nivel asintótico (cuando N tiende a infinito) • La función tn determina la eficiencia temporal (o espacial) de un algoritmo a coste unitario Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Contenidos 34 Complejidad de algoritmos.El mejor algoritmo será el que proporcione un menor valor de función tn.

O(f(n)) y Ω(f(n)) caracterizan de forma “gruesa” a las funciones g(n) • El que g(n) ∈ O(f(n)). Ω(c). O(f(n)) es el conjunto de funciones de complejidad g(n) para las cuales existe una constante real positiva c y un entero no negativo N tales que ∀n≥N. O(n4) • n2 pertenece a Ω(n2). Cota inferior: Ω • Dada una función f(n). g(n) ≥ c·f(n) tn 38 Complejidad de algoritmos. n+1. no aporta información sobre O(f(n)) N Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid n Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . Orden de complejidad • Interesa estudiar tn en los “casos de n grandes” • Hay que buscar funciones que acoten (de forma asintótica) inferior y superiormente a tn ¿? tn c3tn c2tn c1tn ¿? 36 Complejidad de algoritmos. O(n3). no aporta información sobre Ω(f(n)) • El que g(n) ∈ Ω(f(n)). Cota superior: O grande • Dada una función f(n).Complejidad de algoritmos. Orden: Θ • O(f(n)) y Ω(f(n)) son conjuntos de funciones • n. n2+1. n2+n+1 pertenecen a Ω(n2) 39 • Una función (o conjunto de funciones) g(n) pertenece simultáneamente a múltiples O(f(n)) y Ω(f(n)) • n2 pertenece a O(n2). Ω(f(n)) es el conjunto de funciones de complejidad g(n) para las cuales existe una constante real positiva c y un entero no negativo N tales que ∀n≥N. ¿es posible caracterizar el comportamiento de la función tn? n Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid N Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid n Complejidad de algoritmos. con c constante real positiva g(n) c·f(n) • Por ello. n2. n2+n pertenecen a O(n2) • n2. Ω(n). g(n) ≤ c·f(n) tn c·f(n) g(n) 37 • Dado el problema inducido por los multiplicadores.

entonces f (n) ∈ Θ( g (n)) lim f (n)  =  0. y un entero no negativo N tales que ∀n≥N.Complejidad de algoritmos. pero no a Θ( g (n)) 43 • Θ(f(n)). lo cual supondría una mejor caracterización de las mismas tn c·f1(n) g(n) 40 Complejidad de algoritmos. Orden: Θ 41 • Dada una función f(n). entonces f (n) ∈ Ω( g (n)). al acotar superior e inferiormente las funciones g(n). que es precisamente lo que se buscaba) tn c·f (n) g(n) d·f (n) N Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid n Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . Orden: Θ 42 Complejidad de algoritmos. Orden: Θ • Propiedades del orden Θ • Dualidad g(n) ∈ O(f(n)) ⇔ f(n) ∈ Ω(g(n)) • Clasificación g(n) ∈ Θ(f(n)) ⇔ f(n) ∈ Θ(g(n)) • Límite  c ∈ R + . las funciones g(n) “tardarán más o menos lo mismo” que la función de eficiencia f(n). entonces f (n) ∈ O( g (n)). pero no a Θ( g (n)) n → ∞ g ( n)  ∞. Θ(f(n)) = O(f(n)) ∩ Ω(f(n)) • Θ(f(n)) es el conjunto de funciones de complejidad g(n) para las cuales existen constantes reales positivas c y d. permite identificar qué g(n) poseen una complejidad “en el orden de” f(n) • Asintóticamente. con la precisión de un multiplicador constante (u obviando éste. c·f(n) ≤ g(n) ≤ d·f(n) d·f2(n) n Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Complejidad de algoritmos. Orden: Θ • Sería interesante obtener algún tipo de acotación que implicara simultáneamente a O y Ω • Ello permitiría acotar superior e inferiormente las funciones g(n).

Ω y Θ pueden extenderse a múltiples parámetros con la misma formulación para un único parámetro 0 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . Θ(an). Θ(n!) donde 2 < j < k. sino de varios parámetros simultáneamente • Las definiciones de O. Θ(log n). Θ(n·log n). Observaciones 1500000 45 Gráficas de funciones de complejidad habituales n 2 n 3 n 2 1000000 500000 lgn . Θ(n). Θ(n2). Observaciones 2000 46 Complejidad de algoritmos. y 1 < a < b Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid 44 Complejidad de algoritmos. Θ(bn). Θ(nj).Complejidad de algoritmos. Observaciones 47 n 2 Gráficas de funciones de complejidad habituales n lgn 1500 n 2 y n andan por ahí arriba n 3 1000 500 • Puede suceder que el análisis de la complejidad de un algoritmo no dependa únicamente de un parámetro “n”. Θ(nk). Observaciones • Existen un conjunto de ordenes de complejidad de utilización habitual Θ(1). n y n lgn andan por aquí 0 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Complejidad de algoritmos.

Determinación de funciones tn • Ejemplo: búsqueda lineal 51 • En general. indice U) { i = P. desde qué punto de vista estudiar una cierta propiedad del algoritmo Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Análisis de algoritmos. Introducción 49 • • • • Noción de algoritmo Eficiencia de algoritmos Complejidad de algoritmos Análisis de algoritmos • El análisis de algoritmos consiste en determinar las funciones tn que describen alguna propiedad de interés: • tiempo consumido • espacio utilizado • El análisis tiene dos perspectivas distintas: • cómo debe realizarse. indice P. cómo determinar las funciones tn • qué tipo de análisis es conveniente realizar.Una operación básica es aquella sentencia tal que el trabajo total realizado por el algoritmo (en tiempo o espacio) es proporcional al número de veces que se ejecuta dicha sentencia indice BusquedaLineal(clave K. en gran medida. } • Identificar el parámetro de entrada “n” • Analizar desde dentro hacia fuera las estructuras de control que producen la ejecución repetida de la operación básica Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . return ERROR. mientras i <= U: si K == T[i]: return i. de la experiencia 50 Análisis de algoritmos. i.e. i++. i. Determinación de funciones tn • No existe una fórmula o procedimiento general que permita identificar las funciones tn de un algoritmo • La identificación exitosa de dichas funciones es altamente heurística y depende.e. para identificar la función tn se debe: • Identificar la operación básica de interés .Contenidos 48 Análisis de algoritmos. tabla T.

Determinación de funciones tn • Complejidad de una estructura de control if if (condicion) { bloque_1 } else { bloque_2 } 55 • tn(sentencia) = 1 si la sentencia es operación básica y no es estructura de control o invocación a función • tn(sentencia) = 0 en otro caso (en realidad. es una constante de valor más o menos alto. } 52 Análisis de algoritmos. indice U) { i = P. Determinación de funciones tn 53 • En el análisis se deben considerar: • Sentencias simples • Bloques de sentencias • Estructuras de control .Análisis de algoritmos. tn(condicion) + tn(bloque2)} si la operación básica está incluida en la alternativa • tn(if) = 0 en otro caso • tn(bloque) = tn(sentencia1) + tn(sentencia2) + … + tn(sentenciak) Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid .. sentencia_k • tn(if) = max{tn(condicion) + tn(bloque1). mientras i <= U: si K == T[i]: posibles operaciones básicas return i.Repetitivas: for.. return ERROR. while. i++. if-else. tabla T. switch . pero no relevante a efectos de análisis asintótico) • Complejidad de un bloque de sentencias sentencia_1 sentencia_2 sentencia_3 . indice P. Determinación de funciones tn • Complejidad de una sentencia sentencia 54 Análisis de algoritmos. do-while • Invocaciones a función estructuras de control involucradas Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Análisis de algoritmos.Alternativas: if. Determinación de funciones tn • Ejemplo: búsqueda lineal parámetro de entrada n = U – P + 1 indice BusquedaLineal(clave K.

int tabla[N]) { . else return i 56 Análisis de algoritmos. Determinación de funciones tn • Complejidad de un bucle while (equivalente para for) while (condicion) { bloque } 57 tn(if) = max{tn(condicion) + tn(bloque1). 1 + 0} = 1 • tn(while) = 0 si la operación básica NO está en el bloque del bucle • tn(while) = tn(condicion) + tn(bloque) si la operación básica SÍ está incluida en el bloque del bucle y las iteraciones NO dependen de n • tn(while) = #iteraciones · (tn(condicion) + tn(bloque) ) si la operación básica SÍ está incluida en el bloque del bucle y las iteraciones SÍ dependen de n Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Análisis de algoritmos. . Determinación de funciones tn • Complejidad de una estructura de control while • Ejemplo int BusquedaLineal(int x. tn(condicion) + tn(bloque2)} = = max{tn(i>MAX-1) + tn(return -1)..Análisis de algoritmos. tn(i>MAX-1) + tn(return i)} = = max{1 + 0. operación básica } 58 Análisis de algoritmos. Determinación de funciones tn • Complejidad de una estructura de control if • Ejemplo operación básica if (i > MAX-1) return -1... while (i <= N-1 && tabla[i] != x) i++. Determinación de funciones tn 59 • Complejidad de una invocación a función funcion(argumentos) tn(while) = #iteraciones · (tn(condicion) + tn(bloque)) = = N · (tn(i<=N-1 && tabla[i]!=x) + tn(i++)) = = N · (0 + 1) = N • tn(funcion) se determinará atendiendo a: .si la función es directa o indirectamente recursiva Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid .a la definición de los argumentos de entrada de la función a partir de n .operaciones básicas definidas dentro del bloque de la función ..

e. Tipos de análisis • Análisis para el caso mejor/peor/medio • Estos tipos de análisis pueden realizarse cuando instancias del problema que resuelve el algoritmo pueden tener complejidades diferentes • Ejemplo: búsqueda lineal int BusquedaLineal(int x. medio y peor • Realizado cuidadosamente. x no está en tabla? • Los tres tipos de análisis son relevantes . el análisis de complejidad en el caso medio es el más realista • Desde un punto de vista “pesimista”. i <= n. int tabla[N]) { int i = 0.Análisis de algoritmos. for (i = 1. Tipos de análisis 60 Análisis de algoritmos. i++) factorial = factorial * i. dados dos algoritmos a1 y a2. los restantes tipos de análisis no son aplicables • Ejemplo int FactorialIterativo(int n) { int i. pero donde tn(a1) es de menor orden que tn(a2) para el caso mejor. factorial = 1. factorial. operación básica if (i > N-1) return -1. el análisis de complejidad en el caso peor es el preferible Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . ¿Cuánto vale tn cuando else return i. while (i <= N-1 && tabla[i] != x) i++. } 62 Análisis de algoritmos. i. tabla[0] = x.Similares razonamientos se pueden realizar con otras combinaciones de los casos mejor.Por ejemplo. Tipos de análisis • Análisis para todos los casos • Este tipo de análisis es el que se realiza cuando todas las instancias del problema que resuelve el algoritmo tienen la misma complejidad . } Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid 61 • Al estudiar la complejidad de un algoritmo se debe determinar qué tipo de análisis es conveniente realizar. a1 será preferible . return factorial.Cuando es posible analizar un algoritmo desde este punto de vista.No todos los algoritmos pueden analizarse desde este punto de vista . Tipos de análisis • Análisis para el caso mejor/peor/medio 63 tabla[N/2] = x. con funciones de complejidad para los casos medio y peor similares (del mismo orden). tabla[N-1] = x. desde qué punto de vista se desea conocer una determinada propiedad del algoritmo • • • • Análisis para todos los casos Análisis para el caso mejor Análisis para el caso peor Análisis para el caso medio operación básica tn = n para todos los casos Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Análisis de algoritmos.

menos iteraciones • No suele ser realista y por ello es poco utilizado • Ejemplo: búsqueda lineal int BusquedaLineal(int x. int tabla[MAX]) { int i = 0. i. i. while (i <= MAX-1 && tabla[i] != x) i++.Asumiendo una distribución uniforme: p(lista[i]=x) = 1/N . se supone que x está incluido en la tabla 67 • Ejemplo: búsqueda lineal int BusquedaLineal(int x. más iteraciones • Es el que se realiza habitualmente.e.Nunca se empleará más tiempo que el del caso peor • Ejemplo: búsqueda lineal int BusquedaLineal(int x. else return i. WBLineal(N) = N = O(N) } Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid 65 Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid Análisis de algoritmos.Se suele hacer uso de conceptos de probabilidad Aalg(N) = ∑I nalg(I)·p(I) donde nalg(I) es el número de veces que se ejecuta la operación básica del algoritmo alg para la entrada I 66 Análisis de algoritmos. int tabla[N]) { int i = 0. Tipos de análisis • Análisis para el caso medio: Aalg(N) • Consiste en determinar la complejidad para las instancias del problema “típicas” . while (i <= N-1 && tabla[i] != x) i++.Valores de entrada: . se supone que no se repiten los valores en la tabla . int tabla[N]) { int i = 0. if (i > MAX-1) return -1. } Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . ya que proporciona una cota superior a la complejidad del algoritmo .Es difícil determinar la tipicidad .Complejidad en el caso medio ABLineal(N) = ∑I nBLineal(I) · p(I) = = ∑Ni=1 i · 1/N = = 1/N · ∑Ni=1 i = 1/N · N(N+1)/2 = = (N+1)/2 = O(N/2) Estructura de Datos y Algoritmos Escuela Politécnica Superior Universidad Autónoma de Madrid . Tipos de análisis • Análisis para el caso medio: Aalg(N) • Ejemplo: búsqueda lineal . if (i > N-1) return -1. en las que se emplean menos tiempo. Tipos de análisis • Análisis para el caso peor: Walg(N) • Consiste en determinar la complejidad para las instancias del problema más desfavorables. Tipos de análisis • Análisis para el caso mejor: Balg(N) • Consiste en determinar la complejidad para las instancias del problema más favorables.e. entonces } BBLineal(N) = 1 64 Análisis de algoritmos.tabla: puede ser una tabla de cualquier longitud N. Si tabla[N-1] = x. while (i <= N-1 && tabla[i] != x) i++.x: puede ser cualquier valor. entonces else return i.Análisis de algoritmos. if (i > N-1) ¿Cuáles son los valores típicos return -1. de x y de la tabla de entrada? else return i. en las que se emplean más tiempo.¿Qué probabilidad existe de que tabla[i] = x? . Si tabla[0] = x.

Análisis de algoritmos Iván Cantador Silvia Teresita Acuña.Estructuras de Datos y Algoritmos Tema 6. José R. Dorronsoro Escuela Politécnica Superior Universidad Autónoma de Madrid .

Sign up to vote on this title
UsefulNot useful