Algoritmos y Complejidad - Departamento de Ciencias e Ingeniería

Transcripción

Algoritmos y Complejidad - Departamento de Ciencias e Ingeniería
Departamento de Cs. e Ingenierı́a de la Computación
Universidad Nacional del Sur
Algoritmos y Complejidad
Trabajo Práctico 3
Análisis de Algoritmos
Primer cuatrimestre de 2014
1. Analice la relación que existe entre los siguientes conceptos:
Tiempo de ejecución
Tiempo de ejecución en el mejor caso
Tiempo de ejecución en el peor caso
Tiempo de ejecución en el caso promedio
2. Considere un algoritmo que tiene un tiempo de ejecución en el mejor caso tm , y un tiempo de
ejecución en el peor caso tp . Suponga que tp ∈ O(g(n)) y tm ∈ Ω(g(n)). ¿Se puede afirmar que
el tiempo de ejecución de este algoritmo pertenece a Θ(g(n))? ¿Por qué?.
3. Análisis de secuencias. ¿Qué enuncia la regla de secuencia? ¿cuándo es válido aplicar esta regla?
4. Análisis de for loops. Considere el siguiente algoritmo.
for i ← 1 to m do
P(i)
end
Analizar el tiempo que consume cuando:
a) el tiempo de ejecución de P (i) es igual a una función constante t
b) el tiempo de ejecución de P (i) es igual a una función t(i)
5. Análisis de while loops. Considere el siguiente algoritmo.
i←1
j←n
while i < j do
i ← ((i + j) ÷ 2) + 1
end
Analizar el tiempo que consume este algoritmo:
a) a través de alguna función de sus variables que permita determinar la cantidad de veces
que se ejecuta el bucle.
b) haciendo un planteo recursivo de su comportamiento.
c) utilizando un barómetro.
Pag. 1
6. Determinar el orden exacto del tiempo de ejecución del siguiente algoritmo.
for i ← 0 to n do
j←i
while j ̸= 0 do
j ← (j ÷ 2)
end
end
7. Hallar el tiempo de ejecución en función de n y en notación Θ de los siguientes algoritmos.
Considerar todas las instrucciones individuales, incluido el control de los ciclos, como operaciones
elementales.
l←0
for i ← 1 to n do
for j ← 1 to n2 do
for k ← 1 to n3 do
l ←l+1
end
end
end
l←0
for i ← 1 to n do
for j ← 1 to i do
for k ← 1 to n do
l ←l+1
end
end
end
8. Considere el problema de ordenar un arreglo de n enteros. Dar un algoritmo de ordenamiento
de Θ(n) sabiendo que todo elemento i del arreglo verifica 1 ≤ i ≤ 2n.
9. Considerando el Algoritmo 1 que calcula el máximo común divisor de dos números m y n,
calcular una cota superior para la cantidad de veces que se repite el ciclo while:
Algoritmo 1: gmc(m,n)
while m > 0 do
temp ← n mod m
n←m
m ← temp
end
return n
10. Para la estructura de datos Heap, representada por medio de un árbol binario e implementada
con un arreglo:
a) Determinar el orden exacto del tiempo de ejecución en el peor caso para las operaciones
Percolate(H[1..n],i) y SiftDown(H[1..n],i)
b) Utilizando los resultados del inciso anterior, determinar el Θ del tiempo de ejecución en el
peor caso de las operaciones máximo(), eliminar_máximo(H[1..n]) e insertar(H[1..n],elemento).
c) Realizar la traza de la operación CrearHeap(A) para cada una de las versiones (Algoritmos
2 y 3) tomando como entrada el arreglo A = ⟨1, 6, 9, 2, 7, 5, 2, 7, 4, 10⟩.
d ) Comparar el Θ del tiempo de ejecución, para el peor caso, de los algoritmos 2 y 3.
e) Dar un algoritmo para el método de ordenamiento heapsort. Analizar el tiempo de ejecución
de este algoritmo para el peor caso considerando las dos implementaciones de CrearHeap.
Pag. 2
Algoritmo 2: Crear Heap 1 (A[1..n])
Algoritmo 3: Crear Heap 2 (A[1..n])
T ←A
for i ← 2 to n do
Percolate(T ,i)
end
return T
T ←A
for i ← ⌊n/2⌋ downto 1 do
Siftdown (T ,i)
end
return T
11. Heaps Binomiales [?]:
a) Definir árbol binomial y heap binomial.
b) Determinar el orden exacto del tiempo de ejecución en el peor caso de las operaciones:
link(Ab1,Ab2): genera un nuevo árbol binomial a partir de los árboles binomiales Ab1
y Ab2.
máximo(H): retorna el máximo elemento del heap binomial H.
eliminar_máximo(H): elimina el máximo elemento del heap binomial H restaurando
la estructura de heap binomial.
mezclar(Hb1,Hb2): mezcla los dos heaps binomiales Hb1 y Hb2.
12. Considere el problema de hallar el n-ésimo número de la secuencia de Fibonacci. Implemente
los algoritmos 4, 5 y 6. Compare empı́ricamente los tiempos de ejecución de estos algoritmos.
Algoritmo 4: FibRec (n)
Algoritmo 6: FibIter2 (n)
if n < 2 then
return n
else
return FibRec (n-1) + FibRec (n-2)
end
Algoritmo 5: FibIter1 (n)
i←1
j←0
for k ← 1 to n do
j ←i+j
i←j−i
end
return j
i←1
j←0
k←0
h←1
while n > 0 do
if n mod 2 = 1 then
t←j∗h
j ←i∗h+j∗k+t
i←i∗k+t
end
t←h∗h
h←2∗k∗h+t
k ←k∗k+t
n ← n div 2
end
return j
Referencias
[1] Gilles Brassard and Paul Bratley. Fundamentals of Algorithmics, chapter 4. Prentice Hall, 1996.
[2] Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest. Introduction To Algorithms,
chapter 2,20. The MIT Press, 1990.
[3] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction To
Algorithms, chapter 2, 19. The MIT Press, 3rd edition, 2009.
Pag. 3

Documentos relacionados