stringtranslate.com

Неявная структура данных

В информатике неявная структура данных или структура данных, эффективная с точки зрения пространства, — это структура данных , которая хранит очень мало информации, кроме основных или требуемых данных: структура данных, требующая низких накладных расходов . Они называются «неявными», потому что положение элементов несет смысл и взаимосвязь между элементами; это контрастирует с использованием указателей для указания явной взаимосвязи между элементами. Определения «низких накладных расходов» различаются, но обычно означают постоянные накладные расходы; в нотации big O — накладные расходы O (1). Менее ограничительное определение — это сжатая структура данных , которая допускает большие накладные расходы.

Определение

Неявная структура данных — это структура с постоянными накладными расходами O (1) (выше нижней границы теории информации ).

Исторически Манро и Суванда (1980) определили неявную структуру данных (и алгоритмы, действующие на нее) как такую, «в которой структурная информация неявно содержится в способе хранения данных, а не явно в указателях». Они несколько расплывчаты в определении, определяя ее наиболее строго как один массив, с сохранением только размера (единичное число накладных расходов), [1] или более свободно как структуру данных с постоянными накладными расходами ( O (1) ). [2] Это последнее определение сегодня более стандартно, и еще более свободное понятие структуры данных с непостоянными, но небольшими накладными расходами o (n) сегодня известно как сжатая структура данных , как определено Якобсоном (1988); Манро и Суванда (1980) называли ее полунеявной . [3]

Фундаментальное различие существует между статическими структурами данных (только для чтения) и динамическими структурами данных (которые могут быть изменены). Простые неявные структуры данных, такие как представление отсортированного списка в виде массива, могут быть очень эффективны как статическая структура данных, но неэффективны как динамическая структура данных из-за неэффективности операций модификации (таких как вставка в случае отсортированного списка).

Примеры

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

Аналогично просто представить многомерный массив как один одномерный массив вместе с его измерениями. Например, представление массива m × n как одного списка длины m·n вместе с числами m и n (вместо одномерного массива указателей на каждый одномерный подмассив). Элементы не обязательно должны быть одного типа, и таблица данных (список записей ) может быть аналогично представлена ​​неявно как плоский (одномерный) список вместе с длиной каждого поля , пока каждое поле имеет одинаковый размер (поэтому можно использовать один размер для каждого поля, а не для каждой записи).

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

Важным примером неявной структуры данных является представление идеального бинарного дерева в виде списка в порядке возрастания глубины, то есть корень, первый левый потомок, первый правый потомок, первый левый потомок первого левого потомка и т. д. Такое дерево встречается, в частности, в диаграмме предков до заданной глубины, а неявное представление известно как Ahnentafel (таблица предков).

Это можно обобщить до полного двоичного дерева (где последний уровень может быть неполным), что дает самый известный пример неявной структуры данных, а именно двоичную кучу , которая является неявной структурой данных для очереди с приоритетом . Это сложнее, чем предыдущие примеры, поскольку допускает множественные операции и является эффективной динамической структурой данных (она допускает эффективную модификацию данных): не только top , но также insert и pop .

Более сложные неявные структуры данных включают в себя кучу (двухродительскую кучу).

История

Тривиальные примеры списков или таблиц значений относятся к доисторическим временам, в то время как исторически нетривиальные неявные структуры данных относятся по крайней мере к Ahnentafel, который был введен Михаэлем Эйтцингером в 1590 году для использования в генеалогии. В формальной информатике первой неявной структурой данных обычно считается отсортированный список, используемый для бинарного поиска, который был введен Джоном Мочли в 1946 году в лекциях школы Мура , первом в истории наборе лекций, касающихся любой компьютерной темы. [4] [5] Двоичная куча была введена Уильямсом (1964) для реализации пирамидальной сортировки . [5] Понятие неявной структуры данных было формализовано Манро и Сувандой (1980) в рамках введения и анализа кучи . [5]

Ссылки

  1. ^ "Таким образом, для данных необходим только простой массив.", стр. 236; "Мы не будем проводить формального различия между указателем и целым числом (индексом) в диапазоне . Структура данных тогда неявна, если единственным таким целым числом, которое необходимо сохранить, является само N. ", стр. 238
  2. ^ "... можно было бы предпочесть разрешить сохранение постоянного числа указателей и при этом обозначить структуру как неявную.", стр. 238
  3. ^ "Мы также предложим две структуры, которые можно было бы описать как «полунеявные», в которых переменная, но o ( N ), количество указателей (индексов) сохраняется.", стр. 238
  4. ^ Кнут 1998, §6.2.1 («Поиск в упорядоченной таблице»), подраздел «История и библиография».
  5. ^ abc Franceschini, Gianni; Munro, J. Ian (2006). Неявные словари с O (1) модификациями за обновление и быстрым поиском . Seventeenth Annual ACM-SIAM Symposium on Discrete Algorithms. Miami, FL, United States. pp. 404–413. doi :10.1145/1109557.1109603.

Дальнейшее чтение

См. публикации Эрве Бренниманна, Дж. Яна Манро и Грега Фредериксона.