Краткая структура данных
В информатике краткая структура данных — это структура данных , которая использует объем пространства, «близкий» к нижней границе теории информации , но (в отличие от других сжатых представлений) по-прежнему позволяет выполнять эффективные операции запроса. Первоначально эта концепция была предложена Джейкобсоном. [1] для кодирования битовых векторов , (немаркированных) деревьев и плоских графов . В отличие от обычных алгоритмов сжатия данных без потерь , краткие структуры данных сохраняют возможность использовать их на месте, без предварительного их распаковки. С этим связано понятие сжатой структуры данных , поскольку размер хранимых или закодированных данных аналогичным образом зависит от конкретного содержания самих данных.
Предположим, что — это теоретико-информационное оптимальное количество бит, необходимое для хранения некоторых данных. Представление этих данных называется:
- неявно, если это требует кусочки пространства,
- кратко, если это займет кусочки пространства и
- компактный, если потребуется кусочки пространства.
Например, структура данных, использующая биты хранения компактны, биты краткие, бит также является кратким, и бит является неявным.
Таким образом, неявные структуры обычно сводятся к хранению информации с использованием некоторой перестановки входных данных; Самый известный пример — куча .
Краткие индексируемые словари
[ редактировать ]Краткие индексируемые словари, также называемые словарями ранга/выбора , составляют основу ряда методов краткого представления, включая двоичные деревья . -арные деревья и мультимножества , [2] а также суффиксные деревья и массивы . [3] Основная проблема заключается в хранении подмножества вселенной , обычно представленный в виде битового массива где если только Индексируемый словарь поддерживает обычные методы работы со словарями (запросы и вставки/удаления в динамическом случае), а также следующие операции:
для .
Другими словами, возвращает количество элементов, равное до позиции пока возвращает позицию -е появление .
Существует простое представление [4] который использует биты памяти (исходный битовый массив и вспомогательная структура) и поддерживает ранжирование и выбор в постоянное время. Он использует идею, аналогичную той, что используется для запросов с минимальным диапазоном ; существует постоянное количество рекурсий, прежде чем остановиться на подзадаче ограниченного размера. Битовый массив разбит на большие блоки размером биты и небольшие блоки размером биты. Для каждого большого блока ранг его первого бита хранится в отдельной таблице. ; каждая такая запись занимает бит в общей сложности биты памяти. Внутри большого блока еще один каталог хранит ранг каждого из небольшие блоки, которые он содержит. Разница здесь в том, что нужно только бит для каждой записи, поскольку необходимо сохранять только различия от ранга первого бита в содержащем большом блоке. Таким образом, эта таблица занимает в общей сложности биты. Таблица поиска затем можно использовать, чтобы сохранить ответ на каждый возможный запрос ранга в битовой строке длины для ; это требует немного места для хранения. Таким образом, поскольку каждая из этих вспомогательных таблиц занимает пространстве эта структура данных поддерживает ранжированные запросы в время и кусочки пространства.
Чтобы ответить на запрос о в постоянное время алгоритм постоянного времени вычисляет:
На практике таблица поиска могут быть заменены побитовыми операциями и таблицами меньшего размера, которые можно использовать для определения количества битов, установленных в маленьких блоках. Это часто бывает полезно, поскольку краткие структуры данных находят свое применение в больших наборах данных, и в этом случае промахи в кэше становятся гораздо более частыми, и вероятность исключения таблицы поиска из ближайших кэшей ЦП становится выше. [5] Запросы выбора можно легко поддерживать, выполняя двоичный поиск по той же вспомогательной структуре, что и для Rank ; однако это требует время в худшем случае. Более сложная структура с использованием биты дополнительной памяти могут использоваться для поддержки выбора в постоянное время. [6] На практике многие из этих решений имеют скрытые константы в обозначения, которые доминируют до того, как станет очевидным какое-либо асимптотическое преимущество; реализации, использующие операции с расширенными словами и блоки с выравниванием по словам, на практике часто работают лучше. [7]
Энтропийно-сжатые решения
[ редактировать ]The космический подход можно улучшить, отметив, что существуют отчетливый -подмножества (или двоичные строки длины точно с 1) и, таким образом, — это нижняя граница теории информации для количества бит, необходимых для хранения . Существует краткий (статический) словарь, который достигает этой границы, а именно, используя космос. [8] Эту структуру можно расширить для поддержки ранжирования и выбора , а также дублей. запросов космос. [2] Однако запросы правильного ранга в этой структуре ограничены элементами, содержащимися в наборе, аналогично тому, как работают минимальные совершенные функции хеширования. Эту границу можно свести к компромиссу между пространством и временем, уменьшив объем памяти словаря до с запросами, принимающими время. [9]
Также возможно создать индексируемый словарь, поддерживающий ранг (но не выбор), который использует менее биты. Такой словарь называется монотонной минимальной совершенной хеш-функцией и может быть реализован с использованием всего лишь биты. [10] [11]
Краткие хеш-таблицы
[ редактировать ]Краткая хеш-таблица, также известная как краткий неупорядоченный словарь, представляет собой структуру данных, в которой хранятся ключи от вселенной используя пространство бит и при этом поддерживают запросы членства в постоянное ожидаемое время. Если краткая хэш-таблица также поддерживает вставки и удаления с постоянным ожидаемым временем, то она называется динамической , в противном случае она называется статической.
Первая динамическая краткая хэш-таблица была создана Раманом и Рао в 2003 году. [12] В случае, когда , их решение использует пространство биты. Впоследствии было показано, что эту пространственную границу можно улучшить до бит для любого постоянного числа логарифмов [13] и немного позже эта граница также оказалась оптимальной. [14] [15] Последнее решение поддерживает все операции в худшем случае с постоянным временем с высокой вероятностью.
Первая статическая краткая хэш-таблица была создана Пагом в 1999 году. [16] [17] В случае, когда , их решение использует пространство бит и поддерживает для наихудшего случая запросы с постоянным временем . Эта граница впоследствии была улучшена до биты, [18] а затем биты. [19] Тогда как первые два решения [17] [18] поддерживает запросы с постоянным временем наихудшего случая, последний поддерживает запросы с постоянным ожидаемым временем. [19] Окончательное решение также требует доступа к справочной таблице размера , но эта таблица поиска не зависит от набора сохраняемых элементов. [19]
Другие примеры
[ редактировать ]Строка произвольной длины ( строка Паскаля ) занимает пространство Z + log( Z ) и поэтому является краткой. Если существует максимальная длина – что и имеет место на практике, поскольку 2 32 = 4 ГиБ данных — это очень длинная строка, а 2 64 = 16 EiB данных на практике больше, чем любая строка – тогда строка с длиной также подразумевается, занимая Z + k пространство , где k — количество данных, представляющее максимальную длину (например, 64 бита).
Когда необходимо закодировать последовательность элементов переменной длины (например, строк), существуют различные возможности. Прямой подход заключается в сохранении длины и элемента в каждой записи, а затем их можно размещать друг за другом. Это позволяет эффективно использовать следующий, но не находить k -й элемент. Альтернативой является размещение элементов по порядку с помощью разделителя (например, строки с нулевым завершением ). При этом вместо длины используется разделитель, и это существенно медленнее, поскольку необходимо сканировать всю последовательность на наличие разделителей. Оба они экономят пространство. Альтернативный подход — внеполосное разделение: элементы можно просто размещать один за другим, без разделителей. Границы элементов затем могут быть сохранены как последовательность длин или, лучше, смещений в этой последовательности. Альтернативно, вместе с ней кодируется отдельная двоичная строка, состоящая из 1 в позициях, где начинается элемент, и 0 во всех остальных местах. Учитывая эту строку, Функция может быстро определить, где начинается каждый элемент, учитывая его индекс. [20] Это компактно , но не лаконично, так как занимает 2 Z пространства, что равно O( Z ).
Другой пример — представление двоичного дерева : произвольное двоичное дерево на узлы могут быть представлены в бит, поддерживая при этом множество операций над любым узлом, включая поиск его родителя, его левого и правого дочернего элемента и возврат размера его поддерева, каждый из которых за постоянное время. Количество различных бинарных деревьев на узлы это . Для больших , это о ; таким образом, нам нужно как минимум около бит для его кодирования. Таким образом, краткое двоичное дерево будет занимать всего бит на узел.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Джейкобсон, Дж. Дж. (1988). Краткие статические структуры данных (кандидатская диссертация). Питтсбург, Пенсильвания: Университет Карнеги-Меллон.
- ^ Jump up to: Перейти обратно: а б Раман, Р.; В. Раман; С. С. Рао (2002). «Краткие индексируемые словари с приложениями для кодирования k-арных деревьев и мультимножеств» . Материалы тринадцатого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам . стр. 233–242 . arXiv : 0705.0552 . CiteSeerX 10.1.1.246.3123 . дои : 10.1145/1290672.1290680 . ISBN 0-89871-513-Х .
- ^ Садакане, К.; Р. Гросси (2006). «Сжатие кратких структур данных в энтропийные границы» (PDF) . Материалы семнадцатого ежегодного симпозиума ACM-SIAM по дискретному алгоритму . стр. 1230–1239. ISBN 0-89871-605-5 . Архивировано из оригинала (PDF) 29 сентября 2011 г.
- ^ Джейкобсон, Г. (1 ноября 1989 г.). Компактные статические деревья и графы (PDF) . 30-й симпозиум IEEE по основам информатики. дои : 10.1109/SFCS.1989.63533 . Архивировано из оригинала (PDF) 12 марта 2016 г.
- ^ Гонсалес Р.; С. Грабовский; В. Мякинен; Дж. Наварро (2005). «Практическая реализация запросов ранжирования и выбора» (PDF) . Стендовый доклад 4-го семинара по эффективным и экспериментальным алгоритмам (WEA) . стр. 27–38.
- ^ Кларк, Дэвид (1996). Компактные деревья (PDF) (кандидатская диссертация). Университет Ватерлоо.
- ^ Винья, С. (2008). «Расширенная реализация запросов ранжирования/выбора» (PDF) . Экспериментальные алгоритмы . Конспекты лекций по информатике. Том. 5038. стр. 154–168. CiteSeerX 10.1.1.649.8950 . дои : 10.1007/978-3-540-68552-4_12 . ISBN 978-3-540-68548-7 . S2CID 13963489 .
- ^ Бродник А.; Дж. И. Манро (1999). «Членство в постоянном времени и почти минимальном пространстве» (PDF) . СИАМ Дж. Компьютер . 28 (5): 1627–1640. CiteSeerX 10.1.1.530.9223 . дои : 10.1137/S0097539795294165 .
- ^ Патрашку, М. (2008). «Сукцинктер» (PDF) . Основы информатики, 2008. FOCS'08. 49-й ежегодный симпозиум IEEE по теме . стр. 305–313.
- ^ Белазуги, Джамаль; Болди, Паоло; Паг, Расмус; Винья, Себастьяно (4 января 2009 г.). «Монотонное минимальное идеальное хеширование: поиск в отсортированной таблице с доступом O (1)» . Материалы двадцатого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам . Филадельфия, Пенсильвания: Общество промышленной и прикладной математики: 785–794. дои : 10.1137/1.9781611973068.86 . ISBN 978-0-89871-680-1 .
- ^ Ассади, Сепер; Фарах-Колтон, Мартин; Кушмаул, Уильям (январь 2023 г.), «Жесткие границы для монотонного минимального идеального хеширования» , Труды ежегодного симпозиума ACM-SIAM по дискретным алгоритмам (SODA) 2023 г. , Филадельфия, Пенсильвания: Общество промышленной и прикладной математики, стр. 456–476 , arXiv : 2207.10556 , doi : 10.1137/1.9781611977554.ch20 , ISBN 978-1-61197-755-4 , получено 28 апреля 2023 г.
- ^ Раман, Раджив; Рао, Сатти Шриниваса (2003), «Краткие динамические словари и деревья» , Автоматы, языки и программирование , Берлин, Гейдельберг: Springer Berlin Heidelberg, стр. 357–368, doi : 10.1007/3-540-45061-0_30 , ISBN 978-3-540-40493-4 , получено 28 апреля 2023 г.
- ^ Бендер, Майкл А.; Фарах-Колтон, Мартин; Кушмаул, Джон; Кушмаул, Уильям; Лю, Минмоу (9 июня 2022 г.). «Об оптимальном соотношении времени и пространства для хеш-таблиц» . Материалы 54-го ежегодного симпозиума ACM SIGACT по теории вычислений . Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 1284–1297. arXiv : 2111.00602 . дои : 10.1145/3519935.3519969 . hdl : 1721.1/146419 . ISBN 9781450392648 . S2CID 240354692 .
- ^ Ли, Тяньсяо; Лян, Цзинсюнь; Ю, Хуачэн; Чжоу, Жэньфэй (2023). «Точные нижние границы клеточного зонда для динамических кратких словарей». arXiv : 2306.02253 [ cs.DS ].
- ^ Надис, Стив (8 февраля 2024 г.). «Ученые нашли оптимальный баланс хранения данных и времени» . Журнал Кванта .
- ^ Паг, Расмус (28 января 1998 г.). «Низкая избыточность в словарях с наихудшим временем поиска O (1)» . Серия докладов БРИКС . 5 (28). дои : 10.7146/brics.v5i28.19434 . ISSN 1601-5355 .
- ^ Jump up to: Перейти обратно: а б Паг, Расмус (январь 2001 г.). «Низкая избыточность в статических словарях с постоянным временем запроса» . SIAM Journal по вычислительной технике . 31 (2): 353–363. дои : 10.1137/s0097539700369909 . ISSN 0097-5397 .
- ^ Jump up to: Перейти обратно: а б Патрашку, Михай (октябрь 2008 г.). «Сукцинктер» . 2008 г. 49-й ежегодный симпозиум IEEE по основам информатики . IEEE. стр. 305–313. дои : 10.1109/focs.2008.83 . ISBN 978-0-7695-3436-7 . S2CID 257721481 .
- ^ Jump up to: Перейти обратно: а б с Ю, Хуачэн (22 июня 2020 г.). «Почти оптимальный статический краткий словарь Лас-Вегаса» . Материалы 52-го ежегодного симпозиума ACM SIGACT по теории вычислений . Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 1389–1401. arXiv : 1911.01348 . дои : 10.1145/3357713.3384274 . ISBN 9781450369794 . S2CID 207780523 .
- ^ Белазуги, Джамаль. «Хэш, перемещение и сжатие» (PDF) .