Путаница, связанная с универсальным хешированием
Я читал эту видео-лекцию, касающуюся универсального хеширования. Здесь показан пример хеширования IP-адресов. Каждый IP-адрес состоит из 4-, 32-битных целых чисел (x1,x2,x3,x4), причем любое значение xi имеет максимальное значение 255.
В учебнике говорится, что размер хеш-таблицы должен быть больше 255 или любого другого значения xis. Почему это так?
1 ответ
(Для тех из вас, кто не видел видео, это происходит около 20:45).
Определенный таким образом класс функций является функциями вида
h a (x 1, x 2, x 3, x 4) = a 1 x 1 + a 2 x 2 + a 3 x 3 + a 4 x 4 (mod n)
где n - количество сегментов, каждый x i находится в диапазоне от 0 до n - 1, каждый a i находится в диапазоне от 0 до n - 1, а n - простое число.
Ваш вопрос заключается в том, почему все x i должны быть меньше n. Причина связана с доказательством универсальности этого семейства хеш-функций. Как объясняет Тим в видео, один из способов доказать универсальность хеш-функции - рассмотреть два разных входа (назовите их x и y). Это означает, что они должны различаться по некоторым компонентам, и идея состоит в том, чтобы предположить без потери общности, что они различаются по четвертому компоненту. То есть x 4 y 4. Немного математики, исходя из этого предположения, вы можете показать, что вероятность того, что вы получите столкновение, равна вероятности того, что это утверждение верно:
a 4 (x 4 - y 4) = a 1 (x 1 - y 1) + a 2 (x 2 - y 2) + a 3 (x 3 - y 3) (мод n)
Здесь, поскольку мы выбрали хэш-функцию случайным образом, все a i являются случайными. Основная идея заключается в том, что если вы рассматриваете 1, a 2 и a 3 как фиксированные значения, то в правой части этого уравнения просто некоторое фиксированное число k. Вы тогда заинтересованы в вероятности того, что
a 4 (x 4 - y 4) = k (mod n)
Потому что мы предполагаем, что n> x 4, что n> y 4, что x 4 n y 4, и что n простое число. Это говорит нам о двух очень важных фактах:
x 4 - y 4 mod 0 мод n. Это главная причина того, что нам нужно, чтобы n было больше, чем x i. Мы увидим почему через минуту.
x 4 - y 4 взаимно прост с n. Это почему? Ну, мы знаем, что n - простое число. Поскольку n> x 4 и n> y 4, мы знаем, что x 4 - y 4 должно находиться строго между n-1 и -(n-1). Поскольку мы предполагаем, что n простое, в этом диапазоне есть нетривиальные делители n, поэтому x 4 - y 4 и n взаимно просты.
Чтобы понять, почему эти факты имеют значение, давайте рассмотрим два случая для k. Во-первых, возможно, что k = 0. В таком случае, в каком случае будет 4 (x 4 - y 4) = k (mod n)? Поскольку x 4 - y 4 ≠ 0, мы знаем, что это происходит только в том случае, если a 4 = 0. Поскольку a 4 принимает равномерно-случайное значение в диапазоне от 0 до n-1 включительно, вероятность того, что мы получим столкновение в этом дело 1/ н.
Далее предположим, что k ≠ 0. В таком случае, что должно произойти, чтобы 4 (x 4 - y 4) = k (mod n) было истинным? Хорошо, мы знаем, что x 4 - y 4 ≠ 0, поэтому он должен иметь мультипликативный обратный модуль n, потому что x 4 - y 4 взаимно прост с n. На самом деле, он имеет ровно один мультипликативный обратный. Единственный возможный выбор 4, который приведет к тому, что это будет истинно, - это выбор, где a 4 является мультипликативной обратной величиной x 4 - y 4 по модулю n, умноженному на k. Существует ровно один вариант выбора числа в диапазоне от 0 до n-1, который работает, поэтому вероятность его выбора равна 1/n.
Обратите внимание, что если x 4 - y 4 были равны нулю по модулю n, рассуждения, приведенные выше, не сработают. В первом случае любой выбор 4 вызовет столкновение, поэтому вероятность столкновения будет равна 1. Во втором случае выбор 4 не может вызвать столкновение, поэтому вероятность столкновения будет равна 0. Эти условия будут недействительными. доказательство.
Надеюсь это поможет!