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
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
utilizando el método de módulo, tomar el valor hash siete dirección resto obtenido valor de la clave, por debajo de
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.
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.
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: ¡
la comparación entre la segunda detección y la detección lineal!
Usando la detección lineal para obtener lo siguiente:
Este proceso es muy fácil, no explica el
proceso de procesamiento de la segunda detección.
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.
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:
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
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:
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