Sie sind auf Seite 1von 30

Tabela Hashing

Profa. Dra. Denise Guliato


FACOM - UFU

Tabela Hashing
Como visto at agora o tempo para realizar operaes de
insero, remoo e pesquisa proporcional ao tamanho
da estrutura e ao tipo da estrutura de dados;
O ideal seria que tais operaes fossem realizadas em
tempo constante.
A tcnica denominada Tabela hashing (ou espalhamento
ou dispero), se bem projetada, permite realizar
operaes de insero, remoo e pesquisa de maneira
constante: O(1)
O preo pago por essa eficincia um uso maior de memria

Tabela Hashing
Os mtodos de pesquisa apresentadas at
agora so baseados na comparao da
chave de pesquisa com as chaves
armazenadas na Tabela. O mtodo de
transformao de chave ( ou hashing)
completamente diferente:
Os registros armazenados em uma tabela so
diretamente endereados a partir de uma funo
de transformao aritmtica sobre a chave de
pesquisa

Tabela Hashing
Processo:
Calcular o valor da funo de
transformao (ou funo hashing), que
transforma a chave de pesquisa em uma
entrada para a tabela;
Considerando que uma ou mais chaves
podem ser transformadas em uma
mesma entrada na tabela, estratgias
para lidar com colises so necessrias.

Tabela Hashing
chave

Funo
Hashing

endereo

Uma funo hashing ideal aquela capaz de


mapear n chaves em m endereos, sem
a
possibilidade de ocorrer uma coliso.

MAS
Qualquer que seja a funo de
transformao, algumas colises iro
ocorrer fatalmente, e tais colises tm
de ser resolvidas de alguma forma.
Mesmo que se obtenha uma funo de
transformao
que
distribua
os
registros de forma uniforme entre as
entradas da tabela, existe uma alta
probabilidade de haver colises.

Tabela Hashing
Esse fato exemplificado pelo paradoxo do
aniversrio (Feller,1968, p. 33 ):
grupo de 23 ou mais pessoas, juntas ao acaso,
existe uma chance maior do que 50% de que 2
pessoas comemorem aniversrio no mesmo dia.

Assim, se for utilizada uma funo de hashing


uniforme que enderece 23 chaves randmicas
em uma tabela de tamanho 365, a
probabilidade de que haja colises maior do
que 50%.

Tabela Hashing
A probabilidade p de se inserir N
itens consecutivos sem coliso em
uma tabela de tamanho M :

Tabela Hashing
Alguns valores de p para diferentes
valores de N, onde M = 365.
N

10

0,883

22

0,524

23

0,493

30

0,303

Tabela Hashing
Uma funo de transformao deve mapear
chaves em inteiros dentro do intervalo
[0...M 1], onde M o tamanho da tabela.
A funo de transformao ideal aquela
que:
Seja simples de ser computada.
Para cada chave de entrada, qualquer uma das
sadas possveis igualmente provvel de
ocorrer.

Tabela Hashing
Vrias funes hashing tm sido utilizadas;
Um mtodo que funciona muito bem usa o
resto da diviso por M .
h(K) = K mod M

onde K um inteiro correspondente chave.

Tabela Hashing
E se a chave for no numrica???
Nesse caso tais chaves devem ser transformadas em nmeros:

Onde

n o nmero de caracteres da chave;

Chave[i] corresponde representao ASCII do i-simo caractere da


chave;

p[i] um inteiro de um conjunto de pesos gerados randomicamente


para 1 i n.

Tabela Hashing

Vantagem de se usar pesos: Dois


conjuntos diferentes de pesos p1[i] e
p2[i], 1 i n, leva a duas funes
de transformao h1(K) e h2(K)
diferentes.

Tabela Hashing
Programa que gera um peso para
cada caractere de uma chave
constituda de n caracteres:
void GeraPesos(int p[])
{ /* Gera valores randomicos entre 1 e 10.000 */
int i;
srand(time(NULL));
for (i = 0; i < n; i++)
p[i] = 1+(int)(10000.0*rand()/(RAND_MAX+1.0));
}

Tabela Hashing
Implementao da funo hashing h():
int h(int Chave, int p, int M)
{
int i;
unsigned int Soma = 0;
int comp = strlen(Chave);
for (i = 0; i < comp; i++)
Soma += (unsigned int)Chave[i] * p[i];
return (Soma % M);
}

Tabela Hashing
Como resolver colises???
Listas Encadeadas

Endereamento Aberto

Tabela Hashing
Listas Encadeadas
Uma das formas de resolver as
colises simplesmente construir
uma lista linear encadeada para cada
endereo da tabela. Assim, todas as
chaves com mesmo endereo so
encadeadas em uma lista linear.

Tabela Hashing
Listas Encadeadas
Exemplo: Se a i-sima letra do alfabeto
representada pelo nmero i e a funo de
transformao h(Chave) = Chave mod M utilizada
para M = 7, o resultado da insero das chaves P E S
Q U I S A na tabela o seguinte:
Por exemplo, h(A) = h(1) = 1, h(E) = h(5) = 5, h(S) =
h(19) = 5, etc

Tabela Hashing
Listas Encadeadas
Faa o mapeamento para a palavra
UBERLANDIA

Tabela Hashing
Endereamento Aberto
Quando o nmero de registros a serem
armazenados na tabela puder ser previamente
estimado, ento no haver necessidade de
usar apontadores para armazenar os registros;
Existem vrios mtodos para armazenar N
registros em uma tabela de tamanho M > N ,
os quais utilizam os lugares vazios na prpria
tabela para resolver as colises. (Knuth,
1973, p.518)

Tabela Hashing
Enderaamento Aberto
No Endereamento aberto todas as chaves
so armazenadas na prpria tabela, sem o
uso de apontadores explcitos (M > N);
Existem vrias propostas para a escolha de
localizaes alternativas. A mais simples
chamada de hashing linear, onde a posio hj
na tabela dada por:
hj = (h(x) + j) mod M, para 1 j M 1.

Tabela Hashing
Enderaamento Aberto
Se a i-sima letra do alfabeto representada
pelo nmero i e a funo hashing
h(Chave) = Chave mod M
utilizada para M = 7,
ento o resultado da insero das chaves
L U N E S na tabela T, usando hashing linear
para resolver colises mostrado a seguir:

Tabela Hashing
Endereamento Aberto
h(L) = h(12) = 5,
h(N ) = h(14) = 0,
h(S) = h(19) = 5.

h(U ) = h(21) = 0,
h(E) = h(5) = 5,

Limitaes
O Hash uma estrutura de dados do tipo
dicionrio:
No permite armazenar elementos
repetidos.
No permite recuperar elementos
sequencialmente (ordenado).
Para otimizar a funo Hash
necessrio conhecer a natureza e
domnio da chave a ser utilizada.
No pior caso a complexidade das

Vantagens e Devantagens
Vantagens
Algoritmos simples e eficientes para insero,
retirada e busca.
Alta eficincia no custo de pesquisa, que O(1)
para o caso mdio.
Desvantagens
nenhuma garantia de balanceamento
espao sub-utilizado nas tabelas
o grau de espalhamento sensvel funo de
hashing utilizada e ao tipo de informao usada
como chave.

Algumas Aplicaes
Algumas reas de aplicao de Hashing:
Integridade de Dados
Criptografia
Compactao de Dados
Thesaurus
no que tange computao, um tesauro representa
uma base de dados contendo tpicos
semanticamente ortogonais, comumente utilizada em
tarefas de busca.

Tabela Hashing
Referncias
Nivio Ziviani. Projeto de Algortmos
com
implementao em PASCAL e C. Ed. Thonson.
2004.
David Menotti aula 25
http://www.decom.ufop.br/menotti/aedI092/
- Notas de aulas Prof. Thales Castro

Das könnte Ihnen auch gefallen