Tabela hash

A tabela hash permite implementar uma estrutura de dados de array associativo (dicionário) com desempenho médio O(1) para operações de inserção, exclusão e pesquisa.

Abaixo está um exemplo da implementação mais simples de um mapa hash em nodeJS:

Como funciona? Cuidado com as mãos:

  • Dentro do mapa hash há um array
  • Dentro do elemento array há um ponteiro para o primeiro nó da lista vinculada
  • A memória é alocada para uma matriz de ponteiros (por exemplo, 65.535 elementos)
  • Eles implementam uma função hash, a chave do dicionário é a entrada e na saída pode fazer qualquer coisa, mas no final retorna o índice do elemento do array

Como funciona a gravação:

  • Na entrada há um par de chaves – valor
  • A função hash retorna índice por chave
  • Obter um nó de lista vinculada de um array por índice
  • Verifique se corresponde à chave
  • Se corresponder, substitua o valor
  • Se não corresponder, passe para o próximo nó até encontrarmos ou encontrarmos um nó com a chave necessária.
  • Se o nó ainda não for encontrado, crie-o no final da lista vinculada

Como funciona a pesquisa por chave:

  • Na entrada há um par de chaves – valor
  • A função hash retorna índice por chave
  • Obter um nó de lista vinculada de um array por índice
  • Verifique se corresponde à chave
  • Se corresponder, retorne o valor
  • Se não corresponder, passe para o próximo nó até encontrarmos ou encontrarmos um nó com a chave necessária.

Por que precisamos de uma lista vinculada dentro de um array? Devido a possíveis colisões ao calcular a função hash. Nesse caso, vários pares de valores-chave diferentes estarão localizados no mesmo índice da matriz, caso em que a lista vinculada é percorrida para encontrar a chave necessária.

Fontes

https://ru.wikipedia.org/wiki/Tabela hash
https://www.youtube.com/watch?v=wg8hZxMRwcw

Código fonte

https://gitlab.com/demensdeum/datastructures

Leave a Comment

Your email address will not be published. Required fields are marked *