Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Pregunta # 1
Dado el siguiente arreglo: [8, 10, 4, 9, 6, 3, 4, 2, 1, 6]
a) Construya el árbol heap correspondiente, asuma que el menor elemento es el de mayor
prioridad.
b) ¿Cómo quedaría el árbol si se extrae el primer elemento?
c) Si se adiciona el elemento 4, éste quedaría como padre del 6. Justifique.
Pregunta # 2
Defina la clase Heap.
a) Implemente los métodos Insertar, Suprimir_Min y Devolver_Min
b) Implemente los métodos (privados) Build_Heap y Heapify
c) Implemente dos constructores en la clase, uno que construya un heap vacío y otro que
reciba un arreglo como parámetro y construya el heap utilizando el método Build_Heap.
Pregunta # 3
Defina una clase ColaPrioridad que implemente la interfaz ICola<T> (con T que implementa la
interfaz IPriorizable) e implemente todos sus métodos, usando como estructura de datos un
heap.
Pregunta # 4
Muéstrese el árbol parcialmente ordenado de forma ascendente que resulta cuando los enteros
5, 6, 4, 9, 3, 1, 7 se insertan en un árbol vacío. ¿Cuál es el resultado de 3 operaciones
sucesivas SUPRIME_MIN en el árbol?
Pregunta # 5
Dadas las siguientes afirmaciones responda verdadero o falso (V o F) según corresponda.
Justifique su respuesta para todas las afirmaciones, usando los conceptos y definiciones
estudiados en clases.
a) ___ Un heap de n elementos tiene una altura máxima de log n.
b) ___ Cualquier subárbol de un heap descendente contiene en su raíz el mayor valor de los
posibles a aparecer en el subárbol.
c) ___ En un heap descendente el menor elemento se encuentra en la raíz principal del
árbol, asumiendo que todos los elementos son diferentes.
d) ___ La secuencia [23, 17, 14, 6, 13, 10, 1, 5, 7, 12] es un heap descendente.
e) ___ En la representación de un heap basado en arreglo, para almacenar n elementos, las
hojas corresponden a los elementos con índice n/2 +1, n/2+2, …, n.
f) ___ En un árbol parcialmente ordenado, el nodo con el tercer menor elemento se
encuentra siempre en el segundo nivel.
g) ___ En un árbol parcialmente ordenado de más de 4 nodos, el elemento de mayor valor
está almacenado en el ´ultimo nivel del árbol.
h) ___ Un recorrido a lo ancho en un árbol parcialmente ordenado visita sus nodos en orden
no decreciente con respecto a sus valores.
Pregunta # 6
Ilustre la operación Build_Heap para el arreglo A= [5, 3, 17, 10, 84, 19, 6, 22, 9]. El heap
resultante debe ser descendente.
Pregunta # 7
Dado el heap A= [15, 13, 9, 5, 12, 8, 7, 4, 0, 6, 2, 1] ilustre la operación Suprimir_Max.
Pregunta # 8
Dado el heap A= [15, 13, 9, 5, 12, 8, 7, 4, 0, 6, 2, 1] ilustre la operación Insertar (10).
Pregunta # 9
Dadas las siguientes afirmaciones responda verdadero (V) o falso (F) según corresponda.
Justifique su respuesta para los casos falsos.
___ La complejidad de las operaciones insertar y eliminar en un árbol parcialmente ordenado
depende de la cantidad de elementos que se tengan en dicha estructura de datos.
___ En un arreglo que represente un árbol parcialmente ordenado, siendo n igual a la cantidad
de nodos, se puede afirmar i ≥ n/2 , A[i] es una hoja del árbol.
___ El método de ordenamiento MergeSort tiene una complejidad en el peor de los casos igual
a la complejidad del método de ordenamiento Inserción.
___ Un algoritmo de búsqueda que tenga una complejidad temporal de O(n) se dice que es
eficiente en cuanto a la complejidad temporal.
___ La función hash, si es inyectiva se considera mala para una tabla hash.
___ Una función hash es buena si maximiza el número de entradas usadas en la tabla hash de
tipo abierto.
___ El peor caso de búsqueda por interpolación tiene una complejidad temporal O(n).
___ En un árbol parcialmente ordenado no puede ocurrir que un nodo que esté en un nivel 2
tenga menor prioridad que un nodo que esté en un nivel 4.
Pregunta # 10
En un árbol parcialmente ordenado (Heap) basado en arreglos, implemente un método que
devuelva la suma de los valores que conforman la
menor secuencia de prioridades, expresada como
el camino de menores valores de prioridad desde
la raíz hasta las hojas. A continuación se detalla
gráficamente en el siguiente ejemplo:
Menor secuencia = 4, 5, 12 y 14
= 35
Pregunta # 11
El siguiente diagrama representa una clase Heap (árbol parcialmente ordenado) que almacena
números enteros (ascendentemente) en un arreglo lineal.
a) Implemente la funcionalidad restablecerEstructura(int x, int pos)la cual consiste en dado
un elemento a insertaren una posición dada, permita insertar el elemento en la posición y
restablecerla estructura manteniendo la condición de HEAP.
b) ¿Todo arreglo ordenado de forma ascendente está estructurado en forma de árbol
parcialmente ordenado (HEAP)? Justifique su respuesta.
Heap
-elements: entero[]
-heapSize: entero
+ heap(elements: entero[])
+ restablecerEstructura(x: entero, pos: entero)
Ejercicios sobre Ordenamiento y Búsqueda
Pregunta # 1
Implemente los algoritmos de ordenamiento con complejidad temporal O(n 2)
a) BubbleSort (ordenamiento por burbuja).
b) InsertionSort (ordenamiento por inserción).
c) SelectionSort (ordenamiento por selección).
Pregunta # 2
Implemente los algoritmos de ordenamiento con complejidad temporal O(nlog n)
a) MergeSort (ordenamiento por mezcla).
b) HeapSort (ordenamiento por montículos).
c) QuickSort (ordenamiento rápido).
Pregunta # 3
De cada uno de los algoritmos de ordenamiento estudiado diga:
a) Complejidad temporal.
b) Estabilidad.
c) Principio de funcionamiento.
Pregunta # 4
Dado el arreglo A= [5, 13, 2, 25, 7, 20, 8, 4], muestre el proceso de ordenamiento de forma
ascendente mediante el algoritmo:
a) BubbleSort (ordenamiento por burbuja).
b) InsertionSort (ordenamiento por inserción).
c) SelectionSort (ordenamiento por selección).
d) MergeSort (ordenamiento por mezcla).
e) HeapSort (ordenamiento por montículos).
f) QuickSort (ordenamiento rápido).
Pregunta # 5
Para cada uno de los siguientes enunciados, establezca si son verdaderos (V) o falsos (F).
Justifique su respuesta para los casos que considere falsos.
a) ___ El algoritmo quicksort siempre se ejecuta con una complejidad temporal O(n log n).
b) ___ El algoritmo iterativo de ordenación que en cada iteración inserta un elemento en un
segmento que ya se considera ordenado puede ejecutarse en un tiempo O(n) para
algunos juegos de datos.
c) ___ El algoritmo de ordenación por mezcla (merge sort) puede ejecutarse en un tiempo
O(n2) para su peor caso.
d) ___ El algoritmo de ordenación burbujas tiene una complejidad temporal promedio O(n
log n).
e) ___ La corrección del algoritmo heap sort se basa en el funcionamiento de las
operaciones en árboles parcialmente ordenados.
Pregunta # 6
Para cada uno de los siguientes enunciados, establezca si son verdaderos (V) o falsos (F).
Justifique su respuesta para los casos que considere falsos.
a) ___ El algoritmo iterativo de ordenación que en cada iteración selecciona el menor
elemento del segmento que aún no está ordenado, siempre se ejecuta en un tiempo O(n2).
b) ___ La complejidad temporal del algoritmo heap sort es O(n) en su mejor caso y O(n 2)
para su peor caso.
c) ___ El algoritmo de ordenación por mezcla (merge sort) se ejecuta en un tiempo O(n) si el
arreglo a ordenar ya se encuentra ordenado.
d) ___ La eficiencia del algoritmo quick sort depende de cuan pequeño sea el valor pivote
seleccionado.
e) ___ El algoritmo de ordenación burbujas garantiza en la iteración k-ésima que al menos k
elementos del conjunto inicial ya se encuentran ordenados.
Pregunta # 7
Para cada uno de los siguientes enunciados, establezca si son verdaderos (V) o falsos (F).
Justifique su respuesta para los casos que considere falsos.
a) ___ El algoritmo de ordenación burbujas puede mejorarse para que consuma un tiempo
O(n) en el mejor de los casos.
b) ___ El algoritmo iterativo de ordenación que en cada iteración inserta un elemento en un
segmento que ya se considera ordenado siempre se ejecuta en un tiempo O(n 2).
c) ___ El algoritmo quicksort alcanza su peor tiempo de ejecución para el caso en que el
arreglo a ordenar ya se encuentra ordenado.
d) ___ La ejecución del algoritmo heap sort mejora su complejidad si el arreglo a ordenar ya
tiene forma de árbol parcialmente ordenado.
e) ___ La complejidad del algoritmo merge sort depende de la memoria adicional que se
requiera para realizar el proceso de mezcla.
Pregunta # 8
Suponga que se están ubicando elementos enteros en una tabla hash (tabla de dispersión) de
siete elementos, sirviéndose de la función de dispersión h(i) = i mod 7.
a) Muéstrese la tabla de dispersión abierta si se insertan los elementos: 1, 8, 27, 125, 216,
343.
b) Repítase el inciso anterior utilizando una tabla de dispersión cerrada con resolución lineal
de colisiones.
Pregunta # 9
Suponga que se está utilizando una tabla de dispersión cerrada con 5 elementos y la función de
dispersión h(i) = i mod 5. Muéstrese la tabla de dispersión cerrada con resolución lineal de
colisiones que resulta de insertar la sucesión 23, 48, 35, 4, 10 en una tabla inicialmente vacía.
Pregunta # 10
Utilizando el algoritmo de búsqueda binaria visto en clases implemente un método que
devuelva, para un valor de edad dado, una lista con las personas mayores que esa edad.
Puede hacer uso de los siguientes diagramas UML (considere que están implementados los
métodos de acceso para cada atributo de la clase Persona):
Grupo Persona
- personas: Lista<Persona> - nombre: String
+ MayoresQue(edad: int): Lista<Persona> - CI: String
- edad: int
a) Realice la implementación asumiendo que existe al
menos una persona en la lista con la edad dada.
b) Considere que podría no existir en la lista ninguna persona con la edad dada.
Pregunta # 11
Diseñe una estrategia para el conocido juego que consiste en lo siguiente. Un jugador piensa
en un número entre „1‟ y „n‟. El otro jugador trata de determinar el número realizando preguntas
del tipo "¿es el número mayor (menor) que „x‟?". El objetivo es realizar la menor cantidad de
preguntas (se asume que ningún jugador miente).
Pregunta # 12
Diseñe un algoritmo que determine la unión de dos conjuntos, ambos de tamaño O(n). Los
conjuntos están almacenados en arreglos y la salida debe ser un arreglo de elementos que
representa a unión de los conjuntos, es decir, ningún elemento debe aparecer más de una vez.
El algoritmo debe ejecutarse en un tiempo O(n\log n) para el peor caso.
Pregunta # 13
Se tiene un arreglo de puntos ubicados todos sobre una recta no paralela al eje y, los puntos
vienen dados por sus coordenadas (x,y). El arreglo fue ordenado crecientemente según el valor
de la distancia entre puntos consecutivos.
Implemente el método existDistance de la clase Solver el cual determine si existe un par de
puntos consecutivos que la distancia entre ellos sea igual a un valor dado. El algoritmo debe
implementarse de manera eficiente.
Point
Solver - x : int
- points : Point [ ] - y : int
- count: int + Point (x: int , y: int)
+ Solver() + getX(): int
+ existDistance (value: int): bool + getY(): int
Pregunta # 14
Sea T una tabla Hash (o de dispersión) de tamaño m= 9 que usa la estrategia de resolución de
colisiones conocida como dispersión abierta, con la función hash h (k)= k modm, que hace uso
del método de la división.
a) Muestre el estado de la tabla después de insertar los elementos A (con llave A.k = 5), B
(con llave B.k = 28), C (con llave C.k = 19), D (con llave D.k = 15),E (con llave C.k = 20), F
(con llave F.k = 33), G (con llave G.k = 12), H (con llave H.k = 17) e I (con llave I.k = 10).
b) En una tabla Hash, a dos elementos con valores de llave diferentes siempre les
corresponden diferentes posiciones. Mencione si la afirmación anterior es verdadera o
falsa y justifique su respuesta en cualquier caso.
c) El profesor Marley tiene la hipótesis de que puede obtener mejoras de rendimiento
sustanciales al modificar el esquema de encadenamiento para mantener cada lista de
forma ordenada. ¿Cómo afecta la modificación del profesor al tiempo de ejecución en el
peor caso de las operaciones de búsqueda, inserción y eliminación?
d) Supongamos que para mejorar la velocidad de las operaciones podría desearse
reemplazar T de tamaño B1 con más de B1 elementos por otra tabla de dispersión con
tamaño B2. Escriba un método para construir la nueva tabla a partir de la anterior, usando
las operaciones del TDA lista para procesar cada casilla.
Ejercicios sobre Algoritmos sobre Grafos
Pregunta # 1
Dadas las siguientes afirmaciones responda verdadero o falso (V o F) según corresponda.
Justifique su respuesta para las afirmaciones que considere falsas, usando los conceptos y
definiciones estudiados en clases.
Pregunta # 2
Dadas las siguientes afirmaciones responda verdadero o falso (V o F) según corresponda.
Justifique su respuesta para las afirmaciones que considere falsas, usando los conceptos y
definiciones estudiados en clases.
Pregunta # 3
Dadas las siguientes afirmaciones responda verdadero o falso (V o F) según corresponda.
Justifique su respuesta para las afirmaciones que considere falsas, usando los conceptos y
definiciones estudiados en clases.
Pregunta # 5
Para el siguiente grafo ejecute el algoritmo de Dijkstra partiendo de desde los vértices 2 y 3.
Pregunta # 6
Para el grafo de la figura anterior ejecute el algoritmo de Floyd.
Pregunta # 7
Partiendo desde el vértice N1 ejecute el algoritmo de Dijsktra para el siguiente grafo
Pregunta # 8
Para el grafo de la figura anterior ejecute el algoritmo de Floyd.
Pregunta # 9
Dado el siguiente grafo dirigido y ponderado:
Pregunta # 11
D C
Después de ejecutar el algoritmo Floyd tomando en un grafo conexo con
D E
vértices {A, B, C, D, E}; se obtuvo la siguiente matriz de predecesores,
E
P=
a) Determine el camino mínimo desde A hasta los demás vértices.
C
Pregunta # 12
Dado el siguiente grafo ponderado:
Pregunta # 13
Dado el grafo G ponderado y no dirigido representado en la Figura.
a) Establezca un orden de las aristas de G de acuerdo a su peso (escríbalo) e ilustre el árbol
que se obtiene al ejecutar el algoritmo de Kruskal procesando las aristas en ese orden.
b) ¿Tiene G un único árbol de cubrimiento mínimo? Justifique su respuesta.
Pregunta # 14
El algoritmo Dijkstra fue ejecutado en un grafo G con 5 vértices (α, β, γ, δ, ǫ) y 7 aristas. La
información topológica del grafo ha sido perdida pero se conserva la traza del vector de
distancias D para cada una de las iteraciones del algoritmo, computada desde el vértice origen
α:
Iteración D[β] D[γ] D[δ] D[ǫ]
Iniciación 3 ∞ 15 4
1 3 11 15 4
2 3 9 13 4
3 3 9 12 4
A partir de la información anterior, reconstruya el grafo G y represéntelo gráficamente
denotando los vértices por círculos y las aristas por líneas rectas o curvas orientadas.
Pregunta # 15
El algoritmo Dijkstra fue ejecutado en un grafo G con 5 vértices (α, β, γ, δ, ǫ) y 7 aristas. La
información topológica del grafo ha sido perdida pero se conserva la traza del vector de
distancias D para cada una de las iteraciones del algoritmo, computada desde el vértice origen
α:
Iteración D[β] D[γ] D[δ] D[ǫ]
Iniciación 3 7 ∞ ∞
1 3 7 16 11
2 3 7 11 8
3 3 7 10 8
A partir de la información anterior, reconstruya el grafo G y represéntelo gráficamente
denotando los vértices por círculos y las aristas por líneas rectas o curvas orientadas.
Pregunta # 16
Determine en cada caso si las siguientes afirmaciones se refieren al algoritmo de Prim
(escribiendo Prim), al algoritmo de Kruskal (escribiendo Kruskal), o a ninguno de los dos
algoritmos (escribiendo Ninguno). Justifique su respuesta para aquellos casos donde la
afirmación no se refiere a ninguno de los dos algoritmos.
a) ______ Procesa las aristas del grafo en orden no decreciente con respecto a sus pesos.
b) ______ Computa un árbol de cubrimiento en una componente conexa del grafo de
entrada.
c) ______ Selecciona en cada iteración a un vértice junto con una arista que lo conectará al
árbol de recubrimiento.
d) ______ Su complejidad temporal es O(n2) para el caso promedio.
e) ______ Es aplicable a un grafo no dirigido y ponderado independiente de su carácter
conexo.
f) ______ Agrupa los vértices de acuerdo a la componente conexa a la que pertenecen en el
grafo que produce incrementalmente.
g) ______ Mantiene un solo conjunto de vértices conectados por un árbol.
h) ______ Devuelve siempre el mismo resultado si es aplicado a un mismo grafo.
Pregunta # 17
La empresa VentSA, se dedica a la venta de artículos variados. Esta empresa posee una red
de puntos de venta distribuidos en toda una ciudad. En cada uno de los puntos de venta, se
venden todo tipo de artículos, pero cada punto es encargado de distribuir a los demás un solo
tipo de artículo (acción que se realiza semanalmente), de esta forma, un punto distribuye los
zapatos, otro punto la ropa, otro los electrodomésticos, etc. Por esta razón, los directivos de
VentSA necesitan conocer el camino mínimo desde cada punto hasta todos los demás, para
poder ahorrar combustible durante la distribución. De cada punto de venta se conoce su
identificador. En la clase VentSA se cuenta con la lista de todos los puntos de venta (puntos), y
con una lista (listaAdy) de pares. Cada par contiene una posición de un punto (en la lista de
puntos) y una distancia. De esta manera, en la posición “i” de listaAdy hay una lista de pares,
donde cada par tiene la posición de un punto adyacente al que está en “i” y la distancia hasta el
mismo.
a) Implemente el método CaminosMinimos de la clase VentSA, el cual (siguiendo el
algoritmo de Floyd) llena la matriz D con las distancias mínimas de cada punto a los
demás y llena la matriz P con los predecesores (posiciones) de cada punto en un camino
mínimo.
b) Implemente el método CaminosMasCortos de la clase VentSA (Ver Figura 1), el cual
(siguiendo el algoritmo de Dijkstra) llena el arreglo D con las distancias mínimas desde el
origen a los demás y llena el arreglo P con los predecesores (posiciones) de cada punto
en un camino mínimo desde el origen hasta él.