Sie sind auf Seite 1von 1

Algoritmos y ED III – 2017 – 1er Semestre - Tablas de dispersión.

Ejercicios de clase
Prof. Cristian Cappo – 22-marzo-2017

Preguntas de revisión sobre Tablas de Dispersión ( Capítulo 19 de Libro de Weiss )

CUESTIONARIO

1. ¿Por qué Weiss menciona que las tablas de dispersión se basan en propiedades estadísticas en lugar de esperar entradas aleatorias?

2. ¿Cuál es la consecuencia directa, en el rendimiento de una tabla de dispersión, cuando existe una elevada cantidad de colisiones?

3. ¿Qué se entiende por eliminación perezosa? ¿Por qué se aplicaría en una tabla de dispersión?

4. ¿Porqué la función de dispersión (Figura 19.3) mostrada en la página 531 no es buena o conveniente? Justifique su respuesta con un
sencillo ejemplo.

5. ¿Por qué el tamaño de una tabla de dispersión es preferible que sea un número primo?

6. Explique como el factor de carga tiene influencia en la inserción de elementos en una tabla de dispersión con exploración lineal.

7. Explique por que el costo de una búsqueda sin éxito es el mismo que el costo de una inserción.

8. ¿Qué es agrupación primaria en una tabla de dispersión con exploración lineal?

9. ¿Qué es rehashing? ¿Cuándo es necesario?

10. Indique los factores en pro y en contra del hashing enlazado.

11. ¿Porqué las tablas de dispersión suelen ser las estructuras de datos preferidas en la construcción de compiladores?

12. Si se inserta un valor X en una tabla de dispersión inicialmente vacía con exploración lineal, luego se insertan y se borran
consecutivamente varios otros elementos. Finalmente se intenta borrar el componente con valor X ¿Cuál es el costo esperado de
encontrar y borrar dicho elemento de la tabla?

EJERCICIOS

Doble hashing
Basado en exploración lineal pero utilizando como desplazamiento inicial una segunda función de dispersión. De esta forma
se prueba la secuencia: p(K,i) = i * h2(K).

Ejemplo de funcionamiento:
Asuma que tiene una tabla de M=101 y que tres claves k1, k2 y k3, con h(k1) = 30, h(k2) = 28, h(k3) = 30, h2(k1) = 2,
h2(k2) = 5 y h2(k3) = 5. La secuencia de prueba para k1 sería 30, 32, 34, 36 y así sucesivamente. La secuencia de prueba de
k2 sería 28, 33, 38, 43. La secuencia de prueba de k3 sería 30, 35,40,45.

EJERCICIO 1
Considere insertar las claves 10, 22, 31, 4, 15, 28, 17, 88, 59 en una tabla hash de M=11 utilizando dispersión cerrada (o de
direccionamiento abierto). Considerar h(k) = k % M

Grafique la inserción utilizando los siguientes métodos de resolución de colisión:


– Exploración lineal
– Exploración cuadrática
– Doble hashing utilizando la función h2(k) = 1 + ( k % ( m -1 ) ) . Recuerde que el doble hashing se aplica de la siguiente
forma:
h(k,i) = (h1 (k) + ih2(k) ) % M
Así para el primer valor k se tendría la posición h1(k)

EJERCICIO 2
Asuma que usted tiene una clave k que tiene que introducir en una tabla hash de n slots ( indexado de 0 a n -1 ). Por cada una
de las siguientes funciones hash ( h (k) ) indicar si es una función hash que funciona y luego comentar si es aceptable.
h(k) = k/n donde k y n son enteros
h(k) = 1
h(k) = ( k + random(n)) % n random(n) retorna un entero entre 0 y n-1 inclusive.
h(k) = k % n donde n es un número primo

EJERCICIO 3
Considerando los siguientes datos: {18, 58, 49, 89, 9, 12}, una tabla hash con M = 10 y una función de dispersión h(i) = i
mod M, muestre gráficamente las tablas resultantes para una:

a) tabla de dispersión cerrada con exploración lineal


b) tabla de dispersión cerrada con exploración cuadrática
c) tabla de dispersión cerrada con una segunda función de dispersión h2(k) = k mod 5

EJERCICIO 4
Proponga un método de transformar cada una de las siguientes claves en índices de 0 a M-1.
a) Entero positivo b) Número en punto flotante en el rango 0 a 1. c) Cadena d) Fecha (dd/mm/aaaa)

Das könnte Ihnen auch gefallen