Documente Academic
Documente Profesional
Documente Cultură
Repetio Tamanho
1 n
2 n/2
3 n/4
... ...
log2 n 1
Busca Recursiva
struct arv {
int info;
struct arv* esq;
struct arv* dir;
};
struct aluno {
int mat;
char nome[81];
char email[41];
char turma;
};
K3
K4
K5 Funo Hash
K1
K2
Tabela Hash
Conceitos
h(K4)
h(K1)
h(K2)
Tabela Hash
Conceitos
Hash em Banco de Dados Carla
Mariana Bloco 1
Adriana 19/04/85
Paulo 03/12/87
Carla 13/08/81 Jos
Funo Hash
Jos 21/02/85 Juliana Bloco 2
h (k) = k resto m
Exemplo :
k = 10028
m = 5013 (m o tamanho da tabela)
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
Mtodo da Adio;
m o tamanho da tabela
B um base qualquer
Mtodo dos 3 primeiros
caracteres
11 Coliso 1
10 20 30
4 14
6 12 25
Tabela Hash
Colises
Algumas Tcnicas
Linear Probing
Quadratic Probing
Double Hashing
rea de Overfow
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.
11 Coliso 1 1
h(x)+i
Probing
11
5 5
Tabela hash 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 1 1 1 1
Probing 11 21 Coliso 11 11 11
h(x)+1
3 Probing 3 21 Coliso 3 3
h(x)+2
Probing 21
5 5 h(x)+3
5 5
Colises
Quadratic Probing
Comportamento parecido com Linear Probing, s que
agora, o incremento quadrtico, nova_posio= h(x) + i2.
21 Coliso 1 1 1
Probing
h(x) + 1 2 21 Coliso 2 2
i=1;
Probing
h(x) + 4
i=2;
21
Tabela Hash Tabela Hash Tabela aps a aplicao
de quadratic probing
Colises
Quadratic Probing
Vantagens
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).
x=21;
m=5;
0 0
h(x)= x mod m;
g(x)= 2+(x mod (m - 2)); 21 Coliso 1 1 1 1
nova_posio=h(x) + g(x).
Probing 2 2
g(x)+h(x)
Calculando:
3 3 21
h(x)= 21 mod 5 = 1;
g(x)= 2+(21 mod (5-2)) = 2; 4 4
nova_posio=1 + 2 = 3. 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.
Colises
rea de Overflow
A tabela Hash dividida em rea Primria erea
Secundria, est ltima armazena as colises.
21Coliso 1 1
2 2
rea primria Probing 3 3
ult +1 4
rea secundria 4
ult=0; 21 ult=1;
ult = a posio do ltimo
elemento na rea
secundria.
Tabela Hash Tabela aps o uso
da rea de overflow
Colises
rea de Overflow
Vantagens
Colises no usam o espao da rea primria;
Acesso mais rpido.
Desvantagens
Dois parmetros afetam diretamente a performance
da tabela, o tamanho das reas primria e secundria.
Aplicaes
Em Banco de Dados;
Em implementaes das tabelas de smbolos dos
compiladores das linguagens de programao;
Em Jogos, para acessar rapidamente a posio
para qual o personagem ir mover-se;
Na implementao de um dicionrio.
Exemplo
Tipos de Dados
struct aluno {
int mat;
char nome[81];
char email[41];
char turma;
};
#define N 100
typedef Aluno* Hash[N];
Exemplo
Funo Hash
...
/* atribui informao */
strcpy(tab[h]->nome,nome);
strcpy(tab[h]->email,email);
tab[h]->turma = turma;
return tab[h];
}
else printf(Aluno ja cadastrado\n);
}
Exemplo
Busca - 2 Funo Hash
h(x) = (N 2 x) % (N 2)
struct aluno {
int mat;
char nome[81];
char turma;
char email[41];
struct aluno* prox;
};
typedef struct aluno Aluno;
Exemplo
Busca - Coliso com Lista Encadeada
...
if (a==NULL) { /* no encontrou o elemento */
a = (Aluno*) malloc(sizeof(Aluno));
a->mat = mat;
a->prox = NULL;
if (p==NULL)
tab[h] = a;
else
p->prox = a;
}
/* atribui informao */
strcpy(a->nome,nome);
a->turma = turma;
return a;
}