stringtranslate.com

HAT-три

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

Описание

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

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

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

Ссылки

  1. ^ описано в статье, опубликованной в Proc. Thirtieth Australasian Computer Science Conference (ACSC2007), Ballarat Australia. CRPIT, 62. Dobbie, G., Ed. ACS. 97-105
  2. ^ https://dl.acm.org/citation.cfm?id=1273761 HAT-trie: структура данных на основе кеш-дерева для строк
  3. ^ Аскитис, Н. и Зобель, Дж. (2005), Разрешение коллизий с учетом кэширования для строковых хэш-таблиц, в «Proc. SPIRE String Processing and Information Retrieval Symp.», Springer-Verlag, стр. 92–104
  4. ^ Аскитис, Н. и Зобель, Дж. 2011. Перепроектирование хэш-таблицы строк, пакетного дерева и BST для использования кэша. ACM J. Exp. Algor. 15, 1, статья 1.7 (январь 2011 г.)
  5. ^ Burst trying: быстрая и эффективная структура данных для строковых ключей ACM Trans. Inf. Syst., Vol. 20, No. 2. (апрель 2002 г.), стр. 192-223, doi:10.1145/506309.506312, Steffen Heinz, Justin Zobel, Hugh E. Williams
  6. ^ Синха, Р. и Вирт, А. 2010. Инженерная сортировка с помощью burstsort: на пути к быстрой сортировке строк на месте. ACM J. Exp. Algor. 15, статья 2.5 (март 2010 г.)
  7. ^ http://www.siam.org/meetings/alenex03/Abstracts/rsinha.pdf Сортировка больших наборов строк с учетом кэширования с помощью динамических попыток

Внешние ссылки