Найти минимальную и максимальную высоту в дереве AVL, учитывая количество узлов?

есть ли формула для вычисления максимальной и минимальной высоты для дерева AVL, учитывая определенное количество узлов?

например:
Хрестоматийный вопрос:
Какова максимальная / минимальная высота дерева AVL из 3 узлов, 5 узлов и 7 узлов?
Ответ из учебника:
Максимальная / минимальная высота для дерева AVL из 3 узлов-2/2, для 5 узлов-3/3, для 7 узлов-4/3

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

4 ответов


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

ну минимальная высота легко, просто заполнить каждый уровень дерева с узлами, пока не закончится. Эта высота минимальна.

чтобы найти максимум, сделайте то же самое, что и для минимума, но затем вернитесь на один шаг (Удалите последний размещенный узел) и посмотрите, добавляет ли это узел к противоположному под-дереву (откуда он только что был) нарушает свойство дерева AVL. Если это так, ваша максимальная высота-это только ваша минимальная высота. В противном случае эта новая высота (которая должна быть минимальной высотой+1) - Ваша максимальная высота.

Если вам нужен обзор свойств дерева AVL или просто общее объяснение дерева AVL,Википедия-отличное место для начала.

пример:

давайте возьмем пример 7 узлов. Ты заполняешь все. уровни и найти полностью заполненное дерево высотой 3. (1 на уровне 1, 2 на уровне 2, 4 на уровне 3. 1+2+4=7 узлов.) Это означает, что 3-это минимум.

теперь найдите max. Удалите этот последний узел и поместите его в левое поддерево вместо правого. Правое поддерево по-прежнему имеет высоту 3, но левое поддерево теперь имеет высоту 4. Однако эти значения отличаются менее чем на 2, поэтому это все еще дерево AVL. Поэтому ваша максимальная высота 4. (Который равен min+1)

все три примера работал ниже (обратите внимание, что номера соответствуют порядку размещения, Не стоимостью):

Worked out as an example:


Формулы1:

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

учитывая n узлов2:

минимальные: ceil (log2(n+1))

максимальный: этаж (1.44 * log2(n+2) -.328)

Если вам интересно, первый раз max-min>1-это когда n=54.

1спасибо Джейми С для привлечения внимания к этому сбою на большем узле.

2эти формулы из Википедия AVL страница, с подключенными константами. Этот исходный источник -сортировка и поиск Дональд Э. кнут (2-е издание).


важно отметить следующие определяющие характеристики дерева AVL.

свойство дерева AVL

  • узлы дерева AVL подчиняются свойству BST
  • и высот левого и правого поддеревьев любого узла отличается не более чем на 1.

Теорема: свойство AVL достаточно для поддержания высоты дерева наихудшего случая O (log N).

обратите внимание на следующую диаграмму. AVL Tree

- T1 состоит из узла T0 + 1, для высота 1.
- T2 состоит из T1 и t0 + 1 узла, давая высота 2.
- T3 состоит из T2 для левого под-дерева и T1 для правого под-дерево + 1 узел, для высота 3.
- T4 состоит из T3 для левого под-дерева и T2 для правого под-дерево + 1 узел, для высота 4.

Если ты возьмешь the потолок O (log N), где N представляет количество узлов в дереве AVL, вы получаете высоту.

пример) T4 содержит 12 узлов. [потолок]O (log 12) = 4.

видите, что здесь развивается шаблон??

**в худшем случае высота enter image description here


предположим, что число узлов составляет n

попытка выяснить минимальную высоту дерева AVL будет такой же, как попытка сделать дерево полным т. е. заполнить все возможные узлы на каждом уровне, а затем перейти на следующий уровень.

таким образом, на каждом уровне количество подходящих узлов увеличивается на 2^(h-1) где h-высота дерева.

Итак, при h=1, узлы(1) = 2^(1-1) = 1 узел

для h=2, nodes (2) = nodes(1)+2^(2-1) = 3 узлы

для h=3, nodes (3) = nodes(2)+2^(3-1) = 7 узлы

поэтому просто найдите наименьший h, для которого узлы (h) больше заданного количества узлов n.

теперь для задачи максимальной высоты дерева AVL: -

предположим, что дерево AVL имеет высоту h, F (h) - количество узлов в дереве AVL,

для своей высоты, котор нужно быть максимумом препятствует предположим, что его левое поддерево FL и правое поддерево FR имеют разницу в высоте 1(поскольку оно удовлетворяет свойству AVL).

теперь предположим, что FL-дерево с высотой h-1, а FR-дерево с высотой h-2.

теперь количество узлов в

F(h)=F(h-1)+F (h-2)+1 (Eq 1)

добавление 1 с обеих сторон :

F (h)+1=(F(h-1)+1)+ (F(h-2)+1) (Eq 2)

таким образом, мы уменьшили максимум проблема высоты до Fibonacci sequence. И эти деревья F (h) называются Деревья Фибоначчи.

Итак, F(1)=1 и F (2)=2

поэтому, чтобы получить максимальную высоту, просто найдите индекс числа в последовательности Фибоначчи, который меньше или равен n.

Итак, применяя (Eq 1)

Ф(3)= Ф(2) + Ф(1)+ 1=4, Если N находится между 2 и 4 дерево будет иметь высоту 3.

F (4)= F(3)+ F(2)+ 1 = 7, аналогично, если n находится между 4 и 7 дерево будет иметь высоту 4.

и так далее.


http://lcm.csa.iisc.ernet.in/dsa/node112.html

Это примерно 1.44 * log n, где n-количество узлов.

для более подробного описания того, как это было получено. Вы можете обратиться к этой ссылке, начиная с середины страницы 13: http://www.compsci.hunter.cuny.edu/~sweiss/course_materials/csci335/lecture_notes/chapter04.2.pdf