UNIDADE III Estruturas de Dados Moderna

Propaganda
UNIDADE III
Estruturas de Dados Moderna
Estruturas de Dados Moderna – Tabela de
dispersão
p
((Hash
Hash))
ƒ
ƒ
ƒ
ƒ
ƒ
Tem por objetivo alocar elementos em posições
definidas por uma função de posicionamento (função
hash).
Tal função serve como índice do elemento alocado na
tabela
Em Computação, a Tabela Hash é uma estrutura de
dados especial, que armazena as informações
d
desejadas,
j d
associando
i d chaves
h
d pesquisa
de
i
a estas
informações.
Obj ti
Objetivo:
a partir
ti de
d uma chave,
h
f
fazer
uma busca
b
rápida e obter o valor desejado.
Aplicações: ideal para criação de dicionários de dados
Fonte: Alexandre Parra e Felipe Chiapini et.al.
Estruturas de Dados Moderna – Tabela de
dispersão
p
((Hash
Hash)) – como representar
p
`
`
`
Implementa se uma lista encadeada,
Implementa-se
encadeada onde cada par da
tabela hash é alocado em uma posição dessa lista,
definida p
pela função
ç hash.
Ao mesmo tempo, cria-se um vetor dinâmico, que
armazenará os índices resultantes da função hash.
Para localizar um elemento na tabela hash, faz-se a
pesquisa no vetor de índices. Caso o elemento seja
encontrado,
t d
o índice
í di
apontará
t á para a posição
i ã
correspondente na lista encadeada formadora da tabela
hash.
hash
Estruturas de Dados Moderna – Tabela de
dispersão
p
((Hash
Hash)) – p
problema p
potencial
`
`
`
`
`
Quando duas ou mais chaves geram o mesmo endereço da Tabela
as , d
dizemos
e os que houve
ou e u
uma
a co
colisão.
são
Hash,
É comum ocorrer colisões.
Um bom método de resolução de colisões é essencial, não
importando a qualidade da função hash.
hash
Há diversas técnicas de resolução de colisão.
A técnica mais comum consiste no encadeamento externo,, onde a
informação é armazenada em estruturas encadeadas, fora da
tabela hash. Ex: para a função hash f(x)= x%10, e, para a entrada
dos elementos 10, 15, 22, 51, 48, 25, temos:
Solução:
Encadear
E
d
15 com 25
Colisão:
15 com 25
Lista
encadeada
d d
externa
Estruturas de Dados Moderna – Tabela de
dispersão
p
((Hash
Hash)) – simulação
ç p
prática
`
`
Utilizar o programa hash_exemplo.cpp
hash exemplo cpp para simular o
exemplo visto na transparência anterior, bem como
simular outros exemplos.
p
Utilizar, agora, o programa gráfico Hash.exe,
escolhendo o algoritmo Encadeamento Externo
(Algorithms/External Chaining) e insira os mesmos
elementos do exemplo anterior. Notar-se-á elementos
que colidirão,
colidirão mas o algoritmo encadeará os elementos
em colisão, formando outra lista encadeada.
Estruturas de Dados Moderna – Tabela de dispersão
(Hash)
Hash) – outra forma de resolução e simulação prática
`
`
Outra técnica consiste em alocar o elemento de conflito
em algum espaço vago da lista, evitando, assim, o
conflito, porém esse método é mais custoso, visto que
o algoritmo terá de localizar, sequencialmente, qual o
próximo elemento livre da lista.
Para exemplificar, execute o programa gráfico
H h
Hash.exe,
escolhendo
lh d
o algoritmo
l
i
H h Linear
Hash
Li
(Algorithms/linear rehashing) e insira os mesmos
elementos do exemplo anterior. Notar
Notar-se-á
se á elementos
que colidirão, mas o algoritmo localizará qual o
próximo espaço vago na lista.
Estruturas de Dados Moderna – Tabela de dispersão
(Hash)
Hash) – desafios
`
`
`
`
Desafio 10 – Construir um programa, em C, que crie uma tabela
h h de
hash
d números
ú
reais
i e que trate
t t as colisões
li õ através
t é do
d algoritmo
l
it
Encadeamento Externo, permitindo as operações de inserção,
exclusão e pesquisa de um elemento. OBS: utilizar lista encadeada.
D
Desafio
fi 11 – Construir
C
t i um programa, em C,
C que crie
i uma tabela
t b l
hash de nomes e que trate as colisões através do algoritmo
Encadeamento Externo, permitindo as operações de inserção,
exclusão e pesquisa de um elemento.
elemento OBS: utilizar lista encadeada.
encadeada
Desafio 12 – Construir um programa, em C, que crie uma tabela
hash de números reais e que trate as colisões através do algoritmo
H h Linear,
Hash
Li
permitindo
iti d as operações
õ
d inserção,
de
i
ã
exclusão
l ã e
pesquisa de um elemento. OBS: utilizar vetor estático ou dinâmico.
Desafio 13 – Construir um programa, em C, que crie uma tabela
h h de
hash
d nomes e que trate
t t as colisões
li õ através
t é do
d algoritmo
l
it
H h
Hash
Linear, permitindo as operações de inserção, exclusão e pesquisa
de um elemento. OBS: utilizar vetor estático ou dinâmico.
UNIDADE III
Tabela Hash
FIM
Download