Che cos'è una funzione hash, è qualcosa che viene utilizzato in tutta l'informatica.
Una funzione hash è semplicemente una funzione che genera un valore di lunghezza fissa per ogni input che riceve.
Va bene, cosa significa?
Bene, ho qui un generatore di hash modificato chiamato cinque è il tipo di funzione di hash e ce ne sono molti,
molti tipi di cui potresti aver sentito parlare, sparare un colpo a 56 e molti altri.
Usando questa funzione di hash, vediamo cosa succede se lo faccio.
Ciao?
Lo vedi subito, e il cinque cancella questa stringa e la trasforma in questo incomprensibile.
Questo è ciò che fa una funzione hash, gli diamo un input e la funzione genera uno schema casuale.
Ora ci sono alcuni aspetti chiave delle funzioni hash.
Il primo è che è a senso unico.
Nel senso che se do a qualcuno questo, non ha idea di quale sia l'input ed è praticamente impossibile
per me avere la minima idea di quale sia l'input.
Il secondo è che non importa quante volte inserisco il saluto, sarà lo stesso.
Ma non appena cambio una cosa, cambierà completamente l'output.
Se torno a ciao e.
Guardami cambiare in H maiuscola, anche una lettera maiuscola, quindi inizia con cinque D quattro, se
faccio H maiuscola, è di nuovo completamente diverso.
E guardando questo, possiamo almeno dire che, hmm, non so a cosa serva, ma l'unica cosa che
so è che non importa cosa, se gli do lo stesso input, darà io stesso
risultato.
Ma non ho idea di come convertirlo di nuovo in ciao.
Questo è ciò che chiamiamo indipendente o indipendente, ci sono diverse pronunce, non sono sicuro di quale,
ma è un modo elegante per dire che una funzione, dato un input, restituisce sempre lo
stesso output.
Ora, l'unico vantaggio e il motivo per cui vorremmo usare questo e una struttura dati è che
otteniamo un accesso ai dati molto veloce perché tutto ciò che devo fare per trovare Graps o Baskett DOT Graps è passare Graps in qualcosa come un cinque
hash vuoto.
Genera questo numero per me e so immediatamente dove si trova nella mia memoria sul nostro computer.
Ma questo non sembra un indirizzo, vero?
Tecnicamente, una funzione hash che usiamo per le tabelle hash prenderà graps, genererà una sorta di
incomprensibile e quindi la convertirà in una base di indice o in una base di indirizzi basata su questo numero.
Vedete, a differenza di una gara in cui abbiamo appena ordinato indici con tabelle hash, tutto ciò che dobbiamo fare è dargli una chiave
e sappiamo esattamente dove si trova quell'elemento nella nostra memoria.
Ma ti starai chiedendo, questa funzione hash della scatola nera, non rallenta le cose?
Perché ogni volta che vogliamo aggiungere una proprietà.
E un valore uve e diecimila in una tabella hash, dobbiamo eseguirlo attraverso la funzione hash in modo che
possiamo decidere dove metterlo in memoria.
E se l'hai notato, buon lavoro, questo è un fattore importante.
Non vuoi che richieda molto tempo perché, beh, ogni volta che aggiungi una proprietà in memoria
o recuperi una proprietà in memoria, perché, di nuovo, entrambe le volte inviamo le uve chiave nella funzione hash
a trova da dove prenderlo.
Abbiamo bisogno che questo sia davvero, davvero veloce.
E sotto il cofano, ricorda, poiché le tabelle hash esistono in tutte le lingue, sono implementate con una
funzione di hashing ottimale che è davvero, molto veloce.
Come nota a margine.
Funzioni hash come shot to 56 richiedono molto tempo per generare un hash.
Ed è una funzione di hashing eccessivamente complessa che viene utilizzata molto in luoghi come la crittografia in cui si
desidera che richieda più tempo, ma questo esula dallo scopo di questo corso.
Se sei interessato, ti consiglio di controllare le differenze tra questi due.
Per rivedere, abbiamo una chiave che è graps, la inviamo tramite una funzione di hash che eseguirà l'hashing di
qualcosa molto, molto velocemente e quindi mapperà qualunque cosa l'hash sia uscito in un indirizzo di memoria in cui vogliamo
memorizzare il nostro.
I dati sono graps 10000.
E quando si tratta di funzioni di hashing, in genere lo lasci a qualsiasi framework
o linguaggio tu stia utilizzando, e di solito assumiamo un tempo, una complessità o una notazione bigo di uno, perché questo accade molto
velocemente.
Tutto bene.
Ora che abbiamo capito cosa fa questa scatola nera, parliamo un po' di più delle tabelle hash, perché
sono utili e perché in alcuni casi sono migliori di iRace.