Módulo 11 - Tabelas hash: o dicionário por dentro
A tabela hash: o dicionário por dentro
8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 12/07/2026
O que você vai aprender
- Entender a tabela hash como um vetor mais uma função que gera índices.
- Ver a diferença entre procurar item por item e ir direto pela chave.
- Ligar o dicionário que você já usou à estrutura que existe por dentro.
- Reconhecer que a chave vira uma posição por meio de um cálculo.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: A tabela hash: o dicionário por dentro.
Os objetivos desta aula. Entender a tabela hash como um vetor mais uma função que gera índices. Ver a diferença entre procurar item por item e ir direto pela chave. Ligar o dicionário que você já usou à estrutura que existe por dentro. Reconhecer que a chave vira uma posição por meio de um cálculo.
Veja o essencial, parte por parte.
Por que o dicionário parece mágica. A tabela hash é o que existe por dentro do dicionário que você já usou.
Da chave ao índice: um cálculo, não uma busca. O coração da estrutura é a passagem da chave para o índice.
O que muda em relação à lista. Vetor por baixo: os escaninhos numerados onde os pares chave-valor moram.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Por que o dicionário parece mágica
No curso intermediário o dicionário entrou como uma ferramenta pronta: você criava um par chave-valor, tipo agenda["Ana"] guardando o telefone da Ana, e recuperava o telefone só citando o nome. Funcionava, e era rápido, mas ficou uma pergunta no ar: como o programa acha o valor da Ana tão depressa? Se fosse uma lista de mil contatos, procurar a Ana varrendo um por um levaria, no pior caso, mil comparações. O dicionário não faz isso. Ele acha a Ana quase no mesmo tempo, tenha ele dez ou dez milhões de contatos. Essa velocidade constante não é mágica nem sorte: é a tabela hash trabalhando por baixo.
A ideia central é trocar procura por cálculo. Imagine um armário de correspondência com cem escaninhos numerados. Se cada morador tivesse um número de escaninho fixo e você soubesse calcular esse número a partir do nome, não precisaria abrir escaninho por escaninho até achar a carta certa. Bastaria calcular o número e ir direto. A tabela hash faz exatamente isso: o vetor interno são os escaninhos, e a função de dispersão é a regra que transforma o nome (a chave) no número do escaninho (o índice). Guardar a carta da Ana é calcular o índice do nome Ana e depositar ali; buscar é calcular o mesmo índice e olhar naquele escaninho.
Da chave ao índice: um cálculo, não uma busca
O coração da estrutura é a passagem da chave para o índice. A chave pode ser um texto, um número, uma data, qualquer coisa que identifique o dado. O índice, porém, precisa ser um número inteiro entre 0 e o tamanho do vetor menos um, porque é uma posição de vetor. A função hash é a ponte entre esses dois mundos: recebe uma chave qualquer e devolve um índice válido. Um jeito simples, só para enxergar a ideia, é somar os códigos das letras do nome e tirar o resto da divisão pelo tamanho do vetor. O resto sempre cai dentro da faixa de posições, e a mesma chave sempre gera o mesmo índice.
// vetor com 7 posições (escaninhos 0 a 6)
tabela <- [vazio, vazio, vazio, vazio, vazio, vazio, vazio]
FUNÇÃO indice_de(chave)
soma <- 0
PARA cada letra de chave faça
soma <- soma + codigo(letra) // codigo("A") = 65, etc.
fim
RETORNE soma mod 7 // resto da divisão: cai entre 0 e 6
fim
// guardar: calcula o índice e deposita ali
i <- indice_de("Ana")
tabela[i] <- ["Ana", "99999-1234"]
// buscar: calcula o MESMO índice e vai direto
j <- indice_de("Ana")
escreva(tabela[j]) // vai direto ao escaninho, sem varrerA função soma os códigos das letras e tira o resto pelo tamanho do vetor. A mesma chave sempre cai no mesmo índice.
🎮 Jogo da aula
Verdadeiro ou falso: a tabela hash
Decida se cada afirmação sobre a tabela hash é verdadeira ou falsa. Pense no armário de escaninhos.
O que muda em relação à lista
Vale comparar com o que você já domina. Numa lista, achar um valor pelo conteúdo (não pela posição) obriga a percorrer, porque a lista não sabe onde cada coisa está, só a ordem em que foram colocadas. Numa lista ordenada dá para usar busca binária e cortar pela metade, mas ainda são vários passos, e manter a lista ordenada tem custo. A tabela hash muda o jogo ao pagar um preço diferente: ela gasta um pouco de memória extra (o vetor costuma ter mais posições do que itens guardados) e um cálculo rápido por acesso, e em troca vai direto ao dado sem depender do tamanho da coleção. É uma troca clássica em computação: usar mais espaço para ganhar tempo.
Teste rápido
Numa tabela hash, qual é o papel da função hash?
Perguntas frequentes
- Tabela hash e dicionário são a mesma coisa?
- São dois níveis da mesma ideia. Dicionário (ou mapa) é o conceito: uma coleção de pares chave-valor com busca pela chave. Tabela hash é a forma mais comum de implementar esse conceito, usando um vetor e uma função de dispersão. Quando você usa um dicionário na maioria das linguagens, é uma tabela hash trabalhando por baixo.
- Por que usar o resto da divisão na função?
- Porque o índice precisa caber dentro do vetor. Se o vetor tem 7 posições, o índice tem que ficar entre 0 e 6. O resto da divisão por 7 sempre devolve um número nessa faixa, não importa quão grande seja a soma das letras. É um jeito simples de encaixar qualquer número de chave numa posição válida.
- A tabela hash mantém os itens em ordem?
- Em geral, não. Como a posição vem de um cálculo sobre a chave, os itens ficam espalhados pelo vetor sem relação com ordem alfabética ou numérica. Se você precisa dos dados ordenados, a tabela hash sozinha não resolve; usa-se outra estrutura ou uma etapa de ordenação. A força dela é a busca pela chave, não a ordem.
- Por que o vetor tem mais posições do que itens guardados?
- Para dar espaço e espalhar melhor as chaves. Se o vetor fosse justo, muitas chaves cairiam na mesma posição e a estrutura perderia velocidade. Deixar folga (mais escaninhos do que cartas) reduz esses choques. É a troca de memória por tempo: gasta-se um pouco mais de espaço para manter as buscas rápidas.
- Qualquer tipo de dado pode ser chave?
- Em geral, chaves precisam ser estáveis, algo que não muda enquanto está guardado, para que a função sempre gere o mesmo índice. Textos, números e outros valores fixos servem bem. Estruturas que mudam por dentro costumam ser evitadas como chave, porque se a chave muda, o índice calculado deixa de bater com onde o dado foi guardado.
- Como isso aparece nas linguagens reais?
- Em Python é o dict; em JavaScript há objetos e a estrutura Map; outras linguagens têm HashMap, dicionário ou tabela de associação. Os nomes mudam, mas por baixo é quase sempre uma tabela hash. Entender a estrutura ajuda a saber por que essas coleções são rápidas para buscar pela chave e por que não guardam ordem por padrão.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.