Algoritmos 2021 2 Taller 1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

Taller 1: Análisis y Diseño de Algoritmos

Profesor. Juan Mendivelso

Forma y Reglas de Presentación: Se deben presentar dos archivos: un


PDF y un ZIP. El archivo PDF contiene el reporte de todos los resultados del
taller y las respuestas a las preguntas; el archivo ZIP contiene todo el código
fuente. Grupos de máximo 5 personas. Solo deben presentar uno por grupo
con el nombre de todos los integrantes en el PDF. El único medio de presenta-
ción es a través de Moodle. Deben ser legibles todos los ejercicios, programas
y gráficas. Los ejercicios deben estar presentados en el orden del enunciado.
Todas las páginas en el PDF deben tener el mismo tamaño. Todo el código
debe ser adjuntado en el archivo ZIP; sin embargo, las partes relevantes de-
ben ser ilustradas organizada y pertinentemente en el PDF. Cualquier tipo
de copia (incluso parcial) generará la anulación total para todas las partes
implicadas. El trabajo debe ser presentado antes del plazo indicado y por
Moodle. No seguir estas indicaciones puede incurrir en pérdida de nota.

1. Muestre que las siguientes afirmaciones son falsas o verdaderas justifi-


cando su respuesta:

nn = ω(n2 )
n3 = Ω(n2 + 3n)
n log n = o(n)
n4 − 1 = Θ(n5 )
n2 + 3n = O(n3 )

2. Use el método del árbol de recursión para obtener una posible cota
superior ajustada para los siguientes numerales. Pruebe dicha cota con
el método de la sustitución. Debe mostrar un bosquejo del árbol de

1
recursión, la información obtenida de dicho árbol, la suma en la que se
muestre el costo de la parte base y de la parte recursiva del árbol, la
suposición y la prueba de sustitución clara y organizada.

T (n) = 25T (n/5) + n


T (n) = 25T (n/5) + n2
T (n) = 25T (n/5) + n3
Ejercicio [Cormen 09] 4.4-4 (pag 93)
Ejercicio [Cormen 09] 4.4-7 (pag 93)

3. Dado el siguiente pseudocódigo:

def misterio(n)
1. if n <= 1 then
2. return 1
3. a =misterio(n/3)
4. b = 2∗misterio(n/4)
5. i=1
6. while i <= 5 do
7. i=i+1
8. b = b + 5∗misterio(n/4)
9. for j in range (1, n)
10. k=n
11. while k > 1
12. print(“Nada”)
13. k = k/3
14. return a + b

a) Plantee una ecuación de recurrencia para T (n), el tiempo que


toma la función misterio(n).
b) Determine el comportamiento asintótico de T (n) justificándolo de
manera detallada.

4. Escriba un algoritmo Dividir y Conquistar que encuentre la suma de


la diagonal principal de una matriz n × n. Por facilidad, asuma que n
es una potencia entera de 2, i.e. n = 2k .

2
a) Muestre el pseudocódigo del algoritmo.
b) Plantee una ecuación de recurrencia que describa el comporta-
miento del algoritmo.
c) Determine el comportamiento asintótico de T (n) justificándolo de
manera detallada.
d ) Implemente el algoritmo en Python y pruébelo con diferentes
ejemplos. Mostrar código.

5. Investigue el algoritmo bubble-sort y resuelva lo siguinte.

a) Escriba el pseudocódigo con las lı́neas numeradas.


b) Realice una prueba de escritorio con el ejemplo ⟨5, 8, 1, 4, 3, 2, 6, 7⟩.
c) Establezca una invariante de ciclo para cada ciclo que permita
mostrar la correctitud del algoritmo a través de que las iniciali-
zación, mantenimiento y terminación. La prueba de correctitud
debe ser clara y organizada; debe establecer propiedades haciendo
referencia a las lı́neas del pseudocódigo del algoritmo.
d ) ¿Cuál es la complejidad de tiempo del algoritmo?
e) ¿Cuál es la complejidad de espacio del algoritmo?
f ) ¿El algoritmo es in-place? ¿El algoritmo es estable? Explique a
qué se refieren estos conceptos.

6. Análisis experimental de los algoritmos:

a) Implementar en Python el algoritmo merge-sort.


b) Considerar diferentes valores de n, partiendo de 1 e ir incrementándo-
lo. Para cada valor de n, hacer 100 experimentos y reportar la
mediana de los tiempos de ejecución de estos (para dicho n). Se
deben tomar valores de n hasta que el tiempo de ejecución total
dure más de 5 minutos. Especı́ficamente, cada experimento con-
siste en los siguientes pasos:
1) Generar aleatoriamente un arreglo de enteros de valores de 1
a 5000.
2) Calcular el tiempo de ejecución tomado por merge-sort para
ordenar ese arreglo en especı́fico.

3
c) Hacer una gráfica de la mediana de los tiempos de ejecución de
los 100 experimentos para cada n.
d ) Encuentre las constantes c1 y n0 que demuestren que el tiempo
de ejecución experimental de merge-sort es T (n) = O(n log n).
Sobre la gráfica de los resultados experimentales también graficar
la función f (n) = c1 n log n. Debe especificar cuál es c1 y n0 . Las
gráficas deben ser claras. Se debe poder distinguir claramente las
lı́neas y se debe especificar cuál es cada una.
e) Debe repetir los numerales (a)-(d) para bubble-sort cambiando
la función del numeral por la correspondiente a su complejidad en
tiempo.
f ) En una misma gráfica mostrar el tiempo experimental de bubble-sort
y merge-sort para los diferentes valores de n trabajados.
g) Debe anexar el código especificando qué hace cada función.

También podría gustarte