Você está na página 1de 6

Redimensionamento de

Tabelas
Classificação e Pesquisa de Quando redimensionar:
Dados n O tamanho da tabela se torna insuficiente para

acomodar as entradas
Aula 12 n A quantidade média de acessos para localizar as
Redimensionamento de Tabelas e Hashing Dinâmico; chaves se torna muito grande devido ao excesso
Funções Dependentes de Distribuição de colisões
n Quando houver uma quantidade significativa de
UFRGS INF01124 entradas marcadas como removidas

Como Redimensionar Realocação Local


Por realocação ou rehashing Contexto do Algoritmo
n Permitir a realocação das entradas segundo uma outra função n Cada entrada da tabela possui um campo indicando: ocupada,
de cálculo de endereço, de acordo com o novo tamanho da livre ou realocada
tabela (maior ou menor)
n Somente entradas marcadas como ocupadas serão realocadas
n Percorre-se a tabela original, inserindo na nova tabela todas as
entradas ocupadas usando a nova função n Entradas livres: nunca ocupadas ou excluídas
n Entradas realocadas: utilizadas para acomodar as chaves
realocadas
Por realocação in situ ou realocação local
n Proceder a realocação na mesma tabela agora redimensionada
n A tabela é aumentada ou diminuída na sua parte final

Realocação Local (Cont.) Hashing Dinâmico


Algoritmo Os métodos de organização de tabelas por cálculo de
n Examinar todas as entradas da tabela original a partir da
endereço vistos até agora, apesar de apresentarem um
primeira excelente desempenho médio, têm algumas limitações:
n Quando for encontrada uma entrada ocupada, ela é removida n Não são sensíveis ao conjunto de chaves efetivamente
da tabela, seu novo endereço é calculado (usando a nova armazenados
função), e a entrada é então reinserida
n A função de cálculo de endereço deve ser pré-definida e não
n Caso o novo endereço esteva marcado como realocado,
pode ser modificada
realiza-se uma busca linear a partir dele até encontrar-se a
primeira entrada livre n A adequação da função à evolução do perfil dos dados implica
n Caso o novo endereço esteja marcado como ocupado, o em uma completa reorganização da tabela
mesmo procedimento é aplicado recursivamente à chave ali n As reorganizações são viáveis apenas em tabelas pequenas
instalada, podendo provocar uma cadeia de realocações.

1
Hashing Dinâmico Tabela Estendível
O método hashing dinâmico tem como princípio a Objetivos
adequação dos mecanismos de cálculo de endereço à
evolução do conjunto de dados n Identificar as regiões da tabela onde está ocorrendo maior
número de colisões
w Proceder a expansão da tabela nessas regiões, sem
mudar a função de aleatorização
n Identificar as regiões que sofreram sucessivas remoções de
entradas na tabela
w Proceder a fusão de blocos, também preservando a
função de aleatorização

Tabela Estendível Tabela Estendível


Implementação (i) Área de Dados

n A tabela de dados é dividida em blocos de tamanhos iguais


n Cada bloco é tratado como uma região que pode ser Diretório

expandida:
w Quando um bloco está cheio (ou próximo disso), ele é
dividido em dois outros de mesmo tamanho, e as chaves Chave Função
Pseudo
chave
são distribuídas entre os novos blocos criados
C F (C)
n O acesso à área de dados é feito através de um diretório

Tabela Estendível Tabela Estendível


O diretório pode ser estendido (ou comprimido) de acordo com
Implementação (ii)
a evolução da tabela
n Cada entrada do diretório contém o endereço do bloco onde A função f(c) gera pseudo chaves (por exemplo, de 32 bits) com
se encontra a entrada procurada, se ela estiver presente distribuição uniforme. Portanto, há quantidades
n O acesso ao diretório se faz pela função hash aplicada sobre aproximadamente iguais de pseudo chaves com valores 0 e 1,
a chave de busca em cada um de seus bits

n A função hash gera uma pseudo-chave Cada bloco é identificado pela seqüência dos primeiros “k” bits
da pseudo chave
O número “k” de bits utilizado determina o número de entradas
do diretório: 2k

2
Tabela Estendível Tabela Estendível
Caso mais simples Após um desdobramento

Diretório Área de Dados


Diretório Área de Dados
2
1 2
f(c) = 00…
1
f(c) = 0… 00
0 2
01
1
1 f(c) = 01…
f(c) = 1… 10
1
11
f(c) = 1…

Tabela Estendível Tabela Estendível


A estrutura interna de cada bloco pode ser organizada utilizando Fusão de blocos
um esquema convencional de hashing
n Arbitra-se quando a taxa de ocupação de um bloco (p.e.,
Qualquer entrada da tabela pode ser acessada pela leitura de < 30%) justifica uma fusão
um único bloco
n Condições necessárias para a fusão
Fica dispensado o uso de blocos de extensão e o
armazenamento de entradas em bloco distinto daquele que lhe w Somente em blocos adjacentes
corresponde w Os dois blocos são originários do desdobramento de um
mesmo bloco
w Os dois blocos possuam a mesma profundidade
n Uma fusão de blocos pode causar a redução do tamanho do
diretório

Compressão de Chaves
Alfanuméricas
Objetivo
n Minimizar o problema da representação numérica
excessivamente grande para ser armazenada em uma
palavra, para fins de operação.

Implementação
n Emprego do operador lógico “ou exclusivo” ( xor ): maneira
prática e usual de se fazer compressão

3
Operador XOR Exemplo

• Exemplo: Comprimindo a chave BRASIL para 16 bits


A B A xor B
Representação binária do código ASCII
0 0 0
(BR) 1100001011010010
0 1 1 (AS) 1100000111010011
(IL) 1100100111001100
1 0 1 xor 1100101011001101 = 51.917(10)
1 1 0 · Considerando uma tabela de 521 entradas, teríamos:

(51.917 mod 521) + 1 = 338

Funções de Cálculo de Endereço Método da divisão


O valor de “n” (divisor) deve ser escolhido com muito critério
Método da divisão
Na prática os melhores resultados são obtidos quando o divisor é
F ( x ) = ( x mod n )
um número primo
Resultando em endereços no intervalo [0, n-1] A quantidade de colisões depende da taxa de ocupação da tabela
Tende a preservar a uniformidade no conjunto de chaves,
mapeando valores de chave consecutivas em endereços Sugestão: acrescentar 20% ao total de chaves a serem
consecutivos instaladas e tomar o menor número primo maior ou igual ao
resultado obtido

Funções dependentes da distribuição Funções dependentes da distribuição


Método de Análise de Freqüências das Chaves
Até agora se considerou que as chaves estivessem uniformemente
distribuídas em seu domínio Analisa a freqüência com que os dígitos (ou caracteres) ocorrem
em cada posição da chave.
Em tabelas dinâmicas, a questão da distribuição das chaves
Exemplo: seja uma tabela com 500 chaves de 4 posições, que
dificilmente pode ser levada em conta, pois isto exige um apresenta a seguinte tabulação de freqüências
conhecimento prévio dos valores das chaves
Dígito
No caso de tabelas estáticas, o estudo da distribuição das chaves 0 1 2 3 4 5 6 7 8 9
Freqüências
pode ser feito preliminarmente, permitindo a escolha de uma 1º 0 500 0 0 0 0 0 0 0 0
função de aleatorização mais adequada à distribuição 2º 0 0 0 0 0 0 0 0 0 500
3º 7 25 28 35 48 80 95 112 50 20
4º 43 57 48 32 50 92 37 41 63 37

Escolhendo apenas o 3º e o 4º dígitos das chaves, estaremos


espalhando-as de maneira mais uniforme ao longo do espaço de
endereçamento, o qual ficará restrito ao intervalo [0, 99]

4
Funções dependentes da distribuição Funções dependentes da distribuição
Função Cumulativa das Freqüências Função Cumulativa das Freqüências (Cont.)

Domínio da função discreta F (x), que corresponde ao domínio S Obtém a tabulação das freqüências das chaves (função discreta
das chaves, é dividido em “m” intervalos iguais de distribuição), e usa a integral da mesma como base da
função de cálculo de endereços.
O valor de F (x) em cada intervalo correspondente ao total de
Seja, então, F (x) a função discreta de distribuição das chaves,
chaves cujos valores recaem naquele intervalo
e seja Fz (x) a função acumulativa de F (x):
Para cada intervalo i, 1 ≤ i ≤ m, teremos um certo valor de F(i)
Fz (x) = ∑ F (z)
z ≤x

Função cumulativa das


Funções dependentes da distribuição freqüências
Portanto, em cada intervalo [nk Fz (i-1), nk Fz (i)] teremos
Função Cumulativa das Freqüências (Cont.)
F(i) chaves
Valor de Fz (i) em cada um destes intervalos:
Ou seja, teremos uma densidade igual a
Fz (1) = F (1) F (i) F (i) k
=n =
 n n
Fz (i) = Fz (i - 1) + F (i), 2 ≤ i ≤ m (F (i) - F (i - 1))
k z z k
F(i)

O que corresponde a uma densidade constante no espaço


Valor mínimo de Fz é 1 e o máximo é k (nº de chaves em S)
de endereçamento [1, n], ou seja, uma distribuição
Contradomínio de F : intervalo [1, k] uniforme das chaves naquele espaço.
Multiplicando o valor de Fz por um fator de ajuste de escala (n/k),
(n = tamanho da tabela), obtemos valores pertencentes ao
espaço de endereçamento da tabela

Método da função cumulativa Método da função cumulativa


das freqüências das freqüências
EXEMPLO Função Discreta de Distribuição das Chaves

k = 100, m = 10, n = 120.


F (i)

intervalo freqüência freqüência acumulada


(i) F (i) Fz (i) 25
25

1 5 5
2 7 12 20
3 10 22 18

4 12 34
15
5 18 52 13
12
6 25 77 10
7 13 90 10

8 6 96 7
6
5
9 3 99 5
3
10 1 100 1
i
1 2 3 4 5 6 7 8 9 10

5
Método da função cumulativa
das freqüências
Função Integral da Distribuição das Chaves

n
Fz(i) F z(i)
k

100
100 99 120
96

90
90 108

80 96
77

70 84

60 72

52
50 60

40 48

34

30 36

22
20 24

12
10 12
5

i
1 2 3 4 5 6 7 8 9 10

p C p i+1
i

Você também pode gostar