Tabla Hash Estructura de Datos de la Información   Módulo II Pamela Villar González 71662812-X Miércoles 12:00
¿Podemos utilizar Object para los elementos de la Tabla Hash? La Clase Object de Java tiene predefinido el método  hashCode()   Toda clase hereda de Object  Sólo es necesario implementar dicho método en la clase de cuyos objetos deseemos almacenar en la tabla hash
Función matemática  para transformar la clave (I) Sumamos el código ASCII de cada carácter del código de la mercancía multiplicado por un peso, en este caso 32. Para reducir la carga de trabajo de las operaciones aplicamos la regla de Horner. Esta sería nuestra  función de conversión . public static int  funcion(String clave){ int  const = clave.charAt(0); for  (  int  i = 1; i < clave.lenght; i++){ const = (const*32) + clave.charAt(i); }  return  const;  }
Función matemática  para transformar la clave (II) Una vez implementada la función de conversión solo seria necesario: Implementar el método  hashCode () : public int  hashCode(){ return  TablaHash.funcion(codigo); } Al insertar sobre la tabla hash llamaríamos al  hashCode () del objeto y le aplicaríamos la función modulo B (% B), siendo B el tamaño de la tabla Hash, esta seria nuestra  función de dispersión . public void  insertar(Object obj){ int  posicion = obj.hashCode() % B; Tabla[pos] = obj; }
¿Cómo gestionar las colisiones? Protección activa: Ya nuestra función de conversión implementa la protección activa de las colisiones buscando una distribución homogénea. Protección pasiva: Utilizando una tabla de dispersión cerrada (un array). Cuando se produce una colisión debemos buscar una nueva celda para almacenar el objeto.
¿Cómo implemento las colisiones en mi tabla hash? Debemos utilizar una función de exploración para buscar la siguiente celda a ocupar. Exploración Lineal : Utilizando la siguiente función de dispersión [x+i] % B. Aumentamos ‘i’ secuencialmente hasta encontrar una celda vacía, donde insertamos. A la hora de realizar búsquedas aumentaríamos i hasta encontrar el objeto buscado o una celda vacía en cuyo caso el elemento no esta en al tabla. Consume mucha memoria. Produce agrupamientos primarios (tarda mucho en encontrar la siguiente celda vacía)
FIN

Tabla Hash

  • 1.
    Tabla Hash Estructurade Datos de la Información Módulo II Pamela Villar González 71662812-X Miércoles 12:00
  • 2.
    ¿Podemos utilizar Objectpara los elementos de la Tabla Hash? La Clase Object de Java tiene predefinido el método hashCode() Toda clase hereda de Object Sólo es necesario implementar dicho método en la clase de cuyos objetos deseemos almacenar en la tabla hash
  • 3.
    Función matemática para transformar la clave (I) Sumamos el código ASCII de cada carácter del código de la mercancía multiplicado por un peso, en este caso 32. Para reducir la carga de trabajo de las operaciones aplicamos la regla de Horner. Esta sería nuestra función de conversión . public static int funcion(String clave){ int const = clave.charAt(0); for ( int i = 1; i < clave.lenght; i++){ const = (const*32) + clave.charAt(i); } return const; }
  • 4.
    Función matemática para transformar la clave (II) Una vez implementada la función de conversión solo seria necesario: Implementar el método hashCode () : public int hashCode(){ return TablaHash.funcion(codigo); } Al insertar sobre la tabla hash llamaríamos al hashCode () del objeto y le aplicaríamos la función modulo B (% B), siendo B el tamaño de la tabla Hash, esta seria nuestra función de dispersión . public void insertar(Object obj){ int posicion = obj.hashCode() % B; Tabla[pos] = obj; }
  • 5.
    ¿Cómo gestionar lascolisiones? Protección activa: Ya nuestra función de conversión implementa la protección activa de las colisiones buscando una distribución homogénea. Protección pasiva: Utilizando una tabla de dispersión cerrada (un array). Cuando se produce una colisión debemos buscar una nueva celda para almacenar el objeto.
  • 6.
    ¿Cómo implemento lascolisiones en mi tabla hash? Debemos utilizar una función de exploración para buscar la siguiente celda a ocupar. Exploración Lineal : Utilizando la siguiente función de dispersión [x+i] % B. Aumentamos ‘i’ secuencialmente hasta encontrar una celda vacía, donde insertamos. A la hora de realizar búsquedas aumentaríamos i hasta encontrar el objeto buscado o una celda vacía en cuyo caso el elemento no esta en al tabla. Consume mucha memoria. Produce agrupamientos primarios (tarda mucho en encontrar la siguiente celda vacía)
  • 7.