Estrutura de dados

Toda chave tem
um endereço calculado.

Uma tabela hash não procura — ela calcula onde um valor está. Uma função converte a chave em um índice de array, transformando busca, inserção e remoção em operações de tempo praticamente constante.

"maçã" ── hash() ──▶ índice 3
01 — Conceito

Um array por baixo dos panos

A "mágica" da tabela hash é só um array comum. O que muda é como o índice é escolhido: em vez de você decidir, uma função decide por você, a partir da chave.

  • 01
    Chave e valor
    Cada item guardado é um par: uma chave única e o valor associado a ela.
  • 02
    Função hash
    Transforma a chave em um número — o índice onde o par será guardado.
  • 03
    Array de baldes
    O índice aponta direto para uma posição do array, sem percorrer os outros.
  • 04
    Colisões
    Chaves diferentes podem gerar o mesmo índice — e a estrutura precisa lidar com isso.
02 — Função hash

De texto a número, de número a índice

Existem várias formas de fazer isso; este site usa uma soma ponderada dos códigos dos caracteres, reduzida ao tamanho da tabela com o operador módulo.

Fórmula usada nesta página
índice = ( Σ código(caractere) × 31^posição ) mod tamanho_da_tabela
resultado: índice (tabela de 8 posições)
DETERMINÍSTICA

Mesma chave, mesmo índice

A mesma entrada sempre produz a mesma saída — é isso que permite reencontrar o valor depois.

BEM DISTRIBUÍDA

Espalha as chaves

Uma boa função hash evita concentrar chaves diferentes nos mesmos poucos índices.

03 — Colisões

Quando duas chaves disputam o mesmo índice

Colisão não é um bug — é estatisticamente inevitável. A técnica usada para resolver é o que diferencia uma implementação de outra.

ENCADEAMENTO

Cada balde vira uma lista

Quando dois itens colidem no mesmo índice, eles ficam encadeados dentro do mesmo balde. É a técnica usada no visualizador abaixo.

ENDEREÇAMENTO ABERTO

Procura o próximo espaço livre

Em vez de encadear, o item colidido é movido para outro índice livre, seguindo uma sequência de tentativas.

04 — Visualizador

Insira chaves e observe as colisões

Cada chave é convertida em um índice pela função hash acima. Quando dois itens caem no mesmo balde, eles se encadeiam — veja isso acontecer ao inserir chaves parecidas.

Tabela com 8 posições. Insira uma chave para começar.
05 — Complexidade

Rápida em média, vulnerável no pior caso

O desempenho depende diretamente da qualidade da função hash e de quantas colisões ela produz.

OperaçãoCaso médioPior casoQuando o pior caso ocorre
InserçãoO(1)O(n)Todas as chaves colidem no mesmo índice
BuscaO(1)O(n)Cadeia longa em um único balde
RemoçãoO(1)O(n)Mesma causa da busca no pior caso