Можно ли построить «хорошую» хеш-функцию, используя CRC32C в качестве основы?

Учитывая, что SSE 4.2 (части Intel Core i7 и i5) содержит инструкцию CRC32, представляется разумным изучить вопрос о том, можно ли создать более быструю хэш-функцию общего назначения. В соответствии сэтот только 16 бит CRC32 распределены равномерно. Итак, какое еще преобразование можно применить, чтобы преодолеть это?

Обновить Как насчет этого? Только 16 битов подходят для значения хеша. Хорошо. Если ваш стол составляет 65535 или меньше, тогда отлично. Если нет, запустите значение CRC с помощью инструкции Nehalem POPCNT (подсчет населения), чтобы получить количество установленных битов. Затем используйте это в качестве индекса в массиве таблиц. Это работает, если ваша таблица южнее 1 мм записей. Держу пари, что это дешевле / быстрее, чем самые эффективные хэш-функции. Теперь, когдаGCC 4.5 имеет встроенный CRC32, его легко проверить ... если бы у меня было достаточно свободного времени для работы над ним.

Дэвид

Ответы на вопрос(5)

Ваш ответ на вопрос