Práctica 5 Estructuras de Datos para Conjuntos Disjuntos

Anuncio
Facultad de Ciencias Exactas, Ingenierı́a y Agrimensura
Escuela de Ciencias Exactas y Naturales
Departamento de Computación
Estructuras de Datos
Práctica 5
Estructuras de Datos para Conjuntos Disjuntos
1. Mı́nimo Offline
En este problema se requiere mantener un subconjunto dinámico del conjunto {1, 2, . . . , n} bajo
las operaciones Insert y ExtractMin. Se da una secuencia σ de n operaciones Insert y m
operaciones ExtractMin, donde cada clave en {1, 2, . . . , n} se inserta exactamente una vez. Se
desea determinar qué clave devuelve cada operación ExtractMin. Especı́ficamente, se quiere
completar un arreglo extracted[1..m], de tal forma que extracted[i] sea el valor que devuelve la
i-ésima operación ExtractMin. El problema se llama offline porque se tiene acceso a la secuencia
completa de operaciones antes de necesitar responder cualquier consulta.
1. En la siguiente secuencia de entrada al problema, cada operación Insert se representa por
el número que se inserta mientras que cada operación ExtractMin se representa con la
letra M :
3, 9, M, 4, 2, M, M, 1, 6, 7, M, 5, M, 8
Complete las entradas del arreglo extracted.
2. Para construir un algoritmo que resuelva el problema es conveniente agrupar las operaciones
de la secuencia σ de entrada de la siguiente forma:
I1 , M, I2 , M, I3 , . . . , Im , M, Im+1
donde cada M representa una sola operación ExtractMin y cada Ij representa una secuencia (tal vez vacı́a) de operaciones Insert. Para cada subsecuencia Ij se colocan las claves
insertadas en un conjunto Kj y luego se ejecuta el siguiente procedimiento:
function OfflineMin(n,m)
for i ← 1 to n do
[ determinar j tal que i ∈ Kj ]
i f j 6= m + 1 then
extracted [ j ] ← i ;
[ determinar el m’inimo l > j tal que Kl exista ]
Kl ← Kj ∪ Kl ;
[ destruir Kj ]
fi
od
return extracted ;
end
3. Explique por qué el algoritmo realmente soluciona el problema.
4. Implemente la función OfflineMin utilizando la estructura de conjuntos disjuntos. Para
que la solución sea eficiente, deberá convertir el procedimiento Union en una función que
devuelva el representante asignado al conjunto unión resultante y mantener una tabla de
traducción entre los representantes de cada conjunto y el nombre Kj que utiliza el algoritmo.
Al inicio, puede asumir que los conjuntos Kj y la tabla de traducción correspondiente ya
están construidos.
Práctica 5
Estructuras de Datos para Conjuntos Disjuntos
Página 1
Estructuras de Datos
5. ¿Cuántas llamadas a operaciones Find y cuántas a operaciones Union se realizan al ejecutar
OfflineMin(n, m)?
6. Para cada una de las representaciones de la estructura de conjuntos disjuntos vistas, calcule
el orden O de su implementación de OfflineMin.
2. Entendiendo la demostración. Para entregar: El programa union_find.c, disponible
en la página de la materia1 , recibe como argumentos tres números n, u y f . Este programa crea n
elementos, ejecuta u operaciones union en conjuntos al azar, y luego ejecuta f operaciones find
de elementos al azar. Finalmente, imprime el número de nodos visitados en operaciones find.
Cambie el programa para que después de las operaciones union, el programa imprima para cada
árbol con rango mayor o igual que 4:
el rango de cada árbol,
la altura de cada árbol,
la cantidad de nodos del árbol
la cantidad de nodos con rango r, para cada r ≥ 4
Ejecutando el programa con n = 106 , u = 5 × 105 , f = 0, relacione los resultados impresos por su
programa con los resultados vistos en teorı́a respecto de estas cantidades.
Cambie el programa para que al final imprima (todas las cantidades se refieren al conjunto total
de las operaciones find y las operaciones union):
La cantidad de grupos de rangos (los grupos g0 , g1 , · · · del análisis visto en teorı́a)
La cantidad de nodos en cada grupo de rangos
Para cada nodo n, la cantidad cn de veces que un nodo fue visitado hasta que le fue asignado
un padre en otro grupo
Para cada grupo, la suma de todos los cn para todos los nodos n en ese grupo
El costo asignado a cada nodo del segundo tipo de operaciones
El costo asignado a cada nodo del primer tipo de operaciones
Ejecutando el programa con n = 106 , u = 5 × 105 , f = 106 , relacione los costos asignados a los
nodos por los dos tipos de operaciones con la cantidad de nodos visitados, y en general relacione
todos los valores que su programa imprime con los resultados vistos en teorı́a respecto de esas
cantidades.
1 El cual probablemente tiene muchos errores, y por tanto no deberı́a usted tomarlo como la verdad verdadera,
si no preguntar en caso de duda. Compilar con -std=c99 (compilar, compila bien, eh)
Práctica 5
Estructuras de Datos para Conjuntos Disjuntos
Página 2
Descargar