Hash Table: Должен ли я увеличить количество элементов на столкновения?
-
27-09-2019 - |
Вопрос
Прямо сейчас мои хэш-таблицы считают количество каждого элемента, вставленного в хэш-таблицу. Я использую этот счет, с общей площадью хеш-таблицы, чтобы рассчитать коэффициент нагрузки и когда он достигает 70%, я его перефразирую.
Я думал, что, возможно, я должен подсчитать только вставленные элементы с заполнением пустого слота вместо всех из них. Причина метод столкновения, который я использую, является отдельный цепочка. Факторная нагрузка продолжает расти, но если могут быть несколько столкновений, оставляющих множество пустых слотов на хэш-таблице.
Вы, вероятно, думаете, что если у меня есть такие многие столкновения, может быть, я не использую лучший метод хеширования. Но это не точка, я использую один из знаковых алгоритмов хеширования, я протестировал 3 из них в моих данных образца и выбрал тот, кто произвел менее столкновения.
Мой вопрос все еще остается. Должен ли я продолжать подсчитать каждый элемент вставлен или только те, которые заполняют пустой слот в хэш-таблице?
Решение
Перефразирование предназначено для снижения вероятности столкновений, поэтому систематически игнорируя столкновения, чтобы решить, когда перефразировать, кажется самообеспечением.
Лучше всего может быть, если вы сохраняете с каждой записью оригинальное полное значение HASH (вместо этого столкновение определяется HAHH Modulo ваш текущий размер) и подсчитал только столкновения, которые связаны с операцией по модулю - неявно подтверждают, что если столкновение Из-за одинаковых ценностей в полных хэшах для разных предметов нет ничего перерегистрации, не может сделать, чтобы помочь (если по «перенаправлению» вы также подразумевают переключение на другую хэш-функцию, но это не похоже на то, что вы имеете в виду здесь ;-).
Сохранение полных хеш-значений также означает дешевле RehaShing, поскольку вам не нужно снова запускать функцию хэша (насколько релевантно зависит от того, насколько дорогая ваша функция HASH должна вычислить, конечно).