Complejidad promedio
Transcripción
Complejidad promedio
Análisis de algoritmos Complejidad promedio Dra. Elisa Schaeffer [email protected] PISIS / FIME / UANL Complejidad promedio– p. 1 Complejidad promedio En muchos casos, la cota superior de la análisis asintótica del caso peor da una idea bastante pesimista de la situación. Puede ser que son muy escasas las instancias de peor caso, mientras una gran mayoría de las instancias tiene tiempo de ejecución mucho mejor. Complejidad promedio– p. 2 Distribución de instancias Si uno conoce la distribución de probabilidad de las instancias (de un caso práctico), se puede analizar la complejidad promedio de un algoritmo. En los casos donde no hay información a priori de las probabilidades, se asume que cada instancia es equiprobable (es decir, la instancia está seleccionada del espacio de todas las instancias posibles uniformemente al azar). Complejidad promedio– p. 3 Ordenación rápida Como un ejemplo de análisis de complejidad promedio, analizamos el algoritmo de ordenación rápida. Su peor caso es O (n2 ) para n elementos, pero resulta que en la práctica suele ser el método más rápido. El análisis de complejidad promedia da a ordenación rápida la complejidad O (n log n), que implica que el caso peor no es muy común. Complejidad promedio– p. 4 Análisis Cada vez que dividimos una cola o un arreglo, usamos tiempo Θ (n) y un espacio auxiliar de tamaño O (1). Para unir dos colas (de tamaños n1 y n2 ) en uno, se necesita por máximo el tiempo O (n1 + n2 ). En la implementación que usa un arreglo, unir las partes explicitamente no será necesario. Complejidad promedio– p. 5 Elección de pivote Suponemos que la subrutina de elección del pivote toma Θ (n) tiempo para n elementos, el tiempo total de ejecución del algoritmo de ordenación rápida es O (1) , si n ≤ 1, T (n) = T (p) + T (n − p) + Θ (n) , si n > 1, donde p es el tamaño de la una de las dos partes de la división (y n − p el tamaño de la otra parte). Complejidad promedio– p. 6 Peor caso El peor es a la situación donde p = 1 en cada división. Θ (1) , si n ≤ 1, Tpeor (n) = Tpeor (n − 1) + Θ (n) , en otro caso, La solución de la ecuación del peor caso es Tpeor (n) = Θ (n2 ). Complejidad promedio– p. 7 Caso promedio 1. Los n elementos son {1, 2, . . . , n} (o en términos más generales, todos los elementos son distintos). 2. La permutación en la cual aparecen los elementos está elegida entre los n! posibles permutaciones uniformemente al azar. 3. El último elemento está siempre elegido como el pivote; esto de logra en en tiempo O (1) ∈ O (n). 4. Las operaciones de dividir y unir las partes usan al máximo tiempo cn, donde c es un constante. 5. La complejidad del caso donde n ≤ 1 usa d pasos de computación. Complejidad promedio– p. 8 Elección del pivote La complejidad del algoritmo ahora depende de la elección del pivote, que en turno determina exactamente los tamaños de las dos partes: T (0) + T (n) + cn, si el pivote es 1 T (1) + T (n − 1) + cn, si el pivote es 2 T (2) + T (n − 2) + cn, si el pivote es 3 T (n) ≤ .. .. . . T (n − 2) + T (2) + cn, si el pivote es n − 1 T (n − 1) + T (1) + cn, si el pivote es n. Complejidad promedio– p. 9 Las permutaciones Considerando el conjunto de las n! permutaciones de los elementos, cada caso ocurre (n − 1)! veces. (Se fija el último elemento y considera las permutaciones de los otros elementos). Complejidad promedio– p. 10 Caracterización =⇒ La complejidad del caso promedio: d, (n−1)! T (0) + T (n) n! T (n) = ! n−1 X (T (i) + T (n − i) + cn) , +cn + n = 1, n > 1, i=1 Complejidad promedio– p. 11 Simplificación (n − 1)! T (0) + T (n) T (n) = n! n−1 X T (i) + T (n − i) + cn +cn + i=1 1 = T (1) + T (n − 1) n n−1 X T (i) + T (n − i) + cn +cn + i=1 Complejidad promedio– p. 12 Más simplificación n−1 X 1 T (n) = T (i) T (0) + T (n) + cn + (n − 1)cn + 2 n i=1 n−1 2X d T (i) + Cn + cn + ≤ n n i=1 n−1 2X ≤ (d + C + c)n + T (i). n i=1 Complejidad promedio– p. 13 Explicación Hay además de cn dos ocurrencias de cada T (i) ≤ viene del hecho que ya sabemos del análisis de peor caso que T (n) ≤ Cn2 para algún constante C T (1) = d Complejidad promedio– p. 14 Última simplificación Reemplazamos el constante d + C + c = D: n−1 2X T (n) ≤ Dn + T (i) n i=1 Intentamos solucionarla con la adivinanza T (n) ≤ αn log n, donde α es un constante suficientemente grande. Complejidad promedio– p. 15 Demostracíón por inducción Para n = 2, aplica la ecuación siempre y cuando α ≥ D + d2 . Para el caso n > 2, asumimos que para todo i < n aplica que T (i) ≤ αi log i. Complejidad promedio– p. 16 Valores pares de n n−1 X 2 αi log i T (n) ≤ Dn + n i=1 n 2 n−1 X 2α X = Dn + (i log i) + (i log i) n n i=1 i= 2 +1 Complejidad promedio– p. 17 Simplificación T (n) ≤ Dn ≤ Dn ≤ Dn n −1 2 n 2 X n 2α X + ( + i) log (i log i) + n 2 i=1 i=1 + 2α n n −1 2 n 2 X i(log n − 1) + X i=1 i=1 n 2 +i ( n2 + i) log n n 2 + 2α n (log n − 1) X i i=1 + log n n n 2 2 n −1 2 ! X i −1 + i=1 Complejidad promedio– p. 18 Simplificación cont. T (n) ≤ Dn 2α + n ≤ Dn + 2α n n (log n − 1) 2 2 n − + log n 4 n 1+ 2 · 2 n ! 1 + − 1 n 2 + −1 · 2 2 2 n 2 n n2 n n + − − log n 8 4 8 4 2 ! 2 n n n n + log n − + − 4 2 8 4 Complejidad promedio– p. 19 Más implificación n 1 T (n) ≤ Dn + α log n(n − 1) − − 4 2 n ≤ Dn + αn log n − α · 4 ≤ αn log n, si α ≥ 4D, porque ∀i aplican n log i ≤ log = log n − 1 2 n log + i ≤ log(n − 1) ≤ log n 2 con logaritmos de base dos y por aplicar la suma de sucesión aritmética. Complejidad promedio– p. 20 Todavía faltaría... Para valores impares de n, el análisis es muy parecido. Estas calculaciones verifican la adivinanza T (n) = αn log n. Complejidad promedio– p. 21