Qual è l'altezza media di un albero binario?


10

Esiste una definizione formale relativa all'altezza media di un albero binario?

Ho una domanda tutorial su come trovare l'altezza media di un albero binario usando i seguenti due metodi:

  1. La soluzione naturale potrebbe essere quella di prendere la lunghezza media di tutti i possibili percorsi dalla radice a una foglia, cioè

    avh1(T)=1# leaves in Tv leaf of Tdepth(v) .

  2. Un'altra opzione è quella di definirlo in modo ricorsivo, ovvero l'altezza media di un nodo è la media sulle altezze medie dei sottotitoli più uno, ovvero

    avh2(N(l,r))=avh2(l)+avh2(r)2+1

    con per i fogli e per gli slot vuoti.l avh 2 ( _ ) = 0avh2(l)=1lavh2(_)=0

Sulla base della mia attuale comprensione, ad esempio l'altezza media dell'alberoT

    1    
   / \
  2   3
 /
4

è con il secondo metodo, che utilizza la ricorsione.avh2(T)=1.25

Tuttavia, non riesco ancora a capire come fare il primo. non è corretto.avh1(T)=(1+2)/2=1.5


1
Puoi fornire qualche contesto? Non esiste una definizione matematica "corretta"; puoi definire "altezza media di un albero binario" come preferisci. (Media di cosa su quale distribuzione ?) Ma definizioni diverse saranno più o meno utili per diverse applicazioni.
JeffE,

@JeffE "Non è immediatamente ovvio come definire l'altezza media di un albero binario. Forse la soluzione più naturale potrebbe essere quella di avere la lunghezza media dei possibili percorsi dalla radice ad una foglia. Una soluzione più semplice (forse anche semplicistica) è dire che l'altezza media di un nodo è la media delle altezze medie delle sottotitoli più una. Compilare trova più facile codificare questa alternativa. Puoi fornire esempi per dimostrare la differenza? "
Timeless

Ho cercato di rendere più chiaro il tuo post fornendo definizioni precise delle due varianti. Verifica di aver interpretato correttamente il tuo testo. In particolare, mancava l'ancoraggio per la seconda variante; se prendi le foglie per avere altezza uno o zero fa la differenza.
Raffaello

Risposte:


3

Non c'è motivo di credere che entrambe le definizioni descrivano la stessa misura. Puoi scrivere modo ricorsivo:avh1

avh1(N(l,r))=lv(l)(avh1(l)+1)+lv(r)(avh1(r)+1)lv(l)+lv(r)

con per le foglie . Se non credi che sia lo stesso, spiega la definizione di sul lato destro o esegui una prova di induzione.avh1(l)=0lavh1

Ora vediamo che funziona in modo abbastanza diverso da . Mentre pesa equamente le altezze ricorsive dei nodi di un bambino (aggiungendo e dividendo per due), li pesa in base al numero di foglie che contengono. Quindi sono gli stessi (modulo l'ancora) per gli alberi bilanciati a foglia, il che è bilanciato nel senso che gli alberi di pari livello hanno altrettante foglie. Se si semplifica la forma ricorsiva di con questo è immediatamente evidente. Sugli alberi sbilanciati, tuttavia, sono diversi.avh 2 avh 2 avh 1 avh 1 lv ( l ) = lv ( r )avh1avh2avh2avh1avh1lv(l)=lv(r)

I tuoi calcoli sono effettivamente corretti (data la tua definizione); si noti che l'albero di esempio non è bilanciato a foglia.


È possibile mostrare il codice di implementazione per , non ho proprio idea di come farlo in modo ricorsivoavh1
Timeless,

@null: mi dispiace, non capisco la domanda. Intendi come dimostrare che la definizione ricorsiva di è equivalente alla tua? avh1
Raffaello

Intendo il codice di implementazione usando la ricorsione
Timeless,

@null: puoi copiare la formula quasi letteralmente , a condizione che tu abbia incorporato il case base. Come farlo dipende esattamente dal linguaggio di programmazione e dall'implementazione dell'albero. Ti suggerisco di ricorrere a StackTranslate.it se l'implementazione è un ostacolo per te.
Raffaello

2

Modifica: Jeffe fa un buon punto nel suo commento sopra. Probabilmente dovresti leggere "corretto contro errato" nella seguente risposta come "conveniente / coerente contro incoerente".

Sembra che il tuo secondo calcolo non sia corretto. Lascia che l'altezza di una sottostruttura con un singolo nodo (cioè una foglia) sia 0. Quindi l'altezza della radice della sottostruttura su:

  • l'altezza a 4 è 0
  • l'altezza a 3 è 0
  • l'altezza a 2 è l'altezza media a 3 + 1 = 0 + 1 = 1
  • l'altezza a 1 è la media delle altezze a 2 e 3 = (0 + 1) / 2 + 1 = 1,5

Penso che tu stia facendo correttamente il primo calcolo, e 1.5 è la risposta giusta.


l'idea è nodo nullo con altezza -1, basato sul secondo approccio, l'altezza media di un nodo è la media dei sottotitoli più 1, l'altezza media del nodo 4 è ((-1) + (- 1)) / 2 + 1 = 0 , l'altezza media del nodo 2 è (0 + (- 1)) / 2 + 1 = 0,5, e quindi l'altezza media della radice è 1,25.
Timeless

@null È possibile definirlo in questo modo se si insiste, ma le due definizioni non saranno coerenti.
Joe,
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.