Идеальная хеш-функция для Perl (например, gperf)? - PullRequest
4 голосов
/ 21 октября 2011

Я собираюсь использовать хранилище ключей: значений и хотел бы создать несокращаемые хеши в Perl. Есть ли Perl-модуль или функция, которую я могу использовать для генерации несокрушимой хеш-функции или таблицы (возможно, что-то вроде gperf )? Я уже знаю свой диапазон входных значений.

Ответы [ 2 ]

4 голосов
/ 21 октября 2011

Вас может заинтересовать Джуди . Это не реализация хеш-таблицы, но, предположительно, это очень эффективная реализация ассоциативного массива.

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

4 голосов
/ 21 октября 2011

Я не могу найти чисто Perl-решение, самое близкое - Исследования Рейни Урбана по использованию совершенных хэшей с системой типов Если бы вы делали это в XS, CMPH (C Minimal Perfect Hash Library) может быть более подходящим, чем gperf. Похоже, что CMPH оптимизирован для нетривиальных размеров ключей и генерации во время выполнения.

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

Из любопытства, насколько велики ваши данные и сколько ключей содержит набор?

...