Ответ 1
Для дерева без самобалансировки (возможно, но необычного для дерева поиска) наихудшим случаем является O (n), что для вырожденного двоичного дерева (связанный список).
В этом случае вам нужно искать в среднем половину списка перед поиском нужного элемента.
Наилучшим случаем является O (log 2 n) для идеально сбалансированного дерева, поскольку вы сокращаете пространство поиска пополам для каждого уровня дерева.
Средний случай находится где-то между этими двумя и полностью зависит от данных: -)
Поскольку вам редко удается управлять последовательностью, в которую данные вставляются в дерево, обычно балансирующие деревья обычно предпочтительнее, поскольку они добавляют небольшое количество времени для каждой вставки или удаления, что значительно ускоряет поиск. Их худший случай намного лучше, чем несбалансированные деревья.
8
_______/ \_______
/ \
4 12
__/ \__ __/ \__
/ \ / \
2 6 10 14
/ \ / \ / \ / \
1 3 5 7 9 11 13 15
В этом идеально сбалансированном дереве вы можете увидеть, что вы получаете 2 n -1 узлов для каждого уровня n
. Это означает, что для 15 узлов вам не нужно искать более четырех узлов, чтобы найти его (например, найти 13
, вы выполните поиск 8
, 12
, 14
и 13
). То, откуда появляется запись log 2 n.
Вырожденное неуравновешенное дерево, как уже было сказано, является связанным списком. Если ваши данные поступают последовательно, и вы вставили их в несбалансированное двоичное дерево, вы получите:
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -+
|
+------------------------------------------+
|
+-> 10 -> 11 -> 12 -> 13 -> 14 -> 15
Чтобы найти 13
в этом случае, вам нужно будет искать 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
, 10
, 11
, 12
и 13
, поэтому O (n).