Линейное зондирование при открытой адресации

#hash

#хэш

Вопрос:

У меня есть массив с размером m = 11 , и моя хеш-функция — это метод деления : h(k) = k mod m у меня есть целое число k = 10 и 10 mod 11 is -1 итак, куда мне поместить этот ключ в массив? Я должен поместить этот ключ в слот, индекс которого равен 10? пожалуйста, помогите мне, спасибо

ОТРЕДАКТИРОВАНО: для правильного получения моего ответа, например, у меня есть целые числа, такие как k = 10,22,31,4,15,28,17,88,59

массив был бы таким?Спасибо

 10  9   8   7   6   5   4   3   2   1   0     index
10  31  59  17  28  4   15          88  22    keys
  

Комментарии:

1. en.wikipedia.org/wiki/Open_addressing

2. спасибо за ваш сайт, но я хочу привести несколько примеров, которые также не являются моим домашним заданием.в любом случае спасибо

Ответ №1:

Как это обычно делается, 10 mod 11 равно 10, так что да, обычно вы используете индекс 10.

Редактировать: Для обобщения: по крайней мере, как это обычно определяется, при двух положительных входных данных модуль всегда будет давать положительный результат. Таким образом, ваши вопросы о том, что делать с отрицательными результатами, на самом деле не имеют смысла в отношении обычного определения.

Если у вас действительно есть возможность получить отрицательный результат, моей немедленной реакцией было бы переключиться на какой-нибудь язык, который даст разумный результат. Если вы не можете этого сделать, то, вероятно, захотите переместить значение в правильный диапазон, добавив m к отрицательному числу, пока не получите число в диапазоне [0..m), чтобы оно соответствовало обычному определению mod , затем используйте это в качестве своего индекса.

Комментарии:

1. итак, например, если у меня k = 4, то 11 mode 4 = -6, поэтому я должен поместить ключ в слот с индексом = 5?

2. также я отредактировал свой пример, это правильно? Я также использую вашу версию в своем ответе 🙂

3. @matin1234: Мне это кажется не совсем правильным. 4 mod 11 должно быть 4, так что в конечном итоге будет иметь индекс 4. Тогда 15 mod 11 также равно 4, так что (при использовании линейного зондирования) это приведет к индексу 5.