Вы находитесь на странице: 1из 10

Algoritmos y Estructura de Datos III Tablas Hash Ejercicios y revisin de lectura.

1- Dada la entrada {4371,1323,6173,4199,4344,9679,1989} y una funcin hash(h)=x mod 10, dar la correspondiente a) Tabla hash por exploracin lineal (hash cerrado)
0 1 2 3 4 5 6 7 8 9

9679 4371 1989 1323 6173 4344

4199

b) Tabla hash por exploracin cuadrtica (hash cerrado)


0 1 2 3 4 5 6 7 8 9

9679 4371 1323 6173 4344

1989 4199

c) Tabla hash por encadenamiento (hash abierto o enlazado) 0 1 4371 2 3 1223 4 4344 5 6 7 8 9 4199 1989

6173

9679

2- cul es la consecuencia directa en el rendimiento de una tabla de dispersin, cuando existe una elevada cantidad de colisiones? Si existen demasiadas colisiones la eficiencia de la tabla se reduce drsticamente. 3- qu se entiende por eliminacin perezosa? por qu se aplicara en una tabla de dispersin? Se entiende que los elementos a ser borrados sern simplemente marcados como borrados de la tabla, esta informacin se almacena como atributo adicional, activo o borrado. Se aplicara porque si realizamos la eliminacin estndar existen grandes posibilidades de que al eliminar algn elemento, posteriores operaciones de bsqueda fallarn.

4- por qu la funcin de dispersin (figura 19.3) mostrada en la pgina 531 no es buena o conveniente? Justifique su respuesta con un sencillo ejemplo. Porque si el tamao de la tabla es muy grande la funcin no distribuye bien las claves. Por ejemplo, supongamos que el tamao es de 10000 y que las claves tienen a lo sumo 8 caracteres. Entonces como un elemento ASCII del tipo char es un entero entre 0 y 127, la funcin slo podr tomar valores entre 0 y 1016. Toda la eficiencia ganada por la velocidad del clculo de la funcin ser ms que contrarrestada por el esfuerzo que requiere resolver una gran cantidad de colisiones. 5- Por qu el tamao de una tabla de dispersin es preferible que sea un nmero primo? Porque al ser el tamao un nmero primo el factor de carga no excede nunca 0.5, entonces todos los intentos se realizarn sobre celdas distintas y siempre podremos insertar un elemento si sta se encuentra medio vacia. 6- Explique como el factor de carga tiene influencia en la insercin de elementos en una tabla de dispersin con exploracin lineal. Tiene influencia ya que con el valor del factor de carga podemos obtener el nmero de probabilidad de que una celda est vaca y as limita el nmero de intentos de insercin hasta encontrar una celda disponible.

7- Explique por qu el costo de una bsqueda sin xito es el mismo que el costo de una insercin. Porque la secuencia de celdas que son examinadas durante una bsqueda sin xito de un dato X es exactamente la misma que la que seran consultadas en insertar el dato X. 8- qu es agrupacin primaria en una tabla de dispersin con exploracin lineal? Es la formacin de grandes grupos de celdas ocupadas, haciendo que las inserciones dentro las agrupaciones sean ms costosas. 9- qu es rehashing? Cundo es necesario? Es el proceso de expandir la tabla incrementando el tamao hasta llegar a un nmero primero. Cuando expandimos la tabla hash procedemos a buscar cada elemento de la tabla vieja, calcular el nuevo valor hash empleando una nueva funcin hash e insertarlo en la nueva tabla. Es necesario cuando el valor de carga excede 0.5. 10Indique los factores en pro y en contra del hashing enlazado. El hashing enlazado es una alternativa eficiente, hablando en trminos de espacio, a la exploracin cuadrtica, en la que se maneja un vector de listas enlazadas. Es menos sensible a factores de carga elevados. En el hashing enlazado un factor razonable de carga es 1.0. un factor de carga menor no mejora su eficiencia de forma sensible, mientras que otro moderadamente elevado es aceptable y puede suponer un ahorro de espacio.

11Por qu las tablas de dispersin suelen ser las estructuras de datos preferidas en la construccin de compiladores? Porque solo necesitan operaciones de insertar y buscar. Normalmente los identificadores son cortos, de modo que la funcin hash puede computarse rpidamente. En sta aplicacin la mayora de las bsquedas tienen xito. 12Sea h una funcin hash con h(juan)=3, h(pedro)=5, h(paula)=2, h(ana)=3, h(Ruth)=3, h(cris)=2. Insertar estas claves en una tabla hash con exploracin lineal en el siguiente orden: paula, ana, cris, Ruth, juan, pedro. Buscar Ruth.
0 1 2 3 4 5 6 7 8

Paula Ana Cris Ruth Juan Pedro

RUTH = 3 3 != Ruth 4!= Ruth 5==Ruth

13Repetir el ejercicio 12 en el siguiente orden: juan, ana, Ruth, pedro, paula, cris. Buscar Ruth.

0 1 2 3 4 5 6 7 8

3!= ruth 4!= ruth Paula Juan Ana Ruth Pedro cris 5== Ruth

14Suponga una tabla hash cerrada, con cinco cubetas y la funcin de dispersin H(i)=imod5. Mustrese la tabla con la exploracin lineal de colisiones que resulta de insertar la sucesin 23,48,35,4,10 en una tabla inicialmente vaca.
0 1 2 3 4

35 4 10 23 48

DOBLE HASHING. 1- Considere insertar las claves 10,22,31,4,15,28,17,88,59 en una tabla hash de M=11 utilizando dispersin cerrada (o de direccionamiento abierto). Grafique la insercin utilizando los siguientes mtodos de resolucin de colision: Exploracin lneal Exploracin cuadrtica Doble hashing utilizando la funcin h2(k)=1+(k%(m-1)). Recuerde que el doble hashing se aplica de la sgt. Forma: H(k,i)=(h1(k+ih2(k))modM.

Exploracin lineal
0 1 2 3 4 5 6 7 8 9 10

22 88

4 15 28 17 59 31 10

Exploracin cuadrtica
0 1 2 3 4 5 6 7 8 9 10

22 88

4 15 28 17 59 31 10 22 59 14 4 15 28 88 31 10

Doble hashing
h1(k)=(k%11) h2(k)=1+(k%(10)) h(k,i)=(h1(k)+i*h2(k))%11
0 1 2 3 4 5 6 7 8 9 10

2- Averige por qu la operacin de mdulo es costosa segn lo expresa Weiss en el capitulo 19. Porque la operacin Modulo se implementa de forma que la divisin y el resto es calculado cada vez.

3- 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, determinar si la misma es o no una buena funcin (h(k), es una funcin aceptable para una funcin hash si funciona para la insercin y bsqueda). H(k)= k/n donde k y n son enteros: no es buena porque una divisin de nmeros enteros puede dar nmeros con coma flotante, adems puede que H(k) est fuera de rango. H(k)=1: no es buena porque siempre ocurrirn colisiones. H(k)=(k+random(n))% n random(n) retorna un entero entre 0 y n-1 inclusive: no es una buena funcin a la hora de la bsqueda. H(k)= k%n donde n es un numero primo: es buena porque ubica bien los elementos y hay menos posibilidades de que el resto sea cero. 4- Utilizando dispersin cerrada con una resolucin de colisin utilizando doble hashing, inserte las siguientes claves dentro de una tabla hash de trece posiciones. Las funciones hash a utilizarse son H1 y H2, mostradas abajo. Debe mostrar la tabla luego de insertar todas las claves. Indique como utiliz la funcin H1 y H2. La funcin inversa(k) invierte los dgitos decimales de k, por ejemplo inversa(37) = 73, inversa(7) = 7.
inversa(7) = 7. H1(k) = k mod 13 H2(k) = (inversa(k+1)) mod 11) h(k,i)=(H1(k)+iH2(k))%13 Claves: 2, 8, 31, 20, 19, 18, 53, 27

0 1 2 3 4 5 6 7 8 9 10 11 12

53 2 19 31 27 8 20 18

5- Esquematice las ventajas y desventajas que existen en cada uno de los mecanismos de manejo de colisiones estudiados.

VENTAJAS Lineal Cuadrtico Menos clculos Menos sensible al aglomeramiento Casi sin aglomeramiento

DESVENTAJAS Sensible al aglomeramiento Menos clculos q el doble hashing pero ms que el lineal. Muchos clculos.

Doble Hashing