Hash e mappa sono due concetti diversi. (E quindi due tag hashing e map :-)).
Il concetto di mappa (in questo contesto) è raccolta di coppie chiave-valore , dove la chiave potrebbe essere qualsiasi cosa e il valore potrebbe essere qualsiasi cosa. Una volta creata una mappa, la mappa dovrebbe essere in grado di recuperare il valore di una determinata chiave. Una semplice mappa potrebbe memorizzare la coppia chiave-valore in un array o in una lista collegata. Una mappa può essere implementata utilizzando qualsiasi tecnica di archiviazione. I più popolari sono gli alberi rosso-nero e Hashing.
L'hashing è conversione di qualcosa in una rappresentazione unica (la maggior parte delle volte il più casuale possibile) che è limitata da un intervallo. L'hashing è unidirezionale, significa che una volta che hai hash A in B non esiste un modo sicuro per ottenere A da B.
Una funzione di hash è una che accetta A come input e restituisce B come output. Due proprietà per le funzioni hash sono importanti.
- Dovrebbe sempre restituire lo stesso B dato lo stesso A.
- Idealmente dovrebbe restituire B diversi per A. diversi. Ma è impossibile se l'intervallo di B è inferiore all'intervallo di A.
Ottenere una buona funzione di hash è davvero difficile in quanto mantenere la proprietà 2 è piuttosto difficile. Una funzione hash più semplice è l'operatore modulo. Esistono molti algoritmi e librerie di hash.
Ora cosa ottieni quando combini questi due? Una mappa di hash. La chiave viene convertita in hash e memorizzata rispetto al valore . Quindi, se ho una coppia (A,A'
), convertirò A in hash B e conserverò (B, A')
. Ora Se voglio ottenere qual è il valore memorizzato contro la chiave A, prima convertirò A in B e poi vedrò cosa viene memorizzato contro B, e lo restituirò.
Il vantaggio dell'utilizzo della mappa hash è il recupero veloce . È O (1), cioè in tempo costante posso scoprire se una chiave è presente e il valore contro di essa. Confrontalo con l'albero rosso-nero in cui la complessità temporale del recupero è O (logn). (C'è anche tempo di inserimento e cancellazione di cui non sto discutendo qui.)
Quindi ora dimmi qual è la tua domanda?