HashMaps - неясно о хэш-функции и двойном хешировании
Меня попросили реализовать хэш-карту с использованием массива. Мне нужно вставить следующие ключи:
15, 7, 26, 39, 11, 9, 27, 5, 18, 2, 54, 22, 4
в массив размером 19 с использованием хэш-функции:
(3x + 7) % 19
Используя линейное зондирование, я ожидаю получить следующий массив (поправьте меня, если я ошибаюсь):
Index: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Key: 4 11 5 18 7 26 39 27 2 15 9 22 54
где 26 имел столкновение с 7 по индексу 9, и поэтому был вставлен по индексу 10, а 39 затем столкнулся с 26 по индексу 10 и поэтому был вставлен по индексу 11.
Сейчас я пытаюсь вставить те же элементы в реализацию массива HashMap, используя двойное хеширование вместо линейного зондирования. 2-я хеш-функция мне дана:
11 - (x % 11)
У меня есть два вопроса:
Значит ли это, что мой массив будет размером 11 или все же 19?
Использовать ли изначально исходную хеш-функцию и, если заданный индекс свободен, вставить туда элемент, в противном случае, если есть коллизия, использовать 2-ю хэш-функцию и вставить туда элемент?
1 ответ
Согласно Википедии вторичная хеш-функция используется косвенно в функции зондирования:
h(0, x) = (3x + 7) % 19
h(j, x) = ((3x + 7) + j(11 - (x % 11))) % 19
Где j - счетчик столкновений.