Когда вам нужно удалить (или изменить приоритет) другие объекты, кроме корня, d-куча не обязательно является идеальной структурой данных: узлы продолжают менять свое положение, и вам необходимо отслеживать различные перемещения. Это выполнимо, однако. Чтобы использовать такую кучу, вы должны вернуть дескриптор вновь вставленного объекта, который идентифицирует некоторый тип узла, который остается на месте. Поскольку алгоритм d-heap опирается на идеально сбалансированное дерево, вам необходимо реализовать его с использованием массива. Поскольку эти два требования (использование массива и наличие узлов остаются на месте) являются взаимоисключающими, вам нужно выполнить оба этих требования и иметь индекс из узлов в массив (чтобы вы могли найти положение объекта в массиве) и указатель из массив для узла (так что вы можете обновить узел при изменении положения). Почти наверняка вы не хотите много перемещать свои узлы, то есть вы предпочитаете находить правильное направление для перемещения узлов путем поиска по нескольким узлам, то есть вы хотите использовать d> 2.
Существуют альтернативные подходы для реализации кучи, основанные на узлах. В частности, кучи Фибоначчи, которые дают для определенных моделей использования более высокую амортизированную сложность, чем обычная сложность O (ln (n)). Однако их несколько сложнее реализовать, и фактическая эффективность окупается только в том случае, если вам нужно либо часто менять приоритет узла, либо у вас достаточно большие наборы данных.