Escolar Documentos
Profissional Documentos
Cultura Documentos
ARTIFICIAL
Introdução
Neste capítulo, você estudará o funcionamento das tabelas hash, a re-
solução de colisões nelas e sua implementação por meio da linguagem
Python.
Tabelas hash
As tabelas hash também são conhecidas como tabelas de dispersão ou de
espelhamento e responsáveis pelo armazenamento de coleções de valores, em
que cada valor está associado a uma chave (PERKOVIC, 2016). As chaves,
por sua vez, devem ser distintas e utilizadas para realizar o mapeamento dos
valores nessa tabela, sendo que a função que faz esse mapeamento, na maioria
dos casos, se chama hashing (COPPIN, 2010).
Um exemplo clássico é a implementação de uma tabela de dispersão com
um vetor, que, neste caso, terá oito posições, logo, a função hashing será h(x)
= x MOD 8. Utiliza-se o MOD porque ele representa o resto de uma divisão,
como 10 MOD 8 = 2, em que 10/8 equivale ao quociente 1 e resto 2 ou 8*1
+ 2 = 10.
Pode-se sugerir que a função h(k) é a posição original da chave k, a qual
deve ser inserida nessa posição da tabela (DROZDEK, 2017). Assim, realiza-se
a inserção de uma coleção de valores, com suas respectivas chaves em uma
tabela de dispersão, conforme você pode ver no Quadro 1.
2 Estrutura de dados para IA III
ID Chave Valor
1 25 LIA
2 18 ANA
5 5 RUI
7 31 GUT
As tabelas de dispersão foram criadas com o objetivo de realizar buscas rápidas para
a obtenção de valores desejados a partir de chaves. Alguns estudiosos atribuem sua
criação ao trabalho de Hans Peter Luhn na International Business Machines (IBM), em
1953, mas outros afirmam que as primeiras utilizações dessas tabelas ocorreram em
1960, com compiladores e interpretadores da linguagem BASIC, usada na dispersão
de variáveis e seu armazenamento (DROZDEK, 2017).
Índice
Chaves de valores Hash de chaves e valores
0
John Smith Lisa Smith + 1-555-8976
1
:
Lisa Smith 872 John Smith +1-555-1234
873
Sam Doe 874 Sandra Dee +1-555-9655
:
Sandra Dee 998
Sam Doe +1-555-5030
999
Figura 1. Dispersão de chaves e índices de valores na tabela hash.
a 2 xyz
b 0 pqr
c 3 ijk
d 2 uvw
e … …
f … …
g … …
h … …
Estrutura de dados para IA III 5
… (W – 1) … (W – 1)
# Tabela Hash
class Hash:
def cheia(self):
return len(self.tab) == self.tam _ max
def imprime(self):
for i in self.tab:
print("Hash[%d] = " %i, end="")
print (self.tab[i])
tamanhoHash = 7
tab = Hash(tamanhoHash)
print("\n")
print(" Tabela HASH Sem Colisões (%d itens) " %tamanhoHash)
pos = tab.busca(item)
if pos == -1:
print("Item não encontrado")
else:
print("Item encontrado na posição: ", pos)
item = input("\n – Insira o valor numérico inteiro para apa-
gar: ")
tab.apaga(item)
print("\nImprimindo conteudo")
tab.imprime()
print("\n")