30
Tabela Hashing Profa. Dra. Denise Guliato FACOM - UFU

1 Tabela Hashing

Embed Size (px)

DESCRIPTION

Hashing

Citation preview

Tabela Hashing

Tabela HashingProfa. Dra. Denise GuliatoFACOM - UFUTabela HashingComo 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 HashingOs 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 HashingProcesso: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 HashingendereoFuno Hashingchave

Uma funo hashing ideal aquela capaz de mapear n chaves em m endereos, sem a possibilidade de ocorrer uma coliso.MASQualquer 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 HashingEsse 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 HashingA probabilidade p de se inserir N itens consecutivos sem coliso em uma tabela de tamanho M :

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

NP100,883220,524230,493300,303Tabela HashingUma 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 HashingVrias 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 HashingE 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 HashingVantagem 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 HashingPrograma 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 HashingImplementao 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 HashingComo resolver colises???

Listas Encadeadas

Endereamento AbertoTabela HashingListas EncadeadasUma 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 HashingListas EncadeadasExemplo: 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 HashingListas EncadeadasFaa o mapeamento para a palavra U B E R L A N D I ATabela HashingEndereamento AbertoQuando 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 HashingEnderaamento AbertoNo 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 HashingEnderaamento AbertoSe 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 HashingEndereamento Aberto h(L) = h(12) = 5, h(U ) = h(21) = 0, h(N ) = h(14) = 0, h(E) = h(5) = 5, h(S) = h(19) = 5.

LimitaesO 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 operaes pode ser O(N). Caso em que todos os elementos inseridos colidirem. Vantagens e DevantagensVantagens 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 AplicaesAlgumas 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 HashingReferncias

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