Comprensión del algoritmo hash

Cuando encontré un problema algorítmico en la hebilla, para usar la función hash, encontré un video para entender

Conceptos básicos de la función hash

Generalmente, en el proceso de búsqueda, es comparar los valores clave. Si no espera, muévase a la siguiente posición y luego busque hasta encontrarlo. Entonces, en este momento, podemos imaginar si podemos buscar el valor clave Puedo encontrar el registro que quiero. Para realizar esta idea, queremos poder establecer una cierta correspondencia entre el valor clave del registro que queremos encontrar y su ubicación de almacenamiento, luego buscar sin usar palabras clave Comparación entre los valores.
Tomemos un ejemplo para ilustrar
Donde la dirección de almacenamiento =
dónde el número de estudiante es el valor clave, luego la dirección de almacenamiento = valor clave -32001, luego esta operación se llama función hash
pero el valor clave y el valor de la dirección de almacenamiento deben corresponder entre sí, por lo que cada vez Es imposible encontrar la función hash tan fácil como el ejemplo anterior


Dirección de almacenamiento = un solo dígito en el valor clave (esta es la función hash que construimos), la tabla hash es la siguiente:

0
1 5666551 Xiao Li
2 5666552 Xiao Li
3
4 5666554 Xiaoli
5 5666554 Xiaozhou
6 Según el
gráfico, los valores de palabras clave de Xiaoli y Xiaozhou son los mismos, entonces las direcciones de almacenamiento correspondientes también deberían ser las mismas, pero una ubicación es imposible Se pueden acomodar dos personas, lo que formará un conflicto, por lo que Xiao Zhou buscará una posición hacia abajo.
Defina
los elementos de datos en la tabla de búsqueda que se almacenarán en un espacio continuo limitado de acuerdo con la función hash establecida y el método de manejo de conflictos , Obtienes la tabla hash

Métodos básicos para enfrentar conflictos.

Tratar los conflictos significa que para que un elemento de datos se inserte en la tabla hash, si la dirección hash obtenida de acuerdo con la función hash dada ya está ocupada, la siguiente dirección hash se obtiene de acuerdo con ciertas reglas, y así sucesivamente, hasta que se encuentre una. Dirección disponible para guardar el elemento

1. Método de dirección abierta:
deje H = (H (clave) + di)% m, i = 1,2.3.4 ..., m-1, donde H (clave) es la función hash ym es la longitud de la tabla hash, di es la secuencia incremental
1. Si di = 1,2,3, ..., m = 1, se llama detección lineal y luego hashing (de uso común)
2. Si di = 1, ^ 2, -1 ^ 2, 2 ^ 2, -2 ^ 2, ..., ± k ^ 2, llamada la sonda secundaria re-hash (común)
sondeo lineal
Inserte la descripción de la imagen aquí
utilizando el método de módulo, tomar el valor hash siete dirección resto obtenido valor de la clave, por debajo de
Inserte la descripción de la imagen aquí
los cuales es No hay conflictos! A continuación se mostrará el problema del conflicto de direcciones después de tomar el resto en la tabla hash.
Inserte la descripción de la imagen aquí
Obviamente, el 67 y el 18 son el valor de la dirección hash de 4, por lo que esta vez debemos usar el método para tratar los conflictos. Agregue 1 al valor de la dirección hash para obtener el hash como se muestra en la figura siguiente.
Inserte la descripción de la imagen aquí
Si el valor de la dirección obtenido después de agregar 1 todavía está ocupado, agregue 2 y 3 a la dirección hash original en secuencia hasta el valor de la dirección No se ha ocupado, como 28 en este ejemplo: ¡
Inserte la descripción de la imagen aquí
la comparación entre la segunda detección y la detección lineal!
Inserte la descripción de la imagen aquí
Usando la detección lineal para obtener lo siguiente:
Inserte la descripción de la imagen aquí
Este proceso es muy fácil, no explica el
proceso de procesamiento de la segunda detección.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Si el módulo digital se divide por 11 El resto tiene esta vacante, y se coloca directamente en esa posición. Si la posición está ocupada, agregue 1 a la posición primero. Si no funciona, agregue -1. Si la posición todavía está ocupada, agregue 4 nuevamente. Por analogía, es obvio que el número de comparaciones del segundo tipo es significativamente menor que el número de comparaciones del primer tipo.
2. Método de dirección de cadena
Almacene todas las palabras clave con la misma dirección hash obtenida por una función hash dada en la misma lista enlazada lineal, y haga la lista enlazada ordenada por palabras clave.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Divida el módulo 84 entre 7 = 0 y colóquelo en la posición de la dirección de la tabla hash 0. A continuación se analiza el caso especial, cómo tratar cuando los dos números de direcciones son iguales:
Inserte la descripción de la imagen aquí
Como se muestra en la figura anterior, 18 y 67 se dividen entre 7 y ambos son 4, y deben colocarse en la dirección de la tabla hash en 4, por lo que 67 deben moverse hacia atrás una posición, de modo que 18 y 67 se coloquen en un Cuando la cadena está activada, esto se denomina método de dirección de cadena.
3. El método de área de desbordamiento público
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
7, 8, 9 es el área de desbordamiento público. Cuando 18 y 67 entran en conflicto, coloque 18 en el área de desbordamiento público, es decir, la posición 7, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí

Cómo encontrar elementos en una tabla hash

1. De acuerdo con el valor de la clave a
buscar , de acuerdo con la función hash dada, encuentre la dirección hash 2. Si no hay un elemento de datos en la dirección, la búsqueda falla
3. Si hay un elemento de datos en la dirección, el valor de la clave se intercala la comparación
si es igual, entonces encontrar el éxito
si otro manejador de prensa colisión buscando la siguiente dirección de memoria posible

Publicado 9 artículos originales · elogiado 9 · 229 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_44231964/article/details/103898484
Recomendado
Clasificación