Está en la página 1de 4

Algoritmos y Estructuras

de Datos
Examen Parcial
Pregrado
2022-2

Indicaciones específicas:

Duración: 90 minutos + 10 minutos para subir sus respuestas


Número de preguntas: 3

● No se permitirá consultar paginas externas al Canvas


● No se permitirá compartir notas ni material entre alumnos.
● Lea las preguntas cuidadosamente y responda de manera clara. Respuestas que no sean
legibles o claras no tendrán ningún puntaje.
● Si no sabe la respuesta, deja el espacio en blanco y coloque “F”.
● Recuerden, de todas formas, resolver las preguntas que no entendieron después del examen.

Pregunta 1 (6 puntos): Preguntas

A. (1.5 pts) Listar al menos dos ventajas y desventajas de implementar un Diccionario


(key:value) con Hash Table vs Árbol Binario de Búsqueda.

B. (1.5 pts) Dibujar un grafo dirigido con al menos 8 vértices y con un factor de densidad en el
rango [0.4 – 0.5]. Muestre el cálculo del factor de densidad. Muestre su representación en
lista de adyacencia.

C. (1 pt) Como sería el árbol del Disjoint Set para que el Find siempre tenga una complejidad
exactamente O(1). Dibuje un ejemplo.

D. (1 pt) ¿Qué algoritmo(s) de ordenación mantienen una complejidad espacial O(1)?. Es decir
que no requieren memoria adicional fuera del input.

1 de 4
Algoritmos y Estructuras
de Datos
Examen Parcial
Pregrado
2022-2
E. (1 pt) Dado los siguientes árboles binarios, indique cuales de ellos son perfectos, completos y
balanceados.

Pregunta 2 (8 puntos): Implementación

A. (4 puntos) Dado un Árbol Binario de Búsqueda, se le pide implementar el recorrido PreOrder


de forma iterativa (use un stack).

s = empty stack
while (not s.isEmpty() or node != null)
if (node != null)
s.push(node)
node = node.left
else
node = s.pop()
cout << node.data;
node = node.right

B. (4 puntos) Implemente un algoritmo para hallar la mediana de una lista de números


ordenados con complejidad O(n) y usando un solo bucle.
La mediana es el número medio de la lista ordenada, si hay un número par de datos, la
mediana es el promedio de los dos números medios.

float mediana(Node*head) {
if (head == nullptr) return 0;
Node *fast = head;
Node *slow = head;
Node *slow2 = head;
while (fast != nullptr && fast->next != nullptr) {
fast = fast->next->next;
slow2 = slow; // puntero al anterior al medio
slow = slow->next; // puntero al medio
}
if (fast != nullptr) return slow->data;
else return ((float)((slow->data)+(slow2->data))/2.0);
}

2 de 4
Algoritmos y Estructuras
de Datos
Examen Parcial
Pregrado
2022-2

Pregunta 3 (6 puntos): Ejercicios

A. (2 pts) Dado el siguiente BST incompleto, complete los nodos vacíos y luego elimine la raíz
(use el sucesor):

- Complete los nodos vacíos

- Elimine la raíz

B. (2 pts) Dado el siguiente heap:

90 89 70 36 75 63 65 21 18 15

- Muestre como quedaría el array después de 4 iteraciones al aplicar el algoritmo de Heap-


Sort

3 de 4
Algoritmos y Estructuras
de Datos
Examen Parcial
Pregrado
2022-2

C. (2 pts) Crear un DisjointSet optimizado (by rank) con los siguientes elementos
{0,1,2,3,4,5,6,7,8,9}. Dibuje el DS resultante e indique el valor de rank en la raíz de cada
conjunto.

- Aplique las siguientes operaciones de unión:


Union(0,6)
Union(5,2)
Union(3,7)
Union(5,6)
Union(1,8)
Union(8,3)
Union(5,8)

- Como quedaría el árbol después de aplicar Find_Path_Compression(5)

4 de 4

También podría gustarte