Se puede implementar una interfaz Hasheable que contenga un método para recoger la clave del elemento.
public interface Hasheable{
public String getclave();
}
La clase de los elementos que contiene la clave, implementará esa interfaz.
Por ejemplo:
Mercancía implements Hasheable{
…………
}
Alternativa de uso de la Tabla Hash.
La tabla hash tendrá un array de Hasheables en lugar de Comparables.
En el método insertar, se podrá utilizar el método getClave() para calcular la función de dispersión.
Por ejemplo:
public class TablaHash{
Hasheable []a;
public void insertar (Hasheable elemento){
..... dispersión (elemento.getClave())% B;
}
}
Función matemática que nos permita transformar la clave en un índice numérico para gestionar el array.
Implementamos la regla de Horner de tal forma que:
B=tamaño de la tabla hash
Cadena de caracteres=[C0 |C1| C2|...| Cn-1]
Utilizamos la formula:
((C0*32)% B+C1*32)%B+.....)%B
Convierte cada carácter a un numero entero entre 0 y n-1
¿Cómo gestionar las colisiones el la Tabla Hash?
Con exploración lineal: si se produce una colisión se recorren las celdas en secuencia, con vuelta al principio, hasta encontrar una libre.
Se suelen producir agrupaciones primarias.
Con exploración cuadrática: si se produce una colisión, el lugar de ir a la celda siguiente se hará un salto cuadrático. De esta forma no se producen agrupaciones primarias ya que la dispersión de los datos es mayor.
¿Cómo implementar las colisiones el la Tabla Hash?
0 comments
Post a comment