
Función hash
En esta sección, analizaremos las funciones hash que ayudan a realizar códigos hash de claves relevantes de elementos de datos en la estructura de datos de la siguiente manera:
término hash entero (entero llave)
{
devolver llave % tamaño de la mesa;
}
El proceso de realizar la indexación de matrices se llama hash. A veces, ejecutar el mismo tipo de código usando las mismas claves produce el mismo índice (llamado conflicto), que se maneja a través de diferentes enlaces (construcción de listas enlazadas) e implementaciones de estrategias de direccionamiento abierto.
Cómo funcionan las tablas hash en C++
Los indicadores que apuntan a valores reales se guardan en tablas hash. Utiliza la clave para buscar el índice de la matriz donde el valor de la clave debe almacenarse en la ubicación deseada de la matriz. Usamos una tabla hash de tamaño 10 de la siguiente manera:
Busquemos aleatoriamente cualquier dato basado en diferentes claves y almacenemos estas claves en una tabla hash calculando el índice. Por lo tanto, con la ayuda de la función hash, los datos se almacenan en función de las claves del índice calculado. Supongamos que tomamos datos = {14,25,42,55,63,84} y claves =[ 15,9,5,25,66,75 ].
Utilice una función hash para calcular el índice de estos datos. Los valores del índice son los siguientes:
| llave | 15 | 9 | 29 | 43 | 66 | 71 |
|---|---|---|---|---|---|---|
| Calcular índice | 15%10 = 5 | 9%10=0 | 29%10=9 | 43%10=3 | 66%10=6 | 71%10=1 |
| datos | 14 | 25 | 42 | 55 | 63 | 84 |
Después de indexar una matriz, coloque los datos y las claves en el índice exacto de la matriz dada, como se describió anteriormente.
| 25 | 84 | 55 | 14 | 63 | 42 | ||||
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Luego, podemos ver que se produce una colisión si dos o más claves tienen el mismo código hash, lo que da como resultado el mismo índice de elementos en la matriz. Tenemos una solución para evitar la posibilidad de conflicto: elegir un buen método hash e implementar una estrategia precisa.
Ahora, analicemos las diferentes técnicas de implementación con la ayuda de ejemplos apropiados.
Ejemplo: agregar nuevos datos a una tabla hash utilizando tecnología hash abierta
En este ejemplo, utilizamos técnicas de implementación como hash abierto para evitar colisiones en tablas hash. En hash abierto o concatenación, creamos una lista concatenada para concatenar los valores de la tabla hash. A continuación se adjunta un fragmento de código de este ejemplo que describe la técnica de hash abierto:
#incluir
#incluir
clase Tabla de picadillo {
privado:
estacionario constante entero tamaño de la mesa = 10;
estándar::Lista de Verificaciónentero> La mesa tiene[tableSize];
entero Función hash(entero llave) {
devolver llave % tamaño de la mesa;
}
gente:
blanco insertar(entero llave) {
entero índice = Función hash(llave);
La mesa tiene[index].hacer retroceder(llave);
}
blanco ver tabla() {
para (entero I = 0; I tamaño de la mesa; ++I) {
estándar::kut «[« i «]»;
para (auto él = La mesa tiene[i].comenzar(); él != La mesa tiene[i].fin(); ++él) {
estándar::kut » -> « *él;
}
estándar::kut estándar::endel;
}
}
};
entero principal() {
tabla hash hasTable;
Hay un reloj.insertar(15);
Hay un reloj.insertar(33);
Hay un reloj.insertar(veintitrés);
Hay un reloj.insertar(sesenta y cinco);
Hay un reloj.insertar(3);
Hay un reloj.ver tabla();
devolver 0;
}
Aquí hay un ejemplo muy interesante: construimos una lista vinculada e insertamos datos en una tabla hash. Primero, definimos la biblioteca al comienzo del programa. este Lista de Verificación> Biblioteca para implementación de listas enlazadas. Después de eso, creamos una clase llamada «HashTable» y usamos la palabra clave «privada:» para crear propiedades privadas de esta clase, como el tamaño de la tabla y la matriz de la tabla. Recuerde que las propiedades privadas no están disponibles fuera de la clase. Aquí, configuramos el tamaño de la tabla en «10». Lo usamos para inicializar el método hash y calcular el índice de la tabla hash. En la función hash, pasamos la clave y el tamaño de la tabla hash.
Creamos algunas funciones requeridas y exponemos estas funciones en la clase. Recuerde que las funciones públicas se pueden utilizar en cualquier lugar fuera de la clase. Usamos la palabra clave «público:» para iniciar la parte pública de la categoría.. Como queremos agregar nuevos elementos a la tabla hash, creamos una función llamada «InsertHash» y pasamos la clave como parámetro de la función. En la función «insertar» inicializamos la variable de índice. Pasamos la función hash a la variable de índice. Luego pase la variable de índice a la tabla de la lista vinculada.[]Utilice el método «push» para insertar un elemento en la tabla.
Después de eso, creamos una función «viewHashTab» para mostrar la tabla hash y ver los datos recién insertados. En esta función, utilizamos un bucle «for» para buscar valores hasta el final de la tabla hash. Asegúrese de que estos valores estén almacenados en el mismo índice desarrollado utilizando la función hash. En el bucle pasamos los valores en sus respectivos índices y finalizamos la categoría aquí. En la función «principal», obtenemos un objeto de la clase llamado «hasTable». Con la ayuda de este objeto de clase, podemos acceder al método de inserción pasando la clave en el método. La clave que pasamos en la función «principal» se calcula en la función «insertar», que devuelve la posición del índice en la tabla hash. Mostramos la tabla hash llamando a la función «ver» con la ayuda del objeto «Clase».
El resultado de este código se adjunta a continuación:

Como puede ver, la tabla hash se creó correctamente utilizando la lista vinculada en C++. El encadenamiento abierto se utiliza para evitar conflictos con el mismo índice.
en conclusión
En última instancia, llegamos a la conclusión de que las tablas hash son la última tecnología para almacenar y recuperar claves con pares de valores para manejar de manera eficiente grandes cantidades de datos. La probabilidad de que se produzca una colisión en una tabla hash es muy alta, corrompiendo los datos y su almacenamiento. Podemos utilizar diferentes técnicas de gestión de tablas hash para superar este tipo de colisiones. Al desarrollar tablas hash en C++, los desarrolladores pueden utilizar la tecnología más adecuada para almacenar datos en la tabla hash y mejorar el rendimiento. Espero que este artículo te ayude a comprender las tablas hash.









