Função de hash
Uma função hash é um algoritmo que transforma dados de entrada (chave) em um valor numérico que serve como índice na tabela hash. É como um processador que decide onde cada item deve ser armazenado.
Note
Muitas vezes, a função hash é chamada de função de espalhamento ou de dispersão
Características de uma boa função hash
1. Determinística
- Mesma entrada sempre produz mesma saída
- Fundamental para consistência
2. Distribuição Uniforme
- Espalha os valores uniformemente
- Minimiza colisões
3. Eficiência
- Rápida de calcular
- Baixo custo computacional
4. Efeito Avalanche
- Pequenas mudanças na entrada causam grandes mudanças na saída
Métodos Comuns de Hash
1. Método da Divisão
public int hashDivisao(int chave) {
return chave % tamanhoDaTabela;
}
Note
Geralmente
tamanhoDaTabela
é um número primo para evitar colisões, uma vez que números primos possuem menos divisores.
Exemplo:
- Chave: 234
- Tamanho da tabela: 10
- Índice = 234 % 10 = 4
2. Método da Multiplicação
public int hashMultiplicacao(int chave) {
double A = 0.6180339887; // Constante A (0 < A < 1)-> proporção áurea
double temp = chave * A;
double parteDecimal = temp - Math.floor(temp);
// ou double parteDecimal = temp % 1
return (int)(tamanhoDaTabela * parteDecimal);
}
Note
Geralmente
tamanhoDaTabela
é potência de 2.
A escolha de “A” pode afetar a qualidade da distribuição. É importante que “A” não seja muito próximo de 0 ou 1 para evitar padrões de distribuição inadequados e aumentando as colisões.