Для двойного хеширования, если есть коллизия с первой хеш-функцией, вы должны использовать вторую хеш-функцию, но что, если коллизия все еще есть? Например, предположим, что хеш-таблица имеет размер 15, хэш-функция — (key + 3) % 15, а вторая хэш-функция — ((key % 8) / 3) + 2. Допустим, "insert 59" идет по индексу 2 по первой хеш-функции, но там уже есть ключ. Вторая хэш-функция довела бы его до 3, но, допустим, там уже есть значение. Где будет вставлено 59 в хэш-таблицу и почему? Спасибо

Я специально хочу использовать двойное хеширование, а не цепное хеширование или линейное зондирование.

0
user4060080 12 Ноя 2014 в 06:19
Это специфично для Java?
 – 
user253751
12 Ноя 2014 в 06:42

2 ответа

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

Общая вторая хэш-функция будет иметь тип

H1(x) - первая хеш-функция, H2(x) - вторая хеш-функция

Первый раз пробуем следующий слот - H1(x),

Следующим зондом будет - H1(x)+H2(x),

Следующий зонд H1(x)+2*H2(x) ........ H1(x)+n*H2(x)

1
user3436096 1 Дек 2014 в 12:32

Это зависит от реализации, но обычно вы используете связанный список или другую гибкую структуру данных для управления конфликтующими данными.

Из java.util.HashMap javadoc:

Он использует подход хеш-ведра; то есть коллизии хешей обрабатываются путем связывания нового узла с уже существующим узлом (или списком узлы). Таким образом, такие методы, как линейное зондирование (которое может вызвать первичную кластеризацию) и перефразирование (что не очень подходит хорошо с методом предварительного вычисления хеш-кодов Java) избегаются. В идеальных условиях (без коллизий) HashMap предлагает O (1) производительность большинства операций (containsValue() есть, конечно, O(n)). В худшем случае (все ключи сопоставляются с одним и тем же хеш-код -- очень маловероятно), большинство операций - O(n).

-2
T.D. Smith 12 Ноя 2014 в 06:22
Вопрос о двойном хешировании, который является альтернативой связному списку. ОП говорит, что не хочет связываться.
 – 
rghome
24 Апр 2017 в 15:49