Definio
Estruturas que permitem a recuperao da informao a partir do seu valor; Contrasta com filas e pilhas que posicional; Trs operaes: Insero(k, d), chave k;
As operaes
Introduo
Os mtodos de busca visto at momento: buscam informaes com base na comparao de suas chaves.
O algoritmo mais eficientes tem custo computacional O(log n). A busca baseada em hashing (tabela de disperso ou espalhamento) mais eficiente. Na mdia, possvel encontrar a chave com apenas K COMPARAES, onde k beemmm menor que o tamanho do conjunto de chaves.
Introduo
Vetores utilizam ndices para armazenar as informaes. Atravs do ndice as operaes sobre vetores so realizadas no tempo O(1)=constante. Vetores No fornecem mecanismos para calcular o ndice a partir de uma informao armazenada. A pesquisa no O(1).
1 2 3 4 5 6
Famlia
Jos Maria
Leila
Artur
Jolinda
Gisela
Alciene
Introduo
A forma de resolver o problema de acesso a partir de uma chave, e ainda garantir eficincia, atravs do uso de tabelas de disperso (hash table)
Conceitos
Esquema da Tabela Hash
K3 K4 K5 K1 K2
Funo Hash
Tabela Hash
Conceitos
h(K4)
h(K3) h(K5)
h(K1) h(K2)
Tabela Hash
Conceitos: exemplo
000.000.001-01 143.576.342-23 345.365.768-93 879.094.345-45 999.999.999-99
Funo de Hashing
Tabela Hash
19 37 50 85 20
19 123.456.781-00; Fausto Silva; Av. Canal. N 45. 20 ... 37 143.576.342-23; Carla Perez; Rua Celso Oliva. N 27. ... 50 345.365.768-93; Gugu Liberato; Av. Atlntica. S/N. ... 85 879.094.345-45 ; Hebe Camargo; Rua B. N 100. ...
Funes Hash
Funes Hash
Uma funo de disperso (funo hash) mapeia uma chave de busca para um ndice da tabela. O ideal que a funo fornea ndices nicos para o conjunto de chaves. A funo de Hashing extremamente importante, pois ela responsvel por distribuir as informaes pela Tabela Hash. A implementao da funo de Hashing tem influncia direta na eficincia das operaes da Hash. Quanto melhor for o espalhamento mais eficinte sero as operaes Tipos de Funes Hash
Propriedades
Propriedades de Boas Funes Hash
Ser de eficientemente avaliada (fcil implementao). Devem espalhar bem as chaves de busca (evitar colises).
Mtodo da Diviso
h (k) = k resto m
Potncias de 2 deve ser evitada para valores de m. m deve ser um nmero primo distante de pequenas potncias de 2 (m grande). O fator de carga da tabela um bom parmetro para iniciar a busca por m.
Mtodo da Diviso
Exemplo : k = 10028 m = 5013 (m o tamanho da tabela) h (10028) = 10028 resto 5013 h (10028) = 2
Mtodo da Diviso
Exemplo de Funo Hash
Mtodo da Multiplicao
h(k) = (m * (kA resto 1))
A escolha de m no To relevante; A uma constante : 0<A<1 Extrair a parte fracionria de kA, ou seja , kA resto 1. Utilizar o piso(floor) do resultado A = 0.6180339887...
Mtodo da Multiplicao
Exemplo : k = 123456 | m = 1024 | A = 0.61803... h(k) = 1024*(123456*0.61803... resto 1) = 1024*(76300,0041151... resto 1) = 1024*0,0041151... = 4.21386... h(k)= 4
Funes de Converso
Converso de Strings para Inteiros
Mtodo da Adio; Mtodo dos 3 primeiros caracteres; Mtodo da ponderao.
Mtodo da Adio
Os valores dos caracteres da string correspondentes na tabela ASCII so somados. A chave o resultado dessa soma.
Mtodo da Adio
Exemplo : String = aed2 m = 256 ( tamanho da tabela) aed2 = 97 + 101 + 100 + 50 (valores dos caracteres na tabela ASCII) h (348) = 348 resto 256 = 92
Mtodo da Ponderao
K = chave [i] p [i ]
i =1
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 de forma aleatria.
Mtodo da Ponderao
Exemplo : String = Joseph M=10007 ( tamanho da tabela) pesos[] = {102, 15, 151, 32, 89, 501, 21, 70} h(Joseph) = (74*102 +111*15 +115*151 + 101*32+112*89 + 104*501 ) resto M = 1819
Hashing Perfeito
Hashing Perfeito
Caracterstica:
Para quaisquer chaves x e y diferentes e pertencentes a A, a funo utilizada fornece sadas diferentes
Como construir a Tabela Hash para armazenar as informaes dos alunos de uma determinada turma de um curso especfico?
Analisando a chave: Desconsiderando o ltimo dgito (controle), temos outros dgitos com significados especiais:
97 1 12 34 - 4
chamada do aluno cdigo do curso perodo de ingresso ano de ingresso
Hashing Perfeito
Portanto, podemos considerar no clculo de endereo parte do nmero da matrcula. Esta parte mostra a dimenso que a Tabela Hash dever ter. Dimensionando a tabela com 100 elementos, qual a funo que aplicada sobre matrculas de alunos retorna os ndices dessa tabela? R: Depende qual a turma e o curso especfico dos alunos que devem ser armazenados.
Hashing Perfeito
Supondo que a turma seja do 2 semestre de 2011 (cdigo 112) e do curso de Corte e Costura (cdigo 35). Qual seria a funo de hashing perfeito !?
#define N 100 int h(int mat) { return (mat1123500)%N; }
Hashing Imperfeito
Hashing Imperfeito
Caractersticas:
Existem chaves x e y diferentes e pertencentes a A, onde a funo Hash utilizada fornece sadas iguais;
Hashing Imperfeito
Suponha que queiramos armazenar as seguintes chaves: C, H, A, V, E e S em um vetor de P = 7 posies (0..6) conforme a seguinte funo
h(k)
= ascii(k)%P.
Hashing Imperfeito
Hashing Imperfeito
Hashing Imperfeito
Tratamento de Colises
Colises
Coliso o mapeamento de duas (ou mais) chaves
para um mesmo posio no vetor. 11 Coliso 1
Um bom mtodo de resoluo de colises essencial, no importando a qualidade da funo de hashing. Mtodos para o tratamento de colises: Encadeamento Direto (chaining); Endereamento aberto (open adressing).
Colises
Encadeamento Direto (chaining)
Armazena em listas encadeadas as chaves que sofreram coliso. 10 20 30
4 6
Tabela Hash
14 12 25
Colises
Encadeamento Direto (Chaining)
Vantagens: Nmero ilimitado de elementos e colises; No necessrio prever antecipadamente a quantidade de elementos a serem inseridos. Desvantagens: Devido ao nmero ilimitado de elementos que podem ser inseridos, o desempenho da tabela hash fica prejudicado.
Colises
Endereamento Aberto (open addressing)
Neste mtodo as chaves que sofreram coliso so inseridas na prpria tabela. Algumas Tcnicas Linear Probing Quadratic Probing Double Hashing
Colises
Linear Probing
O valor do ndice correspondente a chave que sofreu coliso incrementado at que uma posio disponvel seja encontrada, nova_posio=(h(x)+i mod M). 11 Coliso
h(x)+i Probing
1 11
5
Tabela hash
5
Tabela aps a aplicao de linear probing
Colises
Linear Probing
Vantagens Mtodo simples e fcil de implementar, que pode gerar bons resultados. Desvantagens Faz surgir o fenmeno Clustering.
21Coliso
Probing h(x)+1
1 11 3 5
21
1 11 3 5
21 Coliso
Probing h(x)+3
1 11 3 5
1 11 3 21 5
Colises
Resultado Hash
final
da
Tabela
Colises
Quadratic Probing
Comportamento parecido com Linear Probing, s que agora, o incremento quadrtico, nova_posio= (h(x) + i2 mod M)
21 Coliso
Probing
h(x) + 1
1 2 21 Coliso
Probing
h(x) + 4
1 2
1 2
i=1;
i=2;
21
Tabela Hash Tabela Hash Tabela aps a aplicao de quadratic probing
Colises
Quadratic Probing
Vantagens uma alternativa ao linear probing, pois evita o clustering primrio. Desvantagens Poder surgir o clustering secundrio, no entanto, este menos severo que o primrio.
Colises
Double Hashing
Utiliza duas funes hashing para tratar a coliso, a primeira a mesma utilizada para o mapeamento da chave e a segunda uma espcie de funo incremento, nova_posio= (h(x)+ig(x) mod m).
x=21; m=5; h(x)= x mod m; g(x)= 2+(x mod (m - 2)); nova_posio=h(x) + g(x). Calculando: h(x)= 21 mod 5 = 1; g(x)= 2+(21 mod (5-2)) = 2; nova_posio=1 + 2 = 3 mod 5 = 3. 0 0
21 Coliso
Probing g(x)+h(x)
1 2 3 4
1 2 3 4
1 21
Tabela Hash
Colises
Double Hashing
Vantagens: uma tcnica eficiente, que nos permite a livre escolha da funo incremento. Desvantagens: Maior nvel de complexidade; Se a funo incremento for mal escolhida, ela nunca percorrer todos os espaos da tabela.