[Tech]Domanda di programmazione
Franco Bagnoli
franco.bagnoli@unifi.it
Mar 4 Apr 2006 16:15:19 CEST
Davide Cesaroni ha scritto:
> Salve a tuttiiiiiiii,
> sto facendo, per l'esame di fondamenti di informatica 2, un
> dizionario
> basato su tabelle hash con chaining.
> Lo voglio fare considerando due funzioni hash differenti, una
> con il
> metodo della divisione ed una con il metodo della moltiplicazione.
> Il mio problema è quello di dover convertire ogni stringa in
> un numero
> da passare poi alla funzoine hash, ovviamente lo devo fare in
> modo che
> due parole differenti non restituiscano lo stesso numero.
Non ricordo molto bene la questione, ma secondo me questa richiesta è
impossibile/inutile. Se ogni possibile stringa deve dare un numero
diverso, allora devi semplicemente concatenare i bit, ma ovviamente ti
vengono dei numeri assurdi.
In tutti gli algoritmi di hash che conosco ci sono delle collisioni,
(ovvero: lo spazio degli indici è più piccolo rispetto a quello dei
possibili input) che ovviamente si vogliono minimizzare, ma per far
questo dvi avere un'idea chiara dei dati in input.
In un mio vecchio programma ricordo che una semplice funzione di hash
che funzionava bene si otteneva prendendo la somma dei vari byte modulo
un numero sufficientemente grande (ovvero: quanto vuoi allocare come
tabella di hash). Anche qui ovviamente devi trovare il compromesso
giusto tra lunghezza della tabella (occupazione di memoria) e collisioni.
--
Franco Bagnoli <franco.bagnoli@unifi.it>
Dipartimento di Energetica & Centro Dinamiche Complesse
Universita' di Firenze, via S. Marta, 3 I-50139 Firenze, Italy.
Tel. +39 0554796592, fax: +39 0554796342
Maggiori informazioni sulla lista
flug-tech