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:
- Prato frito de batata e carnes (altamente irrelevante)
- símbolo # (sinal de número AKA, sinal de libra etc.) (ainda irrelevante, talvez apenas uma má nomenclatura)
- Aplicar algoritmo à cadeia de caracteres (ainda não tem nada a ver com exclusividade , que é o recurso mais importante de uma tabela de hash)
- Cortar comida
- Outro termo para haxixe
Alguém sabe por que é chamado de hash?
Respostas:
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:
fonte
Em francês, uma tabela de hash é chamada "table de hachage", o verbo relacionado "hacher" significa cortar / picar (principalmente alimentos). O verbo
to hash
tem 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).
fonte
O número 3 tem tudo a ver com isso. Da Wikipedia :
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.
fonte
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.
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) .
fonte
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.
fonte