Древовидные структуры - PullRequest
0 голосов
/ 31 мая 2009

Я пытался понять, что такое отсортированные деревья и двоичные деревья, а также avl, и, и ... Я до сих пор не уверен, что делает отсортированное дерево отсортированным? И какова сложность (Big-Oh) между поиском в отсортированном и поиском в несортированном дереве? Надеюсь, ты сможешь мне помочь.

Ответы [ 5 ]

5 голосов
/ 31 мая 2009

Двоичные деревья

Существует два основных типа бинарных деревьев: сбалансированные и несбалансированные. Сбалансированное дерево стремится поддерживать высоту дерева (высота = количество узлов между корнем и самым дальним потомком) как можно более равномерно. Существует несколько типов алгоритмов для сбалансированных деревьев, два самых известных из которых - AVL- и RedBlack-деревья. Сложность операций вставки / удаления / поиска на деревьях AVL и RedBlack составляет O (log n) или лучше - что является важной частью. Другими алгоритмами самобалансировки являются дерево AA, Splay и Scapegoat.

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

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

Существует еще один вариант, который называется рандомизированным двоичным деревом, в котором используется какая-то рандомизация, чтобы убедиться, что дерево не становится полностью несбалансированным (что совпадает со связным списком)

2 голосов
/ 31 мая 2009

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

Интересной вещью двоичного дерева является то, что мы можем искать значение в O (log n), когда дерево правильно отсортировано. Выполнение того же поиска в LinkedList для примера даст нам скорость поиска O (n).

Лучший способ изучить структуру данных - это день прогуливать и читать статьи из Википедии.
Это может помочь вам начать
http://en.wikipedia.org/wiki/Binary_search_tree

1 голос
/ 31 мая 2009

Выполните поиск в Google по следующим параметрам:

site:stackoverflow.com binary trees

, чтобы получить список ТАК вопросов, которые ответят на ваши несколько вопросов.

0 голосов
/ 31 мая 2009

В двоичном дереве правый лист всегда меньше, чем голова, а левый лист всегда больше, поэтому вы можете искать в отсортированном дереве в O (log (n)), вам просто нужно идти вправо, если если меньше головы и слева, если bgger

0 голосов
/ 31 мая 2009

Нет особого смысла в использовании древовидной структуры, если она не отсортирована каким-либо образом - если вы планируете искать узел в дереве и он не отсортирован, вам придется пройти через все дерево (O (n)). Если у вас есть дерево, которое каким-то образом отсортировано, то необходимо пройти только одну ветвь дерева (обычно O (log n)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...