Đếm cây nhị phân


28

(Tôi là một học sinh có một số nền tảng toán học và tôi muốn biết cách đếm số lượng của một loại cây nhị phân cụ thể.)

Nhìn vào trang Wikipedia cho Cây nhị phân , tôi nhận thấy điều này khẳng định rằng số cây nhị phân gốc có kích thước sẽ là Số Catalan này : C_n = \ dfrac {1} {n + 1} {2n \ select n}n

Cn=1n+1(2nn)

Nhưng tôi không hiểu làm thế nào tôi có thể tự mình đưa ra kết quả như vậy? Có một phương pháp để tìm kết quả này?

Bây giờ, nếu thứ tự của các cây con (bên trái, bên phải) không được xem xét thì sao? Ví dụ, theo quan điểm của tôi, tôi cho rằng hai cây này giống nhau:

   /\   /\
  /\     /\

Có thể áp dụng một phương thức tương tự để đếm xem có bao nhiêu đối tượng trong số này có chính xác n nút?


Là định lý đếm của Polya trên cây 2 gốc có thể áp dụng ở đây?
Nicholas Mancuso

Câu trả lời:


35

Để đếm nhiều loại đối tượng tổ hợp, như cây trong trường hợp này, có các công cụ toán học mạnh mẽ (phương pháp biểu tượng) cho phép bạn lấy được số lượng như vậy từ mô tả cách xây dựng các đối tượng kết hợp. Điều này liên quan đến việc tạo các chức năng.

Một tài liệu tham khảo tuyệt vời là Combinatorics phân tích của Philipe Flajolet và Robert Sedgewick quá cố. Nó có sẵn từ các liên kết ở trên.

Chức năng tạo sách của Herbert Wilf là một nguồn miễn phí khác.

Và tất nhiên, Toán học cụ thể của GKP là một kho báu.


Đối với cây nhị phân, nó sẽ như thế này: Đầu tiên bạn cần một định nghĩa rõ ràng về cây.

Cây nhị phân là cây gốc trong đó mọi nút không lá có độ 2 chính xác.

Tiếp theo chúng ta phải đồng ý những gì chúng ta muốn gọi là kích thước của một cái cây.

nhập mô tả hình ảnh ở đây

Ở bên trái tất cả các nút bằng nhau. Ở giữa chúng ta phân biệt lá và không lá. Ở bên phải chúng ta có một cây nhị phân được cắt tỉa, nơi những chiếc lá đã bị loại bỏ. Lưu ý rằng nó có các nhánh đơn nhất gồm hai loại (trái và phải)!

Bây giờ chúng ta phải rút ra một mô tả về cách các đối tượng tổ hợp này được xây dựng. Trong trường hợp cây nhị phân có thể phân rã đệ quy .

Đặt là tập hợp của tất cả các cây nhị phân thuộc loại đầu tiên, theo nghĩa biểu tượng chúng ta có: Anhập mô tả hình ảnh ở đây

Nó đọc là: Một đối tượng của lớp cây nhị phân là một nút hoặc một nút theo sau bởi hai cây nhị phân. Điều này có thể được viết dưới dạng phương trình của các tập hợp:

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

Bằng cách giới thiệu hàm tạo liệt kê lớp đối tượng tổ hợp này, chúng ta có thể dịch phương trình tập hợp thành một phương trình liên quan đến hàm tạo.A(z)

A(z)=z+zA2(z)

Sự lựa chọn của chúng tôi về việc xử lý tất cả các nút bằng nhau và lấy số lượng nút trong cây làm khái niệm về kích thước của nó được thể hiện bằng cách đánh dấu các nút với biến .z

Bây giờ chúng ta có thể giải phương trình bậc hai cho và nhận, như thường lệ, hai giải pháp, dạng đóng rõ ràng của hàm tạo:zA2(z)A(z)+z=0A(z)

A(z)=1±14z22z

Bây giờ chúng ta chỉ cần định lý nhị thức (tổng quát) của Newton:

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

với và để mở rộng dạng đóng của hàm tạo trở lại thành chuỗi . Chúng tôi làm điều này bởi vì, hệ số tại chỉ là số lượng đối tượng tổ hợp có kích thước , thường được viết là . Nhưng ở đây, khái niệm của chúng tôi về kích thước kích thước của cây buộc chúng ta phải tìm hệ số tại . Sau một chút tung hứng với nhị thức và giai thừa, chúng ta nhận được:a=1/2x=4z2znn[zn]A(z)z2n+1

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

Nếu chúng ta bắt đầu với khái niệm thứ hai về kích thước thì phân rã đệ quy là:

nhập mô tả hình ảnh ở đây

Chúng ta có một lớp các đối tượng tổ hợp khác nhau . Nó đọc: Một đối tượng của lớp cây nhị phân là một chiếc lá hoặc một nút liên tiếp theo sau là hai cây nhị phân.B

Chúng ta có thể sử dụng cùng một cách tiếp cận và biến thành . Chỉ lần này, biến chỉ đánh dấu các nút bên trong chứ không phải các lá, bởi vì định nghĩa về kích thước thì ở đây là khác nhau. Chúng tôi cũng nhận được một chức năng tạo khác nhau:B={}({}×B×B)B=1+zB2(z)z

B(z)=114z2z

Trích xuất năng suất hệ số

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

Class và đồng ý về số lượng, bởi vì một cây nhị phân có nút nội bộ có lá, do đó tổng cộng nút.ABnn+12n+1

Trong trường hợp cuối cùng, chúng ta phải làm việc chăm chỉ hơn một chút:

nhập mô tả hình ảnh ở đây

đó là một mô tả về cố gắng nhị phân cắt tỉa không trống. Chúng tôi mở rộng điều này thành

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

và viết lại nó với các hàm tạo

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

giải phương trình bậc hai

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

và nhận lại

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

Lưu ý rằng hàm tạo Catalan

E(z)=114z2

nó liệt kê các lớp của cây nói chung . Đó là những cây không có giới hạn về mức độ nút.

E={}×SEQ(E)

Nó đọc là: Một đối tượng của lớp cây nói chung là một nút theo sau là một chuỗi trống có thể có của cây nói chung.

E(z)=z1E(z)

Với Công thức đảo ngược Lagrange-Bürmann, chúng ta có được

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

Vì vậy, chúng tôi đã chứng minh rằng có nhiều cây nói chung cũng như có cây nhị phân. Không có gì ngạc nhiên khi có một sự lựa chọn giữa cây chung và cây nhị phân. Sự lựa chọn được gọi là sự tương ứng xoay vòng (được giải thích ở cuối bài viết được liên kết), cho phép chúng ta lưu trữ hai cây chung như một cây nhị phân.

Lưu ý rằng nếu chúng ta không phân biệt anh chị em bên trái và bên phải trong lớp chúng ta sẽ nhận được một lớp cây khác :CT

nhập mô tả hình ảnh ở đây

các cây nhị phân đơn nhất. Chúng có chức năng tạo quá tuy nhiên hệ số của chúng là khác nhau. Bạn nhận được các số Motzkin

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

Ồ và nếu bạn không thích tạo chức năng thì cũng có rất nhiều bằng chứng khác. Xem ở đây , có một nơi mà bạn có thể sử dụng mã hóa cây nhị phân như các từ Dyck và rút ra một định kỳ từ định nghĩa đệ quy của chúng. Sau đó giải quyết sự tái phát đó cũng cho câu trả lời. Tuy nhiên, phương pháp tượng trưng giúp bạn không gặp phải sự tái phát ở nơi đầu tiên, vì nó hoạt động trực tiếp với bản thiết kế của các đối tượng tổ hợp.


Chỉ cần lưu ý rằng "Giới thiệu về phân tích thuật toán" của Sedgewick và Flajolet ( aofa.cs.princeton.edu ) bao gồm rất nhiều tài liệu giống như cuốn sách "Kết hợp phân tích", nhưng ở dạng dễ tiếp cận hơn.
vonbrand

7

Tạo các chức năng là một cây đũa thần rất mạnh mẽ và rất hữu ích. Giải pháp sau đây cho câu hỏi đầu tiên (tại sao lại có cây ) có phần ít huyền diệu hơn. Do đó, dễ thương.Cn

Thí dụ. Để tạo ra một cây gồm nút, chúng ta bắt đầu với một chuỗi trong đó xảy ra lần và xảy ra lần. Ví dụ: . Trong số các tiền tố có tổng nhỏ nhất (và có thể âm), chọn dài nhất; trong trường hợp này, . Lấy tiền tố này từ đầu và đặt nó ở cuối; trong trường hợp này, chúng ta nhận được . Bây giờ thay đổi thành và thành ; trong trường hợp này chúng tôi nhận được . Xóa một từ đầu, thêm một5+15+115+++++++++++++++++TETTETETTETEETEcuối cùng; trong trường hợp này chúng tôi nhận được TETETTETEEE. Đây là một mô tả của cây T(E,T(E,T(T(E,T(E,E)),E))). Dưới đây có một số giải thích về lý do tại sao đây là một bijection. Một khi bạn đã bị thuyết phục về điều đó, việc đếm rất dễ dàng. Có chuỗi , sau đó chúng tôi chia cho vì chúng tôi đã chọn một trong những hoán vị tuần hoàn có thể.(5+65)±15+6

Đồ trang sức đầu tiên. Một định nghĩa điển hình cho cây trong ML là type tree = T of tree * tree | E; có nghĩa là, một cây hoặc có hai cây con (được đặt hàng), hoặc nó trống. Đây là cách cây được xây dựng : T(T(E,E),T(T(E,E),T(E,E))). Thả lông tơ, chúng ta có thể viết TTEETTEETEE. Tất cả các mô tả như vậy sẽ kết thúc bằng một E, vì vậy nó là dư thừa : TTEETTEETE. (Lưu ý rằng cây trống hiện tương ứng với chuỗi rỗng.) Các chuỗi này có thuộc tính mà mỗi tiền tố có ít nhất nhiều Ts như Es và tổng cộng chúng có Ts và Es, trong đó là số nút của cái cây.nnn

Thứ hai. Bây giờ chúng ta thay thế T bằng +1 và E bằng -1. Vì vậy, chúng tôi đang xem xét các chuỗi có giá trị +1, với giá trị -1 và với tổng của tất cả các tiền tố .nn0

Bảo vệ thứ ba. Bây giờ chúng tôi thay đổi yêu cầu về tiền tố một chút: Chúng tôi yêu cầu tổng của mỗi tiền tố không trống là . Để điều này có thể xảy ra, chúng ta hãy để giá trị +1 và giá trị -1. (Nếu không, tổng của toàn bộ chuỗi sẽ là 0 và sẽ không đáp ứng điều kiện cho các tiền tố.) Các chuỗi này phải bắt đầu bằng +1. Vì vậy, chúng thực sự giống như trước đây, ngoại trừ chúng có +1 bị kẹt ngay từ đầu.>0n+1n

Tài sản Raney. Bây giờ quên chuỗi của chúng tôi một lúc và xem xét một số dãy hữu hạn các số nguyên , , có tổng là 1. Nếu tất cả các tiền tố không có sản phẩm nào có khoản tiền tích cực, sau đó hoán vị không theo chu kỳ của dãy này có tính chất tương tự. Tại sao? Chà, giả sử có một sao cho cũng có tất cả các tiền tố không trống. Sau đó (thuộc tính của chuỗi bắt đầu từ ) và (thuộc tính của chuỗi bắt đầu từ ); do đó,x1xmk1xk,,xm,x1,,xk1x1++xk11x1xk++xm1xkx1++xm2, điều này mâu thuẫn với giả định rằng tổng của toàn bộ chuỗi là 1.

Hơn nữa, với một số chuỗi có tổng 1, luôn có một hoán vị tuần hoàn làm cho tất cả các tiền tố không trống có tổng dương. (Điều này đúng ngay cả với số thực.)

Phần kết luận. Bây giờ, hãy đếm các chuỗi +1 và -1 trong một khung hình với cây. Trong số số, chúng ta phải chọn bằng +1, các số khác sẽ là -1. Có để làm như vậy. Nhưng, chỉ có trong chuỗi được tính cho đến nay có tiền tố dương. Vì vậy, số lượng cây nhị phân gốc, được đặt hàng là:2n+1n+1(2n+1n+1)12n+1

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

Câu trả lời rất hay, nhưng câu lệnh sau cần một số giải thích: "đưa ra một số chuỗi với tổng 1, luôn có một hoán vị tuần hoàn làm cho tất cả các tiền tố không trống có tổng dương" .... ít nhất là một gợi ý cho bằng chứng sẽ là tốt đẹp.
vog

1
@vog: lấy tiền tố với tổng nhỏ nhất và di chuyển nó đến cuối.
rgrig

1
@vog: nó cũng phải là tiền tố dài nhất, trong trường hợp có nhiều số có cùng một tổng nhỏ nhất. Tôi đã chỉnh sửa câu trả lời để thêm một ví dụ vào đầu.
rgrig
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.