การนับต้นไม้ไบนารี


28

(ฉันเป็นนักเรียนที่มีพื้นฐานทางคณิตศาสตร์และฉันต้องการทราบวิธีนับจำนวนต้นไม้ไบนารีที่เฉพาะเจาะจง)

เมื่อดูที่หน้า Wikipedia สำหรับBinary Treesฉันได้สังเกตการยืนยันนี้ว่าจำนวนต้นไม้ไบนารีที่รูทขนาดจะเป็นจำนวนคาตาลันนี้: C_n = \ dfrac {1} {n + 1} {2n \ select n}n

Cn=1n+1(2nn)

แต่ฉันไม่เข้าใจว่าฉันจะได้ผลลัพธ์เช่นนี้ด้วยตัวเองได้อย่างไร มีวิธีการค้นหาผลลัพธ์นี้หรือไม่?

ทีนี้ถ้าหากคำสั่งของต้นไม้ย่อย (ซึ่งเหลืออยู่ไหนถูกต้อง) จะไม่ถูกนำมาพิจารณา? ตัวอย่างเช่นจากมุมมองของฉันฉันคิดว่าต้นไม้สองต้นนี้เหมือนกัน:

   /\   /\
  /\     /\

มันจะเป็นไปได้ที่จะใช้วิธีการคล้ายกับการนับจำนวนของวัตถุเหล่านี้ได้ว่าnโหนด?


ทฤษฎีการนับของ Polya เกี่ยวกับต้นไม้ 2-ary ที่รูตถูกบังคับใช้ที่นี่หรือไม่?
Nicholas Mancuso

คำตอบ:


35

สำหรับการนับวัตถุ combinatorial หลายชนิดเช่นต้นไม้ในกรณีนี้มีเครื่องมือทางคณิตศาสตร์ที่มีประสิทธิภาพ (วิธีสัญลักษณ์) ที่ช่วยให้คุณได้รับ mechnically นับเช่นนั้นจากคำอธิบายวิธีการสร้างวัตถุ combinatorial สิ่งนี้เกี่ยวข้องกับการสร้างฟังก์ชั่น

การอ้างอิงที่ยอดเยี่ยมคือAnalytic Combinatoricsโดย Philipe Flajolet และ Robert Sedgewick มันสามารถใช้ได้จากลิงค์ด้านบน

การสร้างฟังก์ชั่นหนังสือของเฮอร์เบิร์ตวิลฟ์ตอนปลายเป็นอีกแหล่งที่มาฟรี

และแน่นอนว่าคณิตศาสตร์คณิตศาสตร์โดย GKP เป็นขุมทรัพย์


สำหรับต้นไม้ไบนารีมันจะเป็นดังนี้: ก่อนอื่นคุณต้องมีคำจำกัดความที่ชัดเจนของต้นไม้

ต้นไม้ไบนารีเป็นต้นไม้ที่ถูกรูทซึ่งโหนดที่ไม่ใช่ใบไม้ทุกใบมีระดับ 2 อย่างแน่นอน

ต่อไปเราต้องยอมรับสิ่งที่เราต้องการเรียกขนาดของต้นไม้

ป้อนคำอธิบายรูปภาพที่นี่

ด้านซ้ายของโหนดทั้งหมดเท่ากัน ตรงกลางเราแยกความแตกต่างของใบและไม่ใช่ใบ ทางด้านขวาเรามีต้นไม้ไบนารีตัดแต่งกิ่งที่ใบถูกลบออก ขอให้สังเกตว่ามันมีสาขา unary สองประเภท (ซ้ายและขวา)!

ตอนนี้เราต้องขอคำอธิบายว่าวัตถุ combinatorial เหล่านี้ถูกสร้างขึ้นได้อย่างไร ในกรณีของต้นไม้ไบนารีการสลายตัวแบบเรียกซ้ำเป็นไปได้

ให้เป็นเซตของต้นไม้ไบนารีทั้งหมดของประเภทแรกจากนั้นเราก็มีสัญลักษณ์: Aป้อนคำอธิบายรูปภาพที่นี่

มันอ่านเป็น:“ วัตถุของคลาสของต้นไม้ไบนารีเป็นโหนดหรือโหนดตามด้วยต้นไม้ไบนารีสองต้น” สิ่งนี้สามารถเขียนเป็นสมการของเซต:

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

โดยการแนะนำฟังก์ชั่นการสร้างที่แจกแจงคลาสของออบเจ็กต์ combinatorial นี้เราสามารถแปลสมการที่กำหนดเป็นสมการที่เกี่ยวข้องกับฟังก์ชั่นการสร้างA(z)

A(z)=z+zA2(z)

ทางเลือกของเราในการรักษาอย่างเท่าเทียมกันทุกโหนดและการใช้จำนวนโหนดในต้นไม้ที่เป็นความคิดของขนาดของมันจะแสดงโดย“เครื่องหมาย” โหนดกับตัวแปรZz

ตอนนี้เราสามารถแก้สมการกำลังสองสำหรับและรับตามปกติสองวิธีแก้ปัญหารูปแบบปิดที่ชัดเจนของฟังก์ชันการสร้าง:zA2(z)A(z)+z=0A(z)

A(z)=1±14z22z

ตอนนี้เราต้องการทฤษฎีบททวินาม (ทฤษฎีทั่วไป) ของนิวตัน:

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

ด้วยและเพื่อขยายรูปแบบปิดของฟังก์ชั่นการสร้างกลับเข้าไปในชุดพลังงาน เราทำเช่นนี้เพราะค่าสัมประสิทธิ์ที่เป็นเพียงจำนวนของวัตถุ combinatorial ของขนาดเขียนมักจะเป็น(z) แต่ที่นี่ความคิดของ“ขนาด” ของกองกำลังต้นไม้เราจะมองหาค่าสัมประสิทธิ์ที่เรา1} หลังจากเล่นกลกับทวินามและแฟคทอเรียลนิดหน่อยเราก็ได้a=1/2x=4z2znn[zn]A(z)z2n+1

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

ถ้าเราเริ่มด้วยความคิดที่สองของขนาดการย่อยสลายแบบเรียกซ้ำคือ:

ป้อนคำอธิบายรูปภาพที่นี่

เราได้รับการเรียนที่แตกต่างกันของวัตถุ combinatorial{B} มันอ่าน:“ วัตถุของคลาสของต้นไม้ไบนารีเป็นแบบ leaf หรือโหนดแบบ interal ตามด้วยต้นไม้แบบไบนารีสองต้น”B

เราสามารถใช้วิธีเดียวกันและเปลี่ยนเป็น(z) เวลานี้ตัวแปรเท่านั้นที่ทำเครื่องหมายโหนดภายในไม่ใช่ใบไม้เนื่องจากคำนิยาม“ ขนาด” แตกต่างกันที่นี่ เราได้รับฟังก์ชั่นการสร้างที่แตกต่างเช่นกัน:B={}({}×B×B)B=1+zB2(z)z

B(z)=114z2z

การแยกค่าสัมประสิทธิ์ผลผลิต

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

Classและเห็นด้วยกับการนับเพราะต้นไม้ไบนารีที่มีโหนดภายในมีใบทำให้มีโหนดทั้งหมดABnn+12n+1

ในกรณีสุดท้ายเราต้องทำงานหนักขึ้นเล็กน้อย:

ป้อนคำอธิบายรูปภาพที่นี่

ซึ่งเป็นคำอธิบายของการลองไบนารีที่ตัดทิ้งแบบไม่ว่างเปล่า เราขยายสิ่งนี้เป็น

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

และเขียนใหม่ด้วยฟังก์ชันสร้าง

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

แก้สมการกำลังสอง

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

และรับอีกครั้ง

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

โปรดทราบว่าฟังก์ชั่นการสร้างคาตาลันคือ

E(z)=114z2

มันระบุระดับของต้นไม้ทั่วไป นั่นคือต้นไม้ที่ไม่มีข้อ จำกัด เกี่ยวกับระดับโหนด

E={}×SEQ(E)

มันอ่านว่า:“ วัตถุของคลาสของต้นไม้ทั่วไปคือโหนดตามด้วยลำดับว่างเปล่าที่เป็นไปได้ของต้นไม้ทั่วไป”

E(z)=z1E(z)

ด้วยสูตรผกผัน Lagrange-Bürmannที่เราได้รับ

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

ดังนั้นเราจึงพิสูจน์ได้ว่ามีต้นไม้ทั่วไปมากเท่ากับต้นไม้ไบนารี ไม่น่าแปลกใจที่มี bijection ระหว่างต้นไม้ทั่วไปและไบนารี bijection เป็นที่รู้จักกันในนามหมุนจดหมาย (อธิบายในตอนท้ายของบทความที่เชื่อมโยง) ที่ช่วยให้เราสองเก็บต้นไม้ทั่วไปทุกต้นเป็นต้นไม้ไบนารี

โปรดทราบว่าถ้าเราไม่แยกพี่น้องซ้ายและขวาในคลาสเราจะได้คลาสของต้นไม้อีก :CT

ป้อนคำอธิบายรูปภาพที่นี่

ต้นไม้ไบนารีนารี พวกเขามีหน้าที่สร้างเกินไป อย่างไรก็ตามค่าสัมประสิทธิ์ของพวกมันนั้นแตกต่างกัน คุณได้รับหมายเลข Motzkin

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

โอ้และถ้าคุณไม่ชอบการสร้างฟังก์ชั่นก็มีหลักฐานอีกมากมายเช่นกัน ดูที่นี่มีหนึ่งที่คุณสามารถใช้การเข้ารหัสของต้นไม้ไบนารีเป็นคำ Dyck และและได้รับการเกิดซ้ำจากคำจำกัดความซ้ำของพวกเขา จากนั้นการแก้ปัญหาการเกิดซ้ำนั้นก็ให้คำตอบด้วย อย่างไรก็ตามวิธีการเชิงสัญลักษณ์ช่วยให้คุณประหยัดไม่ให้เกิดขึ้นอีกในครั้งแรกเนื่องจากมันทำงานได้โดยตรงกับพิมพ์เขียวของวัตถุ combinatorial


เพียงเพื่อให้ทราบว่า Sedgewick และ Flajolet ของ "ความรู้เบื้องต้นเกี่ยวกับการวิเคราะห์อัลกอริทึม" ( aofa.cs.princeton.edu ) ครอบคลุมเนื้อหามากมายเช่นเดียวกับหนังสือ "Analytic Combinatorics" แต่ในรูปแบบที่เข้าถึงได้ง่ายขึ้น
vonbrand

7

การสร้างฟังก์ชั่นเป็นไม้เท้าวิเศษที่ทรงพลังและมีประโยชน์มาก การแก้ปัญหาต่อไปนี้สำหรับคำถามแรก (เพราะเหตุใดจึงมีต้นไม้ ) ค่อนข้างมหัศจรรย์น้อยกว่า ดังนั้นน่ารักCn

ตัวอย่าง. ในการสร้างทรีของโหนดเราเริ่มต้นด้วยลำดับที่เกิดขึ้นครั้งและเกิดขึ้นครั้ง ยกตัวอย่างเช่น+ในบรรดาคำนำหน้าเหล่านั้นด้วยผลรวมที่เล็กที่สุด (และอาจเป็นลบ) ให้เลือกที่ยาวที่สุด; ในกรณีนี้+ใช้คำนำหน้านี้จากจุดเริ่มต้นและวางไว้ที่ส่วนท้าย; ในกรณีนี้เราได้รับ++ตอนนี้เปลี่ยนเป็นและเป็น ; ในกรณีนี้เราได้รับ ลบจากจุดเริ่มต้นเพิ่ม5+15+115+++++++++++++++++TETTETETTETEETEในตอนท้าย; TETETTETEEEในกรณีนี้เราได้รับ T(E,T(E,T(T(E,T(E,E)),E)))นี่คือคำอธิบายของต้นไม้ ด้านล่างนี้มีคำอธิบายว่าทำไมสิ่งนี้ถึงมีความเอนเอียง เมื่อคุณมั่นใจแล้วการนับเป็นเรื่องง่าย มีลำดับของจากนั้นเราหารด้วยเพราะเราเลือกหนึ่งในพีชคณิตแบบวงกลมที่เป็นไปได้(5+65)±15+6

bijection แรก ความหมายโดยทั่วไปสำหรับต้นไม้ใน ML คือtype tree = T of tree * tree | E; นั่นคือต้นไม้มีลำดับย่อยสองอัน (เรียงลำดับ) หรือว่างเปล่า นี่คือวิธีสร้างต้นไม้: T(T(E,E),T(T(E,E),T(E,E))). TTEETTEETEEวางปุยเราก็สามารถเขียน ทุกรายละเอียดดังกล่าวจะจบด้วยดังนั้นจึงเป็นที่ซ้ำซ้อน:E TTEETTEETE(โปรดสังเกตว่าต้นไม้ว่างตอนนี้สอดคล้องกับสตริงว่าง) สตริงเหล่านี้มีคุณสมบัติที่แต่ละคำนำหน้ามีอย่างน้อยที่สุดเท่า Ts เป็น Es และโดยรวมแล้วพวกเขามี Ts และ Es โดยที่คือจำนวนโหนดของ ต้นไม้.nnn

bijection ที่สอง ตอนนี้เราแทนที่ T ด้วย +1 และ E ด้วย -1 ดังนั้นเรากำลังมองหาที่วนเวียนอยู่กับค่า +1 กับค่า -1 และมีผลรวมของทั้งหมดที่คำนำหน้า\nn0

bijection ที่สาม ตอนนี้เรามีการเปลี่ยนแปลงความต้องการสำหรับคำนำหน้าเล็ก ๆ น้อย ๆ เราถามว่าผลรวมของแต่ละคำนำหน้าไม่ว่างที่จะ 0 เพื่อให้เป็นไปได้เราให้ค่า +1 และค่า -1 (มิฉะนั้นผลรวมของสตริงทั้งหมดจะเป็น 0 และไม่สามารถทำตามเงื่อนไขสำหรับคำนำหน้า) ลำดับเหล่านี้จะต้องเริ่มต้นด้วย +1 ดังนั้นพวกเขาจะเหมือนเดิมยกเว้นพวกเขามี +1 ติดอยู่ในตอนแรก>0n+1n

คุณสมบัติ Raney ตอนนี้ลืมลำดับของเราสักครู่และพิจารณาบางลำดับ จำกัด ของจำนวนเต็ม , ,ที่มีผลรวมเป็น 1 หากทุกคำนำหน้าไม่ว่างเปล่ามีผลบวกบวกแล้วไม่มีการเปลี่ยนแปลงวงจรลำดับนี้มีคุณสมบัติเดียวกัน ทำไม? สมมติว่ามีเช่นนั้นที่ก็มีคำนำหน้าบวกทั้งหมดที่ไม่ว่างเปล่า จากนั้น (คุณสมบัติของลำดับเริ่มต้นจาก ) และ (คุณสมบัติของลำดับเริ่มต้นจาก ); ดังนั้นx1xmk1xk,,xm,x1,,xk1x1++xk11x1xk++xm1xkx1++xm2ซึ่งขัดแย้งกับสมมติฐานที่ว่าผลรวมของลำดับทั้งหมดคือ 1

ยิ่งกว่านั้นตามลำดับด้วยผลรวม 1 มีการเปลี่ยนรูปแบบเป็นวงกลมเสมอซึ่งทำให้ส่วนนำหน้าที่ไม่ว่างทั้งหมดมีผลบวกเป็นบวก (สิ่งนี้เป็นจริงแม้สำหรับจำนวนจริง)

ข้อสรุป ทีนี้ลองนับลำดับของ +1 กับ -1 ที่อยู่ใน bijection กับต้นไม้ จากตัวเลขเราต้องเลือกที่เท่ากับ +1 ส่วนอื่น ๆ จะเป็น -1 มีวิธีที่จะทำ แต่มีเพียงในลำดับที่นับจนถึงมีคำนำหน้าเป็นบวก ดังนั้นจำนวนของรากต้นไม้ไบนารีที่สั่งซื้อคือ:2n+1n+1(2n+1n+1)12n+1

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

คำตอบที่ดีมาก แต่คำสั่งต่อไปนี้จำเป็นต้องมีคำอธิบาย: "ให้ลำดับกับผลรวม 1 มีการเปลี่ยนรูปแบบวนซึ่งทำให้คำนำหน้าไม่ว่างทั้งหมดมีผลบวกเสมอ" .... อย่างน้อยคำใบ้ของหลักฐานจะเป็น ดี
vog

1
@vog: ใช้คำนำหน้าด้วยผลรวมที่เล็กที่สุดและย้ายไปยังจุดสิ้นสุด
rgrig

1
@vog: ควรเป็นคำนำหน้าที่ยาวที่สุดในกรณีที่มีหลายตัวที่มีผลรวมที่เล็กที่สุดเหมือนกัน ฉันแก้ไขคำตอบเพื่อเพิ่มตัวอย่างในตอนแรก
rgrig
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.