---+++ Un esempio di Funzione Hash Una buona regola per la definzione di una funzione hash è che tutti i bit della chiave siano utilizzati per calcolare il risultato della funzione. Nel caso in cui la chiave è una stringa, una semplice funzione che soddisfa il precedente requisito è la seguente. Supponiamo che c<sub>0</sub>, c<sub>1</sub>, c<sub>2</sub>, ..., c<sub>n</sub>, sia la sequenza dei codici ASCII dei caratteri che formano la stringa S (lunga n). Tenendo conto che un codice ASCII è compreso tra 0 e 255, possiamo associare pensare che la stringa sia la rappresentazione in base 256 del numero <div align=center> ASCII(S) = c<sub>0</sub> + c<sub>1</sub> * 256 + c<sub>2</sub> * 256<sup>2</sup> + ... + c<sub>n</sub> * 256<sup>n</sup> </div> suppponendo che S<sub>i</sub> è il prefisso di lunghezza n della stringa S, la precedente funzione può essere definita per mezzo della seguente formula di ricorrenza: <div align=center> <table width="600"> <tr><td align="center"> ASCII(S<sub>0</sub>) = c<sub>0</sub> </td> <td align="center"> ASCII(S<sub>i+1</sub>) = ASCII(S<sub>i</sub>) * 256 + c<sub>i+1</sub> </td></tr> </table> </div> La funzione di hashing può quindi essere definita come <div align=center> HASH(S) = ASCII(S) mod N </div> dove N è la dimensione della tavola hash. Si osservi però che un calcolo diretto di ASCII(S) porta sicuramente (per n maggiore del numero di byte degli interi) ad un overflow. Per evitare che durante il calcolo si superi il valore di INT_MAX occorre sfruttare la seguente proprietà del modulo <div align=center> (a + b) mod N = (a mod N + b mod N) mod N </div> -- Users.StefanoGuerrini - 19 Apr 2005
This topic: Labprog2pz
>
WebHome
>
FunzioneHash
Topic revision: r3 - 2005-04-19 - StefanoGuerrini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback