Ответ 1
Если столкновение не имеет большого значения, вы можете взять первую букву каждого документа. Или вы можете использовать длину текста или строку с текстом.
Я пытаюсь выбрать хэш-алгоритм для сравнения около 20 различных текстовых данных.
Какой хэш лучше для этих требований?
Я использую хэш для меньшего объема памяти и производительности сравнения
Если столкновение не имеет большого значения, вы можете взять первую букву каждого документа. Или вы можете использовать длину текста или строку с текстом.
Paul Hsieh имеет достойный, простой, быстрый, 32-разрядный SuperFastHash, который лучше, чем большинство существующих хеш-функций, легче понять/реализовать и звучит так, как будто он соответствует вашим критериям.
FHV хэш - известный алгоритм быстрого хеширования. Это не криптографически безопасно, но похоже, что вам не нужен безопасный хеш.
Очень быстрая проверка заключалась бы в том, чтобы взять длину текста и XOR с четырьмя байтами и использовать его как хеш. Если это достаточно хорошо, это очень быстро, потому что оно не зависит от количества байтов файла.
Если вы ограничены алгоритмами, существующими в рамках
Достаточно ли MD5 (16 байт)?
Меньшее потребление процессора и малая занимаемая площадь обычно являются взаимоисключающими.
Сколько времени требуется для хэша? GetHashCode()
довольно доступен, дает небольшой отклик (4 байта), который должен быть точным (сведение к минимуму столкновений) более 20 строк.
Однако GetHashCode()
не должен сохраняться в базе данных - это нормально для сравнения в памяти. Просто имейте в виду, что алгоритм может меняться между фреймворками (и делался между 1.1 и 2.0).
Другим преимуществом этого является то, что его тривиально использовать - просто используйте Dictionary<string,Something>
, который будет обрабатывать все хэширование и т.д. для вас.
У меня был такой же запрос для myselve, и я реализовал xxHashSharp. Просто убедитесь, что вы берете соответствующую библиотеку (x32 vs x64). Он также доступен вне С# здесь