You are on page 1of 37

Tabelas

Hash I
Centro de Inform-ca Universidade Federal de Pernambuco Sistemas de Informao Vinicius Cardoso Garcia vcg@cin.ufpe.br

2011 Vinicius Cardoso Garcia

Tabelas Hash
O que melhor, um arranjo ou uma lista encadeada?

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Tabelas Hash
O que melhor, um arranjo ou uma lista encadeada? Um arranjo melhor se voc souber quantos objetos sero armazenados , j que assim poderemos acessar qualquer elemento do arranjo em uma performance O(1)

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Tabelas Hash
O que melhor, um arranjo ou uma lista encadeada? Um arranjo melhor se voc souber quantos objetos sero armazenados , j que assim poderemos acessar qualquer elemento do arranjo em uma performance O(1) Porm, uma lista encadeada melhor se voc -ver que mudar o nmero de elementos armazenados de forma dinmica e de maneira signica-va, ou se exis-r relaes complexas entre os elementos (indicando o comportamento de vizinhos, por exemplo)
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Tabelas Hash
E ento o que fazer? Combinar a vantagem dos dois!
0 1 2 3 4
025-612-0001 981-101-0002 451-229-0004

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Tabelas Hash
Seria -mo se os arranjos pudessem ser denidos com tamanho innito sem penalizaes Assim, todo elemento teria um lugar reservado no arranjo
46256288 46256289 46256290
Elem.


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Tabelas Hash
Ento ns foramos o arranjo innitas vezes. Em outras palavras, o nmero de espaos para armazenar elementos pequeno, mas cada espao pode comportar muitos elementos

Elem.

112 113 114


Elem.

Elem.


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Tabelas Hash
Ento, como ns podemos manter todos os elementos pertencendo ao mesmo espao de armazenamento?


Elem.

112 113 114


Elem.

Elem.


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Tabelas Hash
Ento, como ns podemos manter todos os elementos pertencendo ao mesmo espao de armazenamento?
Resposta: Lista Encadeada


Elem.

112 113 114


Elem.

Elem.


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Tabelas Hash
Como localizamos os elementos?


Elem.

112 113 114


Elem.

Elem.


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

10

Tabelas Hash
Como localizamos os elementos?
U-lizando uma funo hash para localizar o elemento no arranjo


Elem.

112 113 114


Elem.

Elem.


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

11

Tabelas Hash
Como localizamos os elementos?
U-lizando uma funo hash para localizar o elemento no arranjo Seguimos pela lista encadeada para encontrar o elemento


Elem.

112 113 114


Elem.

Elem.


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

12

Tabelas Hash
Como localizamos os elementos?
U-lizando uma funo hash para localizar o elemento no arranjo Seguimos pela lista encadeada para encontrar o elemento


Elem.

112 113 114


Elem.

Elem.


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

13

Tabelas Hash
Como localizamos os elementos?
U-lizando uma funo hash para localizar o elemento no arranjo Seguimos pela lista encadeada para encontrar o elemento


Elem.

112 113 114


Elem.

Elem.


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

14

Tabelas Hash
Como localizamos os elementos?
U-lizando uma funo hash para localizar o elemento no arranjo Seguimos pela lista encadeada para encontrar o elemento


Elem.

112 113 114


Elem.

Elem.


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

15

Tabelas Hash
Muitas aplicaes exigem de forma dinmica apenas as operaes de dicionrio:
Inserir (insert) Pesquisar (search) Deletar (delete)

Uma tabela hash uma estrutura de dados eciente para implementar dicionrios!

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

16

Tabelas Hash: Para que serve?


O obje-vo de hashing mapear um espao enorme de chaves em um espao de inteiros rela-vamente pequeno. Isso feito atravs de uma funo chamada hash func+on. O inteiro gerado pela hash func+on chamado hash code e usado para encontrar a localizao do item.
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

17

Tabelas Hash de Endereo Direto


Dado um universo de chaves U
Se a cardinalidade de U pequena, o endereamento direto uma tcnica simples que funciona bem!

Suponha que uma dada aplicao necessite de um conjunto dinmico onde cada elemento tenha uma chave denida a par-r do universo
U={0,1,...,m-1} Onde m no muito grande, e no h dois elementos com a mesma chave

Para tanto vamos u-lizar uma tabela de endereamento direto T[0..m-1]


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

18

Tabelas de Endereo Direto


Cada slot, ou posio, de T corresponde a uma chave no universo U
A posio k aponta para um elemento no conjunto com chave k.
Se o conjunto no contm nenhum elemento com chave k, ento T[k] = None

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

19

Tabelas de Endereo Direto


Para estas tabelas hash tambm possvel armazenar o dado satlite na prpria tabela T
Isso ir economizar memria, visto que a chave pode ser encarada como o ndice da tabela T. Contudo, se feito isto, algo deve ser realizado para saber se a posio est vazia

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

20

Operaes de um Dicionrio
DIRECT-ADDRESS-SEARCH(T,k)
return T[k]

DIRECT-ADDRESS-INSERT(T,k)
T[chave[k]] x

DIRECT-ADDRESS-DELETE(T,k)
T[chave[k]] None

Observe que todas estas operaes so rpidas: necessrio apenas tempo O(1)
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

21

Tabelas Hash
Qual a diculdade do endereamento direto?
Se o universo U muito grande, o armazenamento de uma tabela T de tamanho |U| pode ser impra-cvel! Alm do que a quan-dade de chaves reais u-lizadas pode ser muito menor que |U| implicando que a maior parte de T seria desperdiada.
Para este caso, uma tabela hash exige muito menos espao de endereamento do que uma tabele de endereamento direto! Os requisitos de armazenamento so (|k|)
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

22

Tabela Hash

Tabela Hash

Em uma tabela hash, um elemento com chave ! Em uma tabela hash,a posio h(k) k armazenado n um elemento com chave k
armazenado na posio , que u-lizada para Ou seja, funo hash h h(k) " Ou calcular a posio do elemento a par-r da chave seja, funo hash h, que utilizada para calcular a posio do elemento a partir da chave k. k. ! Funo Hash Funo Hash
"

Mapeamento do Universo U de chaves nas posies Mapeamento do Universo U de chaves nas da tabela hash T[0..m-1]

posies da tabela hash T[0..m-1]


h :U # $0,1 , ... , m%1&

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

23

Tabelas Hash
Tabelas Hash
T
0
h(k1)

Universo U
K (Chaves Reais) k1 k4 k2 k5

h(k4)

h(k2)=h(k5)

! dito que um dito que um elemento com chave k ecom chave elemento fetua o hash efetua posio h(k) k para a o hash para a posio h(k) dito tambm que h(k) ! v dito tambm que o alor hash da chave k. h(k) o valor hash da chave k.

m-1

Duas chaves podem ter o Hash na mesma posio! COLISO


Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

24

Exemplo de Hashing
Suponha que 1. O espao de chaves so os nmeros inteiros de quatro dgitos, e 2. Deseja-se traduz-los no conjunto {0, 1, ..., 7}.

Uma hash func+on poderia ser: f(x) = (5 x) mod 8.

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

25

Exemplo de Hashing
Se o conjunto de dados for cons-tudo pelos anos: 1055, 1492, 1776, 1812, 1918 e 1945, a hash func+on f (x) = (5 x) mod 8 gerar o seguinte mapeamento:
Ex: f (1055) = (5 1055) mod 8 = 5275 mod 8 = 3

ndice: 0 1 2 3 4 5 6 7 2002 Chave: 1776 1055 1492 1945 1918 1812


Ex: f (2002) = (5 2002) mod 8 = 10010 mod 8 = 2
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

26

Coliso
No exemplo anterior dizemos que entre as chaves 1492 e 1812 ocorreu uma coliso, isto estas duas chaves geraram o mesmo hash code, ou seja, foram mapeadas no mesmo ndice. ndice: 0 1 2 3 4 5 6 7 Chave: 1776 2002 1055 1492 1945 1918 1812

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

27

Colises
A melhor soluo evitar as colises!
Contudo, |U| > m avendo uma chance muito grande para haver colises! Assim, temos que desenvolver tcnicas para poder tratar as colises.

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

28

Resoluo de Colises por Resoluo de Colises por Encadeamento Encadeamento


! Umappossvelsoluo ccolocarttodos os Uma ossvel soluo olocar odos os elementos que efetuam o hash para a mesma elementos que efetuam o hash para a mesma posio como uma lista igada posio como uma lista lligada
T
k1

None None
k5

Universo U
K (Chaves Reais) k1 k4 k2 k5

k4

k2

None

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

29

Resoluo de Colises por Encadeamento


As operaes de dicionrio quando as colises so resolvidas por encadeamento:
CHAINED-HASH-INSERT(T,k)
Insere x no incio da lista T[h(chave[x])]

CHAINED-HASH-SEARH(T,k)
Procura por um elemento com a chave k na lista T[h(k)]

CHAINED-HASH-DELETE(T,k)
Elimina o elemento x da lista T[h(chave[x])]

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

30

Anlise do Hash com Encadeamento


Qual a qualidade de execuo do hash com encadeamento?
Em par-cular, quanto tempo ele leva para procura um elemento com uma determinada chave?

Para uma tabela hash com m posies e n elementos:


Fator de Carga : n/m
Todas as anlises sero feitas em termos de !

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

31

Anlise do Hash com Encadeamento


Pior Caso:
Todas as n chaves executam o hash na mesma posio!
criada uma lista de comprimento n.

O tempo para a pesquisa n mais o tempo de calcular a funo hash.


Este caso no melhor que u-lizar uma lista ligada para representar todos os elementos

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

32

nlise do Hash com Anlise do ncadeamento Hash com Encadeamento


Ir depender com a hash ir distribuir o Ir depender com a funofuno hash ir distribuir o conjunto conjunto de haves entre as asposies. de c chaves entre m m posies. Vamos supor que um ue um elemento tem igual igual Vamos supor q elemento dado dado tem probabilidade de efetuarefetuar o hash para qualquer das m probabilidade de o hash para qualquer das m posies. posies.
Hiptese Hiptese de hash uniforme. de hash uniforme. ! Denota-se o comprimento da lista T[j]lista T[j] por nj, onde, Denota-se o comprimento da por nj, onde,
!

Caso M Caso Mdio: dio:

"

"

n#n 0 $n 1$%$n n&1


!

e,

e,

n j# E 'n j (#

n ) Fator de Carga m
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

33

Anlise do Hash com Encadeamento


Supondo que o valor hash h(k) pode ser calculado em tempo O(1)
Desta forma, o tempo necessrio para procurar um elemento k depende linearmente do comprimento das listas Assim, possvel considerar duas situaes:
Uma pesquisa no bem-sucedida; Uma pesquisa bem-sucedida

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

34

Anlise do Hash com Encadeamento


Teorema 11.1
Em uma tabela hash na qual as colises so resolvidas por encadeamento, uma pesquisa malsucedida demora o tempo esperado (1+), sob a hiptese de hash uniforma simples.

Teorema 11.2
Em uma tabela hash na qual as colises so resolvidas por encadeamento, uma pesquisa bem- sucedida demora o tempo (1+), na mdia, sob a hiptese de hash uniforme simples.
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

35

Anlise do Hash com Encadeamento


O que poemos concluir?
Se o nmero de posies na tabela hash no mnimo proporcional ao nmero de elementos na tabela:
n = O(m), e consequentemente, = n/m = O(m)/m = O (1) Portanto, a pesquisa demora um tempo constante em mdia Dado que a insero demora O(1) e a eliminao demora O(1) para listas duplamente ligadas! Todas as operaes de dicionrio podem ser admiddas em tempo O(1) em mdia!
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

36

Advidades complementares
Leitura do Captulo 11 do Cormen Desao: Prove os teoremas 11.1 e 11.2 Implemente em Java uma tabela hash com colises resolvidas por encadeamento. Seja a tabela com 9 posies, e seja a funes de hash h(k)=k mod 9. Demostre a insero das chaves 5, 28, 19, 15, 20, 33, 12, 17 e 10.
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

37

You might also like