18. {1,2,3,4,5,6,7,8} {1,2,3,4} vs {5,6,7,8} {1,2,3,4} {1,2} vs {3,4} {5,6,7,8} {5,6} vs {7,8} {1,2} {3,4} {5,6} {7,8} {1} {2} {3} {4} {5} {6} {7} {8}
19.
20. {1,2,3,4,5,6,7,8} {1,2,3} vs {6,7,8} {1,2,3} {4,5} {6,7,8} {8} {7} {6} {5} { } {4} {3} {2} {1} {1} vs {3} {4} vs {5} {6} vs {8}
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31. Clasificación de rendimiento Exponencial : cuando n es el doble, el tiempo de ejecución es el cuadrado. Esto es a menudo el resultado de una solución natural de “fuerza bruta”. 2 n Cúbico : cuando n es el doble, el tiempo de ejecución aumenta 8 veces. n 3 Cuadrático : cuando n es el doble, el tiempo de ejecución se cuadruplica. Esto es práctico sólo para problemas pequeños; típicamente el programa procesa todos los pares de entrada (por ejemplo, en un loop doble anidado). n 2 Cuando n sube al doble, el tiempo de ejecución es ligeramente superior al doble. Esto es común en programas que descomponen problemas en subproblemas menores, los resuelven independientemente y luego combinan las soluciones. n log n Lineal : el tiempo de ejecución varía de acuerdo a n . Típicamente, se realiza una pequeña cantidad de procesamiento en cada elemento. n Logarítmico : cuando n aumenta, también aumenta el tiempo de ejecución, pero más lentamente. Cuando n es el doble, log n aumenta una constante, pero no llega al doble sino hasta que n pasa a n 2 . Esto es común en programas que resuelven problemas grandes que son transformados en problemas más pequeños. log n Constante : el tiempo de ejecución es fijo y no depdnde de n. La mayoría de las instrucciones se ejecuta una vez o pocas veces, con independencia de la cantidad de información a ser procesada. 1 Clasificación f( n )
43. Análisis de Algoritmos SortInserción (A) for i=2 to length(A) item = A[i] j = i - 1 while (j > 0 and A[j] > item) A[j+1] = A[j] j = j - 1 A[j+1] = item costo veces q’ ejecuta c 1 n c 2 n-1 c 3 n-1 c 4 t i c 5 (t i -1) c 6 (t i -1) c 7 n-1