Является ли универсальное семейство хэш-функций только для предотвращения атаки противника?
Если мое намерение состоит только в том, чтобы иметь хорошую хеш-функцию, которая равномерно распределяет данные по всем сегментам, тогда мне не нужно придумывать семейство хеш-функций, я мог бы просто сделать одну хорошую хеш-функцию, верно?
Цель иметь семейство хеш-функций состоит только в том, чтобы противнику было сложнее создать патологический набор данных, поскольку, когда мы выбираем хеш-функцию случайным образом, у него нет информации о том, какая хеш-функция используется. Правильно ли мое понимание?
РЕДАКТИРОВАТЬ: так как кто-то пытается закрыть как неясно; Этот вопрос состоит в том, чтобы узнать реальную цель использования универсального семейства хэш-функций.
1 ответ
Я мог бы просто сделать с одной хорошей хэш-функцией, это правильно?
Как вы заметите позже в своем вопросе, "враг", который знает, какую хеш-функцию вы используете, может подготовить патологический набор данных.
Кроме того, хеширование - это только первый этап в сохранении данных в корзины вашей таблицы - если вы реализуете открытую адресацию / закрытое хэширование, вам также необходимо выбрать альтернативные сегменты для проверки после коллизий: простые подходы, такие как линейное и квадратичное зондирование, обычно обеспечивают адекватную коллизию избегание, и, вероятно, математически проще и, следовательно, быстрее, чем перефразировка, но они не поддерживают вероятность того, что следующий зонд обнаружит неиспользованную емкость при коэффициенте нагрузки. Перефразирование с другой хорошей хэш-функцией (включая другую из семейства таких функций) делает, поэтому, если это важно для вас, вы можете предпочесть использовать семейство хеш-функций.
Также обратите внимание, что иногда в хэш-таблице в памяти используется информация о том, в каких смещениях / секторах хранятся данные на диске, поэтому дополнительные вычисления перефразирования с данными, уже находящимися в памяти, могут быть гораздо более привлекательными, чем более высокая вероятность (с линейной / квадратичной зондирование) ожидания на диске ввода-вывода только для обнаружения другого столкновения.