Re[4]: HashSet<T> - почему нет Capacity?
От: lost_guadelenn  
Дата: 15.09.10 10:42
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Зачем нужны именно простые числа?

Да, вопрос именно в этом.
Re[5]: HashSet<T> - почему нет Capacity?
От: andy1618 Россия  
Дата: 23.01.11 21:37
Оценка:
Здравствуйте, lost_guadelenn, Вы писали:

_FR>>Зачем нужны именно простые числа?

_>Да, вопрос именно в этом.

Кстати, вот как раз подобный вопрос всплыл:
http://www.rsdn.ru/forum/alg/4114482.aspx
Автор:
Дата: 13.01.11
Re[3]: HashSet<T> - почему нет Capacity?
От: MozgC США http://nightcoder.livejournal.com
Дата: 23.01.11 23:28
Оценка: 54 (5) +1
Здравствуйте, lost_guadelenn, Вы писали:

_>Я извиняюсь, если вопрос кому-то покажется глупым, но зачем это было сделано?


Вопрос совсем не глупый, и не совсем простой.
При добавлении элемента в хештаблицу, внутри срабатывает еще одна хеш-функция (еще одна — потому что первая хеш-функция — это GetHashCode(), получающая значение ключа для конкретного объекта).
Эта хеш функция имеет вид h(K) = K mod M, где K — результат выполнения GetHashCode(), а M — допустимое количество различных значений хеш-функции.
Результатом выполнения этой хеш-функции станет число, которое будет использоваться в качестве индекса массива buckets (см. описание хеш-таблиц в википедии либо исходники HashSet<T>).
Для уменьшения числа коллизий данной хеш-функции важно правильно подобрать число M. Математические рассуждения и практика показывают, что лучше всего использовать в качестве М простое число. Т.е. при этом будет получаться меньше коллизий, чем если бы использовались другие числа.

В третьем томе Кнута в разделе 6.4, можно найти небольшой отрывок как раз на эту тему:


Re[4]: HashSet<T> - почему нет Capacity?
От: k.o. Россия  
Дата: 24.01.11 08:15
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Здравствуйте, lost_guadelenn, Вы писали:


_>>Я извиняюсь, если вопрос кому-то покажется глупым, но зачем это было сделано?


MC>Вопрос совсем не глупый, и не совсем простой.


Во-первых, здесь
Автор:
Дата: 13.09.10
, во-вторых, есть методы получения хорошего распределения и в тех случаях, когда M не является простым числом. Реальная причина, видимо, в том, что возможность управления capacity не посчитали достаточно полезной.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.