Beruflich Dokumente
Kultur Dokumente
BCC202 Aula 21 e 22
Algoritmos e Estruturas de Dados I
rvores de Pesquisa
rvores Binrias de Pesquisa
rvores AVL
2
Transformaes de Chaves
PROGRAMAO
FUNO
DE HASH
DE TRIPULAES
Colises
O paradoxo do aniversrio (Feller, 1968, p. 33)
Em um grupo de 23 ou mais pessoas, existe uma chance
maior do que 50% de que 2 pessoas comemorem o
aniversrio no mesmo dia.
10
0,883
22
0,524
23
0,493
30
0,303
Funes de Transformao
Uma 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.
10
11
b*i j
onde b a base do conjunto de caracteres (geralmente
b = 64 para BCD, 128 para ASCII, 256 para EBCDIC, ou
100 para alguns cdigos decimais), e i e j so pequenos
inteiros.
12
14
15
16
Resolvendo colises
Listas Encadeadas
Endereamento Aberto
17
PROGRAMAO
LISTAS
ENCADEADAS
DE TRIPULAES
Listas Encadeadas
Uma 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.
19
Listas Encadeadas
Exemplo: 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:
h(A) = h(1) = 1, h(E) = h(5) = 5, h(S) = h(19) = 5,
20
22
25
26
PROGRAMAO
LISTAS
ENCADEADAS
DE TRIPULAES
ANLISE
Anlise
Assumindo que qualquer item do conjunto tem igual
probabilidade de ser endereado para qualquer entrada
de T, ento o comprimento esperado de cada lista
encadeada N/M, onde:
N representa o nmero de registros na tabela
M representa o tamanho da tabela.
Anlise
Se os valores forem bem distribudos (poucas colises) e
M for igual a M, teremos que:
Pesquisa, insero e remoo sero O(1)
29
Exemplo
FERIADO
30
PROGRAMAO
ENDEREAMENTO
ABERTO
DE TRIPULAES
Endereamento Aberto
Quando 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)
32
Endereamento Aberto
No Endereamento aberto todas as chaves so
armazenadas na prpria tabela, sem o uso de ponteiros
explcitos.
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 0 j M 1.
33
Exemplo
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, teremos:
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.
34
Exemplo
Por exemplo:
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.
35
36
37
38
39
40
PROGRAMAO
ENDEREAMENTO
ABERTO
DE TRIPULAES
ANLISE
Anlise
Seja = N/M o fator de carga da tabela. Conforme
demonstrado por Knuth (1973), o custo de uma pesquisa com
sucesso :
Anlise
Apesar do hashing linear ser um mtodo
relativamente pobre para resolver colises os
resultados apresentados so bons.
O melhor caso, assim como o caso mdio, O(1).
Qual o pior caso?
Quando necessrio percorrer toda a tabela para
encontrar uma chave (excesso de colises).
Complexidade do pior caso: O(n)
43
TABELAS HASH
PROGRAMAO
VANTAGENS E
DE
TRIPULAES
DESVANTAGENS
Vantagens e Desvantagens
Vantagens:
Alta eficincia no custo de pesquisa, que O(1) para o caso
mdio.
Simplicidade de implementao.
Desvantagens:
Custo para recuperar os registros ordenados pela chave
alto, sendo necessrio ordenar toda a tabela.
Pior caso O(n).
45
Perguntas?
46