Metodología y Tecnología de la Programación Hoja de Ejercicios 2 Bloque 2: Divide y Vencerás 1. Un algoritmo divide y vencerás divide un problema de tamaño n en 2 subproblemas de tamaño n-1. El algoritmo aplica una solución directa cuando n = 2, que tarda un tiempo de 3 ms. Si el tiempo de realizar la combinación es f(n) = 1.2n ms, calcular el tiempo de ejecución exacto del algoritmo t(n). 2. Un programa para ordenar cadenas utiliza el método de ordenación por mezcla. La resolución para problemas de tamaño pequeño tarda un tiempo de g(n) = 2n2, mientras que la mezcla requiere f(n) = 10n. Calcular cuál debería ser el tamaño del caso base para optimizar el tiempo de ejecución total t(n). 3. Supongamos que un problema puede resolverse de forma directa en un tiempo g(n) o bien, usando divide y vencerás, puede ser dividido en varios subproblemas de igual tamaño, necesitando en la división y en la combinación de resultados un tiempo f(n). a) Demostrar que si O(f(n)) es mayor o igual que O(g(n)) entonces la solución usando divide y vencerás es siempre peor o igual (en cuanto a orden de complejidad) que resolver el problema usando el método directo. ¿Qué significa lo anterior y qué consecuencias tiene en la construcción de algoritmos con divide y vencerás? b) Demostrar que si O(f(n)) es menor que O(g(n)), no siempre tiene que ser mejor la solución usando divide y vencerás. Sugerencia: la demostración se puede hacer dando un contraejemplo con valores de f(n) y g(n) adecuados. 4. ¿Qué ocurriría con la eficiencia de un algoritmo divide y vencerás si, en lugar de utilizar un valor umbral para utilizar el algoritmo básico, se aplica la recurrencia como máximo r veces antes de utilizar el algoritmo básico? 5. ¿Qué ocurriría si, para el algoritmo de búsqueda binaria, se realizasen k particiones del array en lugar de 2? 6. Se han obtenido los siguientes resultados, para valores de n reducidos, en las ejecuciones de dos algoritmos de ordenación. Se pide determinar el valor de n a partir del cual es interesante utilizar selección directa como algoritmo básico en el merge. n 1 2 3 4 5 6 7 selección directa 20 32 50 74 104 140 182 1 merge 31 55 88 127 170 217 267 Metodología y Tecnología de la Programación Hoja de Ejercicios 2 Bloque 2: Divide y Vencerás 7. Demostrar que las funciones de complejidad de la multiplicación de enteros largos y la multiplicación de matrices poseen un orden de nlog 3 y nlog 7, respectivamente. ¿Por orden, entendemos O o ? 8. Diseñar un algoritmo de multiplicación de enteros largos tal que los operandos se separen en 3 en lugar de en 2 partes. ¿Es más eficiente que el algoritmo original? 9. Demostrar: a) Que el algoritmo quicksort posee una complejidad O(n2) en el caso peor... b) y una complejidad O(n log n) en el caso medio. Nota: La complejidad del quicksort puede definirse como: por lo que la complejidad media es: Pista: Por inducción, se puede demostrar que: 10. Demostrar que el problema de selección posee una complejidad temporal O(n) en el caso promedio. 11. Calcular la precisión en la determinación de la mediana del algoritmo pseudomediana(). 12. En algunas aplicaciones, se necesita conocer la ordenación de los elementos de un vector, pero se desea mantener el vector sin modificar. En estos casos, resulta conveniente un algoritmo de ordenación que devuelva un vector de índices tal que la componente i-ésima indique la posición del elemento que debe ocupar el i-ésimo lugar en el en el vector de entrada ordenado. 13. Sea T[1..n] un array ordenado formado por enteros diferentes, algunos de los cuales pueden ser negativos. Dar un algoritmo que pueda hallar un índice i tal que 1in y 2 Metodología y Tecnología de la Programación Hoja de Ejercicios 2 Bloque 2: Divide y Vencerás T[i]=i, siempre que este índice exista. El algoritmo debe estar en un tiempo de ejecución O(log n) en el peor caso. 14. Dado un array T[1..n] y un entero k tal que 1<=k<=n. Diseñar un algoritmo que permita trasponer los primeros k y los últimos n-k elementos de T sin hacer uso de un array auxiliar. Analizar la función de complejidad de dicho algoritmo. Por ejemplo, si T es el siguiente vector: a b C d e f g h i j y k=3, el resultado deseado es: d e f g h i j a b c 15. Dado un vector T[1..n] de elementos que se pueden ordenar , se desea hallar los m elementos más pequeños, donde m es mucho más pequeño que n. ¿Qué es mejor, a) Ordenar el vector T[1..n] y después acceder a los elementos T[1..m] o b) Seleccionar el primer elemento, luego el segundo, y así sucesivamente hasta el m-ésimo elemento o c) Utilizar algún otro método? 16. Dado un array de enteros T[1..n], se dice que un entero es un elemento mayoritario de T si aparece más de n/2 veces en T. Se pide: a) Dar un algoritmo de orden lineal para calcular el elemento mayoritario, suponiendo que el array T[1..n] puede ordenarse. b) Dar un algoritmo de O(n log n) suponiendo que el array T[1..n] no pudiera ordenarse. 17. Considera la aplicación de la técnica divide y vencerás sobre el siguiente problema. Dado un array de T[1..n] de números enteros, buscamos la cadena de m celdas consecutivas en este array cuya suma sea máxima (obviamente m<n). ¿Es conveniente aplicar divide y vencerás en este caso y por qué? ¿Cómo sería una resolución directa del problema? 18. Dado un vector T[1..n] de números enteros distintos y un número entero s se pide: a) Diseñar un algoritmo de complejidad (n log n) que determine si existen o no dos elementos de T tales que su suma sea exactamente s. b) Suponiendo que el array T está ordenado, diseñar un algoritmo que solucione el mismo problema en (n). 19. Sea T[1..n] un array de enteros ordenados. Este array T se somete a un desplazamiento de k posiciones a la derecha (1 k < n). Por ejemplo, dado el array T = (1, 2, 3, 4, 5), si realizamos un desplazamiento de k = 2 posiciones, obtendriamos el array (4, 5, 1, 2, 3), mientras que con k = 4 posiciones, el array 3 Metodología y Tecnología de la Programación Hoja de Ejercicios 2 Bloque 2: Divide y Vencerás resultante es (2, 3, 4, 5, 1). Suponiendo que Ud. desconoce el valor de k, se pide confeccionar un algoritmo en O(log n) que encuentre el mayor número entero en T. 4