Почему минимальная высота бинарного дерева


10

В моем классе Java мы изучаем сложность различных типов коллекций.

Вскоре мы будем обсуждать бинарные деревья, о которых я читал. Книга утверждает, что минимальная высота бинарного дерева составляет , но не дает дополнительных объяснений.log2⁡(n+1)−1

Может кто-нибудь объяснить, почему?


Я объясняю это здесь stackoverflow.com/a/13093274/550393
— 2cupsOfTech

Ответы:


11

Бинарное дерево имеет 1 или 2 дочерних элемента в неконечных узлах и 0 узлов в конечных узлах. Пусть в дереве будет узлов, и мы должны расположить их таким образом, чтобы они все еще формировали правильное двоичное дерево.n

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

                              O 1
                              |
                              O 2
                              |
                              O 3
                              |
                              O 4
                              |
                              O 5
                              |
                              O 6
                              |
                              O 7
                              |
                              O 8

Здесь формула для вычисления отношения высоты с точки зрения количества узлов проста. Если - высота дерева, то h = n - 1 .hh=n−1

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

                              O
                              |1
                              |
                       O------+-----O
                       |2           |3
                       |            |
                   O---+---O    O---+----O
                   |4      |5    6        7
                   |       |
               O---+--O    O
                8      9    10

Начнем с частного случая, .n=2m−1

Мы знаем, что

20+21+22+...+2m−1=2m−1

Также легко доказать, что уровень, на котором могу иметь не более 2 i узлов.i2i

Используя этот результат в приведенной выше сумме, мы находим, что для каждого уровня от 0 до m существует соответствующий член 2 i - 1 в разложении 2 m - 1 . Это означает, что полное двоичное дерево 2 m - 1 узлов полностью заполнено и имеет высоту, h ( 2 m - 1 ) = m - 1 , где h ( n ) = высота полного двоичного дерева с n узлами.я0м2я-12м-12м-1час(2м-1)знак равном-1час(N)знак равноN

час(2м)знак равном2м-1(2m−1)+1=2mmm−1m

h(2m)=m,
h(2m+1)=m+1
h(2m+1−1)=m

∀n∈Z,2m≤n<2m+1

m≤h(n)<m+1

m≤log2⁡(n)<m+1
m=⌊log2⁡(n)⌋

∀N,N∈[2м,2м+1)

час(N)знак равномзнак равно⌊журнал2⁡(N)⌋

∀N∈Z

журнал2⁡(N+1)-1Nжурнал2⁡(N)N


19

N

41+1⋅2+1⋅2⋅2+1⋅2⋅2⋅23

узлызнак равно1+2+22+23+,,,+2глубиназнак равноΣКзнак равно0глубина2Кзнак равно1-2глубина+11-2,

узлызнак равно2глубина+1-1,
узлы+1знак равно2глубина+1журнал2⁡(узлы+1)знак равножурнал2⁡(2глубина+1)знак равноглубина+1журнал2⁡(узлы+1)-1знак равноглубина,

4

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

Теперь представьте, что у меня есть неуказанное количество бинов, и я даю вам один бин за раз и прошу вас построить двоичное дерево с минимально возможной высотой. К тому времени, как вы полностью заполнили последний уровень, или, по крайней мере, один бин на последнем уровне, может закончиться. Допустим, у вас есть высота дерева h в этой точке.

20+21+22+23+⋯+2часзнак равно2час+1-1≤N,
часзнак равноЛ.Г.⁡(N+1)-1,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.