Tablas Hash ¿PUEDE USARSE EL TIPO OBJECT? Los elementos a introducir en la tabla no podrán ser de tipo  Object  ya que no disponen de clave entera, y nos interesa que la tengan para para aplicar la regla de Horner. Podrían introducirse elementos de tipo  Mercancía , pero la tabla no sería genérica. Por lo tanto la mejor opción sería que los elementos fueran de tipo  “Hasheable” , de forma análoga a lo que sucedía con el Monticulo y el tipo Comparable. Para la implementación se crearía una interfaz  Hasheable  y todos los elementos a insertar en la tabla deberían implementarla.
Tablas Hash Para posicionar cada una de las mercancías en la tabla la mejor opción es: Utilizar la función de dispersión para  claves cadena  convirtiendo previamente la clave entera.(Para aplicar la regla de Horner) Utilizando ésta, el mecanismo para la búsqueda de la posición sería el siguiente: Por ejemplo para la clave 137 debería de calcularse: ('1'*32^2+'3'*32^1+'7'*32^0)%B Siendo B el tamaño de la tabla Hash. Con lo que obtendríamos la posición en la que se debería de insertar el elemento. Mercancía
Tablas Hash Para resolver las colisiones disponemos de dos opciones: Una tabla Hash abierta, que permite la colocación de mas de un elemento en cada celda (usando pej. una Lista) Una tabla Hash cerrada con una exploración lineal o cuadrática, siendo esta última mas eficiente: F(X)=(x+i^2) Siendo x la clave, y tomando i=0,1,2… hasta encontrar una celda vacia. Mercancía3 F(Número3)+1^2) Mercancía1 Mercancía2 Ocupada Mercancía3 Siguiente Elemento1 Siguiente Elemento2
Tablas Hash ¿COMO IMPLEMENTARLO? Habría que implementar un método que calculara la función de dispersión de la forma  F(x)=(x+i^2),  que comprobara si la posición obtenida está libre, y que en caso de no estarlo incrementara el valor de la “i” hasta dar con una celda disponinle. Utilizando este sistema habría que implementar un método de  búsqueda  que actuara de la misma forma, comprobando si la celda obtenida coincide con la clave que se busca, y en caso negativo incrementando la “i” hasta dar con la clave buscada o con una celda vacia, en cuyo caso el elemento no se encontrariá en la tabla.

Ezequiel Barbón Fernández

  • 1.
    Tablas Hash ¿PUEDEUSARSE EL TIPO OBJECT? Los elementos a introducir en la tabla no podrán ser de tipo Object ya que no disponen de clave entera, y nos interesa que la tengan para para aplicar la regla de Horner. Podrían introducirse elementos de tipo Mercancía , pero la tabla no sería genérica. Por lo tanto la mejor opción sería que los elementos fueran de tipo “Hasheable” , de forma análoga a lo que sucedía con el Monticulo y el tipo Comparable. Para la implementación se crearía una interfaz Hasheable y todos los elementos a insertar en la tabla deberían implementarla.
  • 2.
    Tablas Hash Paraposicionar cada una de las mercancías en la tabla la mejor opción es: Utilizar la función de dispersión para claves cadena convirtiendo previamente la clave entera.(Para aplicar la regla de Horner) Utilizando ésta, el mecanismo para la búsqueda de la posición sería el siguiente: Por ejemplo para la clave 137 debería de calcularse: ('1'*32^2+'3'*32^1+'7'*32^0)%B Siendo B el tamaño de la tabla Hash. Con lo que obtendríamos la posición en la que se debería de insertar el elemento. Mercancía
  • 3.
    Tablas Hash Pararesolver las colisiones disponemos de dos opciones: Una tabla Hash abierta, que permite la colocación de mas de un elemento en cada celda (usando pej. una Lista) Una tabla Hash cerrada con una exploración lineal o cuadrática, siendo esta última mas eficiente: F(X)=(x+i^2) Siendo x la clave, y tomando i=0,1,2… hasta encontrar una celda vacia. Mercancía3 F(Número3)+1^2) Mercancía1 Mercancía2 Ocupada Mercancía3 Siguiente Elemento1 Siguiente Elemento2
  • 4.
    Tablas Hash ¿COMOIMPLEMENTARLO? Habría que implementar un método que calculara la función de dispersión de la forma F(x)=(x+i^2), que comprobara si la posición obtenida está libre, y que en caso de no estarlo incrementara el valor de la “i” hasta dar con una celda disponinle. Utilizando este sistema habría que implementar un método de búsqueda que actuara de la misma forma, comprobando si la celda obtenida coincide con la clave que se busca, y en caso negativo incrementando la “i” hasta dar con la clave buscada o con una celda vacia, en cuyo caso el elemento no se encontrariá en la tabla.