Anda di halaman 1dari 21

Tabelas

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

2011 Vinicius Cardoso Garcia

Introduo
Conforme visto na aula passada as tabelas hash:
Diminuem a quan-dade de endereamento quando comparadas a uma tabela de endereamento direto Calcula os ndices (ou endereos) a par-r da funo hash (h)

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Funes Hash
O que faz uma funo hash de boa qualidade?
Sa-sfaz, aproximadamente, hiptese do hash uniforme
Cada chave tem igual probabilidade de efetuar o hash para qualquer das m posies, no importando o hash de qualquer outra chave.

Contudo, de forma geral, a distribuio de probabilidade das chaves no conhecida


Impossibilitando a obteno de um hash uniforme!

Ocasionalmente conhecemos a distribuio


Por exemplo: Chaves so nmeros reais aleatrios k, tal que 0 k 1, ento: h(k) = km
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Funes Hash
Na pr-ca u-lizam-se:
Heurs-cas para denir as funes hash

De forma geral, as funes hash supoe que o universo de chaves o conjunto de nmeros naturais N.
E a par-r de uma chave qualquer realizam alguma operao para represent-la por um nmero inteiro!

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Mtodo de Diviso Mtodo de Diviso


Neste mtodo mapeia-se uma chave k para uma ! Neste mtodo mapeia-se uma chave k para uma posio m tomando ooresto da a diviso inteira: posio m tomando resto d diviso inteira:

h " k #$k mod m


exemplo: Por Por exemplo: Se m=12 e k=100, ento h(k)=4 ento h(k)=4 Se m=12 e k=100, ! Valores de m Valores de m De forma geral evita-se potencias De forma geral evita-se potencias de 2 de 2 Uma escolha um um no m no muito Uma boa boa escolha primo primo uito prximo de prximo e 2uma potncia de 2 uma potncia dde
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Mtodo de Diviso
Exemplo:
Suponha uma tabela hash, com colises resolvidas com encadeamento, para conter aproximadamente 2000 cadeias de caracteres Suponha tambm tolera-se uma pesquisa malsucedida com uma mdia de 3 elementos Assim, m=701
Primo prximo de 2000/3 e distante de qualquer potencia de 2.

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Mtodo da MulJplicao
Este mtodo opera em duas etapas:
Primeira:
Mul-plica-se a chave k por uma constante A (0 < A < 1) e extrai-se a parte fracionria de kA.

Segunda:
Mul-plica-se o valor encontrado por m e toma-se o piso.

Funo Hash:
h(k) = m(kA mod 1)

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Mtodo da MulJplicao Mtodo da Multiplicao


Uma vantagem deste mtodo que o valor de m no cr-co! m no crtico! Pode-se escolher uma potncia de 2 2 Pode-se escolher uma potncia de

Uma vantagem deste mtodo que o valor de

Quanto ao valor dee A: Quanto ao valor d A: funcionar c com qualquer alor de A. Contudo, Ir Ir funcionarom qualquer vvalorde A. Contudo, funciona melhor com determinados valores que funciona melhor com determinados valores que outros. outros. Por exemplo: um valor sugerido
Por exemplo: um valor sugerido
A!" # 5$1%&0,6180339887'
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Hash Universal
Dado que uma tabela hash tenha uma funo hash xa
Assim, um possvel ataque a esta mquina seria a escolha das chaves que geram o mesmo hash!

A nica maneira ecaz de melhorar a situao escolher uma funo hash aleatoriamente
Esta abordagem chamada de hash universal. Ou seja, escolhe-se uma funo hash ao acaso a par-r de uma classe de funes cuidadosamente projetada no incio da aplicao.
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

Hash Universal
Seja H uma coleo nita de funes hash que mapeia um dada universo de chaves no intervalo {0, 1, ..., m-1}
Esta coleo dita ser universal se, para cada para de chaves k,l H, o nmero de funes hash H para as quais h(k)=h(l) no mximo H Ou seja, as chaces de coliso no maior que 1/m

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

10

Hash Universal
Teorema11.3
Suponha que uma funo hash h seja escolhida a par-r de uma coleo universal de funes hash e seja usada para efetuar o hash de n chaves em uma tabela T de tamanho m, usando encadeamento para resolver as colises. Se a chave k no est na tabela, esto o comprimento mximo esperado para nh(k) da lista para a qual a chave k efetua o hash no mximo . Se a chave k est na tabela, ento o comprimento esperado nh (k) da lista que contm a chave k no mximo 1 + .
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

11

Hash Universal
Corolrio 11.4:
Usando-se o hash universal e a resoluo de colises pelo encadeamento em uma tabela com m posies, demora o tempo esperado (n) para tratar qualquer sequncia de n operaes INSERT, SEACH e DELETE contendo O(m) operaes INSERT.

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

12

Projeto de classe universal de funes hash Inicialmente escolhe-se um nmero primo p grande o suciente para que todas chave k possvel esteja no intervalo [0, p-1] Seja Z*p = {0, 1, ..., p-1} e Zp = {1, ..., p-1}, onde p > m. possvel denir a funo hash ha,b para qualquer a Z*p e b Zp sando a transformao linear: Cada funo hash ha,b(k) mapeia Zp para Zm
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

ha,b(k)=((ak+b) mod p) mod m

13

Endereamento Aberto
No endereamento aberto, todos os elementos esto armazenados na prpria tabela hash
Para se inserir um elemento com endereamento aberto, sondamos a tabela at encontrarmos uma posio vazia. Para determinar quais as posies a serem sondadas, estende-se a funo hash:
H: U x{0,1,...,m-1}{0,1,...,m-1} Assim, para uma chave k, a sequncia de sondagem :
h(k,0), h(k,1), ..., h(k, m-1)
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

14

HASH-INSERT(T,k)
1. 2. 3. 4. 5. 6. 7. 8. i 0 Repeat jh(k,i) if T[j] = None T[j]k return j else i i+1 Un-l i = m Error Hash table overow
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

15

HASH-SEARCH(T,k)
1. 2. 3. 4. 5. 6. 7. i 0 Repeat jh(k,i) if T[j] = K return j i i+1 Un-l T[j] = None or i=m Return None

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

16

Sondagem Linear
Dada uma funo de hash comum h', referida como funo hash auxiliar, a sondagem linear :
h(k,i)=(h'(k)+i) mod m, i=0,1,...,m-1

Esta implementao facil!|


Contudo h o aparecimento do agrupamento primrio
So construdas longas sequncias ocupadas!

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

17

Sondagem QuadrJca
A funo hash da forma:
h(k,i) = (h'(k)+c1i+c2i2) mod m
Onde C1 e C2 so constantes auxiliares diferentes de zero.

Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

18

Anlise do Endereamento Aberto


Teorema 11.6:
Dada uma tabela hash de endereo aberto com fator de carga = n/m < 1, o nmero esperado de sondagens em uma pesquisa mal sucedida no mximo 1/(1-), supondo-se hash uniforme.

Corolrio 11.7:
A insero de um elemento em uma tabela hash de endereo aberto com fator de carga exige no mximo 1/(1-) sondagens em mdia, supondo- se hash uniforme
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

19

Anlise do Endereamento Aberto


Anlise do Endereamento Aberto
Teorema 11.8: Teorema 11.8: Dada uma tabela hash de endereamento aberto Dada uma tabela hash de endereamento com fator de carga carga ! < 1, o e sondagens aberto com fator de< 1, o nmero dnmero de sondagensesquisa bpesquisa bem no mximo em uma p em uma em sucedida sucedida no
mximo (1/!)ln(1/(1-!))

supondo-se o hash uniforme ee considerando-se supondo-se o hash uniforme considerando-se que cada chave na tabela tem igual probabilidade que cada chave na tabela tem igual de probabilidade de ser pesquisada. ser pesquisada.
Algoritmos e Estrutura de Dados Tabelas Hash 2011 Vinicius Cardoso Garcia

20

AJvidades complementares
Leitura do captulo 11 do Cormen Exerccios
1. Considera uma Tabela hash com m=1000 e a funo hash h(k) = m(kA mod 1) para A=(Sqrt(5)-1)/2. Implemente uma funo que calcule os hash para uma chave k 2. Implemente em Python uma tabela hash de endereamento aberto . Seja a tabela com 11 posies, e seja a funo de hash primria h'(k)=k mod m. 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

21

Anda mungkin juga menyukai