Имеет ли смысл изменить размер хеш-таблицы? И когда? - PullRequest
3 голосов
/ 13 апреля 2010

В реализации My Hash Table есть функция изменения размера таблицы, когда нагрузка достигает около 70%. My Hash Table реализован с отдельной цепочкой для коллизий.

Имеет ли смысл, что я должен изменить размер хеш-таблицы в любой момент или я должен просто оставить ее как есть? В противном случае, если я увеличу размер (почти вдвое, фактически я следую этому: http://planetmath.org/encyclopedia/GoodHashTablePrimes.html), когда нагрузка составляет 70%, я должен изменить его размер, когда нагрузка становится 30% или ниже?

Ответы [ 3 ]

3 голосов
/ 13 апреля 2010

Хеш-таблицы не должны иметь длины простых чисел, если у вас есть хеш-функция хорошего качества (см. здесь ).Вы можете сделать их степенью двойки, что существенно ускоряет вычисления индекса.

Почему это относится к вопросу?Потому что, когда вы уменьшаете хеш-таблицу степени двух, вы можете оставить все записи в нижней половине, где они есть, и просто добавить связанный список в слоте i (из верхней половины) в связанный список в слоте i - n/2.

2 голосов
/ 13 апреля 2010

Если память дешевая, оставьте ее в покое. Если память дорогая, измените размер при истерии, как вы предложили. Когда закончите, профилируйте результат, чтобы убедиться, что он работает хорошо и не сделал ничего глупого.

1 голос
/ 13 апреля 2010

Пишете ли вы хеш-таблицу для общего пользования или для этого есть какая-то конкретная цель? Я предлагаю не изменять размер меньше для общей реализации. Это сделает вашу таблицу простой и не позволит памяти трепетать в условиях, когда таблица часто заполняется и очищается. Если вы столкнетесь с условием, что размер хеш-таблицы должен быть уменьшен, увеличьте его в этот момент времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...