A L C O R I T W O S
-
D E H A S H I N G P A R A P R O B L F M A S E S P E C f . F I C O STESE SüBYEi'IDA A 0 CORPO ECXXm DA C O O F ~ D E ~ @ ~ DOS PRcGRAMAS DE P & - ~ I . J A ~ Ã o DE ENBNHA- DA UNIVERSIDADE FEDERAI; TX) F I O DE JANEIRO C(3F.IC) PPKI'E r)(?S REQIJISITOS I\=SS&X~ PARA A OBTEF@ TX! CFATJ DE P E S m E24 C ~ G I P S (M.Sc. )
DE SOUZA, JANO MOREIRA
ALGORITMOS DE HASHING PARA PROBLEMAS ESPECQFICOS ( R I O DE J A N E I R O ) 1 9 7 8 . V , 138p. 2 9 , 7 c m ( C O P P E - U F R J , M . S c . , E n g e n h a r i a de S i s t e m a s e ~ o r n ~ u t a ç ã o , 1 9 7 8 ) T e s e
-
Univ. Fed. R i o de J a n e i r o-
F a c . E n g e n h a r i a 1. B a n c o de D a d o s I. COPPE/UFRJ 11. A l g o r i t m o s de H a s h i n g para Problemas E s p e c í f i c o s .Ã MARIA GRACINDA e AOS MEUS AMIGOS
iii
AGRADECIMENTOS
Ao p r o f e s s o r Estevam G i l b e r t o de Simone p e l a o r i e n t a ç ã o e i n c e n t i v o ; ao p r o f e s s o r ~ o ã o L i z a r d o de ~ r a ú j o p e l o a p o i o , o r i e n t a ç ã o e p e l o c r é d i t o na e s c o l h a do tema; a o s p r o f e s s o r e s Antonio A l b e r t o F . de O l i v e i r a , Dina Feigen - baum Cleiman e Nelson Maculan F i l h o p e l o i n c e n t i v o ; a o s a l u - nos do Programa, turma de 1 9 7 6 que a t r a v é s do questionamen- t o dos métodos e x i s t e n t e s , motivaram o p r e s e n t e t r a b a l h o .
RESUMO
É feita inicialmente uma exposição extensiva dos métodos existentes para transformação de chaves em ende - reços e para resolução das colisões, apresentando os algorit
-
mos principais. Os capítulos I1 e I11 foram redigidos visan-
do sua utilização como texto de cursos de pós-graduação so- bre teoria e métodos de "hashing".Em seguida, partindo do pressuposto que me- lhor eficiência seria alcançada considerando-se as caracte- rísticas desejáveis de algoritmos para manuseio de arquivos sob um ponto de vista prático de projeto, efetuou-se o le- vantamento das principais propriedades que definem o uso de arquivos e verificou-se até onde os algoritmos conhecidos sa -
tisfazem cada uma dessas características e suas combinações principais.
Com tal diagnóstico foram desenvolvidos 14 novos algoritmos que atepdem de forma eficiente aos proble- mas especificados, excetuando os requisitos de ordenação e alocação dinâmica de memória que não foram estudados. Alguns dos novos algoritmos permitiram inclusive, soluções mais efi
-
cientes para problemas considerados resolvidos no diagnósti- co.Todos os algoritmos são apresentados de forma padronizada e para os novos foram efetuadas intensas simula- ções para determinação de seus comportamentos.
T h i s t h e s i s p r e s e n t s i n i t i a l l y a s u r v e y 05 t h e e x i s c i n g a c t h o d s f o r k e y - t z - a d d r e s s t r a n s f o r m à t i a n s and f o r t h e t r e a t m e n t c f c o l i i s i o n s , showing t h e more i n p c r t a n t
o l g o r i t h m s . C h o ~ t e r s I1 a n o III were w r i t t e n h a v i n i n mind t h e i r p o s s i b l e u k i l i a s t i c n a s a t e x t f o r g r c d u a t e c o u r s e s i n h a s h i a g n e t h c d s a n 6 t h e o r y . W e n e x t a n a l y z e the a l g o r i t h m s u n d e r c o n s i d e r a t i o n , frcm t h e p o i n t o f view o ? d e s i r a b l e p r o p e r t i e s f c r t h e a c t u a l d ê s i g n c f f i L e h a n d l i n ç s y s t e r n s p f o r s p e c i f i c a p p h i c a t i o n s . A f t e r t h a t a a i y s i s , 1 4 new a l g o r i t h m s a r e
.-.
p L e s e n k e d ,-
x h i c h e f f i z i e n t f y s o l v e t h e p r o p s e d p r o C i e n s , e x c e p t p o s s i b l y f c i the ç o r t i n ç anò Oynamic a l l c c a t i o n r e q u i s i t e s ,which :gere n o t c o n s i d e r e ã .
In s o m c a s e s , f o r p r c b l e m s a l r e a a y s o l v e d by
algorithms found in i h e l i t e r a t a r e w e show t h a t s o n e of t k e new c l ~ a r i t h m s o r e more e f f i c i e n t t k a n t h e b e s t c n e s s r e v i c u s i y kzowr,.
Ali the a l g o r i t h m s are p r e s e n t e d ix a s t a n d a r d f o r n , f c r e õ s e of c o m p a r i s c n . A l l o f t h e n w e r e e x t e n s i v e l y s i m u l z t e d , anã t h e r e s ~ i t s
of
t h e s i m u l a t i o n shown.Relação dos Algoritmos
. . .
5 I1.
CONCEITOS BÃSICOS. . .
7
1 ~efinição do Método de Hashing 7
.
.
. . .
2 organização do Arquivo
. . .
9.
.3 ~ o t a ç ã o Utilizada
. . .
13.
.
I11
.
HIST~RICO E REVISÃO DA LITERATURA. . .
18.
1 . Métodos para TransformaçÕes de Chaves emEndereços
. . .
18.
2 . Tratamento de colisões por Encadeamento.
23.
3 . Tratamento de ~olisões por EndereçamentoAberto
. . .
314 ~ n á l i s e Comparativa dos Métodos
. . .
50.
..
5 . Diagnóstico de Problemas sem Algoritmos Eficientes. . .
IV.
NOVOS ALGORITMOS PARA RESOLVER PROBLEMASESPECT-
FICOS
. . .
. . .
.
1 . ~presentação. . .
2 Caso 1.
.
. . .
.
3 . Caso 2 4 Caso3
.
.. . . ‘ . . .
. . .
.
5 . Caso 4. . .
.
6 . Problemas PropostosV . DETALHES P A W IMPLEMENTAÇÃO EM MEMORIA EXTERNA
.
. . .
A p a r t i r do e s t u d o e e n s i n o dos a l g o r i t m o s de Busca em Arquivo e de a l g u n s problemas p r á t i c o s e n f r e t a d o s p o r c o l e g a s na e s t r u t u r a ç ã o de t a b e l a s d e símbolos e mnemônicos em compiladores e montadores o r a e m desenvolvimento no Pro- grama de Engenharia de S i s t e m a s e ~ o m p u t a ç ã o , nos v e i o a cons c i ê n c i a de q u e , p a r a uma s é r i e de problemas p r á t i c o s o s a l g o - r i t m o s e x i s t e n t e s eram i n e f i c i e n t e s , ou mesmo i n a p l i c á v e i s .
O t r a b a l h o s u r g i u de um problema r e a l de duas p e s q u i s a s sendo d e s e n v o l v i d a s no programa, um montador e simu
-
l a d o r MIX " t i m e - s h a r i n g " e um compilador de uma linguagem ti- po PL; onde o melhor método conhecido p a r a a o r g a n i z a ç ã o d a s t a b e l a s de símbolos e mnemônicos não l e v a v a em c o n t a uma i n - formação i m p o r t a n t e a r e s p e i t o d a s chaves: s u a p r o b a b i l i d a d e de r e f e r ê n c i a . Da u t i l i z a ç ã o d e s t a informação s u r g i u o p r i - meiro a l g o r i t m o , que s e mostrou mais e f i c i e n t e do que o a n t i - go, t a n t o com dados com d i s t r i b u i ç ã o t e ó r i c a de p r o b a b i l i d a - d e s como com dados r e a i s mostrados em muitos programas e s c r i - t o s em " a s s e m b l e r " do computador MITRA-15.Da r e s o l u ç ã o do p r i m e i r o problema, pudemos con
-
c l u i r que o s a l g o r i t m o s conhecidos eram de t a l forma g e r a i s que desprezavam informações m u i t a s v e z e s d i s p o n í v e i s , ou e s t i-
máveis n a s a p l i c a ç õ e s e s p e c í f i c a s .Esse enfoque " g e r a l " dos a l g o r i t m o s pode s e r a t r i b u i d o , p e l o menos em p a r t e , ao f a t o de que a m a i o r i a da p e s q u i s a na á r e a s e o r i g i n o u n a s e q u i p e s dos f a b r i c a n t e s d e
equipamento, que p o r f i l o s o f i a de c o m e r c i a l i z a ç ã o , tentam ge
-
n e r a l i z a r ao máximo o s s e u s p r o d u t o s , mesmo5s
c u s t a s de grande i n e f i c i ê n c i a na m a i o r i a d a s a p l i c a ç õ e s .Considerando o a l t o c u s t o d a s máquinas no Bra
-
s i l , e o f a t o d e s s a s serem i m p o r t a d a s , c u s t a n d o d i v i s a s p r e - c i o s a s ao p a í s , pareceu-nos de extrema i m p o r t a n c i a que s e f i z e s s e um e s t u d o mais d e t a l h a d o dos problemas e x i s t e n t e s , observando q u a i s d a s s u a s c a r a c t e r l s t i c a s s ã o d e t e r m i n a n t e s no t i p o de a l g o r i t m o a empregar, e , combinando-se e s t a s ca- r a c t e r í s t i c a s , que t i p o s de problemas s e delineavam. Desta forma d e s c o b r i u - s e , p e l o caminho i n v e r s o , que c e r t a s a p l i c a - ç õ e s não tinham s o l u ç ã o e f i c i e n t e conhecida e usavam métodos t o t a l m e n t e d i f e r e n t e s d a q u e l e s que g o s t a r í a m o s d e u t i l i z a r p o r r a z õ e s de e f i c i ê n c i a , simplesmente porque o s métodos ti- nham r e s t r i ç õ e s a e s t a ou à q u e l a c a r a c t e r í s t i c a .Algumas c a r a c t e r í s t i c a s que podem d e t e r m i n a r o método de busca a s e r u t i l i z a d o , s ã o a s s e g u i n t e s :
-
Baixo tempo médio p a r a b u s c a s com s u c e s s o .-
Baixo tempo médio p a r a buscas sem s u c e s s o .-
Baixo tempo médio p o r i n s e r ç ã o .-
Arquivo e s t á t i c o em termos de i n s e r ç ã o .-
Arquivo e s t á t i c o em termos de remoção.-
Arquivo dinâmico em termos de i n s e r ç ã o .-
Arquivo dinâmico em termos de remoção.-
L o c a l i z a ç ã o d a s chaves em memória i n t e r n a .-
L o c a l i z a ç ã o d a s chaves em memória e x t e r n a ou v i r t u a l .-
P r o b a b i l i d a d e s d i f e r e n t e s e c o n h e c i d a s " a p r i o r i ".
-
P r o b a b i l i d a d e s d i f e r e n t e s mas v a r i á v e i s com o tempo.-
Tempo de r e s p o s t a l i m i t a d o ( p i o r c a s o g a r a n-
t i d o e c o n h e c i d o ) .-
Arquivo ordenado.-
locação
dinâmica de espaço.-
S i m p l i c i d a d e de programação.-
Grande a p r o v e i t a m e n t o de e s p a ç o .Combinando e s s a s c a r a c t e r l s t i c a s , o b t e r í a m o s uma grande q u a n t i d a d e de problemas, que e x i g i r i a m , d e n t r o do n o s s o enfoque uma grande q u a n t i d a d e de a l g o r i t m o s e s p e c í f i - c o s . Selecionamos a l g u n s problemas que consideramos OS mais i m p o r t a n t e s , procuramos d e t e r m i n a r q u a i s j á dispunham d e s o l u ç ã o e f i c i e n t e e q u a i s não; d e n t r e e s s e s selecionamos a q u e l e s que se i d e n t i f i c a v a m com problemas r e a i s e buscamos s o l u ç õ e s . Neste t r a b a l h o s ã o a p r e s e n t a d a s s o l u ç õ e s p a r a d i - v e r s o s d e s s e s problemas e q u e , afortunadamente também r e s o l - vem a l g u n s problemas já c o n s i d e r a d o s com s o l u ç ã o s a t i s f a t ó - r i a , d e uma forma melhor do que e s t a s .
Todas s o l u ç õ e s s ã o c a l c a d a s s o b r e um metodo de t r a n s f o r m a ç ã o de chaves ( " h a s h i n g " ) , p o r s e r o método que a p r e s e n t a melhores p o s s i b i l i d a d e s t e ó r i c a s , j á que o u t r o s m é
-
t o d o s g e r a l m e n t e u t i l i z a m e s t r u t u r a s de á r v o r e c u j o l i m i t e t e ó r i c o i n f e r i o r é da ordem l o g m,
onde - m é o número de e l e-
mentos na t a b e l a .Anexo a e s t a i n t r o d u ç ã o , e n c o n t r a - s e uma l i s t a de t o d o s o s a l g o r i t m o s r e f e r e n c i a d o s n e s t a t e s e .
ANEXO Â INTRODUCÃO
RELAÇÃO DOS ALGORITMOS
L i s t a s c o a l e s c e n t e s . L i s t a s i n d e p e n d e n t e s . L i s t a s i n d e p e n d e n t e s com encadeamento em á r e a s e p a r a d a . End. a b e r t o v i s i t a l i n e a r .
emoção
com v i s i t a l i n e a r . ~ é t o d o de B r e n t . Hashing l i m i t a d o .R e a r r a n j o com c u s t o médio mínimo.
R e a r r a n j o com c a r r e i r a completa, d e c i s ã o p e l o comprimen- t o da c a r r e i r a . R e a r r a n j o com c a r r e i r a completa, d e c i s ã o p e l o c u s t o de c a r r e i r a . Hashing l i m i t a d o , r e a r r a n j o c o n s t a n t e , melhor t r o c a e de - c i s ã o p e l o comprimento da c a r r e i r a . Hashing l i m i t a d o , r e a r r a n j o o c a s i o n a l , melhor t r o c a e d e c i s ã o p e l o comprimento da c a r r e i r a . Hashing l i m i t a d o , r e a r r a n j o o c a s i o n a l , p r i m e i r a t r o c a . Hashing l i m i t a d o , r e a r r a n j o c o n s t a n t e , melhor t r o c a e de - c i s ã o p e l o c u s t o . Hashing l i m i t a d o , r e a r r a n j o o c a s i o n a l , melhor t r o c a e d e c i s ã o p e l o c u s t o .
Hashing com l i m i t e dinâmico.
l h o r t r o c a e d e c i s ã o p e l o comprimento da c a r r e i r a .
18. Hashing com l i m i t e dinâmico, r e a r r a n j o o c a s i o n a l , melhor t r o c a e d e c i s ã o p e l o comprimento da c a r r e i r a .
1 9 . Hashing com l i m i t e dinâmico, reaxran-jo o c a s i o n a l e p r i - meira t r o c a .
11. CONCEITOS BÃSICOS
11.1. DEFINIÇÃO DO
METODO
DE HASHING --S e j a o c o n j u n t o K = { k l , k 2 ,
...,
k1
d e c h a v e s mque Únicamente i d e n t i f i c a m uma i n f o r m a ç ã o a s e r armazenada ou r e c u p e r a d a , e E = { e l , e 2 , . . . , e n } O c o n j u n t o d e e n d e r e ç o s d e p o s i ç õ e s d e memória ( i n t e r n a ou e x t e r n a ) onde s e pode g u a r d a r uma ou m a i s i n f o r m a ç õ e s ( p o r s i m p l i c i d a d e , uma i n f o r m a ç ã o )
.
Normalmente e i = i,
i = O , l , . . . , n - l 'O método f u n c i o n a r i a d e uma forma i d e a l se e n c o n t r á s s e m o s uma f u n ç ã o h ( k ) t a l q u e : h ( k . )
+
h ( k j ) ++ kP
k j i com h ( K i ) ~ l O , n - l I , / i 1 D e s t a forma t e r í a m o s uma " f u n ç ã o d e i n d e x a ç ã o " e b a s t a r i a c o l o c a r k n a p o s i ç ã o h ( k i ) ,Ji
quando do armazena i - mento, ei r
b u s c a - l o n o mesmo l u g a r n a r e c u p e r a ç ã o . I n f e l i z m e n t e , é m u i t o d i f í c i l d e s c o b r i r a fun- m ç ã o h , p o i s e x i s t e m m p o s s í v e i s f u n ç õ e s d e K e m E , mas somen-
1 t e m. fornecem 1 o c a l i z a ç Õ e s d i s t i n t a s p a r a c a d a Ki.Uma s a í d a que s e r i a a i n d a b a s t a n t e boa s e r i a d e s p e r d i ç a r um pouco de e s p a ç o f a z e n d o n > m , p o i s a s s i m t e r í
m
amos
n
p o s s í v e i s f u n ç õ e s e (n! )/
(n-m)!
f u n ç õ e s a d e q u a d a s .Mesmo com e s s e r e c u r s o é extremamente t r a b a l h o
-
s o encontram uma d e t a i s f u n ç õ e s , se não q u i s e r m o s d e s p e r d i ç a r e s p a ç o demais. Como exemplo, K N U T H ~,
s e t i v é s s e m o s 3 1 cha-50 v e s (m=31) e 4 1 e n d e r e ç o s (n=4l.)
,
t e r í a m o s c e r c a de 1 0 p o s s i v e i s f u n ç õ e s p a r a apenas 1 0que fornecem i n d e x a ç ã o ; ~ ~ ou s e j a , somente 1 em cada 1 0 milhões s e r á a p r o v e i t á v e l . Ape- s a r de e x i s t i r e m a l g o r i t m o s que obtém t a l f u n ç ã o , e l e s podem f o r n e c e r um v a l o r de-
n muito grande e s ã o muito t r a b a l h o s o s , s ó t e n d o a p l i c a ç ã o e m a l g u n s c a s o s , e p a r a t a b e l a s muito pe-6
quenas, v i d e S P R U G N O L I ~ e GRENIEWSKI
.
Tornaremos a e s t e i- tem no c a p i t u l o 111.4
Uma observação i m p o r t a n t e n e s t e p o n t o , e que o c o n j u n t o de chaves K nem sempre é t o d o conhecido "a p r i o r i "
( a r q u i v o e s t á t i c o ) , sendo que e s t a s podem i r chegando a o s poucos p a r a serem armazenadas e podem, eventualmente serem a t é r e t i r a d a s do a r q u i v o .
D i a n t e da d i f i c u l d a d e e m s e o b t e r uma função de i n d e x a ç ã o , pensou-se e m e n c o n t r a r uma função h ( k ) onde p a r a algumas poucas chaves
ou s e j a , que rnapeie K em E de uma forma r a z s á v e l m e n t e u n i f o r
-
me. Chamaremos e s t e e v e n t o de " c o l i s ã o " e diremos que a schaves Ki e K s ã o 'sinonimos'. j
D e uma forma g e r a l o método c o n s i s t e de duas p a r t e s : a p r i m e i r a , e s c o l h e r uma função
-
h que nos o b r i g u e a poucas c o l i s õ e s , e a segunda r e s o l v e r e s s a s c o l i s õ e s , p o i s s e duas ou mais chaves s ã o mapeados p a r a um e n d e r e ç o onde s ó cabe uma, deve-se e s c o l h e r , de alguma forma, o u t r o l u g a r pa- r a a s r e s t a n t e s .11.2. ORGANIZAÇÃO DO ARQUIVO
O elemento b á s i c o do a r q u i v o é o r e g i s t r o , que
é um agregado l ó g i c o d e informações. Podemos i d e n t i f i c a r
t r ê s
elementos não o b r i g a t ó r i a m e n t e d i s t i n t o s , em um r e g i s - t r o que s ã o : chave, informação de c o n t r o l e e informação.1) CHAVE
-
é um campo numérico, a l f a b é t i c o ou a l f a n u m é r i c o que unicamente i d e n t i f i c a um r e g i s t r o . Em um a r q u i v o podemos g u a r d a r a chave j u n t o com a informação, f i g u - r a ( 1 1 . 2 - 1 ) ou podemos g r u p a r t o d a s a s chaves e , a cada uma a s s o c l a r um a p o n t a d o r p a r a onde r e a l m e n t e e s t á a informação, f i g u r a ( 1 1 . 2 - 2 ) . Em c a s o s onde a chave é de tamanho v a r i á - v e l , pode s e r i n t e r e s s a n t e em cada p o s i ç ã o e n d e r e ç á v e l c o l o - c a r somente d o i s campos, o p r i m e i r o com o comprimento da cha- v e , e o segundo com o a p o n t a d o r p a r a o s e u começo em uma á r e a l i v r e onde s e colocou t o d a s a s chaves contíguamente, f i g u r a(11.2-3)
.
No c a s o d e chaves l o n g a s ou quando a p r o b a b i l i - dade de i n s u c e s s o f o r g r a n d e , podemos u t i l i z a r a s s e g u i n t e s t é c n i c a s p a r a melhorar a e f i c i ê n c i a :
a ) Na p r i m e i r a , se u s a uma função h2 ( k )
,
que pode ser um subproduto d e h l ( k ) , p a r a c a l c u l a r um código cha-14
mado de " a s s i n a t u r a " p o r HARRISON e s u g e r i d o primeiramente p o r M O R R I S ~ ~ . Esse c ó d i g o é armazenado j u n t o com a chave ou, como no c a s o a n t e r i o r , j u n t o com o s campos comprimento e a- p o n t a d o r , e s ó s e compara a chave que s e q u e r b u s c a r com a
chave armazenada se as assinaturas coincidirem.
b) A segunda é usada em listas encadeadas in- dependentes, vide seção (111.2 )
,
e aplica uma série de fun ~ Õ e s hi (k),
i = 112, t PO
( hi (k) < t, onde t é o núme- ro de bits da assinatura da lista, a cada chave da lista. 0s bits da assinatura, colocada na cabeça da lista, correspon- dentes aos hi são ligados, figura (11.2-5).Na busca de uma chave Kx, só se percorrerá a lista se a assinatura tiver bits ligados em todas as posi
-
ções hi(Kx), i = 1,2,...,
t,
condição necessária mas não su-14
ficiente para que Kx pertença à lista, HARRISON afirma que a maior quantidade de informação será guardada quando o núme - ro de bits ligados e o número de bist desligados forem em mé
-
dia iguais na assinatura.C) B L O O M ~ ~ sugere algumas alternativas pare- cidas e, em uma delas é feita uma assinatura do arquivo in- teiro que fica em memória interna e, somente se acessará o arquivo realmente, se a assinatura preencher as condições ne
-
cessárias. Isso é particularmente Útil em aplicações onde a probabilidade de busca sem sucesso for alta.2 ) INFO-ÇÃO
-
A
informação ocupa um ou mais campos, numéricos, alfanuméxicos ou alfabéticos, e inclue a chave. Em alguns casos a informação é somente a chave. Os campos podem ser de tamanho fixo ou variável,e, o número de campos pode ser também variável. Campos de tamanho variável podem ser alocados das seguintes formas: a) Superdimensiona-do o r e g i s t r o . b) Guardando na á r e a endereçada s e u tamanho e e n d e r e ç o , como fizemos p a r a a s chaves. c ) Usando á r e a s de tamanho f i x o encadeadas.
Quando o número de campos é v a r i á v e l teremos um c o n t a d o r de campos e um d e s c r i t o r p a r a cada campo e pode- remos t e r : a ) Um r e g i s t r o superdimensionado de tamanho f i x o . b ) Cada campo é um nó de uma l i s t a encadeada.
Campos de tamanho v a r i á v e l s ã o muito comuns em informações a l f a n u m é r i c a s , p r i n c i p a l m e n t e quando s e u t i l i -
zam t é c n i c a s de compactação com c ó d i g o s de tamanho v a r i á v e l com a f r e q u ê n c i a , e (ou) s u p r e s s ã o de b r a n c o s ou z e r o s , P I E - 16 TRACCI
.
Número v a r i á v e l de campos em um r e g i s t r o é en-
c o n t r a d o quando não s e d e s e j a s u p e r d i m e n s i o n a r o r e g i s t r o , e há d i v e r s a s o c o r r ê n c i a s d e um c e r t o t i p o de campo de um r e - g i s t r o . Exemplo: uma p e s s o a pode t e r d i v e r s o números d e t e - l e f o n e s , ou uma máquina pode t e r um número v a r i á v e l d e p e ç a s .3 ) INFORMAÇÃO DE CONTROLE
-
são
t o d o s o s cam - pos que não contém informação s u p r i d a p e l o u s u á r i o .E
r e c o - mendável que e s t e também não t e n h a a c e s s o a e l a . Exmeplos de informação de c o n t r o l e s ã o o s a p o n t a d o r e s , o s campos d e tama- nho dos campos, a s s i n a t u r a , e t c . . ...,
m m
INE'ORMA(y0Reg. O
Reg.
N-i
-
Figura 11-2-1
ASSIN. TAM. PSONT.
7
6 3 4 F i g u r a 11.2-4 Assinatura da l i s t a 0.ASSIN. CHAVE APONT CHAV APONT CHAV APONT
Figura 11.2-5
x5
1
K111.3. NOTAÇÃO U T I L I Z A D A
D i v e r s a s o b s e r v a ç õ e s s e r ã o f e i t a s n e s t e ponto r e f e r e n t e s
5
n o t a ç ã o u t i l i z a d a nos c a p í t u l o s p o s t e r i o r e s d e s-
t e traba1h.o. Não pretendem s e r e x a u s t i v o s mas apenas f a c i l i 3 t a r ao l e i t o r a compreensão do t e x t o .L . Notação dos a l g o r i t m o s
~ s t ã o e s c r i t o s em linguagem semelhante ao ALGOL, porém com a s s e g u i n t e s a l t e r a ç õ e s :
a ) a s v a r i á v e i s não s ã o d e c l a r a d a s , e x c e t o q u a n t o se d e s e j a r s u a c o n d i ç ã o l o c a l ; b ) a s p a l a v r a s r e s e r v a d a s e s t ã o g r a f a d a s em minfiscula s u b l i n h a d a s e o s i d e n t i f i c a d o r e s em m a i ú s c u l a s ; c ) o s c o m e n t á r i o s s ã o do t i p o "scape comment" e s e u d e l i m i t a d o r é " % " ou do t i p o "comment" do ALGOL; d ) m u i t a s v e z e s não s ã o e x p l i c i t a d a s c e r t a s
-
funções ou s u b r o t i n a s c u j o funcionamento não é e s s e n c i a l a compreensão do a l g o r i t m o ;e ) da mesma forma, r ó t u l o s em comandos de d e s - v i o p a r a t r e c h o s não e s s e n c i a i s s ã o e x p l i c i t a d o s mas não de- c l a r a d o s e o s t r e c h o s não constam do a l g o r i t m o ; f ) procurou-se nomear o s i d e n t i f i c a d o r e s de modo a c l a r i f i c a r o s e n t i d o da v a r i á v e l ou t r e c h o do p r o g r a - ma a que s e referem; g ) o s s u b s c r i t o s S ~ Qd e l i m i t a d o s p o r
'
( )'
,
o s i n a l d e a t r i b u i ç ã o é'
: ='
; h ) em c a s o d e q u a l q u e r s e n t e n ç a da linguagemc u j o s e n t i d o não e s t e j a a q u i e x p l i c i t a d o , p r e v a l e c e s u a d e f i - n i ç ã o em ALGOL.
2 . ~ o t a ç ã o p a r a a s c o l i s õ e s em t a b e l a
F a t o r fundamental p a r a a compreensão do f u n c i o - namento dos a l g o r i t m o s f o i a c r i a ç ã o de uma n o t a ç ã o c l a r a pa- r a o p e r c u r s o de busca p o r l u g a r vago ou deslocamento d e cha- v e s na t a b e l a . Optamos p e l o esquema a b a i x o com o s e g u i n t e s i g n i
F i g u r a 11.3.1
a ) a s l i n h a s h o r i z o n t a i s e v e r t i c a i s r e p r e s e n - tam o s e n d e r e ç o s na t a b e l a ; como a s t a b e l a s s ã o , em g e r a l , c o n s i d e r a d a s c i r c u l a r e s uma l i n h a pode r e p r e s e n t a r uma O U mais " v o l t a s " na t a b e l a .
b ) na verdade a s l i n h a s h o r i z o n t a i s e v e r t i c a - i s s ã o t r e c h o s de um mesmo r e f e r e n c i a l . Por exemplo, supondo
-
se uma t a b e l a com 9 e n d e r e ç o s podemos t e r :F i g u r a 11.3-2
c ) o s a r c o s r e p r e s e n t a m s a l t o s n e s s e r e f e r e n c i - a l , d e mesmo tamanho se n a m e s m a l i n h a , mas d e tamanhos p o s s í v e l m e n t e d i v e r s o s em l i n h a s d i v e r s a s :
I
1
C
-
F i g u r a 11.3-3
d ) e n d e r e ç o s não podem se r e p e t i r n a mesma n h a s d i f e r e n t e s .
e ) o s e n d e r e ç o s s ã o , normalmente, o m i t i d o s f a v o r d a i n d i c a ç ã o d e q u a i s c h a v e s o s ocupam:
f ) l u g a r e s vagos s ã o i n d i c a d o s p o r x:
F i g u r a 11.3-5 ki kzz kil- K3 5
g ) chaves em começo de c a r r e i r a s de s a l t o s ho- r i z o n a t i s e v e r t i c a i s s i m u l t a n e o s e s t ã o e m s e u "home-address", ex: h ( K ) = E1 1 5 F i g u r a 11.3-6 3 . Simbologia A menos da r e f e r ê n c i a e x p l i c i t a no l o c a l , no d e c o r r e r do t e x t o fixamos: Ki OU ki
-
v a l o r numérico ou a l f a n u m é r i c o da chave í n d i c e i . Ei OU e-
v a l o r do e n d e r e ç o de í n d i c e i . ih ( k i )
-
v a l o r da função de 'hashing" p a r a a chave kin
-
comprimento da t a b e l a (número t o t a l de e n d e r e ç o s ) . m-
número de elementos do c o n j u n t o de chaves à i n s e -r i r ou número de chaves p r e s e n t e s na t a b e l a . h
-
"nu11 l i n k " , a p o n t a d o r v a z i o .a
-
f a t o r d e ocupação d a t a b e l a , i g u a l ao número de cha-
v e s p r e s e n t e s d i v i d i v o p e l o comprimento da t a b e l a .'m
-
número médio de comparações p a r a busca-
com s u c e s s o d a s-
m chaves na t a b e l a .'A
-
número médio de comparações p a r a busca-
sem s u c e s s o e m t a b e l a contendom
- chaves.h . ( K i )
-
v a l o r da j-ésima função de h a s h i n g p a r a a chave K3 i
mod
-
r e s t o da d i v i s ã o i n t e i r as
-
número de s a l t o s de uma chave após c o l i s ã o1x1
-
maior i n t e i r o c o n t i d o emx
r e a lTXI
-
menor i n t e i r o que contemx
r e a lHk
-
k-ésimo número harmonico de p r i m e i r a ordem-
p r o b a b i l i d a d e de r e f e r ê n c i a à chave Kj
C
-
comprimento da c a r r e i r a da chave K,
i g u a l ao núme-j j
r o de s a l t o s e n t r e s u a p o s i ç ã o r e a l e s e u "home- a d d r e s s "
+
1.111.1. &TODOS PARA T ~ N S F O R M A Ç Õ E S DE CHAVES EM ENDE- ~ Ç O S
Segundo o que dissemos no c a p i t u l o 11, e que é
consenso e n t r e o s a u t o r e s c o n h e c i d o s , uma boa função d e h a s h i n g deve o c a s i o n a r o mínimo de c o l i s õ e s e , p a r a a r q u i v o s em memória i n t e r n a deve s e r também r á p i d a de c a l c u l a r . ~ e Ó r i
-
camente é i m p o s s í v e l g e r a r números uniformemente d i s t r i b u i d o s a p a r t i r de dados v i c i a d o s , e as chaves g e r a l m e n t e tem ter- t o s p a d r õ e s ; mas, na p r á t i c a é p o s s ~ v e l o b t e r - s e e n d e r e ç o s r a
-
zoavelmente bem d i s t r i b u i d o s , com funções r e l a t i v a m e n t e s i m - p l e s ; e algumas v e z e s é p o s s i v e l t i r a r p r o v e i t o de alguma não-
a l e a t o r i e d a d e dos dados e o b t e r - s e uma d i s t r i b u i ç ã o p a r a o s e n d e r e ç o s "mais uniforme" do que a t e ó r i c a p a r a números a l e a -2 t ó r i o s , KNUTH
.
i3
i m p o r t a n t e n o t a r que não e x i s t e função " ó t i - ma" no s e n t i d o de que a p r e s e n t e d i s t r i b u i ç õ e s uniformes p a r a q u a i s q u e r dados. A e s c o l h a d a função depende dos dados que vamos armazenar ( c h a v e s ) , da máquina que se p r e t e n d e u t i l i z a r , da linguagem em que s e v a i programar e d a o r g a n i z a ç ã o do a r - q u i v o que f o r e s c o l h i d a (memória i n t e r n a x d i s c o , l i s t a s e n c a - deadas x endereçamento a b e r t o ) .8
B U C H H O L Z ' ~ c o n j e c t u r o u e L U M comprovou e x p e r i
-
mentalmente que a d i s t r i b u i ç ã o de e n d e r e ç o s "mais uniforme" não o c o r r e quando s e u s a uma função que g e r e e n d e r e ç o s a l e a t ó-
r i a m e n t e , i n d e p e n d e n t e dos v i c i o s dos dados o r i g i n a i s , e s i m quando s e aproveitam exatamente e s s a s p r o p r i e d a d e s .
A s e g u i r descreveremos o s p r i n c i p a i s métodos p a r a uso g e r a l , e d e p o i s iremos comentá-los brevemente.
III. 1.1. DIVISÃO
-
K N U T H ~,
L U M ~ . é simplesmenteh ( k i ) + ki mod n onde e n é i n t e i r o e p o s i t i v o , de p r e f e r ê n c i a
8
um número primo. Segundo LUM
,
6
s u f i c i e n t e que n não t e n h a d i v i s o r e s menores de 2 0 p a r a que s e obtenha bons r e s u l t a d o s .2 8
1 1 1 . 1 . 2 . M E I O DO QUADRADO
,
KNUTH e LUM.
Neste méto- -d o , a chave K i é m u l t i p l i c a d a p o r s i mesma e s ã o tomados [log2nl b i t s do c e n t r o do p r o d u t o que ocupa duas p a l a v r a s d e tamanho w
,
o que s ó p e r m i t e e n d e r e ç a r d i r e t a m e n t e , t a b e -l a s onde - n é uma p o t ê n c i a de 2 . A i d é i a a q u i é que o s b i t s mais c e n t r a i s do p r o d u t o dependem p r a t i c a m e n t e da chave t o d a ,
f i g u r a (11.1-1)
.
F i g u r a 11.1-1
111.1.3. MULTIPLICAÇÃO
,
K N U T H ~ , n e s t e método e s c o l h e - mos uma c o n s t a n t e i n t e i r a - A,
primo com o tamanho d a p a l a v r ado computador
-
w,
e tamaremos o s Llog nJ b i t s mais c e n t r a i s 2 d a metade d i r e i t a do p r o d u t o A x K i,
f i g u r a ( 1 1 . 1 - 2 ) .h ( K i )
F i g u r a 1 1 . 1 - 2
8
1 1 1 . 1 . 4 . DOBRAMENTO
,
LUM,
a q u i a chave Ki é d i v i d i - d a em p a r t e s de tamanho Liog2nJ,
e x c e t o a ú l t i m a , e e s t a s p a r t e s s ã o s u p e r p o s t a s com soma ou com "ou e x c l u s i v o " , sendo que e s t e Último a p r e s e n t a a vantagem de não c a u s a r t r a n b ô r d o A s u p e r p o s i ç ã o pode ser f e i t a de duas formas, dobrando-se a chave como um f o r m u l á r i o c o n t í n u o , f i g u r a (11.1-3a) ou como f o l h a s de p a p e l s o l t a s , f i g u r a ( 1 1 . 1 - 3 b ) .i n t e r v a l o [O, 2 1 ' 0 ~ 2 ~ ~
-11
,
l o g o , p a r a serem usados d i r e t a m e n t eé
n e c e s s á r i o que o tamanho da t a b e l a s e j a um p o t ê n c i a de 2 , do c o n t r á r i o teremos que tomar mod n.b ) No p r i m e i r o método, o tamalho da t a b e l a não
-
p o d e r á ser uma p o t e n c i a de 2 e d e v e r á ser um número primo2 8
KNUTH ou não t e r d i v i s o r e s menores do que 20, LUM
.
c ) O método de DOBRAMENTO é e s p e c i a l m e n t e u t i - l i z a d o quando a s chaves s ã o m a i o r e s do que uma p a l a v r a do com
-
p u t a d o r , não podendo e n t ã o serem a p l i c a d o s o s métodos d e 1 a3 . P a r a melhores r e s u l t a d o s pode-se a p l i c a r um dos t r ê s p r i - meiros métodos após o dobramento.
d ) De experimentos com a r q u i v o s r e a i s de d i v e r 8
s o s t i p o s e tamanhos, LUM r e t i r o u a s s e g u i n t e s conclusÕes:em
-
b o r a o método do meio-do-quadrado f o r n e ç a melhores r e s u l t a d o s em média, p a r a a l g u n s a r q u i v o s e l e se comporta muito mal en- q u a n t o o método da DIVISÃO deu em média r e s u l t a d o s q u a s e t ã o b o n s , sendo que d e uma maneira r a z o á v e l em t o d o s e l e s .e ) Dependendo da v e l o c i d a d e de execução d a s i n s t r u ç õ e s , pode não s e r i n t e r e s s a n t e u s a r o método da d i v i - s ã o , escolhendo-se um dos o u t r o s .
f) C L A P S O N ~ ~ e s t u d o u d e t a l h a d a m e n t e chaves nu- m é r i c a s em EBCDIC e o b t e v e um c o n j u n t o de d i v i s o r e s com p r o p r i - edades e s p e c i a i s , que aproveitam p r o p r i e d a d e s d e s t e código. Como o menor d e s t e s números, 15329 e r a muito grande p a r a ende - r e ç a r t r i l h a s d e d i s c o , e l e adotou um p r o c e s s o de d u p l a d i v i - s ã o , em que a p r i m e i r a d i v i s ã o , p o r um d e s s e s d i v i s o r e s s e r i a p a r a u n i f o r m i z a r a d i s t r i b u i ç ã o .
dos "a p r i o r i " , e a t a b e l a s e r á buscada m u i t a s v e z e s o que j u s t i f i c a um t r a b a l h o e x t r a na e s c o l h a da função de h a s h , qua
-
t r o métodos podem s e r t e n t a d o s :1) Buscar uma função de indexação usando um 5
dos a l g o r i t m o s de S P R U G N O L I
.
Só é a p l i c á v e l p a r a a r q u i v o s muito pequenos (no s e u exemplo usou-se uma t a b e l a de tamanho1 2 ) , e a funções t e r á d i v i s õ e s , o que pode não s e r i n t e r e s s a n - t e em algumas máquinas onde e s s a operação é muito l e n t a .
2 ) F a z e r uma a n á l i s e da d i s t r i b u i ç ã o dos d i g i - t o s ou b i t s p o r p o s i ç ã o , escolhendo-se a s kiogZnJ p o s i ç õ e s mais bem d i s t r i b u i d a s p a r a , j u s t a p o s t a s formarem o e n d e r e ç o , ou serem e n t r a d a no método de d i v i s ã o s e - n não f o r p o t ê n c i a
8 de 2 , LUM
.
3 ) E s c o l h e r uma s é r i e de f u n ç õ e s , a p l i c á - l a s a o s dados e e s c o l h e r a melhor. I s t o pode s e r t r a b a l h o s o , mas p a r a t a b e l a s pequenas muito p e s q u i s a d a s (exemplo: t a b e l a de p a l a v r a s chaves de um montador " a s s e m b l e r " ou c o m p i l a d o r ) , a- p r e s e n t o u bons r e s u l t a d o s . 4 ) P a r a r e d u z i r o t r a b a l h o do método a n t e r i o r , f o i p o r nós a p l i c a d o à mão uma m o d i f i c a ç ã o do a l g o r i t m o de D l j k s t r a p a r a e n c o n t r a r o caminho de c u s t o mínimo e n t r e d o i s p o n t o s de um g r a f o , com bons r e s u l t a d o s . O a l g o r i t m o s e l e c i o - na rapidamente a melhor função d e n t r e a s e s c o l h i d a s "a p r i o r i " , s e a s chaves (.os a r c o s ) , forem ponderados com s u a p r o b a b i l i d a
-
de de r e f e r ê n c i a e i n s e r i d a s em ordem d e c r e s c e n t e de p r o b a b i - l i d a d e . ( O método u t i l i z a uma t a b e l a p a r a cada função (quepodem s e r guardadas em memória a u x i l i a r ) e v a i t o t a l i z a n d o o c u s t o (lPici, onde ci é o número de comparaçÕes que s e n e c e s s i t a r á p a r a b u s c a r K i , e s s a informação é d i s p o n í v e l no momen - t o d a i n s e r ç ã o , e pi é a p r o b a b i l i d a d e de r e f e r ê n c i a
5
K i ),
p a r a cada t a b e l a . A cada p a s s o o a l g o r i t m o e s c o l h e a t a b e l a de menor c u s t o e segue n e l a i n s e r i d o , a t é que s e u c u s t o u l t r a-
p a s s e o de o u t r a , mudando e n t ã o p a r a e s t a .O método não f o i p o r nós programado a i n d a , p o r e s t a r f o r a do escopo d e s t e t r a b a l h o , mas p a r e c e a l t a m e n t e p r o
-
m i s s o r , mesmo p a r a t a b e l a s razoavelmente g r a n d e s .O encadeamento f o i o p r i m e i r o método descober- t o e l a r g a m e n t e u t i l i z a d o com d i v e r s a s o r g a n i z a ç õ e s d i f e r e n
-
t e s .Se duas ou mais chaves forem mapeadas p a r a o mesmo e n d e r e ç o , fazemos uma l i s t a encadeada com cabeça n e s s e e n d e r e ç o e colocamos a s chaves n a l i s t a .
A s l i s t a s podem t e r d i v e r s o s a s p e c t o s , sendo que o s nós podem s e r a l o c a d o s a p a r t i r de l u g a r e s v a z i o s na p r ó p r i a t a b e l a ou em á r e a s e p a r a d a , a s l i s t a s podem s e r manti - d a s i n d e p e n d e n t e s ( t o d a s a s chaves de uma l i s t a s ã o sinÔminos)
,
ou podem f u n d i r - s e em a l g u n s p o n t o s ; a s cabeças d e l i s t a po- dem e s t a r na memória p r i n c i p a l e o r e s t o em memória a u x i l i a r ou t u d o em memória p r i n c i p a l ou t u d o em memória a u x i l i a r .O m é t o d o d e encadeamento é g e r a l m e n t e m u i t o
r ã
-
p i d o , p o i s as l i s t a s e m g e r a l
são
pequenas, e se t i v e r m o s - n chaves e n l i s t a s o t a m a n h o médio destas deverá ser m / n .1 1 1 . 2 . 1 . ENCADEAMENTO NA P R ~ P R I A TABELA - 1 1 . 2 . 1 . 1 . ALGORLTMO 1
-
L I S T A S COALESCENTES-
( W I L L I A M S ~ ~ ) b e g i n % * * A t a b e l a t e m n + l p o s i ç Õ e s , [ ~ , n ] e CHAVEO=VAGO s e m p r e* *
I
% * * "R" a u x i l i a na procura de l u g a r vago. I n i c i a l m e n-
% * *
"KX" é a chave q u e se deseja b u s c a r ou i n s e r i r . * *I
w h i l e C H A V E ( 1 )#
VAGO-
do i £ KX= CHAVE ( I ) t h e n go t o ENCONTRADO;I
-
- - - i f A ( I ) =VAGO-
t h e n% * *
F i n a l da l i s t a* *
I
-
b e g i n w h i l e CHAVE(R)#VAGO do R : = R - 1 ; % * * B u s c o l u g a r * * i £ R=O t h e n go t o TABELACHEIA; -- - -
A ( I ) : = R ; I : = R ; e n d ; % * * S i g o a l i s t a* *
-
L
e l s e I : = A ( I ) ;-
end; % * * Inserção.** CHAVE(I) :=Kx; A ( I ) :=VAGO; end.ORGANIZAÇÃÒ DA TABELA PARA O ALGORITMO 1.
F i g u r a 1 1 1 . 2 . 1 . 2 - 1
OBSERVAÇÕES SOBRF: O ALGORITMO 1.
a ) A s l i s t a s vão se fundindo e após algum tempo d e v e r á h a v e r l i s t a s que contenham elementos com "home-address" d i f e r e n t e s ; chamamos "home-address" ao e n d e r e ç o h ( R i )
.
b)Com o método de p r o c u r a r l u g a r v a z i o u t i l i z a d o , p r o p o s t o p o r WILLIAMS'~, h a v e r á um acumulo de chaves no fim do a r q u i - vo, p o i s s e a l o c a e s p a ç o a p a r t i r de l á ; mas a b u s c a p o r l u - g a r v a z i o é mais r á p i d a e , p a r a enchermos a t a b e l a i n t e i r a procuraremos no máximo
-
n p o s i ç õ e s . Se procurarmos l u g a r va- , z i o a p a r t i r da p o s i ç õ e onde houve a c o l i s ã o teremos a v a n t a -gem d e g r u p a r f i s i c a m e n t e o s r e g i s t r o s da mesma l i s t a o que é
s i g n i f i c a n t e em memória e x t e r n a ou memória v i r t u a l , mas t e r e - mos no p i o r c a s o de p r o c u r a r em n ( n - 1 ) / 2 p o s i ç õ e s no enchimen -
2
c) A análise de KNUTH nos dá como estimativa da performance o seguinte:
la 1
C m = l + - i -
4 8a ( ~ 2 ~ ~ - 1 - 2 a ) número espe-
rado de comparaçoes para uma busca com sucesso.
e, o número esperado de comparações para uma busca sem suces- so será:
onde a é a taxa, ou fator de ocupação definida como: a = m/n. d) Poderemos manter as listas independentes, se deslocarmos a chave que
não
estiver no seu "home-address" quando ali quiser - mos inserir uma chave. Em termos de eficiência na busca não se ganha muito, mas ganha-se algumas propriedades como facili-
dade de remoção,
e a que é evidenciada no próximo algoritmo.1 1 1 . 2 . 1 . 2 . ALGORITMO 2
-
L I S T A S I N D E P E N D E N T E S-
b e g i n%**
C o m as l i s t a s são independentes ,se u t i l i z a r m o s para a função%** de hashing o &todo da DMSÃO, poderemos a r m a z e n a r na tabela
%** não a chave, e s i m o quociente da divisão que é m e n o r do
%** esta, pois com o quociente e com o resto poderemos reconstitu
-
%** ir a chave. Será u t i l i z a d o
um
campo "TAG" de um b i t para indi-
%**
car (TAG=l) as cabeças das listas. A s listassão
circulares.%**
CHAVE (O) =VAGO,
%**
Q (KX) = LKX/nl %** Quociente**
%*
*
H (KX) =KX-Q (KX) *n %*
*
R e s t o* *
I:=j :=h(KX)+l; if CHAVE(I)=TRGO - %** ~nserção direta**
T A G ( I ) : = l ; CHAVE(I):=Q; A ( I ) : = I ;-
-
end.else
%**
~á há
alguém no lugar**
i f TAG(1) =O-
then -begin- -
%** E não é cabeça de l i s t a**
w h i l e A ( I ) f J - do I : = A ( I ) ;%**segue a l i s t a w h i l e CHAVE (R)fvAGO do R:=R-1;-
-i£ R=O then go t o TABELACHEIA;
-
---
CHAVE(R) :=CHAVE(~) ; A(R) :=A(J) ; A(I) :=R; CHAVE(J) :=Q; A ( J ) :=J; TAG(J) :=1;
-end else
-
~ g i n%**
E
cabeça de lista.**
i f Q=CHKVE (I)
---
then go t o ENCONTRADOL
endu n t i l A ( I ) 4;
w h i l e CHA"(R)fvAGO
-
do R:R-1; i f R=O---
then go t o TABELACHEIA;Figura 11.2.1.2-2
O ALGORITMO 2
a) As listas são mantidas independentes, pois as chaves ou es - tão no seu "home-address" e são cabeças de Lista ou estão em outro lugar mas pertencem a lista que começa em seu " home
-
address".
b) Valem as mesmas observações do algoritmo anterior, quanto
à procura de lugar vazio.
2
c) Pela análise do KNUTH
,
temos as seguintes estimativas pa- ra a performance:~ ú m e r o esperado de comparações para uma busca com sucesso:
-
Número esperado de comparações para uma busca sem sucesso:
1 1 1 . 2 . 2 . ENCADEAMENTO EM ÁREA SEPARADA
A q u i nós alocamos espaço e x t r a para colocar as c o l i s õ e s , e m u m a área separada da t a b e l a . Com essa o r g a n i z a -
ção
o f a t o r de ocupação pode ser m a i o r do q u e 1, embora nessa f a i x a a busca já não ét ã o
e f i c i e n t e p o i s as l i s t a s c o m e ç a m a t e r um c o m p r i m e n t o m é d i o m a i o r do que 1.1 1 1 . 2 . 2 . 1 . ALGORITMO 3
-
ENCADEAMENTO EM AREA SEPARADA-
b e g i n % * * AVAIL é a função que a d m i n i s t r a a l i s t a de% * * espaço d i s p o n í v e l .
if C H A V E ( 1 ) = VAGO t h e n C H A V E ( I ) : = K X % * * Inserção d i r e t a
* *
7
F i g u r a 1 1 1 . 2 . 2 . 1 - 1
a ) A s l i s t a s s ã o i n d e p e n d e n t e s , mas também podem s e r usadas l i s t a s c o a l e s c e n t e s em á r e a s e p a r a d a .
b ) Outra organização muito usada, t a l v e z mais do que a d e s c r i
-
t a é t e r na cabeça d a s l i s t a s somente o s a p o n t a d o r e s , o que éÚ t i l s e o s nós e s t ã o em memória e x t e r n a , p o i s podemos t e r uma t a b e l a maior com o mesmo e s p a ç o , e l i s t a s muito mais c u r t a s .
13 Chama-se e s s a o r g a n i z a ç ã o " t a b e l a de espalhamento", MORRIS
,
f i g u r a ( 1 1 1 . 2 . 2 . 1 - 2 ).
TABELA DE ESPALHAMENTO
F i g u r a 1 1 1 . 2 . 2 . 1 - 2
Neste método, não s ã o u t i l i z a d o s a p o n t a d o r e s , o que economiza e s p a ç o , s i m p l i f i c a e a c e l e r a o s a l g o r i t m o s de busca. O s r e s u l t a d o s em termos de número médio de compara
-
-
çÕes s a o p i o r e s do que o s de encadeamento, mas com o e s p a ç o ganho a o s a p o n t a d o r e s g e r a l m e n t e s e pode aumentar a t a b e l a e t r a b a l h a r com
um
f a t o r d e ocupação mais b a i x o , com um a l g o r i t-
mo mais r á p i d o , o que é melhor em muitos c a s o s . P a r a b u s c a em memória i n t e r n a , o endereçamento a b e r t o economiza memória, e p a r a busca em memória e x t e r n a é usado p o r g r u p a r o s s i n ô n i - mos, f i s i c a m e n t e próximos (em a l g u n s m é t o d o s ) , minimizando o tempo de movimentação d a cabeça de l e i t u r a / e s c r i t a .A c a r a c t e r í s t i c a i m p o r t a n t e d e s s e método, e que a informação s o b r e o encadeamento
6
armazenada i m p l i c i t a - mente n a p o s i ç ã o das chaves na t a b e l a e na r e g r a de " e s c o l h ados s u c e s s o r e s " usada p a r a r e s o l v e s a s c o l i s õ e s .
O p r o c e s s o de uma forma g e r a l , é o s e g u i n t e , que pode s e r d e s c r i t o com a a j u d a do diagrama da f i g u r a (111.
3-11 :
P a r a i n s e r ç ã o : geramos uma s e q u ê n c i a de e n d e r e
-
ÇOS h j ( K i ) , j = 1 , 2 ,...,
n,
e i n s e r i m o s no p r i m e i r o d e l e s que e s t i v e r vago.P a r a busca: geramos a mesma s e q u ê n c i a de en d e r e ç o s a t é q u e , encontremos R i , c a s o e m que a busca é com s u - c e s s o , ou encontremos um l u g a r vago, e sabemos que Ki não s e e n c o n t r a na t a b e l a e a busca é sem s u c e s s o .
F i g u r a 111.3-1
O nome "endereçamento a b e r t o " f o i dado Por 1 9
PETERSON e m s e u c l á s s i c o a r t i g o de 1957, que p a r e c e t e r s i - 2 0
do um dos s e u s d e s c o b r i d o r e s , em p a r a l e l o com ERSHOV
.
Com apenas duas exceções r e c e n t e s , CLAPSON 1 2 em um a r t i g o d e 1977 e B R E N T ~ ~ em o u t r o de 1973 t o d o s o s t r a - b a l h o s p u b l i c a d o s s o b r e endereçamento a b e r t o versavam s o b r e a e s c o l h a d a s funções h l , h 2 , . . . , h n , de modo que fossem r á p i d a s de c a l c u l a r , dessem poucos agrupamentos e p e r c o r r e s s e m o máxi -18
meiro a e x p l o r a r o f a t o de que em a l g u n s métodos, s e i n s e r i r - mos K 1 , K 2 e K3 n e s s a ordem ou em o u t r a como K 2 , K l e K3 o r e - s u l t a d o o b t i d o em termos de c u s t o p a r a a s b u s c a s f u t u r a s , po- dem s e r d i f e r e n t e s . C L A P S O N ~ ~ , que também s e r á c i t a d o mais a d i a n t e , a p r o v e i t o u o f a t o de q u e , s e impusermos um l i m i t e L p a r a o número de " s a l t o s " (N? de f u n ç õ e s h g e r a d a s ) f e i t o s na i n s e r ç ã o , teremos automáticamente l i m i t a d o o número de compa- r a ç õ e s , ou de " s a l t o s " p o s s i v e i s na b u s c a , e v i t a n d o p i o r e s c a
-
s o s d e s a s t r o s o s que limitavam a gama de a p l i c a ç õ e s do e n d e r e - çamento a b e r t o .Nos a l g o r i t m o s que s e seguem como em t o d o s de endereçamento a b e r t o , a t a b e l a é f e i t a c i r c u l a r , tomando-se p a r a e n d e r e ç o o v a l o r h . ( K i ) mod n , onde n é o tamanho da t a -
l -
b e l a e começando o endereçamento de z e r o e i n d o a t é n-1. E s - tenderemos a g o r a o c o n c e i t o de "home-address", como sendo hl ( K i )
.
111.3.1. V I S I T A L I N E A R
-
f o i o p r i m e i r o método u t i l i - zado e o ú n i c o a t é c e r c a de 1 9 6 8 , quando M O R R I S ~ ~ l a n ç o u a i d é i a de v i s i t a a l e a t ó r i a .Esse método p e r c o r r e a t a b e l a c i r c u l a r m e n t e , com s a l t o s de tamanho f i x o e i n d e p e n d e n t e d a chave ou do l u - g a r onde o c o r r e u a c o l i s ã o , sendo g e r a l m e n t e o s a l t o de tama- nho 1. A s funções tomam a s e g u i n t e forma:
( h l ( . K i )
6
u m a d a s funções d e s c r i t a s n a seção ( 1 1 1 . 1 )111.3.1.1. USCA E INSERÇÃO COM V I S I T A L I N E A R
-
b e g i n i n t e g e r p r o c e d u r e S E Q ( I ) ; i n t e g e x i ; b e g i n S E Q : = i f-
i < ( n - 1 ) end;-
% * * L a ç o d e b u s c a* *
w h i l e CHAVE ( I ) #VAGO % * * I n s e r ç ã o* *
t h e n go t o- - -
e l s e t h e n I+1 e l s e O ;-
do i f CHAVE ( I- -
TABELACHEIA b e g i n CHAVE ( I ) :=KX; ) = K X- - -
t h e n go t o ENCONTRADO; e l s e I:=seq ( I ) ; end. 7OBSERVAÇÕES SOBRE O ALGORI.TM0 4
a ) Duas chaves que c o l i d i r a m tomarão o mesmo caminho ( " c a r r e i
-
r a " ) , l o g o , s e a função h a s h h c a u s a r algum agrupamento, o1
que na p r á t i c a sempre o c o r r e , e s t e i r á s e r e p e t i r em a l g u n s o u t r o s l u g a r e s da t a b e l a , que chamaremos de "agrupamentos s e - c u n d á r i o s " , e s e o incremento f o r pequeno, t e n d e r á a aumentar o p r ó p r i o agrupamento em t o r n o do s e u "home-address", que cha - maremos d e "agrupamento p r i m á r i o " .
b) O s agrupamentos tendem a c r e s c e r rápidamente p e l o s e g u i n t e fenomeno: se a p o s i ç ã o
-
i e s t i v e r ocupada e a s p o s i ç õ e s-
i-1 e i+l e s t i v e r e m v a z i a s , a p r o b a b i l i d a d e da p o s i ç ã o-
i+l v i r a s e r ocupada na próxima i n s e r ç ã o , s e r á o dobro d a q u e l a de uma p o s i ç ã o v a z i a i s o l a d a , p o i s chaves que forem mapeadas p a r a-
i e p a r a i S 1 s e r ã o armazenadas em-
-
i+-1,
formando um agrupamento de tamanho 2 . Na próxima i n s e r ç ã o a p r o b a b i l i d a d e da p o s i ç ã o i + 2 v i r a s e r ocupada s e r á o t r i p l o d a q u e l a de uma p o s i ç ã o i- s o l a d a , e a s s i m p o r d i a n t e .c ) Quando um agrupamento c r e s c e e s e funde a o u t r o agrupamen- t o , a p o s i ç ã o s e g u i n t e a e s s e ú l t i m o tem s u a p r o b a b i l i d a d e au
-
mentada d r á s t i c a m e n t e , o que i n c e n t i v a a i n d a mais o crescimen - t o do novo agrupamento.2
d ) Segundo a n á l i s e do KNUTH temos a s s e g u i n t e s e s t i m a t i v a s d a performance;
~ Ú m e r o médio e s p e r a d o de comparações p a r a uma busca com s u c e s s o : -
~ Ú m e r o médio e s p e r a d o de comparações p a r a uma busca sem s u c e s s o :
-
4
e ) A d e l e ç ã o p u r a e s i m p l e s de uma e n t r a d a da t a b e l a não e p e r m i t i d a , p o i s perderíamos o a c e s s o
5s
chaves que c o l i d i r a m com e s t a ou com alguma o u t r a em e n d e r e ç o s " a n t e r i o r e s " e f o - ram armazenadas em p o s i ç õ e s c i r c u l a r m e n t e " p o s t e r i o r e s " . A p r i m e i r a i d é i a que o c o r r e é c o l o c a r uma marca n a p o s i ç ã o em que a chave f o i r e t i r a d a , i n d i c a n d o que o l u g a r e s t á vago pa- r a i n s e r ç ã o , mas que não s e pode p a r a r uma busca n e s s e p o n t o . Essa s o l u ç ã o s ó f u n c i o n a s e a s d e l e ç õ e s forem muito r a r a s , p o i s do c o n t r á r i o após algum tempo s ó h a v e r i a d o i s t i p o s de e n t r a d a s na t a b e l a : a s ocupadas e a s removidas; e uma busca sem s u c e s s o s e r i a d e s a s t r o s a p o i s p e r c o r r e r í a m o s o a r q u i v o i n-
t e i r o . ~ e r í a m o s de i n c l u i r mais um t e s t e no l a ç o d e busca pa-
r a não e n t r a r e m " l o o p i n g " e , apÕs um longo c i c l o de deleçÕes/ i n s e r ç õ e s , número médio de comparações p a r a uma busca com su- c e s s o d e i x a de obedecer à fórmula (111.3.1.1-1) e se aproxima dos v a l o r e s dados por (111.3.1.1-2) enquanto que Cm' -+ n ,2
KNUTH
.
Uma a l t e r n a t i v a e s s e p r o c e s s o de marcar a s e n t r a d a s que f i c a r a m v a z i a s , é mover a s chaves que poderiam t e r o s e u a c e s s o p r e j u d i c a d o p e l a remoção, p a r a mais p e r t o
do s e u "home-address". O a l g o r i t m o 5 f a z a remoção p o r e s s e p r o c e s s o , e a t a b e l a r e s u l t a n t e tem o s mesmos v a l o r e s Cm e C m ' que a o r i g i n a l t e r i a com uma chave a menos, não havendo p o r t a n t o degradação da performance como no c a s o da marcação. O a l g o r i t m o 5 s ó tem o i n c o n v e n i e n t e de s e r muito l e n t o p a r a t a b e l a s que não e s t e j a m muito v a z i a s .
111.3.1.2. ALGORITMO 5
-
F~EMOCÃO DA E N T M D A CHAVE ( I )b e g i n
CHAVE ( I ) :=VAGO; J:=I; I : = s e q ( I ) ;
w h i l e CHAVE ( I ) #VAGO
-
do - b e g i n --
end; 111.3.2. VISITA - ALEATORIA-
p u b l i c a d a p o r M O R R I S ' ~ em 1 9 6 8 , o método u s a um g e r a d o r de números p s e u d o - a l e a t ó r i o s pa 7 r a g e r a r o s h . ( K i ) , j > 1. A s e q u ê n c i a g e r a d aé
sempre a me5 7t o s p r i m á r i o s , mas o s agrupamentos s e c u n d á r i o s a i n d a permane- cem, porque a s c a r r e i r a s começadas em p o s i ç õ e s c o n t í g u a s c o r - r e r ã o c o n t í g u a s também. S e j a r . , i = 1 , 2 ,
...,
n O 5ri (n-1
a sequên- 1 - tia de número a l e a t ó r i o s i n t e i r o s o b t i d o s p e l o g e r a d o r . hl ( K i ) é uma d a s funções d e s c r i t a s na s e ç ã o (111.1) h . ( K i ) = ( h ( K i ) + r ) m o d n , j > 1 1 j -i 111.3.3. V I S I T A QUADRÁTICA-
p r o p o s t o p o r MAURER 2 1 também em 1968, e s s e método u s a como s e q u ê n c i a :h ( K i ) é uma d a s funções d e s c r i t a s na s e ç ã o (111.1) 2
h . ( K i ) = [ h l ( ~ i ) + a ( j - l ) + b ( j - 1 )
]
mod n , j > 1i
:
onde - a e
-
b s ã o c o n s t a n t e s . A s c a r a c t e r í s t i c a s e m r e l a ç ã o àagrupamentos s ã o a s mesmas do método a n t e r i o r e o c á l c u l o do polinômio pode ser f e i t o s ó p o r a d i ç õ e s , o que é mais r á p i d o do que g e r a r p s e u d o s - a l e a t ó r i o s . Esse método s ó p e r c o r r e me- t a d e da t a b e l a , o que não
6
problema s e não t i v e r m o s f a t o r de ocupação e x c e s s i v a m e n t e a l t o . R A D K E ~ ~ propos uma m o d i f i c a ç ã o no método, que f a z com que e l e p e r c o r r a t o d a a t a b e l a .111.3.4.
-
-?,MENTO -BINARIO
-
C L A P S O N ~ ~ propos em 1 9 7 7 e s s e método como um compromisso e n t r e a v i s i t aa n t e r i o r e s e o s t r e s que vem a s e g u i r ) . O s e u i n t e r e s s e e p a r a busca e x t e r n a , onde é d e s e j á v e l que o s sinônimos fiquem próximos f i s i c a m e n t e . A s e q u ê n c i a v i s i t a d a é a s e g u i n t e :
h ( K i ) é uma d a s funções d e s c r i t a s na seção (111.1) j - 1
h . ( K i ) = [ h l ( K i ) + 2 -11 m o d n , j > 1
i:
A s e q u ê n c i a o b t i d a é: hl ( K i ) + l , hl ( ~ i ) + 3 , hl ( ~ i ) + 7 ,
. . .
Afirma e l e que duas c a r r e i r a s somente se i n t e r c e p t a r ã o uma v e z , o que não é v e r d a d e , p o i s do diagrama (111.3.4-1) d e r i v a - mos que s e c e r t a s condições forem p r e e n c h i d a s a s duas c a r r e i - r a s s e e n c o n t r a r ã o em - x e novamente em y .-
F i g u r a 111.3.4-1
x
+
s l+
s 2 = (x -t- s 3 ) mod n p a r ax
+
s 3 < 2m temos:Fazendo s l - 7 , s2=15, e s3=63, temos m = 4 1 que é i n c l u s i v e p r i - mo. V a l o r e s d e m - que s a t i s f a z e m e não sejam primos s ã o a i n d a mais f á c e i s d e serem o b t i d o s . A s duas s e q u ê n c i a s c o r t a r - s e -
-
ao em x e y com
-
m < 1 9 .Mas s e a t a b e l a f o r grande e o número de s a l - t o s em cada c a r r e i r a f o r b a i x o , não h a v e r á mais de um c r u z a - mento p a r a d u a s c a r r e i r a s que s e originam próximas, r e s o l v e n - do o problema dos agrupamentos p r i m á r i o s , mas com agrupamen-
t o s s e c u n d á r i o s a i n d a . Tem também as v a n t a g e n s d a s e q u e n c i a começar com v a l o r e s b a i x o s , m a s s e m agrupamentos p r i m á r i o s e s e r extremamente r á p i d a d e g e r a r , b a s t a n d o um " s h i f t " p a r a a e s q u e r d a e um " o r " com 1. Estamos p r o v i d e n c i a n d o a p u b l i c a ç ã o d a c o r r e - 1 2
ção
d a a f i r m a t i v a d e CLAPSON.
1 1 1 . 3 . 5 . DUPLA DIVISÃO-
B A L B I N E ~ ~ e m 1968 a p r e s e n t o u a i d é i a q u e r e a l m e n t e e l i m i n o u o s agrupamentos s e c u n d á r i o s , d e-
nominada DUPLO HASHING, q u e é a b a s e d o st r ê s
a l g o r i t m o s q u e seguem.
N e s t e s métodos o i n c r e m e n t o a ser somado a h ( K i ) p a r a se o b t e r h . ( K i ) é f u n ç ã o d e K i e não m a i s fun-
j-1 I
ç ã o d e hl ( ~ i ) (como n a s v i s i t a s a l e a t ó r i a e q u a d r á t i c a )
,
ou c o n s t a n t e (como n a v i s i t a l i n e a r ) . Obtém-se e n t ã o uma segun- d a f u n ç ã o i n d e p e n d e n t e (no s e n t i d o p r o b a b i l í s t i c o do t e r m o ) d e h l ( K i ) , q u e n o s f o r n e c e o i n c r e m e n t o . S SOBRE - HASH-DUPLO - 2 a ) KNUTH n o s d á a s s e g u i n t e s e s t i m a t i v a s d a p e r f o r m a n c e d o h a s h - d u p l o , q u e se comporta e x a t a m e n t e como o c o n c e i t o d e 19 "hash u n i f o r m e " p r o p o s t o p o r PETERSON.
~ Ú m e r o médio d e comparações e s p e r a d a s p a r a uma b u s c a com s u c e s s o :
Número médio e s p e r a d o de comparações p a r a uma busca
-
s e m s u c e s s o :n + l -1
C m ' =
.
(1-a) q u e , p a r a a t a b e l a n+l-mc h e i a n o s d á (.n+1)/2 comparações em média, q u e é o mesmo que p a r a uma b u s c a s e q u e n c i a l . Hn é
o
n-ésimo número harmônico d e p r i m e i r a ordem dado p e l a f ó r m u l a a b a i x o :b ) No método ( 1 1 1 . 3 . 5 ) podemos s u b s t i t u i r a o p e r a ç ã o mod(n-2) l o g n
p o r mod 2 2