Perché è l'altezza minima di un


10

Nella mia classe Java, stiamo imparando la complessità di diversi tipi di raccolte.

Presto discuteremo di alberi binari, sui quali ho letto. Il libro afferma che l'altezza minima di un albero binario è log2(n+1)-1 , ma non offre ulteriori spiegazioni.

Qualcuno può spiegare perché?


Risposte:


11

Un albero binario ha 1 o 2 figli in nodi non foglia e 0 nodi in nodi foglia. Lascia che ci siano nodi in un albero e dobbiamo sistemarli in modo tale da formare ancora un albero binario valido.n

Senza provare, sto affermando che per massimizzare l'altezza, dati nodi dovrebbero essere disposti in modo lineare, cioè ogni nodo non foglia dovrebbe avere un solo figlio:

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

Qui, la formula per calcolare la relazione dell'altezza in termini di numero di nodi è semplice. Se è l'altezza dell'albero, allora h = n - 1 .hh=n1

Ora, se proviamo a costruire un albero binario di nodi con altezza minima (sempre riducibile a un albero binario completo), dobbiamo impacchettare quanti più nodi possibili nei livelli superiori, prima di passare al livello successivo. Quindi, l'albero assume la forma del seguente albero:n

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

Cominciamo con un caso particolare, .n=2m1

Sappiamo che,

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

Inoltre, è facile dimostrare che, un livello può avere al massimo 2 i nodi in esso.i2i

Usando questo risultato nella somma sopra, troviamo che per ogni livello , da 0 a m , esiste un termine corrispondente 2 i - 1 nell'espansione di 2 m - 1 . Ciò implica che un albero binario completo 2 m - 1 nodi è completamente riempito e ha altezza, h ( 2 m - 1 ) = m - 1 , dove h ( n ) = altezza di un albero binario completo con n nodi.i0m2i12m-12m-1h(2m-1)=m-1h(n)=n

Utilizzando questo risultato, , poiché l'albero con 2 m - 1 nodi è completamente riempito e quindi un albero con ( 2 m - 1 ) + 1 = 2 m nodi deve accogliere il nodo aggiuntivo al livello successivo m , aumentando l'altezza di 1 da m - 1 a m .h(2m)=m2m-1(2m-1)+1=2mmm-1m

Fino ad ora abbiamo dimostrato, h ( 2 m + 1 ) = m + 1 e h ( 2 m + 1 - 1 ) = m

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

Pertanto, m h ( n ) < m + 1nZ,2mn<2m+1

mh(n)<m+1

Ma, prendendo il registro (base 2) su entrambi i lati, m = registro 2 ( n )

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

Pertanto, h ( n ) = m = log 2 ( n ) n,n[2m,2m+1)

h(n)=m=log2(n)

E possiamo generalizzare questo risultato usando l'induzione.nZ

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


19

n

41+12+122+12223

nodi=1+2+22+23+...+2profondità=ΣK=0profondità2K=1-2profondità+11-2.

nodi=2profondità+1-1,
nodi+1=2profondità+1log2(nodi+1)=log2(2profondità+1)=profondità+1log2(nodi+1)-1=profondità.

4

Per mantenere l'altezza minima, è facile vedere che dobbiamo riempire tutti i livelli tranne forse l'ultimo. Perché? altrimenti, potremmo semplicemente spostare gli ultimi nodi di livello negli slot vuoti nei livelli superiori.

Ora, immagina di avere un numero non specificato di fagioli e ti do un fagiolo alla volta e ti chiedo di costruire un albero binario con un'altezza minima possibile. Potrei finire i fagioli quando hai riempito completamente l'ultimo livello o almeno hai un fagiolo nell'ultimo livello. Diciamo che a questo punto hai l'altezza dell'albero h .

20+21+22+23++2h=2h+1-1n.
h=lg(n+1)-1.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.