Двойное хеширование - HashValues вне диапазона HashTable
У меня здесь домашнее задание о двойном хешировании, и я ставлю на одну точку:
У меня есть массив: 17, 6, 5, 8, 11, 28, 14, 15 h1(k) = k mod 11, h2(k) = 1 + (k mod 9), размер хеш-таблицы = 11 Хеш-функция из этого: dh(k) = k mod 11 + (j + (k mod 9).
Теперь я вычисляю хеш-значения:
h(17) = k mod 11 = 6 - OK
h( 6) = 6 = collision => 6 + (1 + (6 mod 9) = 12 = NOK
=> это вне диапазона моих Индексов, и с каждым большим индексом он также будет выше. Если я изменю добавление второго HashFuncion в вычитание, то HashValues попадет в негативы - что тоже не хорошо.
Что я делаю неправильно?
Спасибо зузана
1 ответ
Я думаю, что вы неправильно интерпретируете, как рассчитать индекс для двойного хэша. Индекс должен быть
(h1(k) + j · h2(k)) мод TableSize
Таким образом, формула, которую вы должны использовать с этими двумя хэш-функциями, будет
((k mod 11) + j · (1 + (k mod 9))) mod 11