Самый быстрый алгоритм хеширования для текстовых данных

Я пытаюсь выбрать хэш-алгоритм для сравнения около 20 различных текстовых данных.

Какой хэш лучше для этих требований?

  • Меньшее потребление процессора
  • Малая занимаемая площадь (< = 32 байта)
  • Столкновение не имеет большого значения.
  • Может быть сгенерирован из .NET Framework 2 (не должна быть сторонняя библиотека)

Я использую хэш для меньшего объема памяти и производительности сравнения

Ответы

Ответ 1

Если столкновение не имеет большого значения, вы можете взять первую букву каждого документа. Или вы можете использовать длину текста или строку с текстом.

Ответ 2

Paul Hsieh имеет достойный, простой, быстрый, 32-разрядный SuperFastHash, который лучше, чем большинство существующих хеш-функций, легче понять/реализовать и звучит так, как будто он соответствует вашим критериям.

Ответ 3

FHV хэш - известный алгоритм быстрого хеширования. Это не криптографически безопасно, но похоже, что вам не нужен безопасный хеш.

Ответ 4

Очень быстрая проверка заключалась бы в том, чтобы взять длину текста и XOR с четырьмя байтами и использовать его как хеш. Если это достаточно хорошо, это очень быстро, потому что оно не зависит от количества байтов файла.

Ответ 5

Если вы ограничены алгоритмами, существующими в рамках

Достаточно ли MD5 (16 байт)?

Меньшее потребление процессора и малая занимаемая площадь обычно являются взаимоисключающими.

http://en.wikipedia.org/wiki/Time-space_tradeoff

Ответ 7

Сколько времени требуется для хэша? GetHashCode() довольно доступен, дает небольшой отклик (4 байта), который должен быть точным (сведение к минимуму столкновений) более 20 строк.

Однако GetHashCode() не должен сохраняться в базе данных - это нормально для сравнения в памяти. Просто имейте в виду, что алгоритм может меняться между фреймворками (и делался между 1.1 и 2.0).

Другим преимуществом этого является то, что его тривиально использовать - просто используйте Dictionary<string,Something>, который будет обрабатывать все хэширование и т.д. для вас.

Ответ 8

У меня был такой же запрос для myselve, и я реализовал xxHashSharp. Просто убедитесь, что вы берете соответствующую библиотеку (x32 vs x64). Он также доступен вне С# здесь