Olá pessoal!

Vamos rever os conceitos estudados, seguindo a playlist do prof Marcos Kutova, disponível no youtube.

Função de espalhamento (Função Hash)

Observe:

fun espalha(self, chave):
   para cada letra da chave: 
      posicao += identifique a ordem da letra no alfabeto
   return posicao

Por exemplo:

posicao = espalha(“abc”) # a = 1 b = 2 c = 3 # 1 + 2 + 3 # return posicao = 6

posicao = espalha(“cba”) #  c = 3 b = 2 a = 1 # 3 + 2 + 1 # return posicao = 6

posicao = espalha(“bca”) #  b = 2 c = 3 a = 1 # 2 + 3 + 1 # return posicao = 6Note que são 3 chaves diferentes “abc”, “cba” e “bca” porém todas retornaram a mesma posição.
Claaaro que as funções não são assim tão simples, mas você terá colisões mesmo assim. Quanto menos melhor! Mas uma ou 8 milhões, não importa, precisa ser tratada!

Ps: Outro exemplo simples e legal é esse algoritmo aqui, criado pelo Gabriel Porto em um exercício relacionado. Execute-o, troque as tartarugas, tente diferentes chaves. 
https://colab.research.google.com/drive/1yuSaYvk06dYGK-7XH0gvbdaHcnOrI-Nc?usp=sharing 
Observe que existe um parâmetro chamado tableSize. Qual é a importância de manter esse parâmetro?

Como resolver? O problema das chaves que vão para mesma posição?

Colisões 

encadeamento interno

encadeamento externo

buckets

Ai quanto processamento para reposicionar todo mundo na colisão do bucket!!! E se… fosse dinâmico, como seria?

Já que estamos aqui, vamos dar uma espiada no que o prof Marcos Kutova fala sobre os índices invertidos?

Leave a Comment