Examen de Programació II UDL 2022 · Segundo Parcial Enero 2022
Examen de Programació II de la UDL (Grado en Ingeniería Informática) 2022, Segundo Parcial Enero 2022: 3 problemas con solución. Con corrección al momento.
Temas del examen: Árboles binarios y heaps · Tablas hash
Pregunta 1 · Árboles binarios y heaps
Pregunta 1 (3 puntos). Operaciones sobre max-heap
Considera el max-heap que se ilustra a continuación:
Efectúa de forma independiente las dos operaciones indicadas a continuación sobre el árbol original:
a.
Remove (extracción de la raíz) sobre el max-heap original.
Describe de forma razonada la situación que se produce en cada instante, detallando los intercambios y las configuraciones intermedias hasta alcanzar la disposición definitiva.
b.
Insert del valor 65 sobre el max-heap original.
Describe de forma razonada la situación que se produce en cada instante, detallando los intercambios y las configuraciones intermedias hasta alcanzar la disposición definitiva.
Pregunta 2 · Tablas hash
Pregunta 2 (3,5 puntos). Tablas hash con dispersión abierta y cerrada
Se dispone de dos tablas hash inicialmente vacías (denominadas tabla 1 y tabla 2) de dimensión (posiciones de 0 a 9) tal y como se muestra en la Figura 2-a.
Se debe simular paso a paso la inserción y eliminación de elementos aplicando la siguiente secuencia de 10 operaciones de parejas (clave, valor):
Insertar (100, 1000)
Insertar (10, 100)
Insertar (31, 310)
Insertar (55, 550)
Eliminar 10
Insertar (5, 50)
Eliminar 31
Insertar (1000, 10000)
Insertar (100, 90)
Insertar (320, 3200)
Función de dispersión común:
Ejemplo: .
Aplica dicha secuencia y describe de forma razonada la situación que se produce en cada instante, detallando el estado de ambas estructuras según sus particularidades y explicando brevemente cada casuística nueva que acontezca (primera colisión, eliminación lógica vs física, sobreescritura de clave existente, etc.):
a)
Tabla 1 (dispersión abierta): Se representa mediante un array de listas enlazadas que almacenan pares (clave, valor). En caso de colisión, los nuevos elementos se añaden por la cabecera (o final, según corresponda de forma consistente). Si una clave ya existe, se actualiza su valor asociado.
b)
Tabla 2 (dispersión cerrada): Vector de tripletas (clave, valor, marca) (marcas: libre, ocupado, borrado) con resolución cuadrática definida por:
Pregunta 3 · Árboles binarios y heaps
Pregunta 3 (3,5 puntos). Método leavesMinusInternal para árbol binario
Escribe la implementación de un método en Java llamado leavesMinusInternal que tome por parámetro un árbol de tipo BinaryTree<Integer> y devuelva la diferencia resultante de restar la suma de los nodos interiores a la suma de los nodos hoja:
En el caso particular de que el árbol esté vacío, la función debe retornar 0.
En la Figura 3 se ilustran dos ejemplos de ejecución:
Interfaz proporcionada:
public interface BinaryTree<E> extends Collection<E> {
BinaryTree<E> left();
BinaryTree<E> right();
E root();
void removeLeft();
void removeRight();
int height();
Iterator<E> iterator();
BinaryTreeIterator<E> iteratorPre();
BinaryTreeIterator<E> iteratorIn();
BinaryTreeIterator<E> iteratorPost();
BinaryTreeIterator<E> iteratorLevels();
void clear();
boolean contains(Object o);
boolean containsAll(Collection<?> c);
boolean equals(Object o);
int size();
Object[] toArray();
boolean isEmpty();
}
public static int leavesMinusInternal(BinaryTree<Integer> tree)
También puedes estudiar por temas
Practica un tema con ejercicios de los exámenes de todos los años, mezclados.
- Árboles binarios y heaps · 2 problemas · 40 % de que salga
- Tablas hash · 1 problema · 40 % de que salga
- Diseño de clases y objetos en Java, herencia e igualdad · 7 problemas · 35 % de que salga
- Listas en Java: uso de la API, implementación enlazada y coste · 3 problemas · 35 % de que salga
- Recursión: diseño, traza y diagramas de llamadas · 10 problemas · 25 % de que salga
- Ficheros en Java: texto secuencial y acceso directo binario · 5 problemas · 25 % de que salga