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

Universidade de Mogi das Cruzes

Estrutura de Dados e Algoritmos


Aula 10 Pesquisa Hashing - Funo Hash
Pesquisa Hashing
Hash = espalhar/ distribuir
Hashing um mtodo de pesquisa baseado na transformao do valor da
chave de pesquisa por uma funo denominada de Hash.
Este mtodo possibilita a ordenao atravs de funes de distribuio,
possibilitando partir de um simples clculo de endereo determinar o
posicionamento de um dado.

A pesquisa Hashing consiste basicamente em duas etapas:


Passo 1 Atravs da funo Hash, transformar o valor da chave de
pesquisa em um endereo da tabela.
Passo 2 Considerando que dois ou mais valores das chaves podem ser
mapeados para o mesmo endereo da tabela, deve-se aplicar um mtodo
para resolver essas colises.

Universidade de Mogi das Cruzes


Estrutura de Dados e Algoritmos

Funo Hash

A Funo Hash
Transforma o valor de uma chave de pesquisa K (K pertence ao DCH =
Domnio de valores de chaves ) em um inteiro dentro do intervalo [0...(n-1)]
onde n o tamanho da tabela.

(Tamanho N)

Veja a figura abaixo:

Tabela Hash

0
1

Hash
h(k)=3

Domnio de valores de chaves

2
3

n-1

Insero com Hash


Para inserir uma chave na tabela hash, primeiro temos que calcular (atravs
de uma funo Hash) o valor correspondente na tabela Hash, aps
calculado, insere-se a chave neste endereo.
Pesquisa com Hash

Para pesquisar um elemento da tabela Hash, basta encontrar para a chave


procurada o valor correspondente na tabela Hash e fazer a busca neste
endereo.

Universidade de Mogi das Cruzes


Estrutura de Dados e Algoritmos

Existem diversos tipos de Funes Hash. Cada uma com um mtodo prprio,
mas todas com o mesmo propsito: Transformar a chave em um valor n
tabela Hash.
Vamos ver alguns tipos de Funes Hash.
Funo Hash baseada na diviso

Esta funo utiliza o resto da diviso do valor da chave K pelo numero de


entradas da tabela hash N.
H(k) = K mod N

ou

H(k) = mod (K, N)

Exemplos:
Supondo que N= 100.
Valores de K

Endereo H(K)=mod(k, 100)

Endereo H(k)=mod(K, 103)

102

102

1127

27

97

874

74

50

2030

30

73

2027

27

70

Obs.: a) Melhor que o N seja um nmero primo para que reduzir as colises.
b) Quando a chave for uma String de caracteres pode-se somar os
valores correspondentes a cada caractere antes de calcular a funo mod,
ou seja, o resto da diviso.

Universidade de Mogi das Cruzes


Estrutura de Dados e Algoritmos

Funo Hash - Direta

Esta funo parte do princpio em que o valor do Hashing obtido sem


nenhuma manipulao de algoritmo.
Exemplos:
Considera-se uma letra de um campo String e o valor do hashing igual
ordem da letra dentro do alfabeto.
Valores da chave K

Endereo direto H(K)

PAULO

H(U) =21

MARISA

H(R) = 18

JOSE

H(S)= 19

ANTONIO

H(T)= 20

Funo Hash - Subtrao

Esta funo aplicvel em casos onde as chaves tem valores consecutivos


mas no comeam em 1.
Exemplos:
Cdigo de funcionrios que comeam em 1000 e vo at 1100.A funo hash
consiste em subtrair 1000 do valor da chave.
Valores da chave K

Endereo calculado H(K)

1027

1027 1000 = 27

Universidade de Mogi das Cruzes


Estrutura de Dados e Algoritmos

Funo Hash Quadrtica

Esta funo parte do princpio em que o valor do Hashing obtido elevandose a chave ao quadrado e o endereo uma parte central do valor
resultante.
Exemplos:
H(8452) = 84522 = 71436304
Valores da chave K

Endereo calculado H(K)

8452

4363

Funo Hash Holding

A chave dividida em partes, cujo tamanho se enquadra com o endereo


exigido. Soma-se as partes da esquerda e da direita parte central e
descarta-se o digito que passar do tamanho disponvel para o endereo.
Exemplos:
Considerando o tamanho do endereo com 3 digitos.
H(123456789) =

123 456 789 = 123+789+456 = 1368 (um descartado)

Valores da chave K

Endereo calculado H(K)

123456789

368

Universidade de Mogi das Cruzes


Estrutura de Dados e Algoritmos

Importante: Uma boa funo de Hashing aquela em que distribui


uniformemente os valores das chaves nos endereos da tabelas Hash,
evitando ao mximo, que muitos endereos tenham muitas chaves
mapeadas e muitos endereo fiquem sem chave alguma.

Exerccio:
Construa voc mesmo uma Funo Hash e insira a palavra
ALGORITMOS na sua tabela Hash.
Depois verifique se a chave R pertence tabela Hash.

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