Вы находитесь на странице: 1из 45

Tabelas de Espalhamento

1 / 45

Tabelas de Espalhamento
Eduardo Camponogara
Departamento de Automao e Sistemas ca Universidade Federal de Santa Catarina

19 de fevereiro de 2011

Tabelas de Espalhamento Sumrio a

2 / 45

Introduo ca

Tabela de Espalhamento

Funes de Espalhamento co

Tabelas de Espalhamento Introduo ca

3 / 45

Sumrio a

Introduo ca

Tabela de Espalhamento

Funes de Espalhamento co

Tabelas de Espalhamento Introduo ca

4 / 45

Tabelas de Espalhamento
Introduo a Tabelas de Espalhamento (Hash Tables) ca

Muitas aplicaes necessitam de um conjunto dinmico que co a suporta apenas operaes de dicionrio: co a Insert(S, x) Delete(S, x) Search(S, k) Um compilador mantm uma tabela de s e mbolos, na qual as chaves so cadeias de caracteres arbitrrias correspondendo a a a identicadores

Tabelas de Espalhamento Introduo ca

5 / 45

Tabelas de Espalhamento
Introduo a Tabelas de Espalhamento (Hash Table) ca
Uma tabela de espalhamento (Hash Table) uma estrutura de e dados eciente para implementar um dicionrio a

A busca por um elemento pode, no pior caso, levar tempo (n) Na prtica, a tabela de espalhamento (TE) tem desempenho a excelente Sob condies aceitveis, o tempo esperado de busca em uma co a TE da ordem O(1) e

Tabelas de Espalhamento Introduo ca

6 / 45

Tabelas de Espalhamento
Generalizao de Vetor (Endereamento Direto) ca c

Uma TE uma generalizao de um vetor ordinrio e ca a Endereamento direto em vetor se baseia no fato de que c podemos examinar uma posio qualquer em tempo O(1) ca Endereamento direto aplicvel apenas quando podemos c e a alocar um vetor com uma posio para cada chave poss ca vel Quantas so as possibilidades de identicadores em a uma linguagem de programao? ca

Tabelas de Espalhamento Introduo ca Endereamento Direto c

7 / 45

Endereamento Direto c
Enderaamento Direto c
Tcnica simples que funciona quando o universo de chaves U e e razoavelmente pequeno.
U={0,1,...,9} K={2,3,5,8} U 0 6 7 K 1 4 2 8 3 6 7 9 8 9 8 0 1 2 3 4 5 5 2 3 Chave Dados

Tabelas de Espalhamento Introduo ca Endereamento Direto c

8 / 45

Endereamento Direto: Implementao c ca

Implementao ca

Utilizamos um vetor T [0..m 1] onde cada posio ca corresponde a uma chave do universo U. Se T [k] = nil, ento o conjunto dinmico no possui nenhum a a a elemento com a chave k Caso contrrio, T [k] aponta para o elemento cuja chave k a e

Tabelas de Espalhamento Introduo ca Endereamento Direto c

9 / 45

Endereamento Direto: Implementao c ca


Search
Direct address search(T , k) return T [k]

Delete
Direct address delete(T , x) T [key [x]] NIL

Insert
Direct address insert(T , x) T [key [x]] x

Tabelas de Espalhamento Tabela de Espalhamento

10 / 45

Sumrio a

Introduo ca

Tabela de Espalhamento

Funes de Espalhamento co

Tabelas de Espalhamento Tabela de Espalhamento Introduo ca

11 / 45

Consideraes co

A diculdade de se usar endereamento direto bvia: a c eo alocao de uma tabela T de tamanho |U| pode ser invivel ca a para um universo muito grande. Endereamento direto tambm pode implicar em desperd c e cio de memria o Quando o conjunto de chaves K armazenadas no dicionrio a e muito menor do que o universo de chaves U, uma TE utiliza (|K |) espao e mesmo assim o tempo de busca da ordem c e (1) O tempo de busca (1) para o caso mdio e e

Tabelas de Espalhamento Tabela de Espalhamento Introduo ca

12 / 45

Consideraes co

Com endereamento direto, o elemento de chave k c e armazenado na posio k ca Com endereamento espalhado, este elemento armazenado c e na posio h(k) ca h(k) uma funo de espalhamento que mapeia o universo U e ca de chaves para entradas da tabela de espalhamento T [0..m 1] h : U {0, 1, . . . , m 1}

Tabelas de Espalhamento Tabela de Espalhamento Introduo ca

13 / 45

Colises o

Uma poss diculdade nesta tcnica a possibilidade de vel e e duas chaves k1 e k2 serem mapeadas para a mesma posio ca na TE Uma coliso entre duas chaves ocorre quando h(k1 ) = h(k2 ) a Dois mtodos para tratar colises so: e o a
1. Endereamento aberto c 2. Resoluo de colises atravs de encadeamento ca o e

Gostar amos de evitar colises. o Uma maneira de evitar colises atravs da escolha de uma o e e funo de espalhamento (hash function) que apresente ca comportamento randmico o

Tabelas de Espalhamento Tabela de Espalhamento Introduo ca

14 / 45

Colises o

0 U (universo de chaves) 1 2 k1 k2 h(k2) k3 m1 h(k1)=h(k3)=2

Tabelas de Espalhamento Tabela de Espalhamento Introduo ca

15 / 45

Tratamento de Colises por Encadeamento o

0 U (universo de chaves) 1 2 k1 k2 k2 k3 m1 k3 k1

Tabelas de Espalhamento Tabela de Espalhamento Introduo ca

16 / 45

Operaes co
Insero ca
Hash insert(T , x) Insira x na cabea da lista T [h(key [x])] c

Busca
Hash search(T , k) Procure por um elemento de chave k na lista T [h(k)]

Tabelas de Espalhamento Tabela de Espalhamento Introduo ca

17 / 45

Operaes co

Remoo ca
Hash delete(T , x) Delete x da lista T [h(key [x])]

Tabelas de Espalhamento Tabela de Espalhamento Introduo ca

18 / 45

Anlise das Operaes a co

Anlise a

Insero executada em tempo O(1) ca e Deleo de um elemento x executada em tempo O(1), se as ca e listas de encadeamento so duplas a Busca leva tempo proporcional ao comprimento da lista

Tabelas de Espalhamento Tabela de Espalhamento Anlise de Espalhamento por Encadeamento a

19 / 45

Anlise de Espalhamento por Encadeamento a


Consideraoes c

Seja m o nmero de entradas na tabela de espalhamento u Seja n o nmero de elementos armazenados na TE u Fator de carga denido por: = e
n m

Anlise a

No pior caso, o tempo de busca de uma chave k pode levar tempo (n) em uma TE. O tempo de busca em uma tabela de espalhamento depende do quo bem a funo de espalhamento h distribui as chaves a ca entre as entradas de T

Tabelas de Espalhamento Tabela de Espalhamento Anlise de Espalhamento por Encadeamento a

20 / 45

Espalhamento Uniforme

Consideraoes c

Se a probabilidade de um elemento qualquer ser direcionado para uma entrada qualquer de T uniforme, e independentemente dos demais elementos, dizemos que a funo de espalhamento h satisfaz a condio de ca ca espalhamento uniforme

Tabelas de Espalhamento Tabela de Espalhamento Anlise de Espalhamento por Encadeamento a

21 / 45

Espalhamento Uniforme

Teorema
Em uma TE com colises resolvidas por meio de encadeamento, o uma busca por uma chave no armazenada executada em tempo a e (1 + ) em mdia, sob a condio de espalhamento uniforme. e ca

Tabelas de Espalhamento Tabela de Espalhamento Anlise de Espalhamento por Encadeamento a

22 / 45

Espalhamento Uniforme
Prova

Sob a condio de espalhamento uniforme, qualquer chave k ca tem a mesma probabilidade de ser direcionada para qualquer das m entradas Logo, o tempo de busca na lista precisamente o tamanho da e lista Xk uma varivel randmica, cujos valores so do conjunto a o a {0, , . . . , n}, a qual corresponde ao nmero de chaves u designadas para a clula k e

Tabelas de Espalhamento Tabela de Espalhamento Anlise de Espalhamento por Encadeamento a

23 / 45

Espalhamento Uniforme

Prova

A distribuio de probabilidade associada a Xk a distribuio ca e ca 1 binomial, onde a probabilidade de sucesso p = m e Logo, E [Xk ] = np =
n m

Portanto, o tamanho mdio de uma lista qualquer e e (n/m) = () Levando em considerao o tempo (1) para cmputo de ca o h(x), o tempo mdio de busca no sucedida (1 + ) e a e

Tabelas de Espalhamento Tabela de Espalhamento Anlise de Espalhamento por Encadeamento a

24 / 45

Espalhamento Uniforme

Portanto, o tempo mdio de uma busca no sucedida (1 + ), e a e pois precisamos levar em conta o tempo necessrio para computar a h(x)

Tabelas de Espalhamento Tabela de Espalhamento Anlise de Espalhamento por Encadeamento a

25 / 45

Espalhamento Uniforme

Teorema
Em uma tabela de espalhamento, cujas colises so resolvidas por o a encadeamento, uma busca bem sucedida leva (1 + ), sob condio de espalhamento uniforme. ca

Tabelas de Espalhamento Tabela de Espalhamento Anlise de Espalhamento por Encadeamento a

26 / 45

Qual E o Signicado da Anlise? a

O Que a Anlise nos Diz? a

Se o nmero de entradas da tabela de espalhamento for pelo u menos proporcional ao nmero de elementos armazenados na u mesma, ou seja, n O(m), ento a = O(m) n = =1 m m

Logo, a operao de busca leva O(1) em mdia ca e

Tabelas de Espalhamento Funes de Espalhamento co

27 / 45

Sumrio a

Introduo ca

Tabela de Espalhamento

Funes de Espalhamento co

Tabelas de Espalhamento Funes de Espalhamento co

28 / 45

Funes de Espalhamento co

Estudaremos na sequncia trs mtodos de concepo de funes e e e ca co de espalhamento.


Espalhamento por diviso a Espalhamento por multiplicao ca Espalhamento universal

Tabelas de Espalhamento Funes de Espalhamento co

29 / 45

Caracter sticas Desejveis a


Uma boa funo de espalhamento satisfaz a condio de ca ca espalhamento uniforme simples:

Cada chave tem a mesma probabilidade de ser mapeada para cada uma das entradas da tabela Formalmente, seja P(k) a probabilidade de que a chave k seja gerada, ento a condio de espalhamento uniforme nos diz a ca que: 1 P(k) = , j = 0, 1, . . . , m 1 m
kU:h(k)=j

Raramente sabemos a distribuio P ca Na prtica utilizamos heur a sticas para criar uma funo de ca espalhamento que apresenta um bom desempenho

Tabelas de Espalhamento Funes de Espalhamento co

30 / 45

Caracter sticas Desejveis a


Algumas vezes, informao qualitativa sobre P pode ser util. ca Para uma tabela de s mbolos de um compilador, os indenticadores pt e pts aparecem com frequncia, logo e e importante desenvolver uma funo de espalhamento tal que: ca h( pt ) = h( pts )

Uma abordagem comum derivar uma funo espalhamento e ca cujo comportamento esperado seja independente de qualquer padro existente nos dados a

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento por Diviso a

31 / 45

Espalhamento por Diviso a

A funo de espalhamento mapeia a chave k para uma das ca entradas ao tomar o resto da diviso de k por m: a h(k) = k mod m

Por exemplo, para m = 12 e k = 100: h(k) = 4

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento por Diviso a

32 / 45

Espalhamento por Diviso a

Quando usamos o mtodo da diviso, devemos evitar certos valores e a de m:

Devemos evitar potncias, pois para m = 2p , h(k) e e simplesmente os p bits menos signicativos A menos que valores de k tenham uma distribuio uniforme ca de bits, no devemos utilizar m = 2p a

E prefer fazer com que h(k) dependa de todos os bits de k, vel no apenas dos p menos signicativos a

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento por Diviso a

33 / 45

Um Bom Valor para m

Bons valores para m so nmeros primos no muito prximos a u a o de potncias de 2 e Suponha que desejamos alocar n = 2000 cadeias de 8 bits, e que no nos importamos em procurar em listas de tamanho a mdio 3. e Ento, podemos fazer m = 701 pois 701 um nmero primo a e u n 2000 2000 prximo de 3 = = m = 701 3 o Note que 701 no muito prximo de potncias de 2. As a e o e duas potncias mais prximas so 512 e 1024. e o a A funo de espalhamento toma a forma: ca h(k) = k mod 701

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento por Multiplicao ca

34 / 45

Espalhamento por Multiplicao ca

O mtodo utiliza uma constante A, 0 < A < 1, sendo h(k) e calculado como: h(k) = m(kA mod 1)

Note que (kA mod 1) a parte fracionria de kA, ou seja, e a (kA mod 1) = kA kA A vantagem do mtodo de multiplicao que o valor de m e ca e no cr a e tico como no mtodo da diviso e a

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

35 / 45

Espalhamento Universal
Falhas Potenciais dos Mtodos Anteriores e

Na pior das hipteses, um adversrio poderia escolher n o a chaves mapeadas para uma mesma entrada, resultando em um tempo de busca (n). A unica forma efetiva de melhorar esta situao escolher ca e uma funo de espalhamento aleatoriamente, que seja ca independente das chaves que sero armazenadas na tabela a Esse mecanismo chamado de Espalhamento Universal, o que e resulta em um bom desempenho mdio e

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

36 / 45

Espalhamento Universal

Princ pios do Espalhamento Universal

A idia principal atrs do espalhamento universal escolher e a e uma funo de espalhamento de forma aleatria, em tempo de ca o execuo, a partir de uma classe de funes cuidadosamente ca co denida Devido ` randomizao, o algoritmo apresenta desempenho a ca varivel a cada execuo, at mesmo para uma mesma entrada a ca e

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

37 / 45

Espalhamento Universal
Princ pios do Espalhamento Universal

Seja H uma coleo nita de funes de espalhamento que ca co mapeiam um dado universo de chaves U para um nmero do u conjunto {0, 1, . . . , m 1}: h : U {0, 1, . . . , m 1}, h H

A coleo H dita universal se para cada x, y de chaves ca e distintas de U, o nmero de funes h H tal que u co h(x) = h(y ) precisamente |H|/m e

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

38 / 45

Espalhamento Universal
Condioes Necessrias para Espalhamento Universal c a

Em outras palavras, com uma funo escolhida aleatoriamente ca dentre os elementos de H, a chance de uma coliso entre x e a y , x = y , precisamente 1/m: e

A probabilidade de escolher uma funo h H ca e

1 |H| |H| m

A probabilidade de h gerar um conito entre x e y e Portanto, a probabilidade de uma funo h escolhida ca aleatoriamente gerar um conito e 1 1 |H| = m |H| m

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

39 / 45

Espalhamento Universal

Teorema
Se uma funo h, escolhida de uma coleo universal de funes de ca ca co espalhamento, usada para espalhar chaves em uma tabela de e tamanho n, onde n m, ento o nmero esperado de colises a u o envolvendo uma chave particular x menor do que 1. e

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

40 / 45

Espalhamento Universal
Prova
Para cada par y , z de chaves distintas, seja Xyz uma varivel a aleatria tal que: o Xyz = Temos que: E [Xyz ] = 1 P[h(y ) = h(z)] + 0 P[h(y ) = h(z)] = P[h(y ) = h(z)] 1 = m 1 se h(y ) = h(z) 0 caso contrrio a

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

41 / 45

Espalhamento Universal
Prova
Seja X a varivel aleatria consistindo do nmero de colises a o u o envolvendo uma chave particular x, tendo a tabela T tamanho m e contendo n chaves. Ento, temos que: a E [X ] = E [
y T ,y =x

Xyx ] E [Xyx ]

=
y T ,y =x

=
y T ,y =x

1 n1 = m m

Portanto, se n m, temos que o nmero esperado de colises u o envolvendo uma chave particular x E [X ] < 1. e

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

42 / 45

Construindo Funes de Espalhamento Universais co


Construindo Passo a Passo

Seja a = (a0 , a1 , . . . , ar ) uma sequncia de r + 1 blocos de e bits, sucientemente longa e escolhida randomicamente do conjunto {0, 1, . . . , m 1}. Denimos como funo de espalhamento: ca
r

ha (x) =
i=0 r

ai xi mod m ai xi ) mod m
i=0

= (

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

43 / 45

Construindo Funes de Espalhamento Universais co

Construindo Passo a Passo

A partir desta denio, a coleo H de funes de ca ca co espalhamento denida como: e H=


a

ha (x)

Note que |H| = mr +1

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

44 / 45

Construindo Funes de Espalhamento Universais co


Teorema
A classe de funes H denida pelas equaes: co co
r

ha (x) =
i=0 r

ai xi mod m ai xi ) mod m
i=0

= ( H =
a

ha (x)

dene uma classe universal de funes de espalhamento. co

Tabelas de Espalhamento Funes de Espalhamento co Espalhamento Universal

45 / 45

Tabelas de Espalhamento

Fim! Obrigado pela presena c

Вам также может понравиться