Estructura de datos y algoritmo hash (tabla hash)

Picadillo

Definición básica

1. Hash: determina la ubicación del almacenamiento de datos por el valor del elemento de datos. La ubicación de almacenamiento en la tabla hash se llama ranura.

2. Función hash: la función que realiza la conversión de un elemento de datos a una ranura de almacenamiento se denomina función hash.

3. Número de ranura: la ubicación de almacenamiento del elemento de datos devuelto por la función hash.

Varias funciones hash de uso común:

Encuentra el hash restante:

  1. Método:
    Divida el elemento de datos por el tamaño de la tabla hash y use el resto como número de ranura.
    De hecho, el método "resto" aparecerá en todas las funciones hash en diferentes formas Debido a que el número de ranura devuelto por la función hash debe estar dentro del tamaño de la tabla hash, generalmente se calcula el tamaño de la tabla hash.
  2. Búsqueda de datos:
    solo es necesario utilizar la misma función hash para calcular el elemento de búsqueda, pruebe si hay un elemento de datos en la ranura correspondiente al número de ranura devuelto
  3. Insuficiencia:
    puede ocurrir un "conflicto". Es decir: dos elementos de datos diferentes obtienen el mismo número de ranura después de calcular el resto.

Función hash perfecta:

1. Método:
Dado un conjunto de elementos de datos, si una función hash puede asignar cada elemento de datos a una ranura diferente. Para un conjunto fijo de datos, siempre podemos encontrar formas de diseñar una función hash perfecta.

2. Insuficiencia:
Pero si este grupo de datos cambia con frecuencia, es difícil tener una función hash perfecta (es decir, habrá algunos conflictos, ¡pero! Los conflictos no son fatales, ¡podemos manejarlos adecuadamente!)

3. El método para diseñar una función hash perfecta:
①Diseñe una tabla hash lo suficientemente grande (es decir, expanda la capacidad de la tabla hash) para que todos los elementos de datos posibles puedan ocupar diferentes espacios. (No es práctico) En
segundo lugar, una buena función hash debe tener características:
conflictos mínimos (aproximadamente perfectos),
baja dificultad computacional (pequeña sobrecarga adicional) y
elementos de datos completamente dispersos (ahorrar espacio)

Una de las aplicaciones del hash

Area chain
Introducción a area chain: area chain es una especie de base de datos distribuida, cada nodo de los nodos conectados a través de la red almacena todos los datos de toda la base de datos, los datos almacenados en cualquier lugar serán sincronizados.
Su característica esencial: descentralización, es decir, no hay centro de control, nodo de centro de coordinación, todos los nodos son iguales y no se pueden controlar.

区块链由一个个区块(block)组成,区 块分为头(head)和体(body) 
区块头记录了一些元数据和链接到前一个区块的信息。
生成时间、前一个区块(head+body)的散列值
区域链具有不可修改性:
由于散列值具有抗修改性,任何对某个区 块数据的改动必然引起散列值的变化,为了不导致这个区块脱离链条,就需要修改所有 后续的区块。
由于有“工作量证明”的机制,这种大规模修改 不可能实现的,除非掌握了全网51%以的计算力。

Diseño de función hash

1. Método de plegado:
divida el elemento de datos en varios segmentos según la cantidad de dígitos, luego agregue varios segmentos de números y finalmente calcule el resto del tamaño de la tabla hash para obtener el valor hash.
A veces, el método de plegado también incluye un paso de invertir el intervalo

2. Tome el centro del cuadrado (la cantidad de cálculo es un poco mayor):
Primero, el elemento de datos se eleva al cuadrado, luego se toman los dos dígitos del medio del cuadrado y luego se calcula el tamaño de la tabla hash.

3. Elementos no numéricos:
también es posible aplicar un hash a elementos de datos no digitales y tratar cada carácter de la cadena como un código ASCII y luego acumular estos números enteros para calcular el resto del tamaño de la tabla hash.

Nota:
Esta función hash devuelve el mismo valor hash para todos los anagramas para evitar esto. Puede usar la posición de la cadena como factor de ponderación y multiplicar el valor ord.

4. Método de análisis digital:
Para un conjunto dado de códigos clave, analice la frecuencia de cada dígito en todos los códigos clave y seleccione varios números con una mejor distribución como valor de la función hash.

Principios básicos del diseño de la función hash

1. La
función hash no puede ser demasiado complicada, de lo contrario se convertirá en una carga computacional para el procedimiento almacenado y el proceso de búsqueda.

2. El
valor hash debe distribuirse lo más uniformemente posible.

La resolución de conflictos:

1. Resolución de conflictos:
un método sistemático para guardar el segundo elemento de datos en los datos en conflicto en la tabla hash.

2. Solución
Direccionamiento abierto: es decir, encontrar una ranura vacía abierta para guardar. La forma más fácil es comenzar desde la ranura en conflicto y escanear hacia atrás hasta encontrar una ranura vacía. Si no se ha encontrado el final de la tabla hash, escanee desde el principio. .
El método de búsqueda hacia atrás uno por uno es la "detección lineal" en la tecnología de direccionamiento abierto.

3. Desventajas:
tienden a acumularse.

4. Mejora:
cambie la detección uno por uno para omitir la detección (re-hash).

Materiales de referencia:

Material de curso en línea sobre estructura y algoritmo de datos (python) por Chen Bin, Universidad de Pekín

Supongo que te gusta

Origin blog.csdn.net/qq_48314528/article/details/108689714
Recomendado
Clasificación