Perfect hash functions give unique "names" to arbitrary keys requiring only a few bits per key. This is an essential building block in applications like static hash tables, databases, or bioinformatics. This paper introduces the PHast approach that combines the fastest available queries, very fast construction, and good space consumption (below 2 bits per key). PHast improves bucket-placement which first hashes each key k to a bucket, and then looks for the bucket seed s such that a placement function maps pairs (s,k) in a collision-free way. PHast can use small-range hash functions with linear mapping, fixed-width encoding of seeds, and parallel construction. This is achieved using small overlapping slices of allowed values and bumping to handle unsuccessful seed assignment. A variant we called PHast+ uses additive placement, which enables bit-parallel seed searching, speeding up the construction by an order of magnitude.
Идеальные хеш-функции присваивают уникальные "имена" произвольным ключам, требуя всего несколько бит на ключ. Это является важным строительным блоком в приложениях, таких как статические хеш-таблицы, базы данных или биоинформатика. В данной статье представлен подход PHast, который объединяет самые быстрые доступные запросы, очень быстрое построение и хорошее потребление памяти (менее 2 бит на ключ). PHast улучшает размещение в корзинах, которое сначала хеширует каждый ключ k в корзину, а затем ищет начальное значение корзины s таким образом, чтобы функция размещения отображала пары (s,k) без коллизий. PHast может использовать хеш-функции с малым диапазоном с линейным отображением, кодирование начальных значений фиксированной ширины и параллельное построение. Это достигается с использованием малых перекрывающихся срезов допустимых значений и механизма "bumping" для обработки неудачного назначения начальных значений. Вариант, называемый PHast+, использует аддитивное размещение, что позволяет выполнять поиск начальных значений с битовым параллелизмом, ускоряя построение на порядок величины.
Идеальная хеш-функция (PHF) — это инъективная функция, отображающая множество ключей {k₁, ..., kₙ} в {0, ..., m-1}. Когда m = n, она называется минимальной идеальной хеш-функцией (MPHF). Это важный строительный блок для приложений в базах данных, текстовых индексах и биоинформатике.
Задача многокритериальной оптимизации: Разработка MPHF требует решения задачи многокритериальной оптимизации потребления памяти, времени построения и времени запроса
Теоретический нижний предел: Теоретический нижний предел для MPHF составляет log₂ e ≈ 1,44 бита на ключ
Практические требования: На практике PHF часто используются для ускорения статических структур данных, поэтому быстрые запросы критически важны
Методы размещения в корзинах: CHD, FCH, PTHash, PHOBIC требуют нелинейных функций распределения по корзинам или кодирования начальных значений переменной длины, что влияет на скорость запросов
Методы рекурсивного разбиения: Хотя они обеспечивают хорошую эффективность использования памяти, время запроса медленнее и требует декодирования информации навигации переменной длины
Методы отпечатков: Требуют не менее e бит на ключ и операции rank над битовыми векторами для запросов
Накладные расходы параллельного построения: Существующие методы требуют дополнительных шагов запроса для получения значений смещений
Линейное отображение корзин: Через линейное отображение в малые перекрывающиеся срезы избегается нелинейное распределение по корзинам, обеспечивая кэш-дружественное многопоточное построение
Механизм bumping: Позволяет использовать хеш-функции с малым диапазоном и кодирование начальных значений фиксированной ширины, избегая сложного локального поиска
Эвристическое назначение начальных значений: Выбор начальных значений, занимающих минимальное количество значений функции, для снижения потребления памяти
Вариант PHast+: Использует аддитивную функцию размещения для реализации поиска начальных значений с битовым параллелизмом, ускоряя построение на порядок величины
Комплексная экспериментальная оценка: Детальное сравнение производительности с существующими методами
PHast избегает кодирования переменной длины и сложного локального поиска через механизм bumping, одновременно сохраняя простоту линейного распределения по корзинам.
Fredman & Komlós: Теоретический нижний предел для идеальных хеш-функций
Belazzougui et al.: Основополагающие работы по методам размещения в корзинах
Статья PHast демонстрирует, что в области алгоритмической инженерии простые методы, тщательно оптимизированные с учетом сущности проблемы и характеристик современного оборудования, могут достичь или даже превзойти производительность сложных методов. Это предоставляет важное понимание для проектирования структур данных: ключ к решению проблемы часто заключается не в добавлении сложности, а в нахождении правильного направления упрощения.