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.