эффективная хэш-функция для Uris - PullRequest
1 голос
/ 16 января 2011

Я ищу хеш-функцию для создания (глобального) идентификатора фиксированного размера для строк, большинство из которых URI.

это должно быть:

  • fast
  • низкая вероятность столкновения
  • ~ 64 бит
  • использование структуры URI, если это возможно?

будет http://murmurhash.googlepages.com/ бытьхороший выбор или есть что-нибудь лучше подходит?

Ответы [ 2 ]

2 голосов
/ 17 января 2011

Попробуйте MD4 .Что касается криптографии, она «сломана», но поскольку у вас нет проблем с безопасностью (вам нужен 64-битный размер вывода, который слишком мал, чтобы обеспечить какую-либо достойную защиту от коллизий), это не должнопроблема.MD4 дает 128-битное значение, которое вам просто нужно усечь до нужного размера.

Криптографические хеш-функции предназначены для устойчивости к явным попыткам создания коллизий.Возможно, можно создать более быструю функцию, ослабив это условие (случайные столкновения легче преодолевать, чем решительного злоумышленника).Есть несколько таких функций, например, MurmurHash. Однако может потребоваться довольно специфическая настройка, чтобы заметить разницу в скорости.С моим домашним ПК (2,4 ГГц Core2) я могу хэшировать около 10 миллионов коротких строк в секунду с помощью MD4, используя одно ядро ​​ЦП (у меня четыре ядра).Чтобы MurmurHash был быстрее, чем MD4, и его можно было бы пренебречь, его нужно использовать в контексте, включающем не менее одного миллиона хеш-вызовов в секунду.Это случается не очень часто ...

0 голосов
/ 03 февраля 2011

Я бы немного подождал, пока MurmurHash3 будет завершен, а затем использовал это.128-битная версия должна обеспечить вам адекватную защиту от столкновений от парадокса дня рождения.

...