Por que é chamado de "tabela de hash" ou "função de hash"? Hash não faz nenhum sentido para mim aqui [fechado]

26

Agora são cerca de 4 anos de desenvolvimento que estou usando, ouvindo, falando e implementando tabelas de hash e funções de hash. Mas eu realmente nunca entendo porque é chamado de hash?

Lembro-me dos primeiros dias em que comecei a programar, esse termo era uma espécie de terminologia complicada para mim. Eu nunca descobri o que é, com base em seu nome . Acabei de entender experimentalmente o que faz e por que e quando devemos usá-lo .

No entanto, às vezes ainda tento descobrir por que é chamado de hash . Não tenho nenhum problema com tabela ou função e, para ser sincero, são termos bastante dedutivos e racionais. No entanto, acho que palavras melhores poderiam ser usadas em vez de hash, como chave ou exclusividade . Não chave tabela ou tabela de exclusividade .

De acordo com o meu dicionário, hash significa:

  1. Prato frito de batata e carnes (altamente irrelevante)
  2. símbolo # (sinal de número AKA, sinal de libra etc.) (ainda irrelevante, talvez apenas uma má nomenclatura)
  3. Aplicar algoritmo à cadeia de caracteres (ainda não tem nada a ver com exclusividade , que é o recurso mais importante de uma tabela de hash)
  4. Cortar comida
  5. Outro termo para haxixe

Alguém sabe por que é chamado de hash?

Saeed Neamati
fonte
32
Você parece entender um pouco mal o que são hashes. A exclusividade não é explicitamente um recurso das funções de hash (ou seja, elas nunca são injetivas).
Peter Taylor
1
@ Peter Taylor: tabelas de hash definem mapeamentos injetáveis.
Reinierpost
2
@ Peter Taylor: para serem um pouco exigentes, eles não precisam ser injetáveis , mas às vezes são até bijetivos. Pense a implementação típica de uma função hash para um número inteiro :)
keppla
4
Um hash pode ser exclusivo, desde que o espaço da chave não seja maior que o espaço do valor do hash (para hashes de tabela) ou o espaço do valor do hash seja tão grande que as colisões sejam matematicamente inviáveis ​​(para hashes criptográficos).
Secure
1
Além disso, uma "tabela de chaves" parece mais com qualquer estrutura de dados de "chave / valor" (também chamada de "dictionnary"). Nem todas as estruturas de dados de chave / valor são tabelas de hash.
barjak 14/09/11

Respostas:

46

Segundo a wikipedia, refere-se à função hash . Se você quiser dar um passo adiante, a página wiki da função hash diz que o uso da palavra "hash" na função hash se originou da seguinte maneira:

O termo "hash" vem por analogia com seu significado não técnico, "chop and mix". De fato, funções hash típicas, como a operação mod, "dividem" o domínio de entrada em muitos subdomínios que são "misturados" no intervalo de saída para melhorar a uniformidade da distribuição de chaves.

user937146
fonte
2
Não tenho certeza do que os 'subdomínios' estão fazendo lá. É que a função hash 'mistura' completamente os valores de seu domínio.
Reinierpost
15

Em francês, uma tabela de hash é chamada "table de hachage", o verbo relacionado "hacher" significa cortar / picar (principalmente alimentos). O verbo to hashtem o mesmo significado em inglês.

Então, como outros já apontaram, isso é chamado de hash, porque você corta sua entrada que você coloca em pedaços em lugares diferentes (suas entradas na tabela).

Xavier T.
fonte
2
Na verdade, está escrito "hachage" e "hacher" sem sotaque.
Ptival 14/09
10

O número 3 tem tudo a ver com isso. Da Wikipedia :

No coração do algoritmo da tabela de hash está uma matriz simples de itens; isso geralmente é chamado de tabela de hash . Os algoritmos da tabela de hash calculam um índice a partir da chave do item de dados e usam esse índice para colocar os dados na matriz. A implementação deste cálculo é a função hash , f:

index = f(key, arrayLength)

A função hash calcula um indexdentro da matriz a partir dos dados key. arrayLengthé o tamanho da matriz. Para linguagem assembly ou outros programas de baixo nível, uma função hash trivial geralmente pode criar um índice com apenas uma ou duas instruções de máquina em linha .

Portanto, uma tabela de hash realmente não armazena valores com base em uma chave; ele armazena valores com base em uma versão em hash dessa chave.

Michelle Tilley
fonte
1
depende do que você quer dizer com tabela de hash. A estrutura de dados oferecida em linguagens como Perl, Java e C # fornece um mapeamento de chave para valor, usando o tipo de tabela de hash a que você se refere internamente.
Reinierpost 14/09/11
10

tabelas de hash são chamadas dessa maneira devido ao uso de código de hash e estão relacionadas a "cortar alimentos".

Pense assim: você pega seu belo objeto bonito, como uma fruta, e depois o mistura, para que ele pareça com qualquer outra coisa - apenas um número - para não haver mais estrutura nele. Esse pedaço de "comida cortada" é usado na tabela de hash para descobrir seu belo objeto bonito.

  • Parece mais feio do que o seu objeto bonito? talvez - mas ajude a encontrá-lo rapidamente - esse é o ponto. ah, e não é único, com certeza.
     
    O código hash encontra um balde na tabela em que seu objeto bonito fica em uma pequena empresa de outras pessoas com o mesmo código hash. Dentro desta pequena empresa, o objeto é pesquisado usando a verificação de igualdade - o que é esperado para ser muito mais lento que a pesquisa de hash, mas não é grande coisa, já que existem apenas alguns deles (a maioria dos outros objetos já é ignorada graças ao hash rápido) .
mosquito
fonte
3

O hash (como cortar em pedaços pequenos, triturar etc.) recebe uma entrada (comida ou, às vezes, supervilões) e a transforma em uma saída relativamente homogênea. Ou seja, não importa o que você tinha no começo, no final você apenas tem hash. E uma colherada de hash é tão útil quanto todo o hash na determinação, qual foi a entrada (supondo que sua máquina de hashes seja bem-sucedida).
Portanto, o hash pode reduzir qualquer objeto comestível ou mal em uma colher de hash, onde dois objetos diferentes produzem hashes diferentes, enquanto dois objetos iguais produzem hashes iguais. O que significa que, se dois supervilões caírem na sua máquina de hash, basta comparar seus hashes para determinar se um era um clone do outro.

De certa forma, as funções de hash na ciência da computação são um pouco parecidas. Eles recebem toda uma entrada de diferentes tamanhos e semânticas, e - simplesmente, eles apenas cortam em pedaços e misturam-os ao redor, cortam a sequência resultante novamente em pedaços e misturam-no e assim por diante. No final, você tem uma colher (n bytes) da entrada que você hash.

back2dos
fonte
No entanto, com a ressalva, o super-vilão também pode retornar o mesmo hash que um super-herói com um determinado conjunto de parâmetros, já que o hash não parece ditar a exclusividade. Há colisões de hash depois de tudo ... é o que você faz após a colisão ...
Rig