WikiDer > HAT-trie

HAT-trie

В HAT-Trie это тип радикс-три который использует узлы массива для сбора отдельных пары "ключ-значение" под узлами системы счисления и хэш-бакетами в ассоциативный массив. В отличие от простого хеш-таблица, HAT-пытается сохранить ключ-значение в упорядоченной коллекции. Первыми изобретателями являются Николас Аскитис и Ранджан Синха.[1][2] Доктор Аскитис показывает, что создание и доступ к коллекции ключей / значений HAT-trie значительно быстрее, чем другие методы отсортированного доступа, и сопоставимы с хэшем массива, который представляет собой несортированную коллекцию.[3] Это связано с дружественной к кеш-памяти природой структуры данных, которая пытается сгруппировать доступ к данным во времени и пространстве в 64 байта. размер строки кэша современного процессора.

Описание

Новое HAT-Trie начинается с NULL-указателя, представляющего пустой узел. Первый добавленный ключ выделяет наименьший узел массива и копирует в него пару ключ / значение, которая становится первым корнем дерева. Каждая последующая пара ключ / значение добавляется к начальному узлу массива до тех пор, пока не будет достигнут максимальный размер, после чего узел перераспределяется путем перераспределения своих ключей в хэш-ведро с новыми базовыми узлами массива, по одному для каждого занятого хэш-слота в корзине. . Хеш-корзина становится новым корнем дерева. Строки ключей хранятся в узлах массива с байтом кодирования длины, начинающимся с байтов значения ключа. Значение, связанное с каждым ключом, может быть сохранено либо в строке, чередуясь со строками ключей, либо помещено во второй массив, например, в память сразу после узла массива и присоединено к нему.[4]

После того, как дерево переросло в свой первый узел хэш-корзины, хеш-корзина распределяет новые ключи в соответствии с хэш-функция значения ключа в узлы массива, содержащиеся под узлом сегмента. Ключи продолжают добавляться до тех пор, пока не будет достигнуто максимальное количество ключей для конкретного узла хэш-корзины. Затем содержимое корзины перераспределяется в новый узел системы счисления в соответствии с первым символом сохраненного значения ключа, который заменяет узел хэш-корзины в качестве корня дерева.[5] (например, см. Burstsort[6]). Каждый из существующих ключей и значений, содержащихся в хэш-корзине, сокращается на один символ и помещается под новый узел системы счисления в наборе новых узлов массива.

Сортированный доступ к коллекции обеспечивается путем перечисления ключей в курсоре путем ветвления вниз по основному дереву для сборки ведущих символов, заканчивающихся либо хэш-корзиной, либо узлом массива. Указатели на ключи, содержащиеся в хэш-корзине или узле массива, собираются в массив, который является частью курсора для сортировки. Поскольку существует максимальное количество ключей в хэш-корзине или узле массива, существует заранее установленный фиксированный предел для размера курсора во все моменты времени. После того, как ключи для хеш-ведра или узла массива исчерпаны командой get-next (или get-previous) (см. Итератор) курсор перемещается в следующую запись узла системы счисления, и процесс повторяется.[7]

Рекомендации

  1. ^ описана в статье, опубликованной в Proc. Тридцатая Австралазийская конференция по информатике (ACSC2007), Балларат, Австралия. CRPIT, 62. Добби, Г., изд. ACS. 97-105
  2. ^ https://dl.acm.org/citation.cfm?id=1273761 HAT-trie: структура данных для строк на основе Trie с учетом кеширования
  3. ^ Аскитис, Н. и Зобель, Дж. (2005), Разрешение конфликтов с учетом кеширования для строковых хеш-таблиц, в «Proc. SPIRE String Processing and Information Retrieval Symp. », Springer-Verlag, pp. 92–104.
  4. ^ Аскитис, Н. и Зобель, Дж. 2011. Переделка хэш-таблицы строк, дерева пакетов и BST для использования кеша. ACM J. Exp. Алгор. 15, 1, статья 1.7 (январь 2011 г.)
  5. ^ Пакетные попытки: быстрая и эффективная структура данных для строковых ключей ACM Trans. Инф. Syst., Vol. 20, No. 2. (апрель 2002 г.), стр. 192-223, DOI: 10.1145 / 506309.506312 Штеффен Хайнц, Джастин Зобель, Хью Э. Уильямс
  6. ^ Синха Р. и Вирт А. 2010. Инженерная сортировка: к быстрой сортировке строк на месте. ACM J. Exp. Алгор. 15, статья 2.5 (март 2010 г.)
  7. ^ http://www.siam.org/meetings/alenex03/Abstracts/rsinha.pdf Сортировка больших наборов строк с учетом кеширования с динамическими попытками

Внешняя ссылка