В хеш-таблицах, которые разрешают коллизии линейным зондированием, для обеспечения ожидаемой производительности необходимо и достаточно, чтобы хеш-функция была из 5-независимого семейства. (Достаточность: «Линейное зондирование с постоянной независимостью», Паг и др. , Необходимость: «О k-независимости, необходимой для линейного зондирования и минимальной независимости», Pătraşcu и Thorup )
Насколько я понимаю, наиболее быстро известные 5 независимых семей используют табуляцию. Выбор функции из такого семейства может быть дорогостоящим, поэтому я хотел бы свести к минимуму количество повторений, при этом предотвращая атаки на алгоритмическую сложность, как описано в «Отказе в обслуживании через атаки алгоритмической сложности» Кросби и Уоллаха . Меня меньше беспокоит время атаки (то есть противники с секундомерами). Каковы последствия повторного использования одной и той же функции:
- При выращивании слишком большой таблицы хешей?
- При сжатии хеш-таблицы, что недостаточно полно?
- При восстановлении хеш-таблицы, в которой установлено слишком много «удаленных» битов?
- В различных хеш-таблиц, которые могут содержать некоторые общие ключи?
- В различных хеш-таблиц, которые не содержат общих ключей?
Ответы:
Одна потенциальная проблема заключается в том, что при чтении из хеш-таблицы элементы не должны читаться в порядке слотов, если все хеш-таблицы используют одну и ту же хеш-функцию. Это связано с тем, что эти элементы в указанном порядке могут привести к тому, что процедура вставки в меньшую хеш-таблицу с той же хеш-функцией станет квадратичной, предполагая, что максимальный коэффициент заполнения превышает . Видеть:1 / 2
источник