Dopo aver appreso di cosa si tratta, ho pensato di scrivere una spiegazione, si spera, più semplice tramite l'analogia:
Riepilogo: che cos'è un hashcode?
- È un'impronta digitale. Possiamo usare questa impronta digitale per identificare le persone di interesse.
Leggere sotto per ulteriori dettagli:
Pensa a un Hashcode mentre cerchiamo di identificare in modo univoco qualcuno
Sono un detective, alla ricerca di un criminale. Chiamiamolo signor Cruel. (Era un famigerato assassino quando ero un bambino - ha fatto irruzione in una casa rapita e ucciso una povera ragazza, ha scaricato il suo corpo ed è ancora in libertà - ma è una questione separata). L'onorevole Cruel ha alcune caratteristiche peculiari che posso usare per identificarlo in modo univoco in un mare di persone. Abbiamo 25 milioni di persone in Australia. Uno di questi è il signor Cruel. Come possiamo trovarlo?
Cattivi modi di identificare Mr Cruel
Apparentemente il signor Cruel ha gli occhi blu. Questo non è di grande aiuto perché quasi la metà della popolazione in Australia ha anche gli occhi blu.
Buoni modi per identificare Mr Cruel
Cos'altro posso usare? Lo so: userò un'impronta digitale!
Vantaggi :
- È davvero difficile per due persone avere la stessa impronta digitale (non impossibile, ma estremamente improbabile).
- L'impronta digitale di Mr Cruel non cambierà mai.
- Ogni singola parte dell'intero essere di Mr Cruel: il suo aspetto, il colore dei capelli, la personalità, le abitudini alimentari ecc. Devono (idealmente) riflettersi nella sua impronta digitale, in modo tale che se ha un fratello (che è molto simile ma non uguale) - allora entrambi dovrebbe avere impronte digitali diverse . Dico "dovrei" perché non possiamo garantire al 100% che due persone in questo mondo avranno impronte digitali diverse.
- Ma possiamo sempre garantire che Mr Cruel avrà sempre la stessa impronta digitale e che la sua impronta digitale non cambierà MAI.
Le caratteristiche di cui sopra generalmente offrono buone funzioni di hash.
Allora, qual è il problema con 'Collisioni'?
Quindi immagina se ottengo un vantaggio e trovo qualcuno che corrisponda alle impronte digitali di Mr Cruel. Questo significa che ho trovato Mr Cruel?
........Forse! Devo dare un'occhiata più da vicino. Se sto usando SHA256 (una funzione di hashing) e sto cercando in una piccola città con solo 5 persone - allora ho ottime possibilità di trovarlo! Ma se sto usando MD5 (un'altra famosa funzione di hashing) e sto cercando le impronte digitali in una città con + 2 ^ 1000 persone, allora è una buona possibilità che due persone completamente diverse possano avere la stessa impronta digitale.
Qual è comunque il vantaggio di tutto ciò?
L'unico vero vantaggio degli hashcodes è se vuoi mettere qualcosa in una tabella hash - e con le tabelle hash vorresti trovare oggetti rapidamente - ed è qui che entra in gioco il codice hash. Ti permettono di trovare cose nelle tabelle hash velocemente. È un hack che migliora notevolmente le prestazioni, ma con una piccola spesa di precisione.
Quindi immaginiamo di avere un tavolo di hash pieno di gente - 25 milioni di sospetti in Australia. Mr Cruel è da qualche parte lì dentro ... Come possiamo trovarlo molto velocemente ? Dobbiamo selezionarli tutti: per trovare una potenziale corrispondenza o per assolvere potenziali sospetti. Non vuoi considerare le caratteristiche uniche di ogni persona perché ciò richiederebbe troppo tempo. Cosa useresti invece? Useresti un hashcode! Un hashcode può dirti se due persone sono diverse. Se Joe Bloggs NON è Mr Cruel. Se le stampe non corrispondono, allora sai che NON è assolutamente Mr Cruel. Ma, se le impronte digitali corrispondonoquindi a seconda della funzione hash che hai usato, è probabile che tu abbia già trovato il tuo uomo abbastanza buono. Ma non è al 100%. L'unico modo per essere certi è indagare ulteriormente: (i) ha avuto un'opportunità / motivo, (ii) testimoni ecc. Ecc.
Quando si utilizzano computer se due oggetti hanno lo stesso valore del codice hash, è necessario verificare nuovamente se sono veramente uguali. ad es. Dovresti verificare se gli oggetti hanno ad es. la stessa altezza, lo stesso peso ecc., se gli interi sono uguali o se il cliente_id è una corrispondenza, e poi giungi alla conclusione se sono uguali. questo è in genere fatto forse implementando interfacce IComparer o IEquality.
Riepilogo chiave
Quindi in pratica un hashcode è un'impronta digitale.
- Due persone / oggetti diversi possono teoricamente avere ancora la stessa impronta digitale. O in altre parole. Se hai due impronte digitali uguali ......... non devono necessariamente provenire entrambi dalla stessa persona / oggetto.
- Buuuuuut, la stessa persona / oggetto restituirà sempre la
stessa impronta digitale .
- Ciò significa che se due oggetti restituiscono codici hash diversi , allora sai con certezza al 100% che quegli oggetti sono diversi.
Ci vogliono ben 3 minuti per capovolgere quanto sopra. Forse leggilo un paio di volte finché non ha senso. Spero che questo aiuti qualcuno perché ci è voluto molto dolore per imparare tutto!