Hashing duplo
Quando método do valor propagação dupla ou hashing duplo ( Inglês double hashing ) é um método para realizar uma fechada método de hash . Em métodos de hash fechadas, são feitas tentativas para acomodar defectors na tabela hash em vez de armazená-los no interior da célula (por exemplo, como uma lista). (Os procedimentos de hash abertos podem atribuir entradas duas vezes e, portanto, não requerem qualquer investigação.) Atenção: Como está na tabela de hash do artigo em "Variantes do procedimento de hash", os termos "aberto" ou "hash fechado" são usados exatamente o caminho oposto.
Para fazer isso, o hash duplo usa uma função de sondagem que inclui uma função hash secundária, por exemplo, B. , e que é usado se o índice calculado pela função hash primária já estiver ocupado.
A função hash completa então lê :, onde j é o número de índices já "experimentados", i. Isso significa que j é aumentado em 1 toda vez que um índice já é usado.
A função de sondagem deve formar uma permutação dos índices da tabela hash.
A sequência de funções hash que agora são formadas usando e têm a seguinte aparência:
O custo desse método é próximo ao custo do hashing ideal.
Independência das funções hash
O hash duplo usa duas funções hash independentes e . Estes são chamados de independentes se houver probabilidade de uma chamada dupla colisão, ou seja, H. , é menor ou igual a e , portanto, mínimo, onde é o tamanho da matriz.
Exemplos
Funções de exemplo
Tamanho da matriz: m
Índices: {0; m-1}
Função hash primária: ( método de resto de divisão )
Função hash secundária:
Função exploratória:
Função de hash duplo completo:
Exemplo de cálculo
Tamanho da matriz: m = 7
- Funções de hash
- Função exploratória
Tabela de hash:
| k | 10 | 19º | 31 | 22º | 14º | 16 |
|---|---|---|---|---|---|---|
| H | 3 | 5 | 3 | 1 | 0 | 2 |
| H ' | 1 | 5 | 2 | 3 | 5 | 2 |
A matriz preenchida com a ajuda da tabela de hash e função de teste:
| 0 | 1 | 2 | 3 | 4º | 5 | 6º |
|---|---|---|---|---|---|---|
| 31 | 22º | 16 | 10 | - | 19º | 14º |
Explicação usando o exemplo :
e não geram uma colisão e, portanto, não precisam da função hash dupla . O índice da função hash pode ser lido aqui. cria uma colisão na matriz no ponto , é por isso que agora você usa a função de hash duplo com :
O ponto cria uma colisão novamente, e é por isso que o seguinte é chamado com:
O cargo está vago e, portanto, recebe o conteúdo .