Complejidad de Algoritmos Tema 5
Introducción Un algoritmo es una secuencia de instrucciones que resuelve un problema Puede tener diferentes implementaciones Para comparar las diferentes formas (algoritmos) de resolver un problema debe ser posible medirlos : Tiempo y memoria. La medida de la eficiencia requiere determinar la complejidad de un algoritmo.
Factores del tiempo Datos de entrada:la dimensión del vector a ordenar o el tamaño de las matrices a multiplicar Calidad del código generado por el compilador Arquitectura del procesador (cisc, risc) Complejidad intrínseca del algoritmo Medidas: A priori (Acotación teórica del algoritmo) A posteriori (empírica o práctica) para un conjunto de datos y para un ordenador concreto.
Factores del tiempo II La unidad de tiempo no puede ser concreta, no existe un ordenador estándar al que puedan hacer referencia todas las medidas. T(n) el tiempo de ejecución para una entrada de tamaño n. Principio de Invarianza Dado un algoritmo y dos implementaciones suyas I1 e I2, que tardan T1(n) y T2(n) segundos respectivamente, el Principio de Invarianza afirma que existe una constante real c > 0 y un número natural n0 tales que para todo n >= n0 se verifica que T1(n) <= ct2(n). Nota : a priori un algoritmo de orden cuadrático es mejor que uno de orden cúbico T1(n) = 10 el primero sólo será mejor que el segundo para tamaños de la entrada superiores a 200.000.
Mejor,peor y tiempo medio El comportamiento de un algoritmo puede cambiar notablemente para diferentes entradas (lo ordenados que se encuentren ya los datos a ordenar). Se Estudian tres casos : Caso peor: mayor número posible de instrucciones ejecutadas por el algoritmo. Caso mejor :menor número posible de instrucciones ejecutadas por el algoritmo. Caso medio (o general):número de instrucciones igual a la esperanza matemática de la variable aleatoria definida por todas las posibles trazas del algoritmo para un tamaño de la entrada dado, con las probabilidades de que éstas ocurran para esa entrada
Operaciones Elementales Las Operaciones Elementales (OE): Medida básica de complejidad de algoritmos las operaciones aritméticas básicas: +,-,/,*,... asignaciones a variables los saltos (llamadas funciones y procedimientos, retorno desde ellos, etc.) las comparaciones y operaciones lógicas (2 > 5 AND 5 == 3) El acceso a vectores y matrices. Ejemplos : a++ 2 OE (=,+) b = a*5 Vector[2*2] 5 OE (=,*,-,[],*) b += suma(a,b<2) 4 OE (=,+,salto,<) C++ == E[1] AND B>3 6 OE (=,+,==,[],AND,>)
Análisis del caso caso mejor :línea (1) y (2) sólo la primera mitad de la condición: 2 OE (expresiones se evalúan de izquierda a derecha, y con cortocircuito ) + (5) a (7). T(n)=1+2+3=6. caso peor: (1) bucle se repite n 1 veces hasta que se cumple la segunda condición (5) hasta línea (7). Cada iteración del bucle compuesta (2) y (3), + ejecución adicional de la línea (2)
Análisis del caso II
Calculo de OE II - CASE C OF v1:s1 v2:s2... vn:sn END T = T(C)+max{T(S1),T(S2),...,T(Sn)}. - IF C THEN S1 ELSE S2 END T = T(C) + max{t(s1),t(s2)}. _ WHILE C DO S END T = T(C) + (nº iteraciones)*(t(s) + T(C)). ojo tanto T(C) como T(S) pueden variar en cada iteración Para resto de sentencias iterativas (FOR,etc...) basta expresarlas como un bucle WHILE.
Fórmulas I Sumatorias 1) La sumatoria de una suma es igual a la suma de las sumatorias: a + b = a + b 2) Cuando el cuerpo de la sumatoria es independiente de los índices, el valor es el número de valor diferentes que toma el índice multiplicado por el valor del cuerpo: n 1 i= 0 n 1 i= 0 a = a.n n a + f(i) = 1 i= 0 n a + 1 i= 0 n f(i) = a.n + 1 i= 0 f(i)
Fórmulas II 3) Cuando el cuerpo de la sumatoria se puede expresar como una constante independiente de los índices multiplicada por una expresión, el valor es el valor de la constante multiplicada por la sumatoria de la expresión: n 1 i= 0 n af(i) = a 1 i= 0 f(i) 4) Suma de los valores de una progresión aritmética: Ej:(1+2+3+4+5),(4+6+8+10),(2+5+8+11+14) = incremento a 0 = primer elemento a n-1 = último elemento n = número de elementos progresión aritmética: a n = a 0 + n n 1 i= 0 a i = ((a i +a n-1 )n)/2 El primer elemento más el último, multiplicado por el número de elementos y dividido por 2
Formulas III ) Suma de los valores de una progresión geométrica: Ej:(1+2+4+8+16), (2+6+18+54) = razón 0 = primer elemento = número de elementos rogresión geométrica: a n = a 0 Π n r-1)(1 + r +... + r n-1 ) = r n - 1 n 1 n 1 n a i = i= 0 a 0 Π i = a 0 1 Π i = a 0 (Π n -1)/( Π-1) i= 0 i= 0 El primer elemento multiplicado por la razón elevada al número de elementos menos 1 y todo dividido or la razón menos 1
Ejemplo Asignación Suma Comparación 3OE { Asignación Suma Comparación 3OE { Comparacion 4 OE 3 OE 4 OE 2 OE aso Mejor :la condición será falsa, no se cuta (4)a (6). el bucle interno (n i) iteraciones Comp Inc 3OE} Comp Inc 3OE} aso Peor :la condición será verdadera, se cuta (4)a (6). el bucle interno (n i) iteraciones
Ejemplo II Asignación Suma Comparación 3OE { Asignación Suma Comparación 3OE { Comparacion 4 OE 3 OE 4 OE 2 OE Comp Inc 3OE} Comp Inc 3OE} aso Medio :la condición será verdadera un % de las veces
Análisis Búsqueda Máximo Busca el máximo en un vector empezando en la posición i hasta la j, por lo que el tamaño de la entrada T(n) = T(j-i) 1 OE Asignación Suma Comparación 3OE { 3 OE + P *1 Comp Inc 3OE} 1 OE
Análisis Búsqueda Máximo II Asignación 1 OE Asignación Suma Comparación 3OE { 3 OE + P *1 Asignación 1 OE Salto 1 OE Comparación Incremento 3OE}
Coste de Intercambio Método que intercambia dos contenidos en el vector dadas sus posiciones. temp:=a[i]; 2 OE a[i]:=a[j]; 3OE 7 OE a[j]:=temp ; 2 OE Utilizaremos este método y el de búsqueda de máximos y mínimos en un vector para facilitar el análisis de algoritmos de ordenación
Selección En cada paso (i=1...n 1) este método busca el mínimo elemento del subvector a[i..n] y lo intercambia con el elemento en la posición i: Asignación Resta Comparación 3OE { Salto 1OE + Intercambia 7 OE Caso peor Salto 1OE + PosMinimo Comparación Incremento 3OE}
Burbuja Asignación Resta Comparación 3OE { Asignación suma Comparación 3OE { comparación 4 OE Salto 1OE + Intercambia 7 OE resta 1OE Comparación Incremento 3OE} Comparación Incremento 3OE} }
Cota Superior O(f) Asignación Resta Comparación 3OE { Asignación suma Comparación 3OE { comparación 4 OE alto 1OE + Intercambia 7 OE resta 1OE Comparación Incremento 3OE} Comparación Incremento 3OE} }
Propiedades de O
Recurrencia T(n) = E(N) donde en E(n) aparece una expresión de T(n) Algoritmos recursivos Se expresa el algoritmo en base a las condiciones iniciales necesarias y una expresión recursiva T(n) = T(n-1) + T(n-2) Para n > 1 T(n) = 1 Para n=1 T(n) =0 Para n= 0
Ecuaciones Homogeneas
Raíces distintas
Raíces distintas II
Raíces Multiplicidad > 1 Ejemplo:
No Homogeneas
Ecuación característica los coeficientes ai y b son números reales, y p(n) es un polinomio en n de grado d Solución Ejemplo: Torres de Hanoi
Ecuación generalizada Solución Ejemplo
Cambio de variable n es una potencia de 2 (n > 3), T(1) = 1, y T(2) = 6. b =2 d = 0