Вы можете найти людей, которые предлагают два противоположных конца спектра.С одной стороны, выбор простого числа для размера хеш-таблицы уменьшит вероятность коллизий, даже если хеш-функция не слишком эффективна для распределения результатов.Обратите внимание, что если (в простейшем примере для спора) будет решена степень 2, то только младшие биты влияют на сегмент, тогда как для простого числа будет использоваться большинство битов в результате хеширования.
С другой стороны, вы можете получить больше, выбрав лучшую хеш-функцию или даже перефразировав результат хеш-функции, применив некоторые битовые операции и используя степень хеш-функции степени 2 для ускорения вычислений.
В качестве примера из реальной жизни Java HashTable изначально были реализованы с использованием простых (или почти простых размеров), но начиная с Java 1.4, дизайн был изменен, чтобы использовать мощность двух чисел, и добавила вторую функцию быстрого хеширования, примененную крезультат начального хэша.Интересная статья, комментирующая, что изменение можно найти здесь .
Так что в основном:
простое число помогает распределить входные данные по различным сегментам дажев случае не очень хороших хэш-функций.
аналогичный эффект может быть достигнут путем последующей обработки результата хеш-функции и использования степени 2 для ускоренияОперация по модулю (битовая маска) и компенсация для последующей обработки.