Самый быстрый алгоритм хеширования для текстовых данных - PullRequest
14 голосов
/ 21 декабря 2008

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

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

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

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

Ответы [ 8 ]

9 голосов
/ 21 декабря 2008

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

7 голосов
/ 21 декабря 2008

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

4 голосов
/ 21 декабря 2008

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

1 голос
/ 22 декабря 2008

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

0 голосов
/ 16 января 2018

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

0 голосов
/ 21 декабря 2008

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

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

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

0 голосов
/ 21 декабря 2008
0 голосов
/ 21 декабря 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...