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 5
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 .

Links da web