Please enable JavaScript.
Coggle requires JavaScript to display documents.
Os trade-offs de espaço e tempo, Hashing - Coggle Diagram
-
Hashing
Closed Hashing
todas as chaves são armazenadas na própria tabela de hash sem o uso de listas encadeadas. (Claro, isso implica que o tamanho da tabela m deve ser pelo menos tão grande quanto o número de chaves n.)
-
Ainda assim, à medida que a tabela hash fica mais perto de ficar cheia, o desempenho da análise linear se deteriora por causa de um fenômeno chamado agrupamento(Clustering).
Um cluster em sondagem linear é uma sequência de células continuamente ocupadas (com um possível empacotamento).
-
Baseia-se na ideia de distribuir chaves entre um vetor unidimensional H [0..m - 1] chamada de tabela hash (Hashtable).
A distribuição é feita computando, para cada uma das chaves, o valor de alguma função predefinida h chamada de função hash.
Esta função atribui um número inteiro entre 0 e m - 1, chamado de endereço hash, para uma chave.
Em geral, uma função hash precisa satisfazer requisitos um tanto conflitantes:
Uma função hash precisa distribuir as chaves entre as células da tabela hash da maneira mais uniforme possível. (Este requisito torna desejável, para a maioria dos aplicativos, ter uma função hash dependente de todos os bits de uma chave, não apenas de alguns deles.)
-
O tamanho de uma tabela hash não deve ser excessivamente grande em comparação com o número de chaves, mas deve ser suficiente para não comprometer a eficiência de tempo da implementação
Obviamente, se escolhermos o tamanho m de uma tabela de hash para ser menor do que o número de chaves n, teremos colisões - um fenômeno de duas (ou mais) chaves sendo hash na mesma célula da tabela de hash.
-
Open Hshing
No hashing aberto, as chaves são armazenadas em listas vinculadas anexadas às células de uma tabela de hash. Cada lista contém todas as chaves com hash para sua célula.
Se a função hash distribuir n chaves entre as células m da tabela hash aproximadamente, cada lista terá cerca de n / m chaves. A razão α = n / m, chamada de fator de carga da tabela hash, desempenha um papel crucial na eficiência do hash.
-
Tê-lo muito pequeno implicaria em muitas listas vazias e, portanto, no uso ineficiente do espaço; tê-lo muito grande significaria listas vinculadas mais longas e, portanto, tempos de pesquisa mais longos.
Mas se nós temos a taxa de ocupação em torno de 1, temos um esquema incrivelmente eficiente que possibilita a busca por uma dada chave pelo preço de, em média, uma ou duas comparações!
É verdade que, além das comparações, precisamos gastar tempo calculando o valor da função hash para uma chave de pesquisa, mas é uma operação de tempo constante, independente de n e m.
Observe que estamos obtendo essa eficiência notável não apenas como resultado da engenhosidade do método, mas também à custa de espaço extra.