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=n1

n

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

n=2m1

20+21+22+...+2m1=2m1

i2i

i0m2i12m12m1h(2m1)=m1h(n)=n

h(2m)=m2m1(2m1)+1=2mmm1m

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

nZ,2mn<2m+1

mh(n)<m+1

mlog2(n)<m+1
m=log2(n)

n,n[2m,2m+1)

h(n)=m=log2(n)

nZ

log2(n+1)1nlog2(n)n


18

n

41+12+122+12223

nodes=1+2+22+23+...+2depth=k=0depth2k=12depth+112.

nodes=2depth+11,
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+11n.
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.