Здравствуйте, lost_guadelenn, Вы писали:
_FR>>Зачем нужны именно простые числа?
_>Да, вопрос именно в этом.
Кстати, вот как раз подобный вопрос всплыл:
http://www.rsdn.ru/forum/alg/4114482.aspxАвтор:
Дата: 13.01.11
Здравствуйте, lost_guadelenn, Вы писали:
_>Я извиняюсь, если вопрос кому-то покажется глупым, но зачем это было сделано?
Вопрос совсем не глупый, и не совсем простой.
При добавлении элемента в хештаблицу, внутри срабатывает еще одна хеш-функция (еще одна — потому что первая хеш-функция — это GetHashCode(), получающая значение ключа для конкретного объекта).
Эта хеш функция имеет вид h(K) = K mod M, где K — результат выполнения GetHashCode(), а M — допустимое количество различных значений хеш-функции.
Результатом выполнения этой хеш-функции станет число, которое будет использоваться в качестве индекса массива buckets (см. описание хеш-таблиц в википедии либо исходники HashSet<T>).
Для уменьшения числа коллизий данной хеш-функции важно правильно подобрать число M. Математические рассуждения и практика показывают, что лучше всего использовать в качестве М простое число. Т.е. при этом будет получаться меньше коллизий, чем если бы использовались другие числа.
В третьем томе Кнута в разделе 6.4, можно найти небольшой отрывок как раз на эту тему:
Здравствуйте, MozgC, Вы писали:
MC>Здравствуйте, lost_guadelenn, Вы писали:
_>>Я извиняюсь, если вопрос кому-то покажется глупым, но зачем это было сделано?
MC>Вопрос совсем не глупый, и не совсем простой.
Во-первых,
здесьАвтор:
Дата: 13.09.10
, во-вторых, есть методы получения хорошего распределения и в тех случаях, когда M не является простым числом. Реальная причина, видимо, в том, что возможность управления capacity не посчитали достаточно полезной.