Ecco una spiegazione in termini di profani.
Supponiamo che tu voglia riempire una biblioteca di libri e non solo inserirli lì dentro, ma vuoi essere in grado di ritrovarli facilmente quando ne hai bisogno.
Quindi, decidi che se la persona che vuole leggere un libro conosce il titolo del libro e il titolo esatto per l'avvio, allora è tutto ciò che dovrebbe prendere. Con il titolo, la persona, con l'aiuto del bibliotecario, dovrebbe essere in grado di trovare il libro facilmente e rapidamente.
Quindi, come puoi farlo? Bene, ovviamente puoi tenere una specie di elenco di dove metti ogni libro, ma poi hai lo stesso problema della ricerca in biblioteca, devi cercare l'elenco. Certo, l'elenco sarebbe più piccolo e più facile da cercare, ma non si desidera cercare in sequenza da un'estremità della libreria (o dell'elenco) all'altra.
Vuoi qualcosa che, con il titolo del libro, possa darti il posto giusto in una volta, quindi tutto ciò che devi fare è semplicemente passare allo scaffale giusto e prendere il libro.
Ma come si può fare? Bene, con un po 'di premura quando riempi la biblioteca e molto lavoro quando riempi la biblioteca.
Invece di iniziare a riempire la libreria da un'estremità all'altra, escogiti un metodo intelligente. Prendi il titolo del libro, lo esegui attraverso un piccolo programma per computer, che sputa un numero di scaffale e un numero di slot su quello scaffale. Qui è dove metti il libro.
La bellezza di questo programma è che in seguito, quando una persona torna a leggere il libro, dai nuovamente il titolo al programma e ricevi lo stesso numero di scaffale e numero di slot che ti è stato originariamente dato, e questo è dove si trova il libro.
Il programma, come altri hanno già detto, si chiama algoritmo di hash o calcolo di hash e di solito funziona prendendo i dati inseriti (il titolo del libro in questo caso) e calcola un numero da esso.
Per semplicità, diciamo che converte ogni lettera e simbolo in un numero e li somma tutti. In realtà, è molto più complicato di così, ma lasciamo questo per ora.
Il bello di un tale algoritmo è che se si inserisce ripetutamente lo stesso input, continuerà a sputare lo stesso numero ogni volta.
Ok, in pratica è così che funziona una tabella hash.
Segue roba tecnica.
Innanzitutto, c'è la dimensione del numero. Di solito, l'output di un tale algoritmo hash è all'interno di un intervallo di un numero elevato, in genere molto più grande dello spazio disponibile nella tabella. Ad esempio, supponiamo che nella biblioteca ci sia spazio per esattamente un milione di libri. L'output del calcolo dell'hash potrebbe essere compreso tra 0 e 1 miliardo, che è molto più alto.
Quindi cosa facciamo? Usiamo qualcosa chiamato calcolo del modulo, che sostanzialmente dice che se contavi per il numero che volevi (cioè il miliardo di numeri) ma volevi rimanere all'interno di un intervallo molto più piccolo, ogni volta che raggiungi il limite di quell'intervallo più piccolo hai iniziato da 0, ma devi tenere traccia di quanto lontano sei arrivato nella grande sequenza.
Supponi che l'output dell'algoritmo hash sia compreso tra 0 e 20 e ottieni il valore 17 da un determinato titolo. Se la dimensione della biblioteca è di soli 7 libri, conti 1, 2, 3, 4, 5, 6 e quando arrivi a 7, ricomincia da 0. Dato che dobbiamo contare 17 volte, abbiamo 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3 e il numero finale è 3.
Ovviamente il calcolo del modulo non viene eseguito in questo modo, ma con divisione e resto. Il resto della divisione di 17 per 7 è 3 (7 va 2 volte in 17 a 14 e la differenza tra 17 e 14 è 3).
Quindi, metti il libro nello slot numero 3.
Questo porta al prossimo problema. Collisioni. Dal momento che l'algoritmo non ha modo di distanziare i libri in modo da riempire esattamente la libreria (o la tabella hash se vuoi), finirà inevitabilmente per calcolare un numero che è stato usato in precedenza. Nel senso della biblioteca, quando arrivi allo scaffale e al numero di slot in cui desideri inserire un libro, c'è già un libro lì.
Esistono vari metodi di gestione delle collisioni, tra cui l'esecuzione dei dati in un altro calcolo per ottenere un altro posto nella tabella ( doppio hashing ) o semplicemente per trovare uno spazio vicino a quello che ti è stato dato (cioè proprio accanto al libro precedente assumendo lo slot era disponibile anche noto come sondaggio lineare ). Ciò significherebbe che hai qualche scavo da fare quando provi a trovare il libro più tardi, ma è ancora meglio che semplicemente iniziare da un'estremità della biblioteca.
Infine, ad un certo punto, potresti voler inserire più libri nella biblioteca di quelli consentiti dalla biblioteca. In altre parole, è necessario creare una libreria più grande. Poiché il punto esatto nella biblioteca è stato calcolato usando la dimensione esatta e attuale della biblioteca, ne consegue che se ridimensionate la biblioteca potreste finire per trovare nuovi punti per tutti i libri poiché il calcolo fatto per trovare i loro punti è cambiato.
Spero che questa spiegazione fosse un po 'più concreta rispetto ai secchi e alle funzioni :)