Бесплатные калькуляторы
⌕ Поиск

Примеры запросов: процентыипотекаплощадь✓ 660 работающих калькуляторов

АЛГОРИТМЫ · ОНЛАЙН

Номер корзины хеш-таблицы по остатку от деления

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

✓ Бесплатно⌁ С пояснением✦ Без регистрации
▦
КАЛЬКУЛЯТОР

Введите данные

Целое значение хеш-функции, от −1 000 000 000 до 1 000 000 000.
Размер таблицы, целое число, не равное нулю.
✓ Исходные значения передаются серверу только для выполнения расчёта. Регистрация не нужна.
ВАШ РЕЗУЛЬТАТ✓ Вычислено

Остаток

Остаток7

«Копировать картинку» помещает изображение результата в буфер обмена без сохранения файла — его можно сразу вставить в мессенджер или документ. Картинка и PDF содержат ссылку на calc-calc.ru.

Был ли калькулятор полезен?Одно касание — и мы поймём, какие инструменты улучшать.
ПОДРОБНЫЙ РАЗБОР · ФОРМУЛЫ И ПРИМЕРЫ

Как хеш превращается в номер корзины: остаток от деления

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

Здесь разобран механизм, пример с 16 корзинами, роль степеней двойки и простых чисел, поведение при отрицательных хешах и способы проверить равномерность распределения.

Как работает индексация

Хеш-функция сопоставляет ключу большое целое число, а таблица состоит из m ячеек с номерами от 0 до m − 1. Операция i = h mod m сжимает любое значение в этот диапазон, поэтому каждому ключу соответствует допустимый индекс.

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

Разобранные примеры

Пусть хеш равен 1 234 567, а корзин 16. Делим: 1 234 567 = 16 · 77 160 + 7, поэтому остаток 7 и ключ попадает в седьмую корзину, если считать с нуля. В двоичной записи это четыре младших бита 0111.

Для хеша 100 и семи корзин имеем 100 = 7 · 14 + 2, индекс 2. Сравнив несколько ключей, видно, что остатки распределены по всем ячейкам, но равномерность зависит от самих хешей.

Какой размер таблицы выбирать

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

Простое число корзин заставляет остаток зависеть от всех битов, и при простых хешах распределение получается ровнее. Выбор зависит от реализации: многие библиотеки применяют степени двойки и дополнительно перемешивают хеш. Поэтому при отладке своей таблицы проверяйте и равномерность хеша, и выбранный модуль, а не полагайтесь на что-то одно.

Отрицательные хеши

В некоторых языках хеш бывает отрицательным, а остаток наследует знак делимого. Тогда индекс может оказаться отрицательным, и обращение к массиву приведёт к ошибке. Калькулятор показывает именно такое поведение: остаток от −7 при делении на 3 равен −1.

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

Что стоит проверять дополнительно

Одного индекса недостаточно, чтобы судить о качестве таблицы. Подсчитайте нагрузку, то есть число ключей на корзину, и сравните распределение на реальных данных.

Калькулятор не вычисляет сам хеш: его нужно получить в вашей программе. Страница лишь помогает проверить арифметику остатка и разобраться в примерах.

Нагрузка и перестроение таблицы

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

Проверить такое изменение просто: возьмите тот же хеш 1 234 567 и 32 корзины. Остаток по модулю 32 тоже равен 7 (1 234 567 = 32 · 38 580 + 7), и этот ключ остаётся на месте, тогда как у других ключей индекс при расширении меняется. Калькулятор подходит для таких экспериментов: введите один и тот же хеш при разных размерах таблицы и сравните результаты.

Формула расчёта

ОСНОВНАЯ ФОРМУЛА

i = h mod m

Проверенные примеры

Хеш 1 234 567, 16 корзин

В какую корзину попадёт ключ?

1 234 567 = 16 · 77 160 + 7, остаток 7, значит индекс 7.

Хеш 100, 7 корзин

Какой индекс получится?

100 = 7 · 14 + 2, остаток 2.

Как пользоваться онлайн-калькулятором

  1. Вычислите целочисленный хеш ключа вашей функцией.
  2. Введите хеш и число корзин таблицы.
  3. Нажмите «Вычислить» и получите индекс.
  4. Повторите расчёт для нескольких ключей, чтобы оценить равномерность распределения.
ВОПРОСЫ И ОТВЕТЫ

Частые вопросы

Как получить индекс хеш-таблицы по хешу?

Возьмите остаток от деления хеша на число корзин. Результат всегда от 0 до m − 1 для неотрицательного хеша.

Что будет при отрицательном хеше?

В этом расчёте знак остатка совпадает со знаком делимого, поэтому отрицательный хеш даст отрицательный индекс. Перед использованием индекса приведите его к диапазону от 0 до m − 1.

Почему размер таблицы часто делают степенью двойки?

Остаток от деления на 2^k равен k младшим битам, что быстро вычисляется. Но при плохих хеш-функциях это ухудшает равномерность.

Похожие калькуляторы

▦СЕРВЕРЫ И НАГРУЗКА

Время восстановления резервной копии по сети

Оценка минимального времени переноса архива базы или резервной копии по пропускной способности канала. Это только время пересылки архива; распаковка, запись на диск и восстановление СУБД в оценку не входят.

▦ФАЙЛЫ И СКОРОСТЬ ПЕРЕДАЧИ

Время отправки файла на сервер

Оценка времени загрузки файлов в облако или на удалённый сервер по исходящей скорости. Введите размер в десятичных МБ и скорость отправки в Мбит/с: скорость загрузки часто меньше скорости скачивания.

ПОДЕЛИТЬСЯ ИНСТРУМЕНТОМ

Встроить на свой сайт

Вставьте этот код в HTML-блок на своём сайте. Посетители смогут пользоваться калькулятором без перехода.

Прямая ссылка: https://calc-calc.ru/embed/calc_060213/

Предварительный просмотр