Algoritmos y Estructuras de Datos – Tema 2 Hoja 1/5 Nombre del alumno:............................................................ Sólo se tendrán en cuenta las respuestas de la tabla de respuestas (última hoja). Donde se pida uso de memoria, se supondrá que los punteros ocupan 8 bytes y los enteros 4 bytes. 1. En una tabla de dispersión abierta se usa la siguiente estrategia de reestructuración de la tabla: cuando el número de elementos insertados es igual que el número cubetas, se crea otra tabla con el doble de tamaño. Inicialmente la tabla tiene B = 2 cubetas. Usamos la función de dispersión: h(x) = (x + x div 10) mod B; donde div es la división entera. Insertamos los siguientes elementos en la tabla, en el orden dado: 273, 182, 862, 651, 987, 521. Escribir la tabla de dispersión abierta resultante. 2. Selecciona la opción más adecuada (sólo una) en relación al problema del agrupamiento: a) Se debe a la redispersión, y se resolvería siempre usando redispersión cuadrática. b) Se produce en dispersión abierta y se resuelve incrementando el tamaño de la tabla. c) Se produce en dispersión cerrada cuando hay muchos sinónimos y se resuelve simplemente aumentando al doble el tamaño de la tabla. d) Se produce sólo en dispersión cerrada y se puede resolver con redispersión doble. 3. Suponer una tabla de dispersión cerrada, donde la función de dispersión es de la forma: h(x)= B·π·x mod B, con B = 20, y se utiliza redispersión cuadrática. Se insertan los elementos: 6, 84, 34, 1, 20, 11, 0, 60, 92. Mostrar la tabla resultante. Tomar π = 3,14159265. 4. La tabla de dispersión cerrada de abajo se ha construido usando la función de dispersión: h(x) = x mod 10; y la redispersión: hi(x) = (h(x) + i) mod 10. Se decide no usar marcas en la operación de eliminación, sino mover los elementos que sea necesario. Mostrar la tabla resultante después de eliminar las claves 75 y 11. 0 1 2 3 68 11 42 21 4 5 6 7 8 9 75 36 85 78 46 Tabla resultante:..................................................................... 5. Estimar cuánta memoria utilizará la tabla de dispersión cerrada del ejercicio 3. Estimar también la memoria que se necesitaría con dispersión abierta. Disp. cerrada. Memoria: … Fórmula: … 6. Disp. abierta: ……… En dispersión abierta, el proceso de búsqueda de un elemento parará cuando (señala todas las que sean correctas): a) Se encuentre el elemento. b) Si la lista es no ordenada, cuando se encuentre un elemento distinto al buscado. c) Llegue a una cubeta vacía. d) Llegue al fin de lista. e) Haya recorrido toda la tabla completamente. Algoritmos y Estructuras de Datos – Tema 2 Hoja 2/5 Nombre del alumno:............................................................ 7. La eficiencia de las tablas de dispersión se suele medir en proporción a la longitud de las secuencias de búsqueda. Pero también debe tenerse en cuenta el tiempo en cada paso de esa secuencia (es decir, el tiempo sería: longitud de la secuencia*tiempo de cada paso). Suponiendo que en dispersión abierta el tiempo de cada paso es el doble que en dispersión cerrada, calcular en qué porcentaje de llenado (es decir n/B) el tiempo sería el mismo en dispersión abierta y en cerrada. Son iguales cuando n/B = … 8. Fórmula: ………… En cierta aplicación queremos representar relaciones muchos a muchos entre futbolistas y equipos en los que han jugado. Cada relación de un futbolista con un equipo ocupa 50 bytes. Queremos saber si es mejor usar la estructura de listas múltiples o es mejor tener simplemente dos listas (con los datos duplicados, una para futbolistas y otra para equipos). Nuestra base de datos almacena 2000 futbolistas, 300 equipos y cada futbolista ha estado de media en 10 equipos. Calcular cuánta memoria usa la estructura de listas múltiples y cuánta se usaría con dos listas (con información duplicada). Listas múltiples. Memoria: … fórmula: … 9. Dos listas. Memoria: … Fórmula: … Un programador está escribiendo una librería para manejar tablas de dispersión. Se define las cuatro siguientes funciones de dispersión. Las claves, s, son cadenas de caracteres. a) h1(s) = longitud(s) mod B (siendo longitud(s) la longitud de la cadena) b) h2(s) = 375·longitud(s)3 mod B c) h3(s) = (i=1…longitud(s) s[i-1]) mod B (es decir, suma de códigos ASCII) i d) h4(s) = (i=1…longitud(s) s[i-1]·30 ) mod B No todas estas funciones de dispersión son igual de buenas, algunas son buenas y otras malas o muy malas. Ordenar las funciones anteriores de peor a mejor, suponiendo un caso promedio. Es decir, indicar primero la más mala, luego la siguiente mejor, etc. 10. En las anteriores funciones de dispersión, suponemos que las cadenas tienen como máximo longitud 20 y existen 30 caracteres diferentes. Calcular cuántos valores diferentes puede devolver cada función, para un B arbitrariamente grande. h1) Valores: … Fórmula: … h2) … h3) … h4) … Algoritmos y Estructuras de Datos – Tema 3 1. Hoja 3/5 En el árbol AVL de abajo se insertan los siguientes elementos, en el orden indicado: 31, 25, 32. 20 15 6 33 22 17 40 En las inserciones donde se haya requerido aplicar rebalanceos, indicar el caso que ha ocurrido y las rotaciones que se han aplicado. Después de insertar: …… caso: …… y se aplica: …… ; después de…………… 2. En el siguiente árbol AVL se eliminan los elementos: 23 y 1, de forma sucesiva. ¿Qué rotación (o rotaciones) se aplican y sobre qué nodos? 20 10 30 5 23 13 1 6 16 35 25 7 Rotaciones. Después de eliminar: …… se aplica: …… ; después de …………… 3. Tenemos la siguiente relación de equivalencia con punteros al padre (usando balanceo de árboles y compresión de caminos) de tamaño 12. 1 2 3 4 5 6 7 8 9 10 11 12 8 4 4 -2 -1 1 9 9 -3 2 5 0 Sobre ella se aplican: Encuentra(6) y Unir(4, 9). Mostrar el estado de la tabla después de cada operación. 4. Indicar cuáles de las siguientes afirmaciones son falsas: a) En un AVL, la inserción tiene en el peor caso un orden de O(n), pero el caso promedio es O(log n), siendo n el número de elementos del árbol. b) El resultado de eliminar un elemento en un AVL es siempre único. c) En la inserción se aplicará como mucho una rotación, pero en la eliminación se pueden hacer varias rotaciones en diversos nodos del árbol. d) En términos de eficiencia de las operaciones de inserción y consulta, es preferible un árbol perfectamente balanceado a un AVL. e) En la inserción en un AVL, si el elemento a insertar ya está en el árbol, no se modifica el árbol. Algoritmos y Estructuras de Datos – Tema 3 Hoja 4/5 5. Suponer la estructura para representar relaciones de equivalencia con compresión de caminos y balanceo de árboles (recordar que, en caso de empate, se pone el primer elemento como hijo del segundo). Partiendo de una relación vacía sobre un conjunto de tamaño 10, mostrar una secuencia de 3 operaciones que dé lugar a que el nodo 5 sea una raíz de altura 2. 6. Un árbol AVL almacena exactamente 143 elementos. ¿Qué podemos decir en relación a su altura? (Recuerda que un árbol con un solo nodo se considera como altura 0.) a) La altura mínima que puede tener es 6 y la máxima es 12. b) El árbol tendrá siempre altura 10. c) La altura mínima es 6 y la máxima es 9. d) La altura mínima es 7 y la máxima es 10. e) Ninguna de las anteriores respuestas es cierta, pues depende mucho de los elementos. 7. En un árbol trie se almacenan las palabras: mes, mesa, meseta, mesilla, mesana. Suponer que los nodos del trie se representan con listas. El tamaño del alfabeto (sin incluir la marca de fin) es de 26 letras y cada letra ocupa 1 byte. Estimar cuánta memoria utiliza el trie para ese ejemplo. Incluir la fórmula por la que se llega a ella. Memoria:................... 8. Fórmula por la que se llega a esa cantidad:.............................. Suponer la siguiente operación recursiva sobre árboles trie, donde Consulta(n, c) es la operación para consultar una letra c dentro de un nodo n del trie. La llamada inicial es con: Maneja(raiz, “”, palabra, 0), siendo raiz la raíz del trie, y palabra es una palabra cualquiera. operación Maneja(t: trie; p: cadena; q: cadena; i: entero) para cada carácter c hijo del nodo t hacer si (c==q[i]) Y (i<longitud(q)) entonces Maneja(Consulta(t, c), p+c, q, i+1) // p+c es una concatenación de cadenas finpara si Consulta(t, $) entonces Escribir(p) Describir (de forma muy breve) el resultado que produce este procedimiento, es decir, lo que escribe. 9. En un árbol B de orden p = 5 se insertan los siguientes elementos en el orden dado: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13. Muestra el árbol B resultante. 10. Suponer un árbol B de orden p = 401. Señalar las afirmaciones que pueden ser ciertas en relación a la eliminación de un elemento de dicho árbol: a) Si un nodo se queda con menos de 400 elementos, se debe reestructurar el árbol. b) Si un nodo se queda con menos de 200 elementos y su hermano izquierdo o derecho tienen más de 200, se produce el proceso de préstamo de elementos. c) Lo anterior es cierto, pero no sólo se produce con los hermanos izquierdo y derecho, sino con cualquier nodo hermano del nodo donde se ha hecho la eliminación. d) La respuesta b) es correcta, pero hay que tener en cuenta que el nodo raíz sí puede quedar con menos de 200 elementos. Algoritmos y Estructuras de Datos Hoja de Respuestas Hoja 5/5 Tema 2 Respuestas: 1 2 3 4 5 6 7 8 9 10 Tema 3 Respuestas: 1 2 3 4 5 6 7 8 9 10 Algoritmos y Estructuras de Datos Hoja de Respuestas Hoja 6/5