Конкретные примеры использования бинарных деревьев поиска?

голоса
14

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

Может кто-то просьба привести примеры реальных задач, решаемых с двоичными деревьями поиска?

Задан 16/02/2011 в 00:44
источник пользователем
На других языках...                            


5 ответов

голоса
1

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

http://en.wikipedia.org/wiki/Binary_space_partitioning

Бинарное дерево необходимо, поскольку алгоритм требует сохранений связей между узлами в бинарном дереве. Есть много других алгоритмов, где структура дерева имеет важное значение, и поэтому хэш-таблица не является подходящей структура.

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

Часто для простого хранения и извлечения данных хэш-таблица является более оптимальным, но более сложным для реализации.

Ответил 16/02/2011 в 00:53
источник пользователем

голоса
0

Одним из наиболее упускать из виду, что многие файловые системы используют бинарные деревья, чтобы управлять списки каталогов. Они редко используют простое бинарное дерево, но некоторые вариации, такие как B-дерево. Это объясняется тем, что вопрос о хранении на диске дерева является весьма важным для деталей реализации. Поэтому они используют этот вид структуры для повышения эффективности и скорости. Это позволяет им делать такие вещи, как поддержка тысяч файлов в директории. Сравнения для создания файла и времени делеции подчеркнуть эффективность для данного аспекта файловой системы.

Бинарные деревья также используются на многих играх, которые делают 3D-объекты. Опять же, причина скорость. На самом деле, скорость настолько важна, что некоторые игровые движки, такие как Quake двигатель на самом деле есть бинарное дерево предварительно сгенерированные и предварительно оптимизировано как часть процесса сборки карты.

Ответил 16/02/2011 в 00:56
источник пользователем

голоса
0

Одна вещь, чтобы отметить, что Binary Search Tree являются пространство эффективно. Например, у вас есть 10 целых чисел, чтобы хранить и у вас есть хэш-функция, которая отображает от 0 - 99, то и нужен массив из 100 целых чисел. Если вы использовали бинарное дерево поиска, то вы бы выделить только столько памяти, сколько требуется на 10 элементов

Ответил 16/02/2011 в 00:57
источник пользователем

голоса
29

Есть несколько теоретические преимущества бинарных деревьев поиска над хеш-таблицы:

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

  2. Они эффективно поддерживают запросы диапазона. Поскольку BSTs хранятся в отсортированном порядке, это легко ответить на вопросы в форме « какие значения находятся в диапазоне [х, у]?» в бинарном дереве поиска. Чтобы сделать это, вы делаете поиск в дереве для наименьшего элемента больше , чем х и наибольший элемент меньше , чем у, то перебрать элементы дерева между ними. Оба из этих запросов , выполняемых в O (LG п) в сбалансированном дереве, таким образом, общее время выполнения этой операции представляет собой О (LG п + к), где к есть число элементов , соответствующих запросу.

  3. Они эффективно поддерживают ближайшего соседа запросы. Хэш - таблица специально разработана таким образом , что даже несколько различных продукты дико разные хэш - кода. Это дает хеш - значение дисперсионным они должны избегать кластеризаций слишком много элементов в одном месте. Тем не менее, это также означает , что вам нужно сделать линейное сканирование по хеш - таблицы , чтобы найти элементы , которые могут быть «закрыть» на то , что вы ищете. С BST, вы можете эффективно найти предшественник и преемник любого значения вы хотите, даже если это не в дереве.

  4. Они могут иметь лучшие гарантии наихудшей. Большинство реализаций хэш - таблица имеет какое - то вырожденный случай , в котором операция может деградировать в O (N) в худшем случае. Линейная зондирующий хэш - таблица или прикованный хэш - таблица может, с плохим набором элементов, требует O (N) раз в поиск или требует O (N) времени на перепевах. Вставка в некоторые типы сбалансированного BSTs, как красные / черных дерева, AVL дерева, или дерева AA, всегда в худшем случае O (LG п).

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

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

  2. Ссылка / срезанные деревья можно использовать гораздо более эффективно , чем большинство традиционных алгоритмов позволило бы решить проблемы макс-потока. Хороший толчок / Переназначить алгоритмы используют это , чтобы ускорить их реализацию.

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

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

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

  6. Тройные деревья поиска являются альтернативой попыток, которые основаны на виде слегка модифицированном BST. Они позволяют очень быстрый поиск и вставке элементов и для разреженных наборов данных весьма краткие.

  7. B-дерева используются многими системами баз данных , чтобы эффективно искать элементы , где доступ к диску является ограничивающим фактором.

  8. Бинарные пространство разделительных дерев являются обобщением Kd-дерев , которые могут быть использованы для быстрого рендеринга компьютерной графики (они были использованы для оптимизации рендеринга в оригинальной игре Думы) и делать обнаружение столкновения.

  9. BK-дерева позволяют быстро определить все слова , которые находятся в пределах определенного расстояния редактирования какого - либо другого слова, а в более общем плане, чтобы найти все точки в метрическом пространстве в пределах определенного расстояния какой - либо другой точки.

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

  11. ван Эмде Боаса деревья Еще одной альтернативой хэш - таблицы для целочисленных ключей , которые поддерживают поиск, вставка, удаление преемника и предшественника в O ( для LG п) времени на элемент. Некоторые системы баз данных используют VEB деревья для оптимизации производительности.

Я не знаю, как по теме этот ответ, но это должно дать вам ощущение того, как прекрасные и мощные BSTs и более общие древовидные структуры могут быть.

Ответил 16/02/2011 в 01:05
источник пользователем

голоса
0

Это, вероятно, быть комментарий, но самобалансирующаяся BST (s) (журнал (п)) используется широко, а не BSTs. Простой BSTs имеет наихудшее O (N) время ввода / удаления.

Ответил 16/02/2011 в 03:14
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more