## FINAL 1 Ejercicio 1 a) Dado un grafo no dirigido, con vertices y arcos rotulados con números enteros. Hacer un método que devuelva un mapeo de enteros con enteros, donde la clave es la parte conexa a la que pertenece el subgrafo y el valor la suma de los rótulos de los arcos. Suguiere realizar con DFS b) Qué cambiarias en la implementación anterior para que el valor sea el arco de menor peso del subgrafo? Comentar con tus palabras. c) Cuál implementacíon usarias para cada ED utilizadas en el inciso a)? Justificar adecuadamente. Ejercicio 2 a) Insertar en un árbol 2-3, los números 1,2,3,4,5 y 6. Comparar con un ABB. Diferencias. b) Cuándo implementarias un mapeo con arbol B+ y cuando con ABB? c) Dar las interfaces y clases para implementar un 2-3. Ejercicio 3 a) Arbol general. Interfaz y clases para implementarlo (arbol y nodos). Las escribir solo los atributos y constructores. No metodos. b) Agregar un metodo a la clase Arbol, el cual devuelva verdadero si el arbol en si es propio (cada nodo tiene 0 o 2 hijos). Tiene acceso total a la ED. c) Tiempo de ejecución del metodo anterior. Ejercicio 4 a) Ventajas de implementar mapeo con tabla Hash. Que es y para que sirve el factor de carga? b) (Da seis entradas clave-valor, donde la clave es un número hash) Mostrar graficamente como quedaria una tabla hash al insertar dichos elementos. La funcion de hash es h(x) = x mod N, N el tamaño del arreglo de buckets. Mostrar para hash abierto y hash cerrado. Para las colisiones utilizar el metodo lineal. Ejericio 5 a) Que es en java una excepción?. b) MUestra dos fragmentos de código con la misma logica (mostrar por pantalla un arreglo) el primer metodo tira la excepcion ArrayBoundaryNoseque, mientras que en el segundo hace manejo de la excepcion, para atraparla si se genera el error. Pregunta como afecta al cliente la implementación de cada metodo. #FINAL 2 1. Implementar un método que recibe un grafo no dirigido g con arcos y vértices con rótulo genérico. Debe retornar un mapeo tal que si V está contenido en el conjunto de los vértices de G, entonces el mapeo M(V) devuelve el vértice más lejano. El vertice más lejano es la distancia máxima contando la cantidad de arcos que lo separa. 2. a. Definir todas las estructuras de datos para implementar un árbol binario; clases con sus atributos e interfaces sin métodos. b. Recibo dos rótulos de nodos A y B. - Buscar al nodo N con rótulo A. - Buscar el nodo M más a la derecha en el subárbol determinado por N. - Si no se encontró ningún nodo X con rótulo B, insertar un hijo derecho con rótulo B. - Si no se econtró N o ya existía un nodo con rótulo B, excepción. c. Estimar orden de tiempo de ejecución. 3. a. Dibujar el árbol 2-3 final después de insertar {125, 130, 115, 120, 13, 10, 92, 300, 240, 222, 300}. Mostrar la ejecución cuando haya desborde. b. Explicar ventajas y desventajas de las tablas de hashpara implementar conjuntos y mapeos respecto de otras alternativas. Justificar con tiempos de ejecución y condiciones. c. Comparar usando como criterio el orden de tiempo de ejecución las ventajas de usar Dijkstra, Floyd y búsqueda exhaustiva de caminos (DFS con marca y desmarca) para hallar un camino entre un par de nodos A y B en un graf dirigido. No se pide explicar los algoritmos en detalle. 4. a. Explicar el algoritmo de ordenamiento de arreglos HeapSort ingenuo. Dar orden de tiempo de ejecución explicado en lenguaje natural. b. Explicar tres alternativas para implementar pilas. Comparar las ventajas y desventajas en uso de memoria y ejecución. 5. Orden de tiempo de ejecución de un código. Tiene métodos BSearch, pertenece(x, cola), BubbleSort. # FINAL 3 1. Dfs de grafo dirigido dnd tenes que devolver un mapeo de vertices y float, con m(v) = suma de los pesos de los arcos emergentes, y los vertices del mapeo son los q son alcanzables desde el vertice pasado por parametro. 2. Implementacion abb(signatura de las interfaces, y clases con atributos usadas), hacer un metodo dentro del abb donde t pasan una clave x y tenes q devolver una lista con las claves menores a la pasada por parametro, pero sin pasar por ningun nodo no necesario y calcular el tiempo de ejecucion 3. 10 inserciones en 2-3, explicar el heap sort y que ventajas tiene en contra de los multipasadas. 4. Ventaja de dijsktra sobre la busqueda de caminos minimos exhaustiva, y las carencias de dijsktra. B) Tiempo ejecucion floyd, explicar como funciona y como obtener el camino de un vertice a otro. 5. Te da un metodo con varios metodos de ordenamiento y tenes q calcular el tiempo de ejecución, en este caso era un algoritmo con binary search y lineal search. # Final 4 FINAL EDD 27/12/2022 1) Implementar un método que dado un grafo g, un vertice v y un vertice w, calcule el camino minimo de v a w. Imprimir el camino. Asumir que se tiene el tda grafo implementado. 2) a)Dar la signatura de las interfaces y las clases necesarias para implementar un Arbol Binario. b)Implementar un método que dado un rótulo R, haga un recorrido preorden de los subarboles de cada nodo con rotulo R. Asumir que se tiene completo acceso a la estructura. c) Dar el tiempo de ejecución de la solución y justificar. 3) a)Dado un Minheap con arreglo y 5 prioridades insertadas. Insertar 3 prioridades dadad en el enunciado e ir mostrando como va quedando el arreglo. b) Hacer una eliminación y mostrar como queda el arreglo final. c) Ventajas y desventajas del heap sort sobre el bubble sort. 4) Arbol Trie a) Dado un arbol Trie con unas palabras insertadas, mostrar como queda después de insertar unas palabras que te da. b) Para qué sirven los tries. Dar ventajas y deventajas de implementar con tries. 5) Te da un método que recibe un arreglo a, otro b y un AVL t. El método usa varios metodos de ordenamiento y busqueda. Tenes que dar el tiempo de ejecución y justificar. #FINAL 5 Final EDD 05/03 1) Dado un Grafo no Dirigido donde los vertices son Strings y el peso de los Arcos Enteros, donde cada vertice representa a una persona. Si dos vertices estan unidos, significan que son amigos, donde el peso del arco es la fuerza de amistad, siendo 1 poca fuerza y 10 mucha fuerza. a) Dar un metodo que devuelva la persona que mas amigos tiene. b) Dar un metodo que devuelva la persona que mas fuerza de amistad tenga. c) Dar un metodo que devuelva si existen un camino entre dos personas (representadas por sus vertices). 2) a) ¿Que tiene en comun un Arbol 2-3 y un Arbol B+? Basarse en definiciones, tiempos de ejecucion, y cualquier criterio que considere necesario. b) Mismo pero entre Arbol Binario de Busqueda (ABB) y Arbol AVL. 3) a) Definir todas las clases e interfaces necesarias para implementar un Arbol General. Solo la signatura de las interfaces (no los metodos), y los atributos y constructores de la clase Arbol y Nodo. b) Agregar un metodo a la clase Arbol que devuelva un mapeo que contenga como clave el nodo y como valor la cantidad de elementos que tiene el arbol sin el subArbol con el nodo como raiz. Cuenta con total acceso a la estructura. c) Calcular el Orden del tiempo de ejecucion del metodo. Justificar 4) a) ¿Cuales son las ventajas de implementar una Cola con Prioridad con Arbol con Arreglo? b) Implementar la signatura, atributos y constructor de dicha clase. c) ¿Cual sera el orden del tiempo de ejecucion de insertar? Justificar 5) a) ¿Cual es la diferencia entre GENERICIDAD PARAMETRIZADA y GENERICIDAD HEREDADA? b) Dar ejemplos de Genericidad en Java # FINAL 6 Final ED 11/7 2024 Ejercicio 1: Usando las operaciones del TDA grafo visto en clase, escriba en Java un método tal que, dado un grafo dirigido y un entero k, retorna verdadero si el grafo posee un ciclo de longitud mayor a k y falso en caso contrario. Si considera que necesita algún otro TDA de los vistos en la materia, puede asumirlos como totalmente implementados. Si necesita alguna otra clase, la tiene que implementar. Ejercicio 2: ¿Qué relación hay entre un ABB y un AVL? Contextualice su respuesta usando definiciones, tiempo de ejecución, ejemplos y cualquier otro criterio que considere relevante. Ejercicio 3: a) En Java y usando genericidad parametrizada, defina todas las estructuras de datos para representar un mapeo con Árbol Binario de Búsqueda. Programe el constructor del mapeo. b) Implemente el método put de Mapeo, utilizando la estructura definida en a) y respetando la siguiente especificación: / ** * Si el mapeo no tiene una entrada con clave key, inserta una entrada con clave key y valor value en el mapeo y devuelve null. * Si el mapeo ya tiene una entrada con clave key, entonces reemplaza su valor y retorna el viejo valor. * @param key Clave de la entrada a crear. * @param value Valor de la entrada a crear. * @return Valor de la vieja entrada. * @throws InvalidKeyException si la clave pasada por parámetro es inválida. */ public V put (K key, V value) throws InvalidKeyException; c) ¿Cómo modificaría la estructura de a) de un Mapeo para transformarlo en un Diccionario implementado con Árbol Binario de Búsqueda? Describa, utilizando sus palabras, cómo resolvería el método put en esta estructura. Ejercicio 4: Explique el funcionamiento de un hash abierto. ¿Cómo se compara este funcionamiento con el del hash cerrado? Ejercicio 5: a) ¿Qué diferencia hay entre GENERICIDAD PARAMETRIZADA y GENERICIDAD POR HERENCIA? .b) De ejemplos en Java de cada tipo de GENERICIDAD. # FINAL 7 Final ED 5/3/2024 Ejercicio 1: Supongamos que tienes un conjunto de personas y quieres representar sus amistades utilizando un grafo no dirigido. Cada persona es un vértice en el grafo que se rotula con un String (nombre de la persona), y una arista conecta dos vértices si esas dos personas son amigas. Además, cada arista tiene un peso que representa la fuerza de la amistad, siendo 1 la amistad más débil y 10 la más fuerte. a) Escriba en Java un método tal que dado un grafo como se describió retorna el nombre de la persona que más amigos tiene, independiente de la fuerza de sus amistades. b) Escriba en Java un método tal que dado un grafo como se describió retorna el nombre de la persona que más fuerza de amistad tiene, independientemente de la cantidad de amigos. La fuerza de amistad se define como la suma de los pesos de las aristas incidentes en una persona. c) Escriba en Java un método tal que dado un grafo como se describió, y dos personas representadas por sus vértices en el grafo determine si existe un camino de una persona a la otra. Ejercicio 2: a) ¿Qué relación hay entre un árbol B+ y un árbol 2-3? Contextualice su respuesta usando definiciones, tiempo de ejecución, ejemplos y cualquier otro criterio que considere relevante. b) ¿Qué relación hay entre un ABB y un AVL? Contextualice su respuesta usando definiciones, tiempo de ejecución, ejemplos y cualquier otro criterio que considere relevante. Ejercicio 3: a) En Java 1.5 o superior, defina todas las estructuras de datos (clases con sus atributos, e interfaces pero sin métodos) para representar un árbol general usando lista de hijos y enlace al padre. Programe el constructor del árbol y del nodo. b) Agregue un método a la clase árbol general tal que (con acceso a su estructura), retorne un mapeo en donde las claves sean las etiquetas de cada nodo del árbol (asuma que el árbol no tiene etiquetas repetidas) y su respectivo valor sea la cantidad de elementos que tiene el árbol, sin los elementos del subárbol con la clave como raíz. Por ejemplo, para el árbol de la siguiente figura el mapeo resultante debe ser M={(A,0),(B,7),(C,6),(D,4),(E,7),(F,6),(G,7),(H,7)}. *ACA VA UN ARBOL DADO* c) Estime el orden del tiempo de ejecución de su solución, justificando apropiadamente. Ejercicio 4: a) ¿Qué ventajas tiene la implementación de una Cola con Prioridad con Árbol implementado con arreglos? b) De la implementación en Java de una estructura de datos que permita resolver una Cola con Prioridad con Árbol implementado con arreglos. Solo signatura, atributos y constructor/es. c) ¿Cuál sería el orden del tiempo de ejecución de insertar un elemento en una Cola con Prioridad con Árbol implementado con arreglos usando la estructura de b)? Justifique la respuesta. Ejercicio 5: a) ¿Qué diferencia hay entre GENERICIDAD PARAMETRIZADA y GENERICIDAD POR HERENCIA? b) De ejemplos en Java de cada tipo de GENERICIDAD. *TABLA DE TDA's*