04 AlgComp Tarea04 V2
04 AlgComp Tarea04 V2
04 AlgComp Tarea04 V2
Cinvestav Guadalajara
Algoritmos y Complejidad
Septiembre-Diciembre 2021
Tarea No. 4
Lista de Ejercicios No. 1
INDICACIONES:
• Crear un archivo PDF con el reporte de la tarea indicando los nombres de los
participantes en el equipo. Incluir al final del reporte una descripción de las partes
realizadas por cada participante.
• Anexar el código de los programas realizados con las instrucciones para su
ejecución y, en su caso, los casos de prueba.
• El nombre del archivo será: AC-TAREA04-EquipoXX.pdf, donde XX se refiere al
número del equipo
• Los ejercicios 1 a 20 cuentan como la Lista de ejercicios No. 1
• Los ejercicios 21 a 30 cuentan como la Tarea No. 4
• El BONO, ejercicio 31, es opcional para los equipos de 2 y obligatorio para los
equipos de 3.
• Enviar la tarea a cursodealgoritmosycomplejidad@gmail.com
• Fecha de entrega: 13 de octubre de 2021.
EJERCICIOS
4. Demuestre que para cualesquiera constantes reales a y b, donde b > 0, (n+a)b = Q(nb).
a. n2
b. n2 + 3n
c. n3/2
d. nlogn
7. Sea
d
p(n) = ∑ ai n i
i=0
a. Si k ³ d, entonces p(n) = O( nk ).
b. Si k £ d, entonces p(n) = W( nk ).
c. Si k = d, entonces p(n) = Q( nk ).
d. Si k > d, entonces p(n) = o( nk ).
e. Si k < d, entonces p(n) = w( nk ).
T(n) = 3T(n/2) + n
9. ¿Cuál es una cota superior asíntótica justa al tiempo de ejecución de los siguientes
fragmentos de programa?
a) sum = 0;
for( i = 0; i < n; i++ )
for( j = 0; j < n; j++ )
for( k = 0; k < n; k++ )
sum++;
b) sum = 0;
for( i = 0; i < n; i++ )
for( j = 0; j < n; j++ )
for( k = j; k < n; k++ )
sum++;
c) sum = 0;
for( i = 0; i < n; i++ )
for( j = 0; j < i; j++ )
for( k = 0; k < n; k++ )
sum++;
d) sum = 0;
for( i = 0; i < n; i++ )
for( j = 0; j < i; j++ )
for( k = j; k < n; k++ )
sum++;
e) sum = 0;
for( i = 0; i < n; i++ )
for( j = 0; j < i; j++ )
for( k = 0; k < i; k++ )
sum++;
T(1) = a
T(n) = cT(n/d) + bnk, para n un potencia positiva de d
11. Use el teorema maestro para dar cotas asintóticas de las siguientes recurrencias.
a) T(n) = 2T(n/4) + 1
b) T(n) = 2T(n/4) + √𝑛
c) T(n) = 4T(n/2) + n
d) T(n) = 4T(n/2) + n2
e) T(n) = 4T(n/2) + n3
12. Proporcione una cota asintótica superior e inferior para T(n) en cada una de las
siguientes recurrencias. Asuma que T(n) es constante para un valor pequeño de n. Sus
cotas deben ser tan ajustadas como sea posible y justifique sus respuestas.
14. Representar el peor y el mejor caso para los siguientes métodos de ordenamiento con el
siguiente conjunto de datos de entrada S = { 25, 6, 9, 13, 26, 4, 2, 17 } y calcular el
número de comparaciones y movimientos que se realizan en cada caso.
a) QuickSort
b) HeapSort
15. Supongamos que estamos comparando dos programas en la misma máquina de los
algoritmos de ordenamiento por inserción y por mezcla (mergesort). Para entradas de
tamaño n, el programa con el algoritmo de inserción toma un tiempo 8n2, mientras que el
programa con el algoritmo de mezcla toma 64nlogn pasos. ¿Para cuales valores de n el
algoritmo de inserción es mejor que el algoritmo de mezcla?. ¿Cómo podría mejorar el
algoritmo de mezcla para que sea más rápido sobre las entradas de tamaño pequeño?
16. El método de ordenamiento por inserción se puede expresar recursivamente como sigue.
Para ordenar A[1..n], se ordena recursivamente A[1..n-1] y se inserta A[n] en el arreglo
ordenado A[1..n-1]. Escriba una recurrencia para el tiempo de ejecución de la versión
recursiva del ordenamiento por inserción y resuélvala.
17. Utilice el algoritmo de Strassen como una subrutina para multiplicar matrices, y
desarrolle un algoritmo que multiplique una matriz de dimensión kn x n por otra matriz
de dimensión n x kn. Realice el análisis del algoritmo y determine el número de
multiplicaciones que se realizan.
18. Utilice el teorema maestro para demostrar que la solución a la recurrencia T(n) = 4T(n/3)
+ n, es 𝑇(𝑛) = Θ(𝑛!"#! $ ). Intente probar lo anterior por sustitución (sin usar el teorema
maestro) y muestre que la suposición 𝑇(𝑛) ≤ 𝑐𝑛!"#! $ falla. Luego muestra como sustraer
un término de orden menor para hacer que la prueba por sustitución sea exitosa.
19. ¿Se puede usar el teorema maestro para resolver la recurrencia T(n) = 4T(n/2) + n2lgn?
Indique por que sí o por qué no. Dar una cota superior a esta recurrencia.
20. Dada una secuencia de 2n números reales como entrada, diseñe un algoritmo O(nlogn)
que divida los números en n pares, con la propiedad que la partición minimiza el máximo
de la suma de los números en el par. Por ejemplo, sea la secuencia (1,3,5,9). Las
particiones posibles son ((1,3), (5,9)), ((1,5),(3,9)) y ((1,9),(3,5)). La suma de los pares
para esas particiones son (4,14), (6,12) y (10,8). Así la tercera partición tiene 10 como el
máximo de las sumas la cual es el valor mínimo del máximo en las tres particiones.
21. Se tienen 12 monedas, una de ellas es más pesada o ligera que las otras. Identifique la
moneda haciendo solamente tres operaciones de pesado.
22. ¿Cómo puede escribir un algoritmo no recursivo para el quicksort?. Analice su
complejidad y compárelo contra el algoritmo recursivo.
23. Considere un arreglo de tamaño nxn conteniendo elementos enteros (positivos, negativos
o zero). Suponga que los elementos en cada renglón se encuentran ordenados
estrictamente en forma creciente y los elementos en cada columna se encuentran
estrictamente en forma decreciente. De aquí no puede haber dos zeros en el mismo
renglón o en la misma columna. Describa un algoritmo eficiente para contar el número
de ocurrencias del elemento 0 en A. Analice el tiempo de ejecución el cual, por supuesto,
debe ser menor a O(n2).
24. Considere un arreglo A[1..n] que tiene números en el rango 1 a 𝑛% , pero a lo más
log log 𝑛 de esos números diferentes aparecen en el arreglo. Desarrolle un algoritmo que
ordene el arreglo A en substancialmente menos que 𝑂(𝑛 log 𝑛 ). Explique su algoritmo.
25. ¿Cómo puede determinar la complejidad de un algoritmo quicksort que divide una lista
de n elementos en dos partes, 9/10 y 1/10, esto es, una proporción de 9 a 1. Establezca la
recurrencia y deduzca su complejidad usando un árbol de recursión.
26. Proporcione un algoritmo para ordenar cuatro elementos usando solo cinco
comparaciones en el peor caso.
27. Considere un heap terciario, similar al heap binario, excepto que cada nodo interior (no
hoja) tiene tres hijos.
28. Let 𝑋[1. . 𝑛] and 𝑌[1. . 𝑛] be two arrays, each containing 𝑛 numbers already in sorted
order. Give an 𝑂(lg 𝑛) −time algorithm to find the median of all 2𝑛 elements in arrays
𝑋 and 𝑌. (Ejercicio 9.3-8 CLR).
29. Show that the second smallest of n elements can be found with 𝑛 + ⌈lg 𝑛⌉ − 2
comparisons in the worst case. (Hint: Also find the smallest element.) (Ejercicio 9.1-1
CLR).
30. Suppose that an algorithm uses only comparisons to find the 𝑖𝑡ℎ smallest element in a set
of 𝑛 elements. Show that it can also find the 𝑖 − 1 smaller elements and the 𝑛 − 𝑖 larger
elements without performing any additional comparisons. (Ejercicio 9.3-4 CLR).
BONO: