GuiÃÅ` a_AÃÅ`Ã

Anuncio
ILI-134 Estructuras de Datos, 2011-2
Profesor: Diego Arroyuelo
UTFSM, Campus San Joaquı́n
Guı́a de Ejercicios: Árboles
Los siguientes ejercicios asumen que el alumno ha implementado los TAD correspondientes a cada uno
de los tipos de árboles (árboles generales, árboles binarios, árboles binarios de búsqueda, árboles AVL).
1.
Árboles Generales
1. Diseñar un algoritmo recursivo para calcular la altura de un árbol general.
2. Diseñar un algoritmo no recursivo para calcular la altura de un árbol general.
3. Escriba un algoritmo recursivo para calcular el grado de un árbol general.
4. Escriba un algoritmo devuelva el número de hojas de un árbol general.
2.
Árboles Binarios
1. Escribir un algoritmo que permita hacer un barrido por niveles de un árbol binario. ¿Qué tipo de
estructura auxiliar necesita emplear?
2. Escribir un algoritmo no recursivo que permita hacer un barrido por profundidad de un árbol binario.
¿Qué tipo de estructura auxiliar necesita emplear?
3. Diseñar un algoritmo no recursivo para recorrer un árbol binario en inorden.
4. Diseñar un algoritmo no recursivo para recorrer un árbol binario en postorden.
5. Escribir un algoritmo recursivo que cuente el número de nodos de un árbol binario.
6. Escribir una función recursiva que encuentre la altura de un árbol binario.
7. El recorrido en preorden de un determinado árbol binario (cuyos nodos han sido rotulados A, . . . , M)
produce como resultado la secuencia de nodos G E A I B M C L D F K J H, y el recorrido inorden
produce la secuencia I A B E G L D C F M K H J.
a) Dibujar el árbol binario correspondiente.
b) Dar el recorrido en postorden sobre dicho árbol.
c) Diseñar un algoritmo para obtener el recorrido en postorden de un árbol dado el recorrido en
preorden e inorden sobre el mismo. No se puede reconstruir el árbol explı́citamente para obtener
el recorrido postorden.
1
8. ¿Es posible generar un árbol binario a partir únicamente de uno de sus recorridos preorden, inorden
o postorden? ¿Y a partir de dos recorridos diferentes (examinar todos los pares posibles)? Dar los
algoritmos para los casos que sean realizables.
9. Se define por frontera de un árbol binario, la secuencia formada por los elementos almacenados en las
hojas de un árbol binario, tomados de izquierda a derecha. Diseñar un algoritmo que genere una lista
(es decir, del TAD tLista) con la frontera de un árbol binario dado.
10. Diseñar un algoritmo que obtenga el recorrido por niveles inverso de un árbol binario dado. En este
recorrido, primero se listan (de izquierda a derecha) los nodos del último nivel del árbol, luego los del
penúltimo nivel, y ası́ sucesivamente hasta llegar a la raı́z.
11. Diseñar un algoritmo que obtenga el recorrido por niveles inverso modificado de un árbol binario dado.
En este recorrido, primero se listan (de derecha a izquierda) los nodos del último nivel del árbol, luego
los del penúltimo nivel, y ası́ sucesivamente hasta llegar a la raı́z.
12. Diseñar un algoritmo que reciba como entrada los recorridos prefijo e infijo de un árbol binario y retorne
como salida el recorrido por niveles de dicho árbol. Para obtener la solución no se puede construir el
árbol de manera explı́cita.
13. Diseñe un algoritmo que calcule el número de nodos completos de un árbol binario. Un nodo completo
es uno que tiene dos hijos no vacı́os.
14. Demostrar por inducción que el máximo número de nodos en un árbol binario de altura h es 2h+1 − 1.
15. Un árbol monodistante de orden N es un árbol binario de números enteros en el que la suma de los
valores de los nodos de cada camino que va desde la raı́z a un nodo hoja es igual a N .
a) Implementar una función que determine si un árbol binario de enteros es monodistante de orden
N , para un N dado.
b) ¿Cuál es el tiempo de ejecución de su algoritmo en el peor caso?
16. Sea S = ha0 , a1 , . . . , an−1 i una secuencia finita de números enteros. Sobre S se desea soportar las
siguientes operaciones:
acceso(S, i): encontrar ai .
sumaParcial(S, k): permite calcular la suma parcial
Pk
i=0
ai
Diseñe una estructura de datos basada en un árbol binario que represente a S y permita soportar
las operaciones solicitadas de manera eficiente. Muestre el algoritmo para soportar dichas operaciones.
¿Cuál es el tiempo de ejecución para cada una de las operaciones? Use la notación asintótica más
adecuada para este caso (O, Ω o Θ).
Ayuda: construya un árbol binario cuyas hojas contengan los elementos de la secuencia, de izquierda
a derecha. Sólo resta definir la estructura y el contenido de los nodos internos del árbol.
3.
Árboles Binarios de Búsqueda (ABB)
1. Para cada una de las siguientes secuencias de números enteros, muestre el ABB obtenido cuando estos
valores son insertados uno por uno en el orden dado, asumiendo que el árbol está inicialmente vacı́o.
Muestre el árbol resultante de cada una de las inserciones.
a) 1, 2, 3, 4, 5, 6, 7.
b) 4, 2, 1, 3, 6, 5, 7.
c) 1, 6, 7, 2, 4, 3, 5.
2
2. Para cada uno de los ABB obtenidos en el Ejercicio 1, muestre el árbol que se obtiene cuando se borra
la raı́z.
3.
a) ¿Cuál de los ABB del Ejercicio 1 producirá el menor costo de búsqueda en el peor caso?
b) ¿Cuál de los ABB del Ejercicio 1 producirá el mayor costo de búsqueda en el peor caso?
En ambos casos explique las razones. Además, medite acerca de los tipos de secuencias de inserciones
que producen buenos/malos ABB.
4. Mostrar cinco secuencias de inserción de los valores 1, 2, 3, 4, 5, 6, 7 tal que, cuando se inserten en un
ABB inicialmente vacı́o, produzcan un ABB con el menor costo de búsqueda en el peor caso.
5. Mostrar cinco secuencias de inserción de los valores 1, 2, 3, 4, 5, 6, 7 tal que, cuando se inserten en un
ABB inicialmente vacı́o, produzcan un ABB con el mayor costo de búsqueda en el peor caso.
6. Mostrar paso a paso el ABB para las claves 50, 25, 75, 10, 40, 60, 90, 35, 45, 70, 42, asumiendo que
los valores son insertados en ese orden y que el árbol estaba inicialmente vacı́o.
7. Mostrar paso a paso el ABB para las claves 3, 1, 4, 6, 9, 2, 5, 7, asumiendo que los valores son insertados
en ese orden y que el árbol estaba inicialmente vacı́o. Mostrar el resultado de borrar la raı́z.
8. ¿Puede reconstruirse de forma única un ABB dado su recorrido inorden? ¿Y dados el preorden y el
postorden?
9. Diseñe un algoritmo que indique si un árbol binario dado cumple las condiciones para ser un ABB o
no. ¿Cuál es el tiempo de ejecución de su algoritmo? Use la notación asintótica más adecuada para
este caso (O, Ω o Θ).
10. Diseñar algoritmos para calcular el mı́nimo y el máximo elemento de un árbol binario de búsqueda.
¿Cuál es el tiempo de ejecución de su algoritmo? Use la notación asintótica más adecuada para este
caso (O, Ω o Θ).
11. Diseñar un algoritmo tal que dado un ABB y dos lı́mites LI y LS, construya un nuevo ABB con los
elementos del árbol original que se encuentran dentro de esos lı́mites. Su algoritmo deberı́a recorrer
la mı́nima cantidad posible de nodos del árbol. Analice la complejidad temporal de su algoritmo en
el peor caso, y en el caso promedio, asumiendo que la cantidad de nodos del árbol es n, y que N es
la cantidad de nodos cuyos valores se encuentran dentro del intervalo dado. Use la notación asintótica
más adecuada para este caso (O, Ω o Θ).
12. Para borrar un nodo no hoja de un ABB, lo intercambiamos ya sea con el elemento más pequeño
dentro de su subárbol derecho, o con el mayor elementos dentro de su subárbol izquierdo. En un árbol
de n nodos, ¿Cuál es el máximo número de intercambios necesarios para borrar un elemento?
13. Usted debe mantener datos para alguna aplicación. Sus opciones son:
Una lista enlazada ordenada (es decir, los datos se almacenan ordenados de forma creciente).
Una lista enlazada desordenada.
Un ABB.
Una lista ordenada basada en arreglo.
una lista desordenada basada en arreglo.
Para cada uno de los siguientes escenarios, ¿Cuáles de las siguientes opciones serı́a la mejor? Justifique
su respuesta.
a) Los datos llegarán ordenados de menor a mayor. Un total de 1.000 inserciones serán intercaladas
con 1.000 búsquedas.
3
b) Los datos llegarán bajo una distribución uniforme (es decir, cualquiera de los valores posibles de
los datos tienen la misma probabilidad de ocurrir). Se realizarán 1.000.000 de inserciones, seguidas
por 10 búsquedas.
c) Los datos llegarán bajo una distribución uniforme. 1.000 inserciones se intercalarán con 1.000
búsquedas.
d ) Los datos llegarán bajo una distribución uniforme. Se realizarán 1.000 inserciones, seguidas por
1.000.000 de búsquedas.
4.
Árboles AVL
1. Dibuje el AVL resultante de insertar cada uno de los valores 20, 16, 44, 57, 93, 32, 65, 19, 8 y 17, en
ese orden. El AVL es inicialmente vacı́o. Dibuje cada uno de los pasos de la inserción, ası́ como las
rotaciones producidas.
2. Dibuje el AVL resultante de insertar cada uno de los valores 35, 18, 9, 58, 14, 49, 51, 67, 60, en ese orden.
El AVL es inicialmente vacı́o. Dibuje cada uno de los pasos de la inserción, ası́ como las rotaciones
producidas.
3. Dibuje el AVL resultante de insertar cada uno de los valores 24, 14, 6, 35, 59, 17, 21, 32, 4, 7, 15, 22,
en ese orden. El AVL es inicialmente vacı́o. Dibuje cada uno de los pasos de la inserción, ası́ como las
rotaciones producidas.
4. Dibuje el AVL resultante de insertar cada uno de los valores 13, 7, 21, 15, 27, 18, 4, 11, 30, en ese orden.
El AVL es inicialmente vacı́o. Dibuje cada uno de los pasos de la inserción, ası́ como las rotaciones
producidas. Luego elimine los elementos: 13, 4, 15, en ese orden.
4
Descargar