28
Estruturas de Dados Profº Carlos Alberto Teixeira Batista E-mail: [email protected] [email protected]

Estruturas de Dadosfiles.alged.webnode.com/200000401-4a0d94b072/10_Espalhamentos.pdf · Espalhamento Eficiente técnica para armazenamento e recuperação de dados; Principal vantagem:

Embed Size (px)

Citation preview

Estruturas de Dados

Profº Carlos Alberto Teixeira Batista

E-mail: [email protected]

[email protected]

Espalhamento

Eficiente técnica para armazenamento e recuperação de

dados;

Principal vantagem: não requer ordenação de dados, o

que torna a inserção tão rápida quanto o acesso;

Fundamentos

Espalhamento (ou hashing) de um conjunto C é a sua divisão

em um número finito de partes C1, C2, ..., Cn para n > 1, tal

que:

Todo elemento de ocorre em uma dessas partes;

Nenhum elemento de ocorre em mais de uma dessas partes;

Durante o espalhamento de um conjunto em partes,

nenhum de seus elementos é perdido ou duplicado;

,

Fundamentos A distribuição unívoca dos elementos de C em n partes é

feita através de uma função de espalhamento:

A função mapeia cada elemento de C à sua respectiva parte Ci:

A função h é ótima se, no espalhamento realizado, a diferença absoluta entre o número de elementos de quaisquer duas partes é no máximo 1.

,

Fundamentos

O espalhamento é uniforme se todas as parte de têm

aproximadamente o mesmo tamanho.

Quantidade de elementos da menor parte:

Quantidade de elementos da maior parte:

,

Fundamentos

Fundamentos

Aplicação de espalhamento

Funções de espalhamento

Funções de espalhamento

Método da Divisão

Método da Divisão

É indicado quando C é um subconjunto de N;

O resto de uma divisão tem como resultado um valor entre 0

e n-1:

Método da Divisão

Transformação de elementos

alfanuméricos

Quando os elementos de são alfanuméricos, o método da

divisão não pode ser usado diretamente;

A solução é simples: soma-se o código ASCII de cada

caractere.

Transformação de elementos

alfanuméricos

Transformação de elementos

alfanuméricos

Tratamento de permutações

Tratamento de permutações

Como a posição da letra não é levada em consideração, os

valores de para , são os seguintes:

Tratamento de permutações

Uma forma simples e eficiente de resolver o problema é

usar soma com deslocamentos;

Os bits do código ASCII de cada caracter serão

deslocados à esquerda, antes de serem acumulados à

soma total, de forma cíclica;

Tratamento de permutações

Na soma com deslocamentos, o valor numérico de cada

caractere depende também de sua posição , sendo calculado

pela fórmula:

O operador << é usado para deslocamento de bits à

esquerda.

Tratamento de permutações

Para entender o funcionamento da fórmula, vejamos os

possíveis valores de ‘A’, dependendo da sua posição, na

tabela a seguir:

Tratamento de permutações

Função de espalhamento baseada em soma com

deslocamentos:

Tratamento de permutações

Tabela Hashing

Ao aplicar qualquer função hashing sobre um conjunto de

chaves, duas ou mais podem ser mapeadas para o mesmo

endereço;

Esta situação é chamada de colisão.

Como nem sempre é possível gerar um número pequeno de

colisões, para minimizá-las são utilizados métodos de

tratamento.

Exemplo de métodos para tratamento de colisão: Buckets,

Espalhamento Combinado, Tabela Hashing com

Lista Encadeada.

Tabela Hashing

Buckets

Tabela Hashing Espalhamento combinado

Tabela Hashing Espalhamento combinado

Tabela Hashing

Tabela Hashing com espalhamento externo