бинарная куча вместо бинарного дерева поиска

какова пара сценариев, в которых вы будете использовать двоичную кучу вместо двоичного дерева поиска?

У меня есть базовое понимание каждой структуры. Мне нравится ваш вклад в это, если это возможно.


person lam97    schedule 17.09.2018    source источник


Ответы (2)


Один из сценариев, в котором полезно использовать двоичную кучу вместо двоичного дерева поиска, — это очередь с приоритетами. Очереди с приоритетом требуют определенных функций, таких как доступ к элементу приоритета, вставка элементов и удаление элементов с наивысшим приоритетом. Кучи могут делать это за O(1), O(log n) и O(log n) соответственно. Однако некоторые типы бинарных деревьев поиска также могут это делать (см. Самобалансирующиеся деревья поиска). Кроме того, очереди с приоритетами проще реализовать с помощью двоичных куч, они не требуют дополнительного пространства для указателей, а их построение занимает O(n) времени по сравнению с O(n log n) для самобалансирующихся двоичных деревьев поиска.

Другой сценарий, в котором двоичная куча была бы более полезной, чем двоичное дерево поиска, — это если вам нужно удалить случайный порядок и иметь доступ к индексу объектов кучи.

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

person Jaya    schedule 28.11.2018

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

Преимущество двоичного дерева поиска заключается в том, что к элементам можно легко получить доступ по порядку, однако для управления двоичным деревом поиска требуется гораздо больше накладных расходов, чем для двоичной кучи. Так что если бинарное дерево поиска также может быть неэффективно построено в зависимости от того, как и какие элементы в него добавлены. Если дерево не сбалансировано, многие преимущества эффективности использования бинарного дерева поиска теряются. Использование красных черных деревьев или деревьев абл может исправить это, но за счет накладных расходов на поддержание баланса.

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

person qchud    schedule 28.11.2019