Qual é a diferença entre Hash
e Dictionary
?
Vindo de um histórico de scripts, sinto que eles são semelhantes, mas queria descobrir as diferenças exatas. Googling não me ajudou muito.
Qual é a diferença entre Hash
e Dictionary
?
Vindo de um histórico de scripts, sinto que eles são semelhantes, mas queria descobrir as diferenças exatas. Googling não me ajudou muito.
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.
unordered_map
para mostrar o que fazem e não o que são.Hash
classe com uma tabela de hash, pois o Ruby 1.9Hash
es preserva a ordem de inserção enquanto uma tabela de hash não. Portanto, no Ruby 1.9, o nomeHash
nem reflete mais a implementação."Dicionário" é o nome do conceito. Uma hashtable é uma implementação possível.
fonte
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.
fonte
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 )
fonte