Куча представляет собой классическую структуру данных, которая ставит полное двоичное (или d-ary для обобщенной версии) дерево в смежный массив, сохраняя элементы в порядке прохождения по ширине. Таким образом, все элементы с одного уровня дерева сохраняются смежными друг за другом.
Я реализую структуру данных, которая под капотом представляет собой полное сбалансированное дерево фиксированной степени d, и я хочу сохранить дерево в смежной форме, чтобы освободить пространство указателей node. Поэтому я подумал о том, чтобы разместить узлы в первом порядке, используемом в кучах, но затем я беспокоюсь о производительности кеша типичного поиска от корня до листа, поскольку на каждом уровне l я перепрыгиваю через много элементы.
Есть ли способ получить компактное непрерывное представление д-арного полного дерева, основанное на глубине-первом порядке?
Таким образом, узлы, затронутые во время поиска листа, кажутся мне более вероятными, находящимися ближе друг к другу. Проблема в том, как получить индекс родителя и дочерних элементов node, но также мне интересно, какие операции над деревом в целом эффективны в этой настройке.
Я реализую эту вещь на С++, если это имеет значение вообще.