ataque Hash: cadenas hallazgo de longitud 2 ^ n con el mismo hashCode ()

John :

La lectura de los algoritmos cuarta edición de Robert Sedgewick y Kevin Wayne me encontré con la siguiente pregunta:

ataque Hash: hay 2 ^ n cuerdas, cada una de longitud 2 ^ N, que tiene el valor mismo hashCode (), suponiendo que la aplicación hashCode () para la cadena es el siguiente:

public int hashCode() {
   int hash = 0;
   for (int i = 0; i < length(); i++)
      hash = (hash * 31) + charAt(i);
   return hash;
}

fuerte indicio: AA y BB tienen el mismo valor.

Lo que viene en mi mente está generando todas las posibles cadenas de longitud 2 ^ N y comparar sus hashcodes. Esto, sin embargo, es muy caro para N grande y dudo que es la solución correcta. ¿Me puede dar consejos lo que echo en toda la imagen?

ruakh:

Andreas' y Glains' respuestas son ambas correctas, pero no son exactamente lo que necesita si su objetivo es producir 2 N series diferentes de longitud 2 N .

Por el contrario, un enfoque más simple es la construcción de cadenas que consta únicamente de secuencias concatenadas de Aay BB. Para longitud 2 × 1 que tienen {  Aa, BB }; de longitud 2 × 2 que tienen {  AaAa, AaBB, BBAa, BBBB }, de longitud 2 × 3 que tienen {  AaAaAa, AAaaBB, AaBBAa, AaBBBB, BBAaAa, BBAaBB, BBBBAa, BBBBBB }; y así.

(Nota: usted ha citado el texto diciendo que las cadenas deben tener una longitud 2 N supongo que usted citado en forma inexacta, y de hecho es pedir longitud 2. N ; pero si es de hecho pidiendo longitud 2 N , entonces se puede caer simplemente los elementos a medida que avanza.)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=203829&siteId=1
Recomendado
Clasificación