You are on page 1of 4

HASHING EXERCCIOS 1. Pesquise sobre outro(s) mtodo(s) alm do Mtodo da Diviso Inteira.

Mtodo da Diviso Inteira Mtodo da Diviso O mtodo da diviso consiste no seguinte: suponha que os elementos x que devem ser armazenados sejam nmeros inteiros, uma funo hash que pode ser utilizada para espalhar tais nmeros em um array (tabela hash) : h(x) = x % tablesize onde tablesize o tamanho do array. Principal problema: Elementos distintos podem receber o mesmo ndice, por exemplo se tablesize 10 e os elementos terminam todos em zero. Obs: Utilizar tablesize como sendo um nmero primo minimiza o problema acima e uma idia muito empregada na criao de funes hash. Para o caso onde o conjunto de elementos constitudo de strings, uma funo hash pode ser obtida somando os valores ascii dos caracteres e procedendo como acima. Um dos problemas que se tablesize muito grande a funo no distribui bem os elementos. Por exemplo: suponha tablesize = 10.007 (nmero primo) e que todas as strings possuam no mximo oito caracteres. Desde que o cdigo ascii de um caracter no mximo 127 a funo acima assumir valores entre 0 e 1016, no gerando uma distribuio equilibrada. Uma dentre as possveis solues para esse problema elevar o valor da soma dos caracteres ascii ao quadrado e s ento dividi-lo pelo tamanho da tabela hash. A funo abaixo descreve a implementao da funo hash descrita anteriormente para o caso de strings. int Hash(char *a, int stringsize) {int hashval, j; hashval = (int) a[0]; for (j = 1; j < stringsize; j++) hashval += (int) a[j]; return(hashval % tablesize); /* supondo que tablesize e' global */ Mtodo da Dobra Neste mtodo, as chaves so interpretadas como uma seqncia de dgitos escritos num pedao de papel. Ele consiste em "dobrar" esse papel, de maneira que os dgitos se superponham sem levar em considerao o "vai um" como mostra a figura abaixo.

O processo repetido at que os dgitos formem um nmero menor que o tamanho da tabela hash. importante destacar que o mtodo da dobra tambm pode ser usado com nmeros binrios. Nesse caso, ao invs da soma, deve-se realizar uma operao de "ou exclusivo", pois operaes de "e" e de "ou" tendem a produzir endereos-base concentrados no final ou no incio da tabela. Mtodo da Multiplicao Neste mtodo, a chave pode ser multiplicada por ela mesma ou por uma constante, e ter o seu resultado armazenado em uma palavra de memria des bits. Considere que o nmero de bits necessrios para enderear uma chave na tabela hash sejar. Dessa forma, para compor o endereo-base de uma chave, descartam-se os bits excessivos da extrema direita e da extrema esquerda da palavra. No exemplo abaixo, separamos os 4 bits centrais da palavra chave, pois a tabela hash tem tamanho 16 Mtodo da subtrao Pode ser usado quando as chaves so consecutivas mas no comeam em um. No apresenta colises e aplicado em pequenas listas. Ex.: Nro. de matrcula dos alunos de uma universidade: 20020001 20020002 20020003 H(Nro. Matric)= Nro. Matric - 20020000 Mtodo da Extrao de Dgito Neste mtodo dgitos da chave so extrados e usados como endereos. Ex.: H(Chv) = extrair dgitos 1, 3 e 4 do cdigo do funcionrio. H(547790) = 577 H(856430) = 864 H(523233) = 532 Mtodo quadrtico O valor de hash obtido atravs do quadrado de algum dos componentes da funo. Ex.: H(Chv) = Chv2 e extrao dos 3 primeiros dgitos. H(8452) = 84522 = 71436304 = 714

2. 1. Assuma uma tabela de espalhamento (Tabela Hash) com quatro posies. Se a seqncia de quadrados perfeitos: 1, 4, 9, 16, ...., i , for armazenada nesta tabela, conforme a seguinte funo hashing ? f(x) = x mod 4. Como se dar a distribuio dos elementos pelas posies da tabela? Qual o problema gerado por esta situao? Justifique sua resposta.

Tabela Hash 1=1 mod 4 = 1 4= 4 mod 4= 0 9=9 mod 4 = 1 16=16 mod 4= 0 25 = 25 mod 4 = 1 36 = 36 mod 4 =0

16

elementos -> ->

1 elementos 2 vazio 3 vazio

1 ->

9 ->

25

Justificativa: Os elementos serao distribudos apenas nas estruturas 0 e 1, sendo que as estruturas 2 e 3 ficaram vazias, no havendo uma diviso perfeita entre as demais estruturas.

3.1. Assuma uma tabela de espalhamento (Tabela Hash) com cinco posies. Considere o seguinte conjunto de chaves alfanumricas: {ABC, ACB, BAC, BCA, CBA, CAB} armazenadas nesta tabela, conforme a seguinte funo hashing ? f(x) = x mod 5. Como se dar a distribuio dos elementos pelas posies da tabela? Na

sua opnio, qual o problema gerado por esta situao? Justifique sua resposta. PS: Valores na Tabela ASCII: A = 65, B = 66 e C = 67. Por exemplo, o valor de x para a primeira chave ABC = 65+66+67. ABC= 65+66+67=198 ACB= 65+67+66=198 BCA=66+67+65=198 BAC=66+65+67=198 CBA=67+66+65=198 CAB=67+65+66=198 ABC= 198 mod 5 = 3 ACB= 198 mod 5 = 3 BCA=198 mod 5 = 3 BAC=198 mod 5 = 3 CBA=198 mod 5 = 3 CAB=198 mod 5 = 3 0 vazio 1 vazio 2 vazio 3 4 vazio Justificativa: Todos os clculos levam ao mesmo valor 198, e os nmeros 0,1,2 e 4 ficaram vazios(sem elementos) , no possuindo uma diviso perfeita as outras estruturas apenas alocada na estrutura 3.

198

elementos ->