Arquivos de Acesso Direto

Propaganda
Arquivos de Acesso Direto
Inhaúma Neves Ferraz
Departamento de Ciência da Computação
Universidade Federal Fluminense
[email protected]
1
Sumário
Endereçamento e Ponteiros
Espalhamento de Registros (“Hashing”)
Espalhamento Baseado em Tabelas



Arquivos Extensíveis
Espalhamento Virtual
Espalhamento Extensível
Exemplo de Técnicas de Espalhamento
2
Espalhamento e Ponteiros
3
Conceito
Arquivos de Acesso Direto são aqueles nos
quais para se ter acesso a um registro não é
necessário fazer referência ou ter acesso a
demais registros do arquivo
Neste tipo de arquivo a recuperação dos
registros é feita diretamente pelo seu
respectivo endereço, que pode ser obtido
através de transformações aritméticas
4
Endereçamento
Endereço do registro de ordem I de um
arquivo é a posição, em memória
secundária, onde principia esse registro
O deslocamento dessa posição(seu
endereço), em relação ao início do arquivo,
é:
POSIÇÃO INICIAL = (I - 1) X COMPRIMENTO DO REGISTRO
5
Registros de Tamanho Variável (1)
Registros de comprimento variável são de
difícil tratamento, pois o cálculo da posição
inicial depende do comprimento dos
registros
Procura-se tratar estes registros usando mais
de um registro de tamanho fixo
6
Registros de Tamanho Variável (2)
Alternativa 1
Arquivo 1
chave 1 primeira parte
chave 2 primeira parte
chave 3 primeira parte
chave 4 primeira parte
Arquivo 2
chave 1 segunda parte
chave 1 terceira parte
chave 1 quarta parte
chave 2 segunda parte
chave 4 segunda parte
7
Registros de Tamanho Variável (3)
Alternativa 2
Conteúdo
chave 1 primeira parte
chave 2 primeira parte
chave 3 primeira parte
chave 4 primeira parte
Arquivo 1
Nùmero de registros de continuação
3
1
0
1
Arquivo 2
Conteúdo
segunda parte ( 1o reg)
terceira parte ( 1o reg)
quarta parte ( 1o reg)
segunda parte ( 2o reg)
segunda parte ( 4o reg)
8
Ponteiros
Ponteiros são dados a partir dos quais o endereço
do objeto apontado pode ser determinado
Existem 5 processos de implementação de
ponteiros, em ordem crescente de tempo de
transformação do ponteiro em endereço:





Endereço em memória secundária
Número do registro
Deslocamento
Endereçamento indireto
Endereçamento simbólico
9
Espalhamento de Registros
(“Hashing”)
10
“Hashing” ou Espalhamento (1)
"Hashing" consiste numa função que transforma
uma chave em endereço do arquivo onde o
registro associado a respectiva chave se encontra
A utilização desta função não exige que o arquivo
contenha algum tipo de ordenação
Em geral, o espaço de endereços (conjunto de
endereços possíveis no arquivo) é bem menor que
o espaço de chaves (conjunto de chaves válidas)
11
“Hashing” ou Espalhamento (2)
O mapeamento do espaço de chaves no
espaço de endereços (função hash) pode ser
realizado da forma:
endereço do registro  hash(chave)
onde
conjunto de endereços  conjunto de endereços válidos
12
“Hashing” ou Espalhamento (3)
A técnica de "hashing" proporciona uma
recuperação de registros extremamente
rápida se comparada com a recuperação
seqüencial
O tempo de recuperação em arquivos
seqüenciais cresce com o tamanho do
arquivo, o que não ocorre com o "hashing
13
Projeto de Arquivos de Acesso Direto
No projeto de um arquivo de acesso direto os
fatores que é necessário considerar são os
seguintes:
1- Agrupar um determinado número de registros em uma
unidade com endereço comum chamada "bucket"
2- Calcular o espaço de armazenamento necessário para o
arquivo

Esse dimensionamento do arquivo depende da densidade de
empacotamento ou fator de carga que é a razão entre o número
de registros nos arquivos e a capacidade total dos "buckets"
3- Escolher uma função "hash" que é a transformação a
aplicar à chave para obter o endereço do "bucket"
4- Optar por uma técnica de resolução do problema de
transbordamento

Ocorre transbordamento ou "overflow" quando se endereça um
registro a um "bucket" já cheio
14
Função Hash
15
“Buckets”
O arquivo é dividido em seções menores denominadas
"buckets", que podem conter um ou mais registros
A função "Hash" atribui a cada registro um endereço de
"bucket" ("home address"), onde este pode ser acomodado
O tamanho de “bucket” é determinado pelo número de
registros que este pode armazenar, ou ainda, pelo número
de "slots" que ele contém
Um "slot" é uma unidade de armazenamento que contém
espaço para um registro
Um arquivo com 1000 registros pode ser composto de
1.000 "buckets" de tamanho 1, ou 500 "buckets" de
tamanho 2, etc...
16
Colisão e Transbordamento
Ocorre uma colisão quando durante uma inclusão
de registros, dois deles têm o mesmo endereço
calculado pela função “hash”
Estes registros são chamados sinônimos
As colisões não constituem problemas enquanto
não se atingir a capacidade do "bucket"
correspondente
A partir daí, ocorre transbordamento, que consiste
no fato de um registro não poder ser acomodado
em "home bucket"
17
“Home bucket” e “homme address”
“Home bucket" é aquele que está associado ao
"home address" do registro, calculado pela função
"hash" aplicada à chave do registro
Aumentando o tamanho dos "buckets" diminui a
probabilidade de transbordamento mas aumenta o
tempo de busca do registro no "bucket“
A busca no “bucket” em memória principal é
muito rápida comparada com o tempo de busca do
“bucket” em memória secundária
18
Modelo de “Bucket”
19
Densidade de Empacotamento
À medida que um arquivo de acesso direto
vai se enchendo cresce o número de acessos
necessários a operações de inclusão ou
recuperação
Não é desejável a existência de arquivos
com muitos espaços vazios
Densidade de empacotamento é a razão:
(número de registros no arquivo)/(número de “slots” no arquivo)
20
Expectativa de Transbordamento (1)
Sempre que a densidade de empacotamento
ultrapassa determinado patamar (usualmente
70%), as colisões tornam-se inaceitavelmente
freqüentes, muito embora esse patamar varie
sensivelmente com o tamanho dos "buckets"
Considere-se N "home buckets", cada qual
comportando C registros e havendo K registros
armazenados no arquivo.
K
A densidade de empacotamento é :
C*N
21
Expectativa de Transbordamento (2)
Supondo distribuição uniforme de registros nos
"buckets“, a probabilidade de um dado "bucket"
receber exatamente I dos K registros é produto de:



A probabilidade do "bucket" receber I registros
A probabilidade dos demais K-I registros não serem
destinados ao "bucket"
O número de maneiras que I registros possam ser
destinados a um "bucket"( combinação de K elementos,
I a I)
I
K I
K!
P I  
*  1  * 1  1 
I!*K  I !  N   N 
22
Expectativa de Transbordamento (3)
A probabilidade de J registros
transbordarem de um "bucket" com
capacidade C é P(C+J)
A expectativa do total de transbordamento
que possa ocorrer em um "bucket" é
P C  1  2 * P C  2  3 * P C  3 ... K  C * P K  
K C
 j * P C  j
j 1
23
Expectativa de Transbordamento (4)
A expectativa de transbordamento para o
conjunto dos "home buckets" é
K C
N*
 j * P C  j
j 1
ou, em função percentual dos registros
armazenados:
N K C
100 * *  j * P (C  j )
K j 1
24
Expectativa de Transbordamento (5)
Expectativa de Transbordamento (em %)
Bucket
Tamanho
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0,50
10.27
5.92
3.71
2.44
1.66
1.16
0.83
0.60
0.43
0.32
0.24
0.18
0.13
0.10
0.08
0,55
11.90
7.29
4.83
3.36
2.42
1.78
1.33
1.01
0.77
0.60
0.47
0.37
0.29
0.23
0.18
0,60
13.56
8.75
6.10
4.45
3.34
2.57
2.01
1.59
1.27
1.03
0.84
0,68
0.56
0.47
0.39
0,65
15.25
10.30
7.49
5.68
4.44
3.54
2.87
2.36
1.96
1.64
1.38
1.17
1.00
0.85
0.73
Fator de Carga
0,70
0,75
16.94 18.65
11.92 13.59
8.99
10.59
7.07
8.58
5.71
7.14
4.71
6.05
3.94
5.20
3.33
4.52
2.85
3.96
2.46
3.50
2.13
3.11
1.86
2.78
1.63
2.50
1.43
2.25
1.27
2.03
0,80
20.35
15.30
12.27
10.21
8.71
7.56
6.65
5.91
5.29
4.78
4.33
3.95
3.62
3.33
3.07
0,85
22.04
17.05
14.01
11.93
10.40
9.21
8.26
7.48
6.83
6.27
5.79
5.37
5.00
4.68
4.38
0,90
23.71
18.81
15.81
13.73
12.20
11.00
10.03
9.23
8.56
7.98
7.48
7.03
6.64
6.29
5,97
0,95
25.37
20.58
17.64
15.60
14.08
12.89
11.93
11.13
10.45
9.87
9.36
8.91
8.51
8.15
7.82
25
Funções de Espalhamento
Funções de Espalhamento ou funções “Hash”
transformam uma chave em endereço de "bucket“
Exemplos






Resto da Divisão
Meio do Quadrado
Dobramento
Deslizamento
Análise Digital
Codificação Algébrica
26
Resto da Divisão
A chave é digitalizada para um número
inteiro

Adicionando produtos dos caracteres por pesos
de um vetor arbitrário
O número inteiro obtido é dividido por um
primo próximo do número de “buckets” do
arquivo

O resto da divisão é o “hime address”
27
Dobramento e Deslizamento
Uso de OU-EXLUSIVO em “strings” de
log2 (número de “buckets”) bits extraídos
da chave
28
Outras funções
Meio do Quadrado - chave é multiplicada por ela
mesma e o endereço é obtido pelo truncamento
das duas extremidades do número obtido pelo
produto
Análise Digital – determina-se a distribuição de
valores da chave em cada posição ou dígito e as
posições que possuem uma má distribuição são
desconsideradas na transformação
Codificação Algébrica – divisão de polinômios
onde cada dígito da chave é considerado um
coeficiente de um polinômio
29
Tratamento do Transbordamento
No transbordamento é preciso gerenciar:
1- A busca do espaço para armazenamento do registro
2- A recuperação do registro quando necessário
Estratégias


endereçamento aberto – solução computacional onde
calculam-se endereços de uma seqüência até obter de um
deles o registro buscado ou a informação de ausência de
espaços ou do registro no arquivo
endereçamento fechado (ou encadeamento) – solução por
estruturas de dados na qual as cadeias de registros de
transbordamento são ancoradas nos "home buckets".
30
Endereçamento aberto
uma lista de endereços de "buckets"
Ai = f(i, Chave), i= 1,2,3,...
Sondagem linear
Ai = (i*passo + hash(chave)) mod N




onde
N = número de "buckets"
i = 0,1,2,3,...
passo, passo1, passo2  inteiro
Sondagem quadrática
Ai = (i*passo1 + i*i*passo2 + hash(chave)) mod N
31
“Delete byte”
A exclusão de registros no endereçamento aberto poderia
prejudicar a busca pela criação de espaços vazios que
fariam cessar buscas subseqüentes
Cria-se uma variável de estado de “slot” que permite criar
uma marca de exclusão no registro (o "delete byte")
comportando as seguintes transições de estados de
registros



Vazio
Ocupado
Excluído
A busca só se encerra ao encontrar um “slot” vazio
32
Estados de um “delete byte”
33
Esquemas de Transbordamento
34
Espalhamento Baseado em Tabelas
35
Conceito
Indicado para casos em que o número de
recuperações é bem maior que o de inclusões, pois
a busca é efetuada em apenas um acesso a
memória secundária
Baseado em uma tabela com uma entrada para
cada “home address”, cada entrada possuindo uma
linha ou “array” de células
Cada célula contém um endereço de "bucket", e o
valor da maior assinatura digital de registro
armazenado naquele “bucket
36
Assinatura Digital
Uma assinatura digital de uma chave de registro
(ou pseudo chave) é uma seqüência pseudoaleatória de bits (cujo número de zeros seja
próximo do número de uns) cujo tamanho pode
crescer e que funciona como uma abreviatura da
chave
Os registros de mesmo “home address” estão
todos armazenados nos “buckets” indicados nas
células de uma entrada da tabela e classificados
por ordem de assinatura digital
37
Exemplo de Assinatura Digital
A assinatura digital pode ser encontrada da
forma bi = paridade ( Xi )
onde Xi+1 = ( Xi * a + b) mod c
e a,b e c são inteiros e X0 = H(key)
Ou:
chave X0 X1 X2 X3




bo
b1 b2 b3
38
Funções utilizadas
Para o Espalhamento Baseado em Tabelas é
necessária uma função "hash" que gere uma
seqüência de endereços de "buckets" e uma
função paralela de geração de uma
sequência de k bits, isto é, uma assinatura
digital do registro a partir de uma dada
chave
39
Exemplo (1)
Suponha um arquivo com tamanho de "bucket" igual a 3,
assinaturas digitais com 5 bits (k = 5) e a inclusão de um
registro cuja chave primária é "Maria" num "bucket" lotado
Chave
Assinatura
Em binário
Em decimal
João
00101
5
José
00110
6
Manuel
01000
8
A assinatura da chave "Maria" corresponde a 00010 = 2
Como esta assinatura é menor que a maior do "bucket",
realiza-se a inserção da chave de forma ordenada
Como o "bucket" estava cheio, ocorre transbordamento
40
Exemplo (2)
A maior chave do "bucket" será eliminada e
utilizada como registro separador entre este
"bucket" e o seu sucessor; e, logo após, re-inserida
no arquivo em outro endereço, podendo ocorrer
novo transbordamento
Chave
Assinatura
Em binário
Em decimal
Maria
00010
2
João
00101
5
José
00110
6
Sobrou
Manuel
01000
8
41
Recuperação de Registros (1)
A recuperação é bem mais eficiente que a
inclusão. Neste caso, busca-se o menor
inteiro i tal que assinaturai = tabela[bucketi]
Exemplo
42
Recuperação de Registros (2)
Para assinatura igual a 100
Bucket
85
87
89
Assinatura
0101
1010
1111
É possível ?
Não
Sim
Sim
Motivo
1000>0101
1000<1010
1000<1111
É o menor ?
Prejudicado
Sim
Não
Bucket destino ou de busca
Não
Sim
Não
43
Exclusão de Registros
Na exclusão, efetua-se a busca do registro, o
mesmo é excluído do arquivo e a tabela
atualizada
44
Arquivos Extensíveis
45
Conceito
Em muitas aplicações, o número de registros pode
variar consideravelmente
Arquivos de tamanho fixo, com capacidade para k
registros, com número de registros a incluir muito
próximo de k, possuem alta densidade de
empacotamento e consequentemente, recuperações
mais lentas
Se este número for muito menor que k,
caracteriza-se desperdício de espaço no arquivo
46
Técnicas de Tratamento
Existem técnicas para o tratamento de
arquivos com tamanho indefinido, ou seja,
os arquivos extensíveis, tais como:
"Hashing" (ou Espalhamento) Dinâmico
 "Hashing" (ou Espalhamento) Extensível

47
Espalhamento Dinâmico
48
Espalhamento Dinâmico (1)
Neste tipo de "hashing", existem inicialmente N
células na memória principal, cada qual apontando
para um "bucket" no arquivo
A função "hash" H utilizada, transforma a chave
em um endereço de célula
Cada célula tem atributos filho esquerdo, filho
direito e pai
Os filhos de uma célula são endereços de células
ou de “buckets”
Quando uma célula aponta para um “bucket” seu
outro ponteiro está aterrado
49
Espalhamento Dinâmico (2)
Na busca de um registro calcula-se o “home address” e a
assinatura digital
A célula correspondente ao “home address” é acessada
Caso o filho direito de uma célula seja ponteiro aterrado
seu filho esquerdo apontará para o “bucket” que deve
conter o registro buscado
Caso contrário as células em memória tenderão a formar
uma floresta de árvores binárias cada qual associada a um
“home address”
A busca na floresta continua até encontrar uma célula com
ponteiro direito aterrado (e com ponteiro esquerdo
apontando para um “bucket”)
50
Espalhamento Dinâmico (3)
Para a navegação de busca na floresta, em
cada nível i da árvore (raiz ao nível 1),
verifica-se o bit de ordem i da assinatura
digital desviando para a célula filha mais
velha no caso de bit 0 e para a filha mais
nova em caso de bit 1
51
Espalhamento Dinâmico (4)
Para a busca neste tipo de arquivo a função
"hash" H determina em qual árvore binária
se encontra o registro a recuperar, e a função
B determina, a cada bi, qual o caminho a
seguir nesta árvore (onde i = nível corrente
na árvore binária), ou seja para bi = 0,
escolhe-se a folha da esquerda e, para bi =1,
a folha da direita
52
Inclusão de Registros
Na inclusão de um novo registro, se o "bucket" encontrado
pela busca estiver cheio, ocorre uma partição deste "bucket“
Um novo “bucket” (companheiro ou “buddy”) é alocado
bem como uma nova célula em memória apontando o
“bucket” recém alocado
Aloca-se também outra célula em memória para apontar o
“bucket” que transbordou
A antiga célula associada ao "bucket" que transbordou
passará a apontar para as duas células associadas aos
“buckets” ( o que transbordou e o novo) e estas últimas
apontam para os respectivos “buckets”
Os c registos contidos no "bucket" e o registro a inserir são
redistribuídos entre ambos os "buckets“
“Buddy buckets” são apontados por células irmãs
53
Redistribuição de Registros
O critério para a redistribuição dos registros
de um “bucket”, apontado por uma célula
de nível i, é dado pela função B (assinatura
digital) que determina se cada registro deva
ser alocado no "bucket" da esquerda (bi =
0) ou da direita (bi = 1)
54
Exemplo de Floresta de Índices
Na figura de
baixo vemos a
floresta da figura
de cima após o
transbordamento
do “bucket” 2
55
Exclusão de Registros
Na exclusão de registros deve-se verificar se há
possibilidade de liberação de “buckets”
Isto ocorre quando a soma das populações do
“bucket” que sofreu a exclusão e do seu “bucket”
companheiro (se houver) pode ser contida em um
só “bucket”
Neste caso juntam-se os registros em um só
“bucket”, libera-se o seu companheiro e liberamse as duas células que apontavam para esses
“buckets”
56
“Bucket” companheiro
“Buckets" companheiros são aqueles apontados
por nós externos (folhas da árvore de índices) com
pai comum
Para identificar o “bucket” companheiro basta
verificar, pela árvore binária de índices, a natureza
do outro ponteiro da célula que aponta o “bucket”



Se o ponteiro estiver aterrado não existe companheiro
Se apontar célula não existe companheiro
Se apontar “bucket” este é o companheiro
57
Espalhamento Extensível
58
Conceito
O “Hashing” Extensível é uma evolução do
“Hashing” Dinâmico no qual a floresta de índices
é substituída por um diretório, que é um vetor de
endereços de “buckets” indexado pelo número
binário indicador da posição do elemento do vetor
Calcula-se exclusivamente a assinatura digital da
chave do registro e seus primeiro d bits são o
índice para busca no vetor do endereço de
“bucket”
O "diretório" é uma tabela constituída de 2*d
índices
59
Parâmetros utilizados
Cada “bucket” contém um atributo um
inteiro T considerado "header", que indica
o número de bits iniciais iguais de cada
chave contida no "bucket”
O número d declarado no "diretório" é o
maior dentre os T dos "buckets"
60
Exemplo de “hashing” extensível
61
Inclusão de Registros
Dada a chave para a inclusão e sua assinatura,
comparam-se os d primeiros bits da chave com
cada índice no diretório até obter uma
coincidência
Obtido o índice se obtém o "bucket"
correspondente ao endereço destino (semelhante
ao “home address”)
Havendo espaço disponível a inclusão é efetivada
62
Transbordamento (1)
Se houver transbordamento, aloca-se um novo
"bucket" e os registros contidos no “bucket” que
transbordou e mais o registro a incluir são
redistribuídos entre o “bucket” transbordante e o
novo "bucket" alocado
O contador T é incrementado de uma unidade e o
critério de distribuição continua sendo a
coincidência, em cada “bucket” dos T bits iniciais
de cada chave contida no “bucket” (só que no caso
T está maior do que antes do transbordamento).
63
Transbordamento (2)
Quando um "bucket" com "header" de T bits transborda
ocorre uma partição e os C+1 (C é a capacidade do
"bucket", medida em "slots") registros são dispersados
entre a folha do "bucket" existente e a recém-alocada, de
acordo com o bit de ordem T+1 da assinatura de suas
chaves
Os "headers" dos "buckets" passam a ter T+1 bits
Se d  T +1 a partição é trivial sem necessidade de alterar
a tabela de índices
Se d < T+1 há necessidade de incrementar d, o que dobra a
tabela
Os "buckets" não partidos passam a receber o dobro do
número de ponteiros
64
Atualização do Diretório
Durante as alterações de inclusão as mudanças no
"diretório" que podem ocorrer são:


Se d  T , a única modificação a ser efetuada consiste
em atualizar os ponteiros dos índices do "diretório", ou
seja, um dos índices apontará para o novo "bucket"
Se d < T , e sendo, por hipótese d  T, o valor de d
característico do "diretório" deve ser incrementado de
uma unidade e, com isso, o tamanho do "diretório" será
dobrado, e os ponteiro dos novos índices atualizados
65
Exemplo de “hashing” extensível (1)
•Na figura abaixo, com todos os “buckets” lotados, suponha-se que houve
transbordamento no "bucket" cujos índices são 10 e 11(terceira entrada da tabela)
•Há 4 entradas para quatro “buckets” todos eles com T = 2
•Deseja-se incluir um registro no “bucket com índice 00
•Há transbordamento e como o valor de T já era igual a 2 deve passar para 3
•T>d, logo d vai crescer e a tabela dobra de tamanho
•Passam a existir 8 entradas na tabela e 5 “buckets”
66
Exemplo de “hashing” extensível (2)
•Todos os “buckets” estavam lotados
•Foi incluído um registro com índices são 10
•Foi incluído um registro com índice 00
67
Exclusão de Registros
Na exclusão de registros deve-se examinar o
"bucket"de onde saiu o registro e seu "bucket"
companheiro
Se, após a exclusão, o número de registros em
ambos os "buckets" couber em apenas um, os
“buckets” são concatenados e um deles é
desalocado
Após a conacatenação, o "header" do "bucket"
remanescente é decrementado de 1 unidade
Quando todos os "headers" T forem menores do
que d, d deve ser decrementado reduzindo a tabela
diretório à metade
68
“Bucket” companheiro
São "buckets" companheiros aqueles que
tem a mesma cabeça T e, além disso, as
assinaturas digitais dos registros contidos
em ambos tem T-1 bits iniciais iguais
Para verificar qual o índice do “bucket”
companheiro escolhem-se os T bits iniciais
de qualquer dos registros do “bucket” e se
faz um OU-Exlusivo com 1
69
Exemplo de Utilização de Técnicas
de Acesso Direto
70
Enunciado (1)
Criar um arquivo de acesso direto, com as
seguintes características:
Tamanho de "bucket" = 3;
 Fator de carga a = 80%;
 Função hash igual ao resto da divisão do inteiro
proveniente da digitalização da chave pelo
maior primo igual ou menor do que o número
de "buckets".

71
Enunciado (2)
Determinar o número médio de acessos a
"buckets" na recuperação e comparar as
técnicas de tratamento de transbordamento
por:
endereçamento aberto;
 encadeamento com listas confluentes na área
primária;
 encadeamento com listas separadas em área
independente com "buckets" de tamanho 2.

72
Enunciado (3)
Os registros a processar são 12
A digitalização de suas chaves produz os
inteiros que se seguem:
{38, 27, 13, 17, 43, 7, 8, 22, 82, 40, 16, 25}
Estudar o efeito da substituição de registros
tal que em lugar de 40 existisse 42 e em
lugar de 16 existisse 23
73
Solução
Número de "slots" necessários : 12/0,8 = 15
Número de "buckets" : 15/3 = 5
Função "hash" : H(k)=mod(k,5)
Hi(chave)=mod((Hi-1(chave) + 1),5)
74
Endereçamento Aberto
Primeira Lista de Dados
Chave "Home Address" No.de acessos "Bucket" Transbordou
38
3
1
3
Não
27
2
1
2
Não
13
3
1
3
Não
17
2
1
2
Não
43
3
1
3
Não
7
2
1
2
Não
8
3
2
4
1 vez
22
2
3
4
2 vezes
82
2
3
4
2 vezes
40
0
1
0
Não
16
1
1
1
Não
25
0
1
0
Não
Total
-
-
-
Número médio de acesso = 17/12 = 1,42
75
Endereçamento Aberto
Segunda Lista de Dados
Chave "Home Address" No.de acessos "Bucket" Transbordou
38
3
1
3
Não
27
2
1
2
Não
13
3
1
3
Não
17
2
1
2
Não
43
3
1
3
Não
7
2
1
2
Não
8
3
2
4
1 vez
22
2
3
4
2 vezes
82
2
3
4
2 vezes
42
2
4
0
3 vezes
23
3
3
0
2 vezes
25
0
1
0
Não
Total
-
-
-
Número médio de acesso = 22/12 = 1,83
76
Endereçamento Aberto
Primeira e Segunda Listas de Dados
77
Encadeamento
Primeira Lista de Dados
Chave "Home Address" No.de acessos "Bucket" Transbordou
38
3
1
3
Não
27
2
1
2
Não
13
3
1
3
Não
17
2
1
2
Não
43
3
1
3
Não
7
2
1
2
Não
8
3
2
100
1 vez
22
2
2
94
1 vez
82
2
2
94
1 vez
40
0
1
0
Não
16
1
1
1
Não
25
0
1
0
Não
Total
-
-
-
78
Encadeamento
Segunda Lista de Dados
Chave "Home Address" No.de acessos "Bucket" Transbordou
38
3
1
3
Não
27
2
1
2
Não
13
3
1
3
Não
17
2
1
2
Não
43
3
1
3
Não
7
2
1
2
Não
8
3
2
100
1 vez
22
2
2
94
1 vez
82
2
2
94
1 vez
42
2
3
208
2 vezes
23
3
2
100
1 vez
25
0
1
0
Não
Total
-
-
-
79
Encadeamento
Primeira e Segunda Listas de Dados
80
Download