¿Por qué se llama "tabla hash" o "función hash"? Hash no tiene ningún sentido para mí aquí [cerrado]

26

Ahora estoy usando, escuchando, hablando e implementando tablas hash y funciones hash sobre 4 años de desarrollo. Pero realmente nunca entiendo por qué se llama hash?

Recuerdo los primeros días que comencé a programar, este término era para mí una terminología engorrosa . Nunca descubrí qué es, basándome en su nombre . Acabo de entender experimentalmente lo que hace y por qué y cuándo deberíamos usarlo .

Sin embargo, todavía a veces trato de entender por qué se llama hash . No tengo ningún problema con la tabla o la función y, para ser sincero, son términos bastante deductivos y racionales. Sin embargo, creo que se podrían usar mejores palabras en lugar de hash, como key o uniqueness . No escriba la tabla o la tabla de unicidad .

Según mi diccionario, hash significa:

  1. Plato frito de patatas y carnes (muy irrelevante)
  2. símbolo # (signo de número AKA, signo de libra, etc.) (aún irrelevante, tal vez solo una nomenclatura incorrecta)
  3. Aplicar algoritmo a la cadena de caracteres (todavía no tiene nada que ver con la unicidad , que es la característica más importante de una tabla hash)
  4. Cortar la comida
  5. Otro término para hachís

¿Alguien sabe por qué se llama hash?

Saeed Neamati
fuente
32
Parece que malinterpretas un poco lo que son los hashes. La unicidad no es explícitamente una característica de las funciones hash (es decir, nunca son inyectivas).
Peter Taylor
1
@Peter Taylor: las tablas hash definen las asignaciones inyectivas.
reinierpost
2
@Peter Taylor: para ser un poco quisquilloso, no necesitan ser inyectivos , pero a veces incluso son biyectivos. Piense en la implementación típica de una función de hash para un entero :)
keppla
44
Un hash puede ser único, siempre que el espacio clave no sea mayor que el espacio del valor hash (para los hashes de tabla), o el espacio del valor hash sea tan grande que las colisiones sean matemáticamente inviables (para los hashes criptográficos).
Seguro el
1
Además, una "tabla de claves" se parece más a cualquier estructura de datos de "clave / valor" (también llamada "diccionario"). No todas las estructuras de datos clave / valor son tablas hash.
barjak

Respuestas:

46

Según Wikipedia, se refiere a la función hash . Si desea ir un paso más allá, la página wiki para la función hash dice que el uso de la palabra "hash" en la función hash se originó así:

El término "hash" viene por analogía con su significado no técnico, para "cortar y mezclar". De hecho, las funciones hash típicas, como la operación mod, "cortan" el dominio de entrada en muchos subdominios que se "mezclan" en el rango de salida para mejorar la uniformidad de la distribución de claves.

usuario937146
fuente
2
No estoy seguro de qué están haciendo los 'subdominios' allí. Es solo que la función hash 'mezcla' a fondo los valores de su dominio.
reinierpost
15

En francés, una tabla hash se llama "table de hachage", el verbo relacionado "hacher" significa picar / picar (comida principalmente). El verbo to hashtiene el mismo significado en inglés.

Entonces, como otros han señalado, se llama hash, porque corta su entrada que pone en pedazos en diferentes lugares (las entradas de su tabla).

Xavier T.
fuente
2
En realidad, está escrito "hachage" y "hacher" sin acento.
Ptival
10

El número 3 tiene todo que ver con eso. De Wikipedia :

En el corazón del algoritmo de la tabla hash hay una simple matriz de elementos; esto a menudo se llama simplemente la tabla hash . Los algoritmos de la tabla hash calculan un índice a partir de la clave del elemento de datos y usan este índice para colocar los datos en la matriz. La ejecución de este cálculo es la función hash , f:

index = f(key, arrayLength)

La función hash calcula un indexdentro de la matriz a partir de los datos key. arrayLengthes el tamaño de la matriz. Para el lenguaje ensamblador u otros programas de bajo nivel, una función hash trivial a menudo puede crear un índice con solo una o dos instrucciones de máquina en línea .

Por lo tanto, una tabla hash realmente no almacena valores basados ​​en una clave; almacena valores basados ​​en una versión hash de esa clave.

Michelle Tilley
fuente
1
depende de lo que entiendas por tabla hash. La estructura de datos que se ofrece en lenguajes como Perl, Java y C # le proporciona una asignación de clave a valor, utilizando el tipo de tabla hash a la que hace referencia internamente.
reinierpost
10

las tablas hash se llaman así por usar código hash y está relacionado con "cortar comida".

Piénselo de esta manera: toma su bonito objeto bonito, como una fruta, luego lo pica para que comience a verse como cualquier otra cosa, solo un número, ya no tiene más estructura. Esa pieza de "comida cortada" se usa en la tabla hash para descubrir tu bonito objeto bonito.

  • ¿Se ve más feo que tu bonito objeto? tal vez, pero ayuda a encontrarlo rápido , ese es el punto. Ah, y no es único, eso es seguro.
     
    El código hash encuentra un cubo en la tabla donde su objeto bonito se encuentra en una pequeña compañía de otros con el mismo código hash. Dentro de esta pequeña empresa, el objeto se busca utilizando la verificación de igualdad, que se espera que sea mucho más lenta que la búsqueda de hash, pero no es un gran problema ya que solo hay unos pocos (la mayoría de los otros objetos ya se ignoran gracias al hash rápido) .
mosquito
fuente
3

El hachís (como cortar en trozos pequeños, triturar, etc.) toma una entrada (comida o, a veces, supervillanos) y la transforma en una salida relativamente homogénea. Es decir, no importa lo que tenías al principio, al final solo tienes hash. Y una cucharada de hash es tan útil como todo el hash para determinar cuál fue la entrada (suponiendo que su hash machine funcione correctamente).
Por lo tanto, el hash puede reducir cualquier objeto comestible o malvado en una cucharada de hash, donde dos objetos diferentes producen hashes diferentes, mientras que dos objetos iguales producen hashes iguales. Lo que significa que si dos supervillanos cayeron en su máquina de hash, es suficiente comparar sus hashes para determinar si uno era un clon del otro.

En cierto modo, las funciones de hash en informática son un poco similares. Toman una entrada completa de diferentes tamaños y semánticas, y, en pocas palabras, simplemente la cortan en pedazos y los mezclan y cortan la secuencia resultante en pedazos y los mezclan y así sucesivamente. Al final tienes una cucharada (n bytes) de la entrada que has hash.

back2dos
fuente
Sin embargo, con la advertencia, el súper villano también puede devolver el mismo hash que un súper héroe con un conjunto dado de parámetros, ya que el hash no parece dictar la unicidad. Hay colisiones hash después de todo ... es lo que haces después de la colisión ...
Rig