Является ли PHP SplHeap действительно кучей?

Является ли реализация кучи PHP полноценной реализацией?

Когда я читаю эту статью, http://en.wikipedia.org/wiki/Heap_%28data_structure%29, я понимаю, что у дочернего узла есть определенный родительский элемент, и что у родительского элемента есть определенные дочерние элементы.

Когда я смотрю на пример в документации PHP, однако, http://au.php.net/manual/en/class.splheap.php, кажется, что все дочерние узлы имеют один и тот же "уровень", но конкретный родительский / информация о детях не важна.

Например, какой узел является родительским для каждого из трех узлов, которые занимают 10-е место в примере PHP?

В моем приложении, когда пользователь выбирает "узел 156", мне нужно знать, кто его дети, чтобы каждый из них мог посещать их. (Я мог бы сделать их идентификаторы "узел 1561", "узел 1562" и т. Д., Поэтому связь очевидна).

Является ли реализация кучи PHP неполной? Должен ли я забыть класс Spl и идти своим путем? Или я что-то упускаю из-за того, как должны работать кучи? Или, возможно, я должен смотреть на конкретный вариант кучи?

Спасибо, куча!

2 ответа

API для этой реализации кучи не разрешает доступ к массиву, что вам и нужно в этом случае. Кучи, как правило, используются для реализации других структур, которые позволяют легко удалять элементы сверху.

Вы можете создать итератор оболочки, который ищет нужные вам позиции. Я подозреваю, что это будет неэффективное решение и не очень хорошее.


В этой ситуации BinaryTree это то что я думаю тебе нужно Получив место на дереве, вы можете спуститься вниз, это дети, потому что они напрямую связаны. У меня есть BinarySearchTree, который будет держать дерево в порядке, и вы можете позвонить getRoot чтобы получить копию BinaryTree, Также есть AvlTree, который будет поддерживать сбалансированное дерево для оптимального поиска.

Куча обычно используется для ответа на вопросы, которые вращаются вокруг "что такое элемент max/min в наборе".

Хотя куча может по совпадению эффективно ответить "кто является потомками узла max/min", куча не выделяется как хорошая структура данных для использования, когда вам нужно получить доступ к произвольному узлу, чтобы ответить на ваш вопрос (узел, который не максимальный узел). Это также не структура данных, которую следует использовать, если существуют определенные родительские дочерние отношения, которые необходимо представлять и поддерживать, потому что дочерние элементы могут и действительно обмениваться между различными родительскими узлами.

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

Другие вопросы по тегам