Hashing aberto (encadeamento separado):
No hashing aberto, as chaves são armazenadas em listas vinculadas anexadas às células de uma tabela hash.
Hashing fechado (endereçamento aberto):
No hashing fechado, todas as chaves são armazenadas na própria tabela de hash sem o uso de listas vinculadas.
Não consigo entender por que eles são chamados de abertos, fechados e separados. Alguém pode explicar isso?
Respostas:
O uso de "fechado" vs. "aberto" reflete se estamos ou não restritos ao uso de uma determinada posição ou estrutura de dados (esta é uma descrição extremamente vaga, mas espero que o resto ajude).
Por exemplo, o "aberto" em "endereçamento aberto" nos diz que o índice (também conhecido como endereço) no qual um objeto será armazenado na tabela hash não é completamente determinado por seu código hash. Em vez disso, o índice pode variar dependendo do que já está na tabela hash.
O "fechado" em "hash fechado" refere-se ao fato de que nunca saímos da tabela de hash; cada objeto é armazenado diretamente em um índice na matriz interna da tabela hash. Observe que isso só é possível usando algum tipo de estratégia de endereçamento aberta. Isso explica por que "hashing fechado" e "endereçamento aberto" são sinônimos.
Compare isso com hashing aberto - nesta estratégia, nenhum dos objetos é realmente armazenado na matriz da tabela de hash; em vez disso, depois que um objeto é hash, ele é armazenado em uma lista separada do array interno da tabela hash. "aberto" refere-se à liberdade que obtemos ao sair da tabela hash e usar uma lista separada. A propósito, "lista separada" sugere porque o hashing aberto também é conhecido como "encadeamento separado".
Resumindo, "fechado" sempre se refere a algum tipo de garantia estrita, como quando garantimos que os objetos são sempre armazenados diretamente na tabela hash (hash fechado). Então, o oposto de "fechado" é "aberto", então se você não tem essas garantias, a estratégia é considerada "aberta".
fonte
Você tem uma matriz que é a "tabela de hash".
Em Open Hashing, cada célula da matriz aponta para uma lista contendo as colisões. O hashing produziu o mesmo índice para todos os itens da lista vinculada.
Em Closed Hashing, você usa apenas um array para tudo. Você armazena as colisões na mesma matriz. O truque é usar uma maneira inteligente de pular de uma colisão em outra até encontrar o que deseja. E faça isso de forma reproduzível / determinística.
fonte
O nome de endereçamento aberto se refere ao fato de que a localização ("endereço") do elemento não é determinada por seu valor hash. (Este método também é chamado de hashing fechado).
No encadeamento separado , cada bucket é independente e tem algum tipo de ADT (lista, árvores binárias de pesquisa, etc.) de entradas com o mesmo índice. Em uma boa tabela de hash, cada depósito tem zero ou uma entrada, porque precisamos de operações de ordem O (1) para inserir, pesquisar, etc.
Este é um exemplo de encadeamento separado usando C ++ com uma função hash simples usando o operador mod (claramente, uma função hash ruim)
fonte