Поскольку набор строк, который у вас есть, является фиксированным, вы должны попытаться найти совершенную хэш-функцию , хеш-функцию, специально разработанную для набора данных, чтобы гарантировать отсутствие коллизий происходят. Существует много инструментов для создания таких хеш-функций, один из которых, gperf
(не путать с gprof
), я знаю, доступен бесплатно. Я настоятельно рекомендую это.
Если вам позже понадобится изменить набор строк и захотите легкую, простую хеш-функцию, вы можете рассмотреть возможность использования прокручиваемой хеш-функции Рабина-Карпа . Он может быть вычислен для строки длины n с использованием O (n) сложений, умножений и модулей и гарантирует, что каждые две строки имеют попарно независимые значения хеш-функции. Более того, вы, вероятно, могли бы написать код примерно через полчаса, чтобы проверить, работает ли он лучше, чем контрольная сумма Адлера.
Тем не менее, использование хорошо известной хеш-функции, такой как MD5, все еще, вероятно, хорошая идея, если вы не пытаетесь достичь криптографической защиты. В этом случае может быть достаточно даже простого CRC32.