Структура данных Perl со сдвигом / нажатием и быстрым поиском? - PullRequest
1 голос
/ 14 ноября 2011

Я получаю события и хочу отслеживать последние N событий, и для любого нового события подсчитывать, сколько раз подобные события происходили в прошлом (это, как правило, случается не часто).

Таким образом, мне нужно что-то с семантикой очереди (shift / push), а также с быстрым поиском по ключу, который НЕ является порядком вставки.

Мое текущее решение, когда мы заботимся только о подсчете, этосохранить как массив событий, так и хэш счетчиков, чтобы я мог увеличивать соответствующий счетчик на толчках и уменьшать его на сменах.Но это не позволяет мне отслеживать больше, чем количество, и неудобно обобщать.

Другой возможностью было размещение событий в поколениях хэш-таблиц K + 1, содержащих события N / K, отслеживаниепорядок вставки и отбрасывать самую старую таблицу, когда самая новая заполняется.Это дает мне компромисс между очередью с постоянным сдвигом / нажатием и линейным поиском (когда K = N), и более быстрым поиском за счет не более чем вдвое большей памяти (K = 1).

Я думаю, что-токак связанная хэш-таблица будет иметь немного лучшее поведение.Существует ли это или что-то с эквивалентной семантикой в ​​Perl?

1 Ответ

2 голосов
/ 14 ноября 2011

Если вы просто хотите заказать хеш, взгляните на Tie :: IxHash . Это должно как минимум заменить ваше решение, где вы храните и массив, и хеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...