Soluciones del examen final

Anuncio
Algorítmica y Complejidad
Examen Final
1 de julio de 2015
Apellidos ...............................................................................................................................
Nombre ....................................................................... Nº de Matrícula .............................
EJERCICIO 1
(5 puntos)
SOLUCIÓN
(20 minutos)
Rodee con un círculo V o F según sean verdaderas o falsas las afirmaciones siguientes.
Las respuestas erróneas restan la parte proporcional de la nota.
V F La lista de adyacencia ocupa lo mismo tanto si el grafo es dirigido como si no.
V F El número de aristas y de nodos de un árbol nunca coinciden.
V F Los algoritmos de vuelta atrás no pueden utilizar poda adelantada.
V F Todo bosque es a su vez un árbol.
V F Durante la ejecución del algoritmo de Prim hay varios árboles que finalmente se fusionan en uno.
V F Si existe un camino que conecta a dos nodos, se dice de ellos que son adyacentes.
V F Para que exista árbol de expansión, el grafo debe ser conexo.
V F El tamaño de la matriz de adyacencia de un grafo es independiente de su número de aristas.
V F "Divide y vencerás" consiste en dividir un problema de tamaño N en M partes de tamaño N/M.
V F Las técnicas de poda se utilizan para buscar todas las soluciones posibles al problema.
V F Las listas de adyacencia son convenientes en grafos poco densos.
V F La solución obtenida con el algoritmo de Kruskal nunca puede contener ciclos.
V F Existen NxN soluciones potenciales al problema de la selección óptima de N elementos.
V F Θ(f(n)) = O(f(n)) U Ω(f(n))
V F La eficiencia de Quicksort es independiente de la elección del pivote.
V F Un árbol que represente un montículo de 9 elementos tendrá 4 niveles.
V F O(n log n) es un subconjunto de O(n).
V F El algoritmo de inserción se utiliza en una de las etapas de Bucketsort.
V F Con el algoritmo de Dijkstra para caminos mínimos, los pesos de los arcos pueden ser negativos.
V F El número de llamadas recursivas que puede realizar un algoritmo de vuelta atrás depende de la
capacidad de la pila de la máquina en la que se ejecute.
Ejercicio 2
SOLUCIÓN
a)
type VECTOR is array (1..N) of Natural;
function busqueda (A: in VECTOR;
primero, ultimo: Natural; valor: Natural) return Boolean is
l: Natural; --- 1/3 de los elementos de A
begin
if primero >= ultimo then
return A(ultimo) = valor;
end if;
--- 2
--- 2
l := (ultimo-primero+1)/3;
--- 3
if valor = A(primero+l) then
--- 2
return True;
--- 1
elsif valor < A(primero+l) then
--- 2
return busqueda (A, primero, primero + l - 1, valor); --- 4 + ...
elsif valor = A(ultimo - l) then
--- 2
return True;
--- 1
elsif valor < A(ultimo - l) then
--- 2
return busqueda (A, primero + l, ultimo - l - 1, valor); --- 4 + ...
else
return busqueda (A, ultimo - l + 1, ultimo , valor);
--- 4 + ...
end if;
end busqueda;
b)
1. T(n) = 2 + 2 = 4
2. El mejor caso se da cuando se encuentra el número a la primera.
T(n) = 2 + 3 + 2 + 1 = 8
3. T(n) = 2 + 3 + 2 + 2 + 2 + 2 + 4 + T(n/3) = 17 + T(n / 3)
c)
T(n) = 17 + T (n / 3)
n = 3m
t (m) = T (3m)
→ T (3m) = T (3m-1) + 17
→ t (m) = t (m-1) + 17
t (m) – t (m-1) = 17
a0 = 1
b0 = 1
a1 = -1
k=1
d0 = 0
( 1 x1 – 1 x0 ) ( x – 1 )1 = 0
(x–1)(x–1)=0
t (m) = c1 m0 1m + c2 m2-1 1m
t (m) = c1 + c2 m
2
Algorítmica y Complejidad
Examen Final
1 de julio de 2015
T (n) = c1 + c2 log2 n
T (1) = 2 + 2 = 4
T (3) = 17 + T (1) = 21
T (1) = c1 + c2 log3 1 = 4
T (3) = c1 + c2 log3 3 = 21
T (n) = 4 + 17 log3 n
La complejidad es O (log n)
c1 = 4
c2 = 17
Descargar