Tarea 4 - U

Anuncio
Tarea 4
Hashing
Jérémy Barbay, Mauricio Quezada
2011-05-11 Miércoles → 2011-05-25 Miércoles
CC4102: Diseño y Análisis
Profesor:
Jérémy Barbay
Auxiliar:
Mauricio Quezada
Ayudantes: David Contreras
Sergio Villarroel
de Algoritmos – 2011
<jbarbay@dcc.uchile.cl>
<mquezada@dcc.uchile.cl>
<dcontrer@dcc.uchile.cl>
<svillarr@dcc.uchile.cl>
Resumen
El objetivo de esta tarea es comparar el rendimiento de estructuras
de datos para al tipo de dato abstracto ”diccionarios”, y en particular entre soluciones que se limitan a comparaciones y soluciones que
aprovechan la finitud del dominio. En particular:
Se consideran cuatro soluciones: (búsqueda binaria, búsqueda por
interpolación, Hashing cerrado y abierto) y dos experimentos
(arreglo ordenado regular e irregular).
En 2 instancias diferentes: distribución uniforme y exponencial
de los valores de los arreglos.
Con 100 instancias por experimento, agregando elementos de 8
dominios crecientes.
Reutilizando su trabajo de las tareas 1, 2 y 3, implementando las
estructuras de datos, evalúandolas en la práctica.
Presentando un reporte completo de 4 páginas y 4 gráficos 2D
(con hipótesis, diseño experimental, descripción de las medidas
de rendimiento elegidas, presentación e interpretación de los resultados, conclusión).
Entregando tanto como su implementación (con readme, makefile, etc), como el informe por medio de U-Cursos. Y el informe
impreso en secretarı́a del departamento hasta las 4pm del dı́a
siguiente a la fecha de entrega.
1
1.
Descripción de la tarea
El objetivo de esta tarea es comparar el rendimiento de algoritmos de
búsqueda en conjuntos ordenados en el modelo de comparaciones y afuera de
este modelo, tal que estructuras de datos basadas en Hashing. Se consideran
cuatros soluciones (búsqueda binaria, búsqueda por interpolación, Hashing
cerrado y abierto) y dos experimentos (arreglo ordenado regular e irregular).
2.
Estructuras de Datos
Se consideran cuatros soluciones para soportar la búsqueda de un elemento x ∈ [0..(N − 1)] en un conjunto de tamaño n:
1. Arreglo ordenado con Búsqueda binaria, que en cada etapa hace
una comparación < entre los dos elementos considerados, y hace una
comparación = solamente cuando el rango de inserción del elemento x
es definido.
2. Arreglo ordenado con Búsqueda por interpolación que usa el
valor de x, y los valores de las extremidades del sub-arreglo considerado, para interpolar la próxima posición a comparar con x.
3. Hashing Cerrado, que prueba (h(x) + i × h0 (x)) mód n, para i ∈
[0..n] en un arreglo de tamaño n hasta encontrar x o una posición libre.
4. Hashing Abierto, que construye una simple lista enlazada para cada
una de las n posiciones del arreglo.
Las estructuras de datos de Hashing usan funciones de hash universales
de la forma h(x) = ((a × x + b) mód p) mód n, donde
x ∈ [0..(N − 1)],
a ∈ [1..p − 1] elegido uniformemente al azar,
b ∈ [0..p − 1] elegido uniformemente al azar,
p es primo y mas grande que N (dos números primos distinto para el
Hashing cerrado).
2
3.
Instancias
A la diferencia de las tareas precedentes,
el elemento buscado sera siempre de rango elegido al azar uniformemente (que corresponde a elegir cualquier de los elementos a dentro
del conjunto al azar),
y un elemento puede estar presente mas de una vez en la estructura
de datos: se trata de calcular la cantidad de ocurrencias del elemento
buscado.
La diferencia entre los dos experimentos es sobre la distribución del contenido de los conjuntos representados y buscados. Se consideran dos tipos
de instancias (que corresponden a dos experimentos distintos):
1. Distribución uniforme: cada elemento x ∈ [0..(N − 1)] tiene la
misma probabilidad de estar en el conjunto.
2. Distribución exponencial: cada elemento x de [0..(N −1)] tiene una
probabilidad de estar en el conjunto proporcional a 2−x .
Los dos tipos de instancias se pueden generar probando para cada valor x ∈
[0..(N − 1)] veces un generador de números aleatorio b ∈ [0, 1] y agregando
x al conjunto si b es inferior a la probabilidad querida.
Se consideran instancias con n = 101 elementos elegidos dentro de dominios de tamaño N ∈ {102 , 103 , . . . , 109 }. Cada experimentación (i.e. para
un tamaño fijo de conjunto y dominio) deberá generar 100 instancias, y sobre los resultados obtenidos se deberá documentar el máximo, mı́nimo, y
promedio de las medidas de rendimiento.
4.
Medidas de Rendimiento
Se considera dos medidas de rendimiento:
1. la cantidad de comparaciones, y
2. el tiempo de ejecución.
El reporte debe indicar claramente el proceso de medida del tiempo de ejecución, y si hay correlación o no entre las dos medidas de rendimiento.
3
5.
Implementación
Se puede elegir el lenguaje de programación de su preferencia, aunque
se sugiere Python, Java, C o C++. El idioma de programación debe ser
claramente indicado en el reporte. Se debe describir la maquina usada por
la experimentación, en términos de:
sistema operativo,
cantidad de memoria (activa y en caché).
cantidad y caracterı́sticas de los procesadores.
6.
Reporte
El reporte debe seguir los pasos descritos en clase. En particular, el
reporte debe permitir de identificar claramente los puntos siguientes:
1. las hipótesis elegidas antes del inicio de la realización del experimento,
2. el diseño experimental, incluyendo los detalles de la implementación
de los algoritmos, de la generación de las instancias y la descripción
del proceso de medida del tiempo de computación,
3. la presentación de los resultados en forma de una descripción textual, tablas y gráficos en dos dimensiones,
4. la interpretación de los resultados,
5. y, si necesario, conclusiones criticando sus resultados y proponiendo
experimentos adicionales.
En el caso donde los datos no verifican la hipótesis, no se pide modificar
el ciclo de diseño, sino de correctamente identificar el problema y presentarlo
en la conclusión (que sea una error en la hipótesis, en el diseño experimental
o en su implementación).
Se espera que el informe tenga una extensión de 4 páginas, y que incluya
4 gráficos 2D que resuman los resultados más importantes. Si tienen más
gráficos, se pueden colocar en la sección Anexos.
Se puede elegir el software de redacción de su preferencia, aunque se
sugiere el uso de LATEX. El reporte debe ser entregado en U-Cursos en un
4
archivo de formato pdf con el reporte textual, un archivo zip con la totalidad del código usado para los experimentos, más un README de cómo
ejecutar el código, de manera que potencialmente se puedan reproducir los
experimentos, y entregar una copia impresa del informe en la secretaria de
estudio, el dı́a siguiente a la fecha de entrega (hasta las 4 de la tarde).
7.
Colaboración y Uso de Librerı́as
El proyecto es individual: uno de los objetivos es desarrollar las capacidades de programación de los alumnos. La comunicación entre alumnos
sobre el proyecto está autorizada, en limites razonables. En particular, cada
alumno debe ser capaz de describir los detalles mas técnicos de las implementaciones y experimentos descritos en su reporte. De igual manera, el uso
de librarı́a de software es autorizado solamente si el alumno es capaz de describir los detalles más técnicos de la implementación de todas las funciones
involucradas en la librerı́a. Se pedirá una evaluación oral en caso de duda
sobre la originalidad del trabajo.
8.
Atraso y otros problemas
Con la finalidad de dar un feedback antes de la entrega de la tarea siguiente, los ayudantes tienen solamente una semana para corregir las tareas.
Por lo tanto, no se admite atrasos en la entrega de tareas, en general. Los
atrasos o dificultades para la entrega de las tareas con excusas válidas se
negocian un dı́a antes la fecha de entrega, y directamente con el auxiliar
encargado de la tarea (definitivamente NO con el profesor del curso). No se
aceptan excusas en la fecha de entrega o después. Todo atraso o dificultad
para la entrega sin negociación o excusa válida se convierte en un 1 (uno).
5
Descargar