Почему бинарные деревья важны? - PullRequest
19 голосов
/ 05 декабря 2009

Почему мы специально изучаем бинарные деревья? Как и в общем m-way, дерево поиска не имеет такого значения, как бинарные деревья в учебниках по DataStructure.

Превышает ли использование бинарного дерева m-way деревьев?

Ответы [ 7 ]

28 голосов
/ 05 декабря 2009

Бинарные деревья - это самая простая форма многоцелевых деревьев, поэтому их легче изучать в этом смысле.

У деревьев с несколькими путями есть узлы, которые состоят из N ключей и N+1 указателей вдоль строк:

               |
   +-----+-----+-----+-----+
   | k00 | k01 | k02 | k03 |
   +-----+-----+-----+-----+
  /      |     |     |      \
p00     p01   p02   p03     p04

Чтобы узнать, по какому указателю следовать в поиске, вы сравниваете ключ, который ищете, с ключами в узле. В приведенном выше примере показано многоуровневое дерево порядка 2 (я определяю порядок n как имеющий 2n ключей и 2n+1 указателей).

Когда вы «выродите» эту структуру, чтобы получить наименьший возможный узел, вы получите один ключ и два указателя, ваше классическое двоичное дерево:

      |
   +-----+
   | k00 |
   +-----+
  /       \
p00       p01

Когда я поступил в университет (и я свободно признаю, что это было некоторое время назад), мы изучали двоичные деревья сначала , просто потому, что алгоритмы были элегантными. Поиск был простым узлом сравнения и выбрал одно из двух поддеревьев. Вставка и удаление также были относительно простыми.

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

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

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

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

Мы разработали многопользовательскую реализацию дерева в OS / 2 (показывающую мой возраст здесь), которая выкрикивалась вперед, гарантируя, что узлы были идентичны по размеру базовым дисковым блокам. Несмотря на то, что это может привести к потере пространства, улучшение скорости того стоило.

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

Двоичные деревья сводятся к «Должны ли мы двигаться влево или вправо?», Многозначными являются «Где ключ в этом узле, чтобы мы могли выбрать поддерево?».

5 голосов
/ 05 декабря 2009

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

1 голос
/ 06 декабря 2009

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

1 голос
/ 05 декабря 2009

Поскольку древовидные структуры данных часто используются для организации упорядоченных элементов, например: a> b> c. Если элементы, вставленные в деревья, упорядочены, все, что вам нужно, - это две ветви на каждом узле, чтобы разделить элементы большего размера на левое поддерево и элементы меньшего размера на правое поддерево.

Вот почему бинарные деревья гораздо более распространены, чем m-арные деревья. Это не имеет ничего общего с легкостью принятия решения «да / нет», а не мрачным решением!

1 голос
/ 05 декабря 2009

Преимущество бинарных деревьев перед «n-арными» деревьями заключается в том, что их обход часто сводится к простой проблеме решения «да / нет», как в разбиении двоичного пространства .

0 голосов
/ 05 декабря 2009

Я не буду здесь слишком много техи .. потому что вопрос в том, почему Бинарное Дерево придает так большое значение в DataStructure. Двоичное дерево ,, означает дерево, основанное на T / F, Да / Нет и т. Д. Значит сказать комбинация Duo. Практически мы сталкиваемся с ситуацией, когда нам нужно решить, да или нет. Верно или неверно. Двоичное дерево представляет такую ​​ситуацию. Программное обеспечение, над которым мы работаем, - это решения, которые будут использовать структуры данных, которые используются внутри для решения реальных сценариев. Вот почему двоичное дерево появляется и широко используется и даже важно. Остальные деревья - это дополнительные уточнения или дополнительные сложности, чтобы соответствовать типичным ситуациям. Для запуска бинарного дерева всегда важно.

0 голосов
/ 05 декабря 2009

Например, двоичные деревья используются для сортировки кучи (Binary Heap). Это способ очень быстрой сортировки данных, так что самый большой (или самый низкий) элемент всегда находится впереди. Это используется, например, в AI (алгоритм A *).

...