Junior
Qual é o princípio de funcionamento de uma tabela hash?
sobes.tech IA
Resposta da IA
Uma tabela de hash (ou matriz associativa) armazena pares de "chave-valor". O princípio de funcionamento baseia-se no uso de uma função de hash, que transforma a chave num índice numérico (hash), indicando o local de armazenamento do valor na matriz (cesto).
Passos:
- Cálculo do hash: Para uma chave dada, calcula-se o hash.
<?php $key = "example"; $hash = crc32($key); // Exemplo de uma função de hash simples - Determinação do índice: O hash é transformado num índice da matriz, geralmente usando a operação módulo do tamanho da matriz.
<?php $arraySize = 10; $index = $hash % $arraySize; - Acesso ao cesto: Acedemos ao cesto correspondente na matriz usando o índice calculado.
- Resolução de colisões: Como diferentes chaves podem ter o mesmo hash (colisão), o cesto pode conter várias pares "chave-valor". Para resolver colisões, utilizam-se diferentes métodos:
- Método de encadeamento (Separate Chaining): Cada cesto armazena uma lista (por exemplo, uma lista ligada) de pares "chave-valor" cujos hashes coincidem.
- Método de endereçamento aberto (Open Addressing): Em caso de colisão, realiza-se uma busca repetida por uma célula livre na matriz segundo uma regra determinada (sondagem linear, quadrática, duplo hashing).
Operações:
- Inserção: Calcula-se o hash da chave, determina-se o índice, e o par "chave-valor" é colocado no cesto correspondente. Em caso de colisão, é adicionado à lista (encadeamento) ou procura-se um lugar livre (endereçamento aberto).
- Procura: Calcula-se o hash da chave, determina-se o índice. No cesto correspondente, procura-se o valor pela chave. No método de encadeamento, percorrem-se os elementos da lista; no endereçamento aberto, realiza-se uma busca sequencial.
- Remoção: Calcula-se o hash da chave, determina-se o índice. No cesto correspondente, encontra-se e remove-se a par pela chave.
Vantagens:
- Acesso rápido aos elementos (em média O(1)).
- Uso eficiente de memória.
Desvantagens:
- O desempenho pode deteriorar-se com um grande número de colisões.
- O tamanho da tabela pode requerer ajuste (rehashing) para manter a eficiência.