Por que a altura mínima de um


10

Na minha aula de Java, estamos aprendendo sobre a complexidade de diferentes tipos de coleções.

Em breve estaremos discutindo árvores binárias, sobre as quais tenho lido. O livro afirma que a altura mínima de uma árvore binária é , mas não oferece mais explicações.log2⁡(n+1)−1

Alguém pode explicar o porquê?


Respostas:


11

Uma árvore binária possui 1 ou 2 filhos nos nós não foliares e 0 nós nos nós foliares. Haja nós em uma árvore e temos que organizá-los de tal maneira que eles ainda formam uma árvore binária válido.n

Sem provar, estou afirmando que, para maximizar a altura, determinados nós devem ser organizados linearmente, ou seja, cada nó não-folha deve ter apenas um filho:

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

Aqui, a fórmula para calcular a relação da altura em termos de número de nós é direta. Se é a altura da árvore, então 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

i2i

i0m2i−12m−12m−1h(2m−1)=m−1h(n)=n

h(2m)=m2m−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∈[2m,2m+1)

h(n)=m=⌊log2⁡(n)⌋

∀n∈Z

log2⁡(n+1)−1nlog2⁡(n)n


18

n

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

nodes=1+2+22+23+...+2depth=∑k=0depth2k=1−2depth+11−2.

nodes=2depth+1−1,
nodes+1=2depth+1log2⁡(nodes+1)=log2⁡(2depth+1)=depth+1log2⁡(nodes+1)−1=depth.

4

Para manter a altura mínima, é fácil ver que precisamos preencher todos os níveis, exceto possivelmente o último. Por quê? caso contrário, poderíamos simplesmente mover os nós do último nível para os slots vazios nos níveis superiores.

Agora, imagine que eu tenho um número não especificado de beans e lhe dou um bean de cada vez e peço que você construa uma árvore binária com a altura mínima possível. Eu posso ficar sem feijão no momento em que você preencheu o último nível completamente ou pelo menos tem um feijão no último nível. Digamos que você tenha a altura da sua árvore h neste momento.

20+21+22+23+⋯+2h=2h+1−1≤n.
h=lg⁡(n+1)−1.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.