Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programación III
Muchas aplicaciones requieren un
conjunto dinámico que soporte las
operaciones de un diccionario: Insert,
Search, Delete. Por ejemplo el
compilador cuando guarda los
identificadores de un programa.
Laidea surge de los arreglos que nos
permiten acceso a sus elementos en
orden.
Unaopción sería usar un arreglo tan
grande como el rango de posibles
claves. La desventaja es el espacio de
Tabla Hash
Buscar(Tabla T, clave x)
devuelve el elemento de la tabla T[h(x)]
Insertar(Tabla T, elemento k)
añade el elemento k, T[h(clave(k)] j k
Eliminar (Tabla T, clave x)
retira de la tabla el elemento con clave x, T[h(x)]
j LIBRE
Uno de los métodos en C ++ es implementar una tabla
hash como una serie de listas enlazadas
Función Hash
Una función hash decide dónde almacenar y recuperar
elementos en una tabla hash. Se necesita en un elemento clave
como parámetro y devuelve una ubicación de índice para ese
artículo en particular. En general, una función hash utiliza
aritmética de módulo. En particular, un valor de clave se
divide por la longitud de la tabla para generar un número de
índice en la tabla. Este número de índice se refiere a un lugar, o
un cubo, en la tabla hash.
Una función de dispersión convierte el dato considerado campo
clave (tipo entero o cadena de caracteres) en un índice dentro
del rango de definición del array o vector que almacena los
elementos, de tal forma que sea adecuado para indexar el array.
Aritmetica Modular
función de dispersión que utiliza la aritmética modular
genera valores dispersos calculando el resto de la
división entera entre la clave x y el tamaño de la tabla m.
h(x)= x modulo m
h(x) = x1 + x2 + x3 + ... + xn
Ejemplo
R//
h(245643) = 245 + 643 = 888
h(245981) = 245 + 981 = 1226 -> 226 (se ignora el acarreo 1)
h(257135) = 257 + 135 = 392
A veces, se determina la inversa de las partes
pares, x2, x4 ... antes de sumarlas, con el fin de
conseguir mayor dispersión. La inversa en el
sentido de invertir el orden de los dígitos.
Así, con las mismas claves se obtienen las
direcciones:
Una vez elevado al cuadrado el valor de la clave, se eligen los dígitos que
se encuentran en las posiciones 4, 5 y 6 por la derecha. El valor de esa
secuencia es la dirección obtenida al aplicar este método de dispersión
Método de la multiplicación
1. R * x
2. d = R * x – ParteEntera(R * x)
3. h(x) = ParteEntera(m * d)
Una elección de la constante R es la inversa de la razón áurea, R =
0.6180334 =
Elemento: x1 x2 x3 x4 x5 x6 x7 x8 x9
h(x): 5 8 10 8 5 11 6 7 7
Elemento: x1 x2 x3 x4 x5 x6 x7 x8 x9
Posición: 5 8 10 9 6 11 7 16
elemento x10= 5
posición 5 = (5+1=6), (5+4=9)
Ejercicios