Anda di halaman 1dari 3

Estructuras de Datos - Taller 2

Prof: Juan Camilo Castro Pinto - Grupo 4

1. Implementar en Java un árbol binario de búsqueda almacenando los datos en un


arreglo. Para las posiciones en donde no existe un elemento utilizar null. Para este
punto crear una clase llamada ​ArrayBinarySearchTree ​que debe contener como
mínimo los metodos insert, delete, contains, findMax, findMin.

2. Implementar un d-Heap (Un Heap en donde cada nodo debe tener como máximo d
hijos). Para ese punto crear una clase llamada ​DHeap, ​la cual debe contener como
mínimo los métodos deleteMin, insert, buildHeap. El constructor de la clase debe recibir
el parámetro d.

3. Un min-max heap es una estructura de datos que permite las funciones deleteMin y
deleteMax. La estructura es como la de un binary heap, pero la propiedad de orden es
que para cualquier nodo, X, a una profundidad par, el elemento guardado en X es
menor que su padre pero mayor que el abuelo y para cualquier nodo X a una
profundidad impar, el elemento guardado en X es mayor al padre y menor que el
abuelo.
Implementar un min-max heap en una clase llamada ​MinMaxHeap que contenga como
mínimo los métodos deleteMin, deleteMax, insert, buildHeap. Además explicar el
algoritmo para encontrar el mínimo, el máximo y para insertar un nuevo elemento en el
heap. ​(Esta explicación debe ir en un archivo PDF)

4. Implementar una tabla hash que como método de solución de colisiones utilice el
método lineal. Además ahora para insertar un objeto se debe indicar una pareja de
elementos llave-valor, por lo que la clase a implementar tendría la firma
LinearHashTable<K,T>, ​donde K es la clase de la llave (normalmente Integer o String)
y T es la clase del elemento a insertar. Ahora el Hash no se calcula al elemento
completo, sino a la llave. Tener en cuenta que se debe hacer rehash para que la tabla
hash sea óptima. Esta clase debe tener como mínimo las funciones contains, insert y
remove.

5. Implementar en Java el algoritmo de Dijkstra utilizando una listas de adyacencia. Estas


listas se almacenarán en una clase ​Vertex, ​como se muestra a continuación:

El pseudocódigo del algoritmo de Dijkstra se encuentra en la figura 9.31 del libro de


Weiss, sin embargo este pseudocódigo toma tiempo cuadrático, por lo que se debe
implementar utilizando heaps para mejorar el tiempo. Para este punto se debe
implementar una clase llamada ​Graph​, la cual tiene como único atributo una tabla hash
de Vertex, la cual almacenará los vértices del grafo. Además debe tener los métodos
addVertex, que permitirá agregar un nuevo vértice con un nombre específico para que
sirva como llave para ser ingresado a la tabla hash, el método addEdge, que recibe un par
de vértices lo que implica adyacencia y finalmente el método dijkstra, que permite
encontrar la ruta más corta de un nodo dado a cualquier otro nodo. Además se debe
poder imprimir en pantalla la ruta más corta, para esto se debe implementar la función
printPath.
La entrega del taller consiste en presentar un archivo comprimido (.zip o .rar) con todo lo
que se utilizó para resolver el taller. Este archivo debe ser nombrado de la siguiente
manera T2EDG4_{username1}_{username2}.zip donde username es el correo sin el
“@unal.edu.co” de cada uno de los integrantes del grupo. ​TODOS LOS ARCHIVOS
DEBEN IR MARCADOS CON LOS NOMBRES DE LOS INTEGRANTES, EN LAS
CLASES DE JAVA DEBEN IR COMO COMENTARIOS AL INICIO DE CADA UNA. NO
CAMBIAR EL NOMBRE A LAS CLASES DADAS.

Nota: ​El taller se puede realizar en grupos de dos personas y debe ser subido al siguiente
link: ​https://www.dropbox.com/request/zSuPdKNnntPHEGp3T6kC antes del 9 de marzo
de 2019 a las 10:00 PM.

Anda mungkin juga menyukai