Я ищу алгоритм хэширования, который генерирует целое число со знаком/без знака 31/32 бит в качестве дайджеста для строки utf8 с целью использования вывода для посева prng, такого как LCM Park-Miller-Carta или Мерсенна-Twister.Что такое хороший алгоритм хэширования для посева prng со строкой?
Я изучил FNV1 и FNV1a, но они обеспечивают очень близкие значения для похожих строк, отличающихся своим последним символом; Я хотел бы иметь низкий хеш столкновений, который радикально изменяется при минимальных модификациях входной строки. Производительность не является проблемой.
Мой текущий подход заключается в грязном LCG, который использует коды символов, и простое число в качестве множителей:
a = 524287;
for (i = 0; i < n; i ++)
a = (a * string.charCodeAt (i) * 16807 + 524287) % 2147483647;
Пожалуйста, дайте мне знать о любых лучших альтернатив.