Estaba revisando para el examen final de las estructuras de datos, y encontré una pregunta en la final del año pasado. Después de haber trabajado en él durante las últimas tres horas, todavía no podía encontrar una manera de resolverlo, excepto por prueba y error. Aquí está la pregunta:Encontrar colisiones en la tabla hash
"Supongamos que el tamaño de la tabla hash es 31, la constante g es también de 31 años, y que se utiliza el siguiente código hash
int hash = 0;
int n = s.length();
for (int i = 0; i < n; i++)
hash = g * hash + s.charAt(i);
y que utiliza encadenamiento separado para resolver colisiones. Enumera cinco nombres diferentes que harían hash en la misma ubicación en la tabla ".
Creo que debe haber algún tipo de trucos, posiblemente involucrando al operador del módulo, para resolver este problema, considerando que el tamaño de la tabla hash es 31, que es lo mismo que la constante g. Lo siento si sueno así, pero no estoy pidiendo código ni nada, solo algunos pensamientos/pistas sobre la pregunta. Cualquier comentario es muy apreciado. Gracias
¡Interesante! Muchas gracias por señalar eso. –
Me complace ayudar ... –
Por cierto, esta implementación de hashing deja a Java abierto a un ataque DoS. Ver http://www.ocert.org/advisories/ocert-2011-003.html, http://cryptanalysis.eu/blog/2011/12/28/effective-dos-attacks-against-web-application-plattforms -hashdos/or google para ataques DoS usando mapas hash. – yshavit