quoting Wikipedia:
Совершенно допустимо использовать традиционная структура данных двоичного дерева для реализации двоичной кучи. Там есть проблема с поиском смежных элемент на последнем уровне на двоичная куча при добавлении элемента которые могут быть разрешены алгоритмический...
Любые идеи о том, как может работать такой алгоритм?
Мне не удалось найти какую-либо информацию об этой проблеме, поскольку большинство двоичных кучек реализованы с использованием массивов.
Любая помощь была оценена.
Недавно я зарегистрировал учетную запись OpenID и не могу редактировать свои начальные сообщения и комментарии. Вот почему я отвечаю через этот ответ. Извините за это.
цитирование Митча Пшеница:
@Yse: это ваш вопрос "Как найти последний элемент двоичной кучи"?
Да, это так. Или, если быть более точным, мой вопрос: "Как найти последний элемент двоичной кучи на основе массива?".
quoting Подавляющий огонь:
Есть ли какой-то контекст, в котором вы задавая этот вопрос? (т.е. существует какая-то конкретная проблема, которую вы пытаетесь решить?)
Как указано выше, я хотел бы знать хороший способ "найти последний элемент двоичной кучи на основе не-массива", который необходим для вставки и удаления узлов.
цитируя Роя:
Мне кажется наиболее понятным просто используйте обычное двоичное дерево структуры (используя pRoot и Nodeопределяется как [данные, pLeftChild, pRightChild]) и добавьте два дополнительных указатели (pInsertionNode и pLastNode). pInsertionNode и pLastNode будет обновляться во время подпрограммы вставки и удаления сохранять их в актуальном состоянии, когда данные внутри структуры изменений. Эта дает O (1) доступ к обоим вводам point и last node структуры.
Да, это должно сработать. Если я не ошибаюсь, было бы немного сложно найти вставку node и последний node, когда их местоположения меняются на другое поддерево из-за удаления/вставки. Но я попробую.
цитируя Зак Скривена:
Как выполнить первую глубину поиск...
Да, это был бы хороший подход. Я тоже попробую.
Тем не менее мне интересно, если есть способ "рассчитать" местоположения последнего node и точки вставки. Высота бинарной кучи с N узлами может быть рассчитана путем взятия логарифма (базы 2) наименьшей степени, равной 2, что больше N. Возможно, также можно вычислить количество узлов на самом глубоком уровне. Тогда было возможно определить, как пройти кучу, чтобы достичь точки вставки или node для удаления.