Cita:
Iniciado por delarub Es para un proyecto sobre estadística y probabilidad de los sistemas de criptografía actuales.
Para generar las estadísticas de los distintos tipos de funciones hash, hago un loop para generar todas las permutaciones posibles de 5 letras de largo con las letras que yo le proporciono al programa (que en este caso, son 74 diferentes).
Por cada permutacion genero un hash y me quedo con los dos primeros chars de éste (que pueden ir desde 0 hasta 255) (a y b), y de la permutacion actual cojo las dos primeras letras (c y d).
Entonces incremento el contador con estas variables para saber que, pongamos, en un hash que empieza por af hay 28 palabras que empiezan por jc, por decir algo.
Se entiende mejor?
Algo mas se entiende, como los valores que vas a usar son 0-255 te cabe en un solo bit, por lo que puedes almacenarlo en un char (eso ya seria 4 veces menos memoria).
Lo otro seria si quieres calcular todas las combinaciones de a+b (en tu caso 74*74), no reservar la memoria para todas las convinaciones distintas de c+d (256*256) si no unicamente para las que surjan (dale al realloc).
Si para "af" hay (por ejemplo) 10000 c+d combinaciones distintas no tiene sentido reservar la memoria para el maximo 65536.
La parte de estadistica no es mi fuerte, pero si puedes saber (a ojo) cuantas convinaciones son realmente posibles (y diferentes) probablemente puedas reducir el consumo de memoria.
O otra manera seria no cargar todo en memoria, para cada distinto a+b puedes reservar memoria solo para su c+d correspondiente, y una vez calculados todos sus valores grabar la informacion interesante (en un fichero o BBDD) y liberar la memoria de c+d, pasar al siguiente a+b y repetir el proceso.