Что можно сделать в методе двойного хеширования, если увеличение 'i' снова и снова не разрешает конфликт? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть таблица ha sh с методом двойного хеширования для разрешения коллизий, вот реализация Java для вставки ключа:

int h1 = hash(key);
int index = h1;
if (table[h1] != null) {
    if (size == tableSize) throw new IllegalStateException("Table is full.");
    int i = 1;
    int h2 = hash2(key);
    while (table[index = (h1 + i * h2) % tableSize] != null)
        i++;
    }
}
table[index] = new HashNode<>(key, value);
size++;

Но для некоторых входных данных index может быть отрицательным после увеличения i снова и снова, не находя подходящего места в таблице.

Так что i становится таким большим и переполняется, тогда оператор модуля возвращает отрицательное значение. Но даже если я возьму абсолютное значение index, на этот раз l oop будет работать вечно.

Так что же можно сделать в этой ситуации для метода двойного хеширования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...