Respostas:
Hash
é uma estrutura de dados extremamente mal nomeada em que o programador confundiu a interface com a implementação ( e ficou com preguiça de escrever o nome completo, ou seja, HashTable
recorrendo a uma abreviação Hash
).
Dictionary
é o nome “correto” da interface (= o ADT ), ou seja, um contêiner associativo que mapeia (geralmente únicas) chaves para valores (não necessariamente únicos).
Uma tabela de hash é uma implementação possível de um dicionário que fornece características de acesso muito boas (em termos de tempo de execução) e, portanto, geralmente é a implementação padrão.
Essa implementação tem duas propriedades importantes:
(Para uma chave ser lavável, significa que podemos calcular um valor numérico a partir de uma chave que é subsequentemente usada como índice em uma matriz.)
Existem implementações alternativas da estrutura de dados do dicionário que impõem uma ordem às chaves - isso geralmente é chamado de dicionário classificado (e geralmente é implementado em termos de uma árvore de pesquisa, embora existam outras implementações eficientes).
Para resumir: um dicionário é um ADT que mapeia chaves para valores. Existem várias implementações possíveis deste ADT, das quais a tabela de hash é uma. Hash
é um nome impróprio, mas no contexto é equivalente a um dicionário implementado em termos de uma tabela de hash.
Hash
classe com uma tabela de hash, pois o Ruby 1.9 Hash
es preserva a ordem de inserção enquanto uma tabela de hash não. Portanto, no Ruby 1.9, o nome Hash
nem reflete mais a implementação.
"Dicionário" é o nome do conceito. Uma hashtable é uma implementação possível.
Um dicionário é o termo coletivo fornecido para qualquer implementação de estrutura de dados usada para pesquisas / inserções rápidas. Isso pode ser alcançado / implementado usando uma variedade de estruturas de dados, como tabela de hash, listas de pulos, árvore de rb etc. Uma tabela de hash é uma estrutura de dados específica útil para muitos propósitos, incluindo a implementação de um dicionário.
Um dicionário usa uma chave para referenciar o valor diretamente dentro de uma matriz associativa .
ie (KEY => VALUE)
Um hash é mais frequentemente descrito como uma tabela de hash que usa uma função de hash para calcular a posição na memória (ou mais facilmente uma matriz) onde o valor estará. O hash pegará a KEY como entrada e fornecerá um valor como saída. Em seguida, conecte esse valor à memória ou ao índice da matriz.
ie KEY => HASH FUNCTION => VALUE
Eu acho que um é direto enquanto o outro não. As funções de hash também podem não ser perfeitas e, às vezes, podem fornecer um índice referenciando o valor incorreto. Mas isso pode ser corrigido.
Melhor lugar para procurar: Wikipedia ( matriz associativa e tabela de hash )
unordered_map
para mostrar o que fazem e não o que são.