Я реализую HashTable в C ++, используя открытую адресацию через двойное хеширование.
Я понимаю, что основной принцип двойного хеширования заключается в следующем:
indexInProbingSequence = (originalIndex + i * hashFunction2(key)) % tableSize
Я думаю, что реализовалэта часть правильно.Это для домашнего задания, и в соответствии с политикой класса я не могу просить совета по какому-либо конкретному коду, поэтому вам придется доверять мне в этой части.
Что, кажется, вызывает у меня проблемы, так это то, что иногда некоторые ключи при воздействии второй хэш-функции возвращают значение, кратное (простому) размеру таблицы.В этих случаях все индексы в последовательности зондирования одинаковы.Например, когда:
originalIndex = 32
hashFunction2(key) = 3035446
tableSize = 211
Последовательность проверки:
(32 + 1 * 3035446) % 211 == 32
(32 + 2 * 3035446) % 211 == 32
и т. Д.
Чего мне не хватает?