afsdfdlecosdfsfdcco
15-02-2008, 22:13
Sto cercando di implementare un hashtable ad indirizzamento aperto doppio ed ho un dubbio. Per calcolare le due chiavi (la chiave vera e proprio e la chiave "di salto") mi servono due funzioni di hash, giusto?
E queste due funzioni come devono essere? Io ho fatto così:
int hashCode1(String key) {
return (int) Math.ceil(size * ((code(key) * A) % 1d));
}
int hashCode2(String key) {
return (int) Math.ceil(size * (((code(key)) * (A / 3)) % 1d));
}
Dove size è il numero massimo di elementi che la tabella può contenere, code() è la funzione che trasforma la mia stringa in un intero in base 256 e A è la sezione aurea.
E' giusto usare la stessa funzione con unica differenza una costante (prima A e poi A/3)?
Grazie
E queste due funzioni come devono essere? Io ho fatto così:
int hashCode1(String key) {
return (int) Math.ceil(size * ((code(key) * A) % 1d));
}
int hashCode2(String key) {
return (int) Math.ceil(size * (((code(key)) * (A / 3)) % 1d));
}
Dove size è il numero massimo di elementi che la tabella può contenere, code() è la funzione che trasforma la mia stringa in un intero in base 256 e A è la sezione aurea.
E' giusto usare la stessa funzione con unica differenza una costante (prima A e poi A/3)?
Grazie