Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).
Transcript of Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).
![Page 1: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/1.jpg)
Hash Extensivel
Rápido acesso a dados com um custo mínimo de processamento
(overhead cost).
![Page 2: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/2.jpg)
• Introducao:
Os principais objetivos deste método são pesquisa O(1) e tamanho variável conforme a quantidade de contudo.
Hash extensível usa a chave gerada pela função hash como uma pseudo-chave, que será quebrada conforme necessidade.
![Page 3: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/3.jpg)
• Profundidade:
A profundidade deve ser tal que o numero de baldes contenham todas as chaves, é importante que a função hash distribua bem as chaves.
Este número de baldes(B) corresponde a 2p indices, assim p = log2 B. Onde B = (numero de chaves)/(taxa de ocupacao).
Supondo ocupação máxima temos B = (numero de chaves) / (tamanho do balde).
![Page 4: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/4.jpg)
![Page 5: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/5.jpg)
Inserção
• Inserção• Após obtida a pseudo-chave a partir da chave da
informação a ser armazenada, pega-se os p bits mais significativos da pseudo-chave (p se refere a profundidade de diretório ou profundidade global) como índice para acessar um posição do diretório.
• Por exemplo, se a pseudochave é 10100110 e a profundidade do diretório é 3, acessaremos a posição 101. Nesta posição do diretório teremos uma referência ao balde em que tentaremos inserir o dado( ou uma referência a ele). Daí poderemos ter três casos:
![Page 6: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/6.jpg)
• Melhor caso: há espaço no balde e a pseudochave é simplesmente inserida no balde
![Page 7: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/7.jpg)
![Page 8: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/8.jpg)
• Caso Intermediário . Não há espaço no balde encontrado , mas ele pode ser divido em mais um balde
A profundidade desse balde é menor que a do diretório. Um novo balde é criado, e as pseudochaves são redistribuídas entre o novo balde e o original. A profundidade local desses baldes serão iguais a profundidade do balde original mais um.
![Page 9: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/9.jpg)
![Page 10: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/10.jpg)
• Pior caso: Não há espaço no balde encontrado e a entrada do diretório encontrada faz referência a um único balde, ou seja, a profundidade local do balde é igual a profundidade do diretório .
• O diretório dobra de tamanho e as pseudochaves são distribuídos entre os baldes do novo diretório.
![Page 11: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/11.jpg)
![Page 12: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/12.jpg)
Pesquisa
• A pesquisa no hash extensível é simples e muito rápida. A chave de pesquisa passa pela função hash retornando a pseudochave. Se a profundidade do diretório é p, os primeiros p bits da pseudochave são usados para compor o índice do diretório. Nesta posição temos a referência ao balde onde faremos pesquisa semelhante a feita num nó de árvore B.
![Page 13: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/13.jpg)
Remoção
• Após removermos a informação do balde, temos que fazer duas verificações:
• 1- Se é possível fundi-lo com outro balde (balde amigo).
• 2- Se o tamanho do diretório pode ser reduzido.
![Page 14: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/14.jpg)
Balde amigo
• Para a primeira verificação, temos que achar o balde amigo. Para haver um único balde amigo a profundidade do balde tem que ser a mesma do diretório. Dado um índice de um balde, o balde amigo é aquele que difere apenas no último bit do índice.
![Page 15: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/15.jpg)
Redução de tamanho
• Isto é possível quando cada balde da estrutura é referenciado por pelo menos duas entrada do diretório.
• Ou seja, a profundidade de todos os baldes é menor que a global .Assim o diretório é reduzido pela metade ( a profundidade decresce de 1) e as referenciais aos baldes são refeitas.
![Page 16: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/16.jpg)
![Page 17: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/17.jpg)
Aplicações e Desemplenho
• Se o diretório de um hash podeser mantido na memória RAM um simples acesso é necessário para recuperar um registro.
• Mas, se o diretório é tão grande que ele precise ser mapeado fora da memória RAM, dois acessos podem ser necessários.
![Page 18: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/18.jpg)
• Vantagens:
O tempo de acesso é completamente independente do tamanho do arquivo.
Hash extensível não há necessidade da ordenação dos dados no arquivo.
Tamanho tão grande quanto necessário(até um limite definido pela função hash).
![Page 19: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/19.jpg)
Desempenho
Quão grande deve ser um diretório para um seterminado número de chaves?
A resposta foi dada por Frajolet em 1983:
Tamanho estimado do diretório = 3.92 r(1+1/b)/b.
Sendo r o número total de registros e b o tamanho do balde.
![Page 20: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/20.jpg)
Sobre o preenchimento dos baldes, espera-se que os baldes estejam entre 0.53 e 0.94 cheios.
A análise de Fagin, Nievergelt, Pippenger e Strong sugere que para um número r de registros e um bloco de memória de tamanho b, o número médio de blocos N é aproximadamente:
N » r /(b ln 2)A utilização é dada por: r / (b N) que é igual a
ln 2 = 0.69.
![Page 21: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/21.jpg)
• Assim, esperamos uma utilização de 69%. As árvores B tendem a ter uma utilização de 67%, que pode ser aumentado para 85%, se distribuirmos as chaves durante a inserção.
• Logo, uma árvore B tende a ocupar menos memória, ao custo de se procurar mais para se achar um dado.
![Page 22: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/552fc103497959413d8bea5e/html5/thumbnails/22.jpg)
Usos
• Hash extensível é usado quando temos um grande número de informações que estão em constantes mudança e elas têm de ser acessadas rapidamente.
• Isso ocorre principalmente em sistemas de arquivos de um sistema operacional e sistemas de bancos de dados.