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