Menghitung pohon biner


28

(Saya seorang siswa dengan latar belakang matematika dan saya ingin tahu bagaimana cara menghitung jumlah jenis pohon biner tertentu.)

Melihat halaman Wikipedia untuk Binary Trees , saya perhatikan pernyataan ini bahwa jumlah pohon biner yang berakar berukurann akan menjadi Angka Katalan ini :

Cn=1n+1(2nn)

Tetapi saya tidak mengerti bagaimana saya bisa menghasilkan hasil seperti itu sendiri? Apakah ada metode untuk menemukan hasil ini?

Sekarang, bagaimana jika urutan sub-pohon (mana yang tersisa, mana yang benar) tidak dipertimbangkan? Sebagai contoh, dari sudut pandang saya, saya menganggap bahwa kedua pohon ini sama:

   /\   /\
  /\     /\

Apakah mungkin untuk menerapkan metode serupa untuk menghitung berapa banyak dari objek-objek ini yang memiliki node?n


Apakah teorema penghitungan Polya pada pohon 2-akar yang di-root dapat diterapkan di sini?
Nicholas Mancuso

Jawaban:


35

Untuk menghitung banyak jenis objek kombinatorial, seperti pohon dalam kasus ini, ada alat matematika yang kuat (metode simbolik) yang memungkinkan Anda untuk secara mekanis menghitung jumlah tersebut dari deskripsi bagaimana objek kombinatorial dibangun. Ini melibatkan fungsi menghasilkan.

Referensi yang sangat baik adalah Analytic Combinatorics oleh Philipe Flajolet dan Robert Sedgewick. Ini tersedia dari tautan di atas.

Almarhum Herbert Wilf ini buku generatingfunctionology adalah sumber bebas yang lain.

Dan tentu saja Matematika Beton oleh GKP adalah harta karun.


Untuk pohon biner bunyinya seperti ini: Pertama, Anda perlu definisi yang jelas tentang pohon itu.

Pohon biner adalah pohon berakar di mana setiap simpul non-daun memiliki derajat 2 persis.

Selanjutnya kita harus menyetujui apa yang ingin kita sebut ukuran pohon.

masukkan deskripsi gambar di sini

Di sebelah kiri semua node sama. Di tengah kita membedakan daun dan bukan daun. Di sebelah kanan kami memiliki pohon biner yang telah dipangkas, tempat dedaunannya telah dihilangkan. Perhatikan bahwa ia memiliki cabang unary dari dua jenis (kiri dan kanan)!

Sekarang kita harus memperoleh deskripsi tentang bagaimana objek kombinatorial ini dibangun. Dalam kasus pohon biner, dekomposisi rekursif dimungkinkan.

Misalkan adalah himpunan semua pohon biner dari tipe pertama yang secara simbolis kita miliki: Amasukkan deskripsi gambar di sini

Bunyinya sebagai: "Objek kelas pohon biner adalah simpul atau simpul yang diikuti oleh dua pohon biner." Ini dapat ditulis sebagai persamaan set:

A={}({}×A×A)

Dengan memperkenalkan fungsi pembangkit yang menyebutkan kelas objek kombinatorial ini, kita dapat menerjemahkan persamaan himpunan ke dalam persamaan yang melibatkan fungsi pembangkit.A(z)

A(z)=z+zA2(z)

Pilihan kami untuk memperlakukan semua node secara merata dan mengambil jumlah node dalam pohon sebagai gagasan tentang ukurannya dinyatakan dengan "menandai" node dengan variabel .z

Kita sekarang dapat menyelesaikan persamaan kuadrat untuk A ( z ) dan mendapatkan, seperti biasa, dua solusi, bentuk tertutup eksplisit dari fungsi pembangkit:zA2(z)A(z)+z=0A(z)

A(z)=1±14z22z

Sekarang kita hanya membutuhkan Teorema Binomial Newton (umum):

(1+x)a=k=0(ak)xk

dengan dan x = - 4 z 2 untuk memperluas bentuk tertutup dari fungsi pembangkit kembali menjadi serangkaian listrik. Kami melakukan ini karena, koefisien pada z n hanyalah jumlah objek kombinatorial ukuran n , biasanya ditulis sebagai [ z n ] A ( z ) . Tapi di sini gagasan kami “ukuran” pasukan pohon kita untuk mencari koefisien di z 2 n + 1 . Setelah sedikit juggling dengan binomial dan faktorial, kita dapat:a=1/2x=4z2znn[zn]A(z)z2n+1

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

Jika kita mulai dengan gagasan kedua tentang ukuran dekomposisi rekursif adalah:

masukkan deskripsi gambar di sini

Kami mendapatkan kelas yang berbeda dari kombinasi benda . Bunyinya: "Objek kelas pohon biner adalah daun atau simpul interal diikuti oleh dua pohon biner."B

B={}({}×B×B)B=1+zB2(z)z

B(z)=114z2z

Ekstraksi hasil koefisien

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

ABnn+12n+1

Dalam kasus terakhir kita harus bekerja sedikit lebih keras:

masukkan deskripsi gambar di sini

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

dan menulis ulang dengan menghasilkan fungsi

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

memecahkan persamaan kuadrat

C(z)=12z14z2zD(z)=114z2z

dan dapatkan lagi

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

Perhatikan bahwa fungsi menghasilkan Catalan adalah

E(z)=114z2

itu menyebutkan kelas pohon umum . Itu adalah pohon tanpa batasan pada derajat simpul.

E={}×SEQ(E)

Bunyinya sebagai: "Objek kelas pohon umum adalah simpul yang diikuti oleh kemungkinan urutan pohon umum yang kosong."

E(z)=z1E(z)

Dengan Formula Inversi Lagrange-Bürmann kita dapatkan

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

Jadi kami membuktikan bahwa ada pohon umum sebanyak pohon biner. Tidak heran ada perhentian antara pohon umum dan pohon biner. Bijection dikenal sebagai korespondensi rotasi (dijelaskan pada akhir artikel terkait), yang memungkinkan kita menyimpan dua pohon umum sebagai pohon biner.

CT

masukkan deskripsi gambar di sini

T={}×SEQ2(T)
T(z)=1z12z3z22z
[zn]T(z)=1nk(nk)(nkk1).

Oh dan jika Anda tidak suka membuat fungsi, ada banyak bukti lain juga. Lihat di sini , ada satu di mana Anda dapat menggunakan pengkodean pohon biner sebagai kata-kata Dyck dan dan memperoleh pengulangan dari definisi rekursif mereka. Kemudian memecahkan kekambuhan itu juga memberikan jawabannya. Namun metode simbolis menyelamatkan Anda dari kemunculannya di tempat pertama, karena ia bekerja secara langsung dengan cetak biru dari objek kombinatorial.


Hanya untuk mencatat bahwa "Pengantar Analisis Algoritma" dari Sedgewick dan Flajolet ( aofa.cs.princeton.edu ) mencakup banyak materi yang sama dengan buku "Analytic Combinatorics", tetapi dalam bentuk yang lebih mudah diakses.
vonbrand

7

Cn

5+15+115+++++++++++++++++TETTETETTETEETETETETTETEEET(E,T(E,T(T(E,T(E,E)),E)))(5+65)±15+6

type tree = T of tree * tree | ET(T(E,E),T(T(E,E),T(E,E)))TTEETTEETEEETTEETTEETEnnn

nn0

>0n+1n

x1xmk1xk,,xm,x1,,xk1x1++xk11x1xk++xm1xkx1++xm2

Selain itu, mengingat beberapa urutan dengan jumlah 1, selalu ada permutasi siklik yang membuat semua awalan tidak kosong memiliki jumlah positif. (Ini berlaku bahkan untuk bilangan real.)

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

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

Jawaban yang sangat bagus, tetapi pernyataan berikut perlu beberapa penjelasan: "diberikan beberapa urutan dengan jumlah 1, selalu ada permutasi siklik yang membuat semua awalan non-kosong memiliki jumlah positif" .... setidaknya petunjuk terhadap buktinya adalah bagus.
vog

1
@vog: ambil awalan dengan jumlah terkecil, dan pindahkan ke akhir.
rgrig

1
@ vog: itu juga harus merupakan awalan terpanjang, jika ada beberapa dengan jumlah terkecil yang sama. Saya mengedit jawaban untuk menambahkan contoh di awal.
rgrig
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.