Anda di halaman 1dari 48

Dicionrios

Prof. Csar Melo

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;

remoo(k, d), chave x; busca(k, d), item associado a chave k;

As operaes

So classificados de acordo com as operaes que implementam Estticos;

Somente Busca, e.g ED vetor Semi-estticos;

Insero e Busca, e.g Hash com endereamento aberto; Dinmicos.


Todas, e.g rvore de busca, Hash com encadeamento.

TABELAS DE DISPERSO (HASH)

Introduo

Os mtodos de busca visto at momento: buscam informaes com base na comparao de suas chaves.

algoritmos eficientes consideram os elementos ordenados e tiram proveito disso.

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

Famlia[1] = Jos Maria Famlia[3] = Artur Famlia[2] = Leila

Em qual posio est 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)

Conjunto de Chaves Busca Possveis K4 K5 K1 K2 K3

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

Mtodo da Diviso Mtodo da Multiplicao

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

#define N 101 int hash (int mat) { return (mat%N); }

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 dos 3 primeiros caracteres


h(k)= (chave[0]*B0 + chave[1]*B1 + chave[2]*B2) resto m

m o tamanho da tabela chave[ ] so os caracteres da string B um base qualquer

Mtodo dos 3 primeiros caracteres


Exemplo : String = Joseph M=10007 ( tamanho da tabela) B=53 h(Joseph) = (74*1 +111* 53 +115 *2809) resto M = 8768

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

Hashing Perfeito: Exemplo

Como construir a Tabela Hash para armazenar as informaes dos alunos de uma determinada turma de um curso especfico?

Identificando as partes significativas da chave.

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.

Tabela ASCII: C (67); H (72); A (65); V (86); E (69) e S (83).

Hashing Imperfeito

Hashing Imperfeito

Se aumentssemos o tamanho da tabela para P=13 (0..12) C = 67 = 2 H = 72 = 7 A = 65 = 0 V = 86 = 8 E = 69 = 4 S = 83 = 5

Hashing Imperfeito

Se aumentssemos o tamanho da tabela para P=14 (0..13) C = 67 = 11 H = 72 = 2 A = 65 = 9 V = 86 = 2 E = 69 =13 S = 83 = 13

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

Coliso Probing h(x)+2

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

Tabela aps a aplicao de Double Hashing

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.

Anda mungkin juga menyukai