Conteggio degli alberi binari


28

(Sono uno studente con un background matematico e vorrei sapere come contare il numero di un tipo specifico di alberi binari.)

Guardando la pagina Wikipedia per Alberi binari , ho notato questa affermazione che il numero di alberi binari radicati di dimensione n sarebbe questo numero catalano :

Cn=1n+1(2nn)

Ma non capisco come avrei potuto ottenere un simile risultato da solo? Esiste un metodo per trovare questo risultato?

Ora, cosa succede se l'ordine dei sottoalberi (che è lasciato, che è giusto) non è considerato? Ad esempio, dal mio punto di vista, ritengo che questi due alberi siano gli stessi:

   /\   /\
  /\     /\

Sarebbe possibile applicare un metodo simile per contare quanti di questi oggetti hanno esattamente nodi?n


Il teorema di conteggio di Polya sugli alberi a 2 razze radicati è applicabile qui?
Nicholas Mancuso

Risposte:


35

Per contare molti tipi di oggetti combinatori, come gli alberi in questo caso, esistono potenti strumenti matematici (il metodo simbolico) che consentono di derivare meccanicamente tali conteggi da una descrizione di come sono costruiti gli oggetti combinatori. Ciò comporta la generazione di funzioni.

Un eccellente riferimento è la Combinazione Analitica del compianto Philipe Flajolet e Robert Sedgewick. È disponibile dal link sopra.

Il libro di Il defunto Herbert Wilf generatingfunctionology è un'altra fonte gratuita.

E naturalmente Concrete Mathematics di GKP è un vero tesoro.


Per gli alberi binari va così: per prima cosa hai bisogno di una chiara definizione dell'albero.

Un albero binario è un albero radicato in cui ogni nodo non foglia ha esattamente il grado 2.

Quindi dobbiamo concordare ciò che vogliamo chiamare la dimensione di un albero.

inserisci qui la descrizione dell'immagine

A sinistra tutti i nodi sono uguali. Nel mezzo distinguiamo le foglie e le non foglie. Sulla destra abbiamo un albero binario potato dove sono state rimosse le foglie. Nota che ha rami unari di due tipi (sinistro e destro)!

Ora dobbiamo ricavare una descrizione di come sono costruiti questi oggetti combinatori. Nel caso di alberi binari è possibile una decomposizione ricorsiva .

Sia l'insieme di tutti gli alberi binari del primo tipo, quindi simbolicamente abbiamo: UNinserisci qui la descrizione dell'immagine

Si legge come: "Un oggetto della classe di alberi binari è un nodo o un nodo seguito da due alberi binari." Questo può essere scritto come equazione di insiemi:

UN={}({}×UN×UN)

Introducendo la funzione generatrice che enumera questa classe di oggetti combinatori possiamo tradurre l'equazione impostata in un'equazione che coinvolge la funzione generatrice.UN(z)

UN(z)=z+zUN2(z)

La nostra scelta di trattare tutti i nodi allo stesso modo e di prendere il numero di nodi nella struttura come nozione della sua dimensione è espressa "marcando" i nodi con la variabile .z

Ora possiamo risolvere l'equazione quadratica per A ( z ) e ottenere, come al solito, due soluzioni, la forma esplicita chiusa della funzione generatrice:zUN2(z)-UN(z)+z=0UN(z)

UN(z)=1±1-4z22z

Ora abbiamo semplicemente bisogno del teorema binomiale (generalizzato) di Newton:

(1+X)un'=ΣK=0(un'K)XK

con e x = - 4 z 2 per espandere la forma chiusa della funzione generatrice di nuovo in una serie di potenze. Lo facciamo perché, il coefficiente in z n è solo il numero di oggetti combinatori di dimensione n , tipicamente scritti come [ z n ] A ( zun'=1/2X=-4z2znn . Ma qui la nostra nozione di "dimensione" dell'albero ci costringe a cercare il coefficiente a z 2 n + 1 . Dopo un po 'di giocoleria con binomiali e fattoriali otteniamo:[zn]UN(z)z2n+1

[z2n+1]UN(z)=1n+1(2nn).

Se iniziamo con la seconda nozione della dimensione, la decomposizione ricorsiva è:

inserisci qui la descrizione dell'immagine

Otteniamo una diversa classe di oggetti combinatoria . Si legge: "Un oggetto della classe di alberi binari è una foglia o un nodo interale seguito da due alberi binari."B

Possiamo usare lo stesso approccio e trasformare in B = 1 + z BB={}({}×B×B) . Solo che questa volta la variabile z segna solo i nodi interni, non le foglie, perché qui la definizione "dimensione" è diversa. Abbiamo anche una diversa funzione di generazione:B=1+zB2(z)z

B(z)=1-1-4z2z

Estrazione dei rendimenti dei coefficienti

[zn]B(z)=1n+1(2nn).

Le classi e B concordano sui conteggi, perché un albero binario con n nodi interni ha n + 1 foglie, quindiUNBnn+1 nodi in totale.2n+1

Nell'ultimo caso dobbiamo lavorare un po 'di più:

inserisci qui la descrizione dell'immagine

che è una descrizione di tentativi binari potati non vuoti. Lo estendiamo a

C={}({}×C)({}×C)({}×C×C)D={ϵ}({}×C×C)

e riscriverlo con le funzioni di generazione

C(z)=z+2zC(z)+zC2(z)D(z)=1+zC2(z)

risolvere le equazioni quadratiche

C(z)=1-2z-1-4z2zD(z)=1-1-4z2z

e ottenere di nuovo

[zn]C(z)=1n+1(2nn)n1[zn]D(z)=1n+1(2nn)n0

Si noti che la funzione di generazione catalana è

E(z)=1-1-4z2

enumera la classe degli alberi generali . Cioè gli alberi senza restrizioni sul grado del nodo.

E={}×SEQ(E)

Si legge come: "Un oggetto della classe di alberi generali è un nodo seguito da una possibile sequenza vuota di alberi generali."

E(z)=z1-E(z)

Con la formula di inversione di Lagrange-Bürmann otteniamo

[zn]E(z)=1n+1(2nn)

Quindi abbiamo dimostrato che ci sono tanti alberi generali quanti sono gli alberi binari. Non c'è da meravigliarsi che vi sia una biiezione tra il generale e gli alberi binari. La biiezione è nota come corrispondenza di rotazione (spiegata alla fine dell'articolo collegato), che ci consente di memorizzare due alberi generali come alberi binari.

Nota che se non distinguiamo il fratello destro e sinistro in classe otteniamo ancora un'altra classe di alberi T :CT

inserisci qui la descrizione dell'immagine

gli alberi binari unari. Hanno anche una funzione generatrice T ( z ) = 1 - z -

T={}×SEQ2(T)
tuttavia il loro coefficiente è diverso. Ottieni i numeri Motzkin [zn]T(z)=1
T(z)=1z12z3z22z
[zn]T(z)=1nk(nk)(nkk1).

Oh, e se non ti piace generare funzioni, ci sono anche molte altre prove. Vedi qui , ce n'è uno in cui puoi usare la codifica degli alberi binari come parole di Dyck e ricavare una ricorrenza dalla loro definizione ricorsiva. Quindi risolvere quella ricorrenza dà anche la risposta. Tuttavia, il metodo simbolico ti evita in primo luogo di presentare la ricorrenza, poiché funziona direttamente con i progetti degli oggetti combinatori.


Solo per notare che "Introduzione all'analisi degli algoritmi" di Sedgewick e Flajolet ( aofa.cs.princeton.edu ) copre molto dello stesso materiale del libro "Analitica Combinatoria", ma in una forma più accessibile.
vonbrand,

7

Cn

5+15+1-15+-++-+--++-+-++-+--++-+-++-+--+T-ETTETETTETEETETETETTETEEET(E,T(E,T(T(E,T(E,E)),E)))(5+65)±15+6 perché abbiamo scelto una delle possibili permutazioni cicliche.

type tree = T of tree * tree | ET(T(E,E),T(T(E,E),T(E,E)))TTEETTEETEEETTEETTEETEnnn è il numero di nodi di l'albero.

nn0

>0n+1n

x1xmk1xk,,xm,x1,,xk1x1++xk11x1xk++xm1xkx1++xm2 , che contraddice il presupposto che la somma per l'intera sequenza sia 1.

Inoltre, data una sequenza con la somma 1, c'è sempre una permutazione ciclica che fa sì che tutti i prefissi non vuoti abbiano una somma positiva. (Questo è vero anche per numeri reali.)

2n+1n+1(2n+1n+1)12n+1

12n+1(2n+1n+1)=12n+12n+1n+1(2nn)=1n+1(2nn)

Risposta molto buona, ma la seguente affermazione necessita di qualche spiegazione: "data una sequenza con la somma 1, c'è sempre una permutazione ciclica che rende tutti i prefissi non vuoti avere una somma positiva" .... almeno un suggerimento per la prova sarebbe simpatico.
Vog

1
@vog: prendi il prefisso con la somma più piccola e spostalo alla fine.
rgrig,

1
@vog: dovrebbe anche essere il prefisso più lungo, nel caso ce ne siano multipli con la stessa somma più piccola. Ho modificato la risposta per aggiungere un esempio all'inizio.
rgrig,
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.