Aqui está uma explicação nos termos do leigo.
Vamos supor que você queira preencher uma biblioteca com livros e não apenas colocá-los lá, mas você poderá encontrá-los facilmente novamente quando precisar.
Então, você decide que, se a pessoa que deseja ler um livro conhece o título do livro e o título exato a ser inicializado, isso é tudo o que deve ser necessário. Com o título, a pessoa, com a ajuda do bibliotecário, deve encontrar o livro com facilidade e rapidez.
Então, como você pode fazer isso? Bem, obviamente, você pode manter algum tipo de lista de onde você coloca cada livro, mas então você tem o mesmo problema de pesquisar na biblioteca, é necessário pesquisar na lista. Concedido, a lista seria menor e mais fácil de pesquisar, mas você ainda não deseja pesquisar sequencialmente de uma extremidade da biblioteca (ou lista) para a outra.
Você quer algo que, com o título do livro, possa lhe dar o lugar certo de uma só vez, então tudo o que você precisa fazer é apenas caminhar até a prateleira certa e pegar o livro.
Mas como isso pode ser feito? Bem, com um pouco de premeditação quando você enche a biblioteca e muito trabalho quando você enche a biblioteca.
Em vez de apenas começar a encher a biblioteca de uma extremidade à outra, você cria um método pequeno e inteligente. Você pega o título do livro, executa-o através de um pequeno programa de computador, que cospe um número de prateleira e um número de slot nessa prateleira. É aqui que você coloca o livro.
A vantagem desse programa é que, mais tarde, quando uma pessoa voltar para ler o livro, você passará o título pelo programa mais uma vez e receberá o mesmo número de prateleira e slot que você recebeu originalmente, e isso é onde o livro está localizado.
O programa, como outros já mencionaram, é chamado de algoritmo de hash ou cálculo de hash e geralmente funciona com os dados inseridos nele (o título do livro nesse caso) e calcula um número a partir dele.
Para simplificar, digamos que apenas converta cada letra e símbolo em um número e resuma todos eles. Na realidade, é muito mais complicado que isso, mas vamos deixar por enquanto.
A vantagem de um algoritmo é que, se você inserir a mesma entrada repetidamente, ele continuará emitindo o mesmo número a cada vez.
Ok, então é basicamente assim que uma tabela de hash funciona.
Material técnico segue.
Primeiro, há o tamanho do número. Normalmente, a saída de um algoritmo de hash está dentro de um intervalo de um número grande, geralmente muito maior que o espaço que você tem na sua tabela. Por exemplo, digamos que temos espaço para exatamente um milhão de livros na biblioteca. A saída do cálculo de hash pode estar na faixa de 0 a um bilhão, o que é muito maior.
Então, o que fazemos? Usamos algo chamado cálculo de módulo, que basicamente diz que, se você contasse o número desejado (ou seja, o número de um bilhão), mas desejasse permanecer dentro de um intervalo muito menor, cada vez que atingisse o limite desse intervalo menor, começaria 0, mas você deve acompanhar o quão longe na grande sequência você chegou.
Digamos que a saída do algoritmo de hash esteja no intervalo de 0 a 20 e você obtém o valor 17 de um título específico. Se o tamanho da biblioteca é de apenas 7 livros, você conta 1, 2, 3, 4, 5, 6 e, quando chega a 7, começa de novo em 0. Como precisamos contar 17 vezes, temos 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3 e o número final é 3.
É claro que o cálculo do módulo não é feito dessa maneira, é feito com divisão e um restante. O restante da divisão de 17 por 7 é 3 (7 passa 2 vezes para 17 aos 14 e a diferença entre 17 e 14 é 3).
Assim, você coloca o livro no slot número 3.
Isso leva ao próximo problema. Colisões. Como o algoritmo não tem como espaçar os livros para que eles preencham exatamente a biblioteca (ou a tabela de hash, se desejar), ele sempre acaba calculando um número que foi usado anteriormente. No sentido da biblioteca, quando você chega à prateleira e ao número do slot em que deseja colocar um livro, já existe um livro.
Existem vários métodos de manipulação de colisões, incluindo a execução de dados em outro cálculo para obter outro ponto na tabela ( hash duplo ) ou simplesmente para encontrar um espaço próximo ao que você recebeu (ou seja, ao lado do livro anterior, assumindo o slot estava disponível também conhecido como sondagem linear ). Isso significa que você precisa cavar algumas coisas quando tenta encontrar o livro mais tarde, mas ainda é melhor do que simplesmente começar em uma extremidade da biblioteca.
Finalmente, em algum momento, convém colocar mais livros na biblioteca do que a biblioteca permite. Em outras palavras, você precisa construir uma biblioteca maior. Como o local exato na biblioteca foi calculado usando o tamanho exato e atual da biblioteca, segue-se que, se você redimensionar a biblioteca, poderá ter que encontrar novos locais para todos os livros desde o cálculo feito para encontrar seus locais mudou.
Espero que esta explicação seja um pouco mais prática do que baldes e funções :)