Perché è chiamato "tabella hash" o "funzione hash"? Hash non ha alcun senso per me qui

23

Ora sono circa 4 anni di sviluppo che sto utilizzando, ascoltando, parlando e implementando tabelle hash e funzioni hash. Ma davvero non capisco mai perché si chiama hash?

Ricordo i primi giorni in cui ho iniziato a programmare, questo termine era gentile per la terminologia ingombrante per me. Non ho mai capito cos'è, basato sul suo nome . Ho solo compreso sperimentalmente che cosa fa e perché e quando dovremmo utilizzarlo .

Tuttavia, a volte cerco ancora di capire perché si chiami hash . Non ho alcun problema con la tabella o la funzione e, a essere onesti, sono termini piuttosto deduttivi e razionali. Tuttavia, penso che potrebbero essere utilizzate parole migliori al posto di hash, come chiave o unicità . Non tabella dei tasti o tabella di unicità .

Secondo il mio dizionario, hash significa:

  1. Piatto fritto di patate e carne (altamente irrilevante)
  2. # simbolo (segno numerico AKA, cancelletto, ecc.) (ancora irrilevante, forse solo una nomenclatura errata)
  3. Applica algoritmo alla stringa di caratteri (non ha ancora nulla a che fare con unicità , che è la caratteristica più importante di una tabella hash)
  4. Taglia il cibo
  5. Un altro termine per hashish

Qualcuno sa perché si chiama hash?

    
posta Saeed Neamati 14.09.2011 - 09:10
fonte

5 risposte

43

Secondo wikipedia, si riferisce alla funzione di hash . Se vuoi fare un ulteriore passo avanti, la pagina wiki per la funzione hash dice che l'uso della parola "hash" nella funzione di hash ha avuto origine in questo modo:

The term "hash" comes by way of analogy with its non-technical meaning, to "chop and mix". Indeed, typical hash functions, like the mod operation, "chop" the input domain into many sub-domains that get "mixed" into the output range to improve the uniformity of the key distribution.

    
risposta data 14.09.2011 - 09:19
fonte
14

In francese, una tabella hash si chiama "table de hachage", il verbo correlato "hacher" significa tagliare / tritare (il cibo principalmente). Il verbo to hash ha lo stesso significato in inglese.

Quindi, come altri hanno sottolineato, si chiama hash, perché tagli il tuo input che metti in pezzi in posti diversi (le voci della tabella).

    
risposta data 14.09.2011 - 09:34
fonte
10

Il numero 3 ha tutto a che fare con questo. Da Wikipedia :

At the heart of the hash table algorithm is a simple array of items; this is often simply called the hash table. Hash table algorithms calculate an index from the data item's key and use this index to place the data into the array. The implementation of this calculation is the hash function, f:

index = f(key, arrayLength)

The hash function calculates an index within the array from the data key. arrayLength is the size of the array. For assembly language or other low-level programs, a trivial hash function can often create an index with just one or two inline machine instructions.

Quindi una tabella di hash non memorizza valori basati su una chiave; memorizza valori basati su una versione hash di quella chiave.

    
risposta data 14.09.2011 - 09:21
fonte
10

le tabelle hash vengono chiamate in questo modo a causa dell'utilizzo del codice hash ed è correlato a "tagliare cibo".

Pensalo in questo modo: prendi il tuo bel oggetto carino, come un frutto, poi lo fai in modo che inizi a sembrare proprio come qualsiasi altra cosa - solo un numero - non c'è più struttura in esso. Quel pezzo di "cibo tagliato" è usato nella tabella hash per trovare il tuo bel oggetto carino.

  • Sembra più brutto del tuo bel oggetto? forse - ma aiuta a trovarlo fast - questo è il punto. oh e non è unico questo è sicuro.

    Il codice hash trova un bucket nella tabella in cui il tuo oggetto grazioso si trova in una piccola società di altri con lo stesso codice hash. All'interno di questa piccola società, l'oggetto viene cercato usando il controllo di uguaglianza - che dovrebbe essere molto più lento della ricerca hash ma non è un grosso problema dato che ce ne sono solo alcuni (la maggior parte degli altri oggetti sono già ignorato grazie all'hash veloce).
risposta data 14.09.2011 - 09:28
fonte
3

Hashing (come nel tagliare pezzi piccoli, triturazione, ecc.) prende un input (cibo o talvolta supervillains) e lo trasforma in un output relativamente omogeneo. Cioè non importa quello che avevi all'inizio, alla fine hai solo hash. E una cucchiaiata di hash è utile quanto tutto l'hash nel determinare, quale input era (supponendo che il tuo hash hash bene).
Quindi l'hashing può ridurre qualsiasi oggetto commestibile o malvagio in un cucchiaio di hash, dove due oggetti diversi producono diversi hash, mentre due oggetti uguali producono uguali hash. Il che significa che se due supercattivo sono caduti nella tua macchina di hashing, è sufficiente confrontare i loro hash per determinare se uno era un clone dell'altro.

In un certo senso le funzioni di hashing in informatica sono un po 'uguali. Prendono un intero input di diverse dimensioni e semantica, e -molto semplicemente- lo tagliano semplicemente a pezzi e mescolano quelli intorno e tagliano la sequenza risultante in pezzi e la mescolano intorno e così via. Alla fine hai un cucchiaio (n byte) di input che hai cancellato.

    
risposta data 14.09.2011 - 12:28
fonte

Leggi altre domande sui tag