22
Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost).

Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost)

Embed Size (px)

Citation preview

Page 1: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost)

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)

• 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)

• 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)
Page 5: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost)

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)

• 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)
Page 8: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost)

• 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)
Page 10: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost)

• 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)
Page 12: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost)

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)

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)

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)

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)
Page 17: Hash Extensivel Rápido acesso a dados com um custo mínimo de processamento (overhead cost)

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)

• 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)

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)

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)

• 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)

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.