Je suis à la recherche d'un algorithme de hachage qui produit un entier signé/non signé de 31/32 bits comme digest pour une chaîne utf8 dans le but d'utiliser la sortie pour ensemencer un prng, tel qu'un Park-Miller-Carta LCG ou un Mersenne-Twister. J'ai examiné FNV1 et FNV1a, mais ils fournissent des valeurs très proches pour des chaînes similaires différant par leur dernier caractère; Je voudrais avoir un hachage de collision faible qui change radicalement sur les modifications minimales sur la chaîne d'entrée. La performance n'est pas un problème.Qu'est-ce qu'un bon algorithme de hachage pour ensemencer un prng avec une chaîne?
Mon approche actuelle consiste en une LCG sale qui utilise des codes de caractères et un nombre premier comme multiplicateurs:
a = 524287;
for (i = 0; i < n; i ++)
a = (a * string.charCodeAt (i) * 16807 + 524287) % 2147483647;
S'il vous plaît laissez-moi de toutes meilleures alternatives.