Академический Документы
Профессиональный Документы
Культура Документы
1 / 45
Tabelas de Espalhamento
Eduardo Camponogara
Departamento de Automao e Sistemas ca Universidade Federal de Santa Catarina
19 de fevereiro de 2011
2 / 45
Introduo ca
Tabela de Espalhamento
Funes de Espalhamento co
3 / 45
Sumrio a
Introduo ca
Tabela de Espalhamento
Funes de Espalhamento co
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
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
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
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
8 / 45
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
9 / 45
Delete
Direct address delete(T , x) T [key [x]] NIL
Insert
Direct address insert(T , x) T [key [x]] x
10 / 45
Sumrio a
Introduo ca
Tabela de Espalhamento
Funes de Espalhamento co
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
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}
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
14 / 45
Colises o
15 / 45
0 U (universo de chaves) 1 2 k1 k2 k2 k3 m1 k3 k1
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)]
17 / 45
Operaes co
Remoo ca
Hash delete(T , x) Delete x da lista T [h(key [x])]
18 / 45
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
19 / 45
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
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
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
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
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
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)
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
26 / 45
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
27 / 45
Sumrio a
Introduo ca
Tabela de Espalhamento
Funes de Espalhamento co
28 / 45
Funes de Espalhamento co
29 / 45
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
30 / 45
Uma abordagem comum derivar uma funo espalhamento e ca cujo comportamento esperado seja independente de qualquer padro existente nos dados a
31 / 45
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
32 / 45
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
33 / 45
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
34 / 45
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
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
36 / 45
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
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
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
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
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
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
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
42 / 45
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
= (
43 / 45
ha (x)
44 / 45
ha (x) =
i=0 r
ai xi mod m ai xi ) mod m
i=0
= ( H =
a
ha (x)
45 / 45
Tabelas de Espalhamento