MathLabs

Tổ hợp và Toán rời rạc

Hàm sinh

Chuỗi lũy thừa mã hóa một dãy số dưới dạng hệ số, biến bài toán tổ hợp thành bài toán đại số.

Trực giácHàm sinh là gì?

Hãy tưởng tượng một sợi dây phơi có vô hạn cái móc, đánh số 0,1,2,3,…0, 1, 2, 3, \dots. Để mô tả một dãy số a0,a1,a2,…a_0, a_1, a_2, \dots, ta treo số ana_n lên móc thứ nn. Hàm sinh chính là sợi dây phơi này được viết lại thành một đối tượng đại số duy nhất: số ana_n trở thành hệ số của xxn^n trong một chuỗi lũy thừa. Biến xx không bao giờ được thay bằng một con số cụ thể — nó chỉ giữ mỗi số hạng đúng ô của nó, nhờ vậy cộng, nhân hay dịch chuyển dãy số trở thành các phép đại số bình thường trên đa thức.

Đồ thị đa thức bậc ba $1+x+x^2+x^3$ xấp xỉ hàm sinh $\frac{1}{1-x}$.
Đường cong này là đa thức bậc ba 1+x+x2+x31+x+x^2+x^3, bốn số hạng đầu của 11−x=∑n=0∞xn\frac{1}{1-x}=\sum_{n=0}^{\infty}x^n, hàm sinh của dãy hằng an=1a_n=1. Mỗi hệ số (kéo a,b,c,da,b,c,d) là một móc của dãy số được gói vào đường cong.

Phổ thôngGói một dãy số vào chuỗi lũy thừa

Định nghĩa: Hàm sinh thường

Hàm sinh thường (OGF) của dãy số a0,a1,a2,…a_0, a_1, a_2, \dots là chuỗi lũy thừa hình thức G(x)=∑n=0∞anxnG(x)=\sum_{n=0}^{\infty}a_nx^n. "Hình thức" nghĩa là ta coi tổng này như một biểu thức đại số, không phải một hàm số cần tính giá trị bằng số; câu hỏi về sự hội tụ tại các giá trị cụ thể của xx không liên quan tới tổ hợp.

G(x)=∑n=0∞anxnG(x)=\sum_{n=0}^{\infty}a_nx^n

Khối xây dựng đơn giản nhất là dãy an=1a_n=1 với mọi n≥0n \ge 0, có hàm sinh là chuỗi cấp số nhân 11−x=∑n=0∞xn\frac{1}{1-x}=\sum_{n=0}^{\infty}x^n. Đẳng thức này là động cơ đứng sau phần lớn các lập luận dùng hàm sinh: nó nói rằng 11−x\frac{1}{1-x} mã hóa "chọn nn vật từ một nguồn cung không giới hạn, không quan tâm thứ tự, mỗi cách một lần".

1(1−x)2=∑n=0∞(n+1)xn\frac{1}{(1-x)^2}=\sum_{n=0}^{\infty}(n+1)x^n
Một số dãy số thường gặp và hàm sinh của chúng
Dãy sốHàm sinh
Hằng số, an=1a_n=111−x\frac{1}{1-x}
Tuyến tính, an=n+1a_n=n+11(1−x)2\frac{1}{(1-x)^2}
Fibonacci, an=Fna_n=F_nx1−x−x2\frac{x}{1-x-x^2}
Hàng nhị thức, an=(kn)a_n=\binom{k}{n}(1+x)k(1+x)^k

Đại họcTừ hệ thức truy hồi tới công thức đóng

Cho F0=0, F1=1F_0=0,\ F_1=1 và Fn=Fn−1+Fn−2F_n=F_{n-1}+F_{n-2} với n≥2n\ge2. Khi đó hàm sinh thường F(x)=∑n=0∞FnxnF(x)=\sum_{n=0}^{\infty}F_nx^n bằng F(x)=x1−x−x2F(x)=\frac{x}{1-x-x^2}.

Vì sao đúng?

Một hệ thức truy hồi tuyến tính với hệ số hằng luôn trở thành một phương trình đại số (thực chất là phương trình hữu tỉ) đơn giản một khi ta nhân với xxn^n rồi lấy tổng theo mọi nn — hệ thức truy hồi trở thành phép nhân với một đa thức theo xx.

Chứng minh

Nhân hệ thức truy hồi Fn=Fn−1+Fn−2F_n=F_{n-1}+F_{n-2} (đúng với n≥2n\ge2) với xnx^n rồi lấy tổng theo n≥2n\ge2: ∑n≥2Fnxn=∑n≥2Fn−1xn+∑n≥2Fn−2xn\sum_{n\ge2}F_nx^n=\sum_{n\ge2}F_{n-1}x^n+\sum_{n\ge2}F_{n-2}x^n.

Vế trái bằng F(x)−F0−F1x=F(x)−xF(x)-F_0-F_1x=F(x)-x. Tổng đầu tiên ở vế phải là x∑n≥2Fn−1xn−1=x∑m≥1Fmxm=x(F(x)−F0)=xF(x)x\sum_{n\ge2}F_{n-1}x^{n-1}=x\sum_{m\ge1}F_mx^m=x(F(x)-F_0)=xF(x). Tổng thứ hai là x2∑n≥2Fn−2xn−2=x2∑k≥0Fkxk=x2F(x)x^2\sum_{n\ge2}F_{n-2}x^{n-2}=x^2\sum_{k\ge0}F_kx^k=x^2F(x).

Vậy F(x)−x=xF(x)+x2F(x)F(x)-x=xF(x)+x^2F(x), tức là (1−x−x2)F(x)=x(1-x-x^2)F(x)=x.

Giải phương trình theo F(x)F(x) ta được F(x)(1−x−x2)=xF(x)(1-x-x^2)=x, suy ra F(x)=x1−x−x2F(x)=\frac{x}{1-x-x^2}, một hàm hữu tỉ duy nhất gói trọn toàn bộ dãy Fibonacci vô hạn.

Với φ=1+52\varphi=\frac{1+\sqrt{5}}{2} và ψ=1−52\psi=\frac{1-\sqrt{5}}{2}, các nghiệm của 1−x−x21-x-x^2 cho công thức đóng Fn=15(φn−ψn)F_n=\frac{1}{\sqrt{5}}\left(\varphi^n-\psi^n\right) với mọi n≥0n\ge0.

Vì sao đúng?

Mọi hàm sinh hữu tỉ có mẫu số là tích các nhân tử tuyến tính khác nhau đều tách được thành tổng các chuỗi cấp số nhân đơn giản, và mỗi chuỗi cấp số nhân cho ngay một công thức tường minh cho hệ số.

Chứng minh

Phân tích mẫu số: vì các nghiệm của 1−x−x2=01-x-x^2=0 là x=1/φx=1/\varphi và x=1/ψx=1/\psi, ta có 1−x−x2=(1−φx)(1−ψx)1-x-x^2=(1-\varphi x)(1-\psi x).

Viết x1−x−x2=A1−φx+B1−ψx\frac{x}{1-x-x^2}=\frac{A}{1-\varphi x}+\frac{B}{1-\psi x} với hằng số A,BA,B. Quy đồng mẫu số và so khớp số hạng tự do cùng hệ số của xx ta được một hệ phương trình tuyến tính có nghiệm A=15A=\frac{1}{\sqrt5}, B=−15B=-\frac{1}{\sqrt5}, do đó x1−x−x2=15(11−φx−11−ψx)\frac{x}{1-x-x^2}=\frac{1}{\sqrt{5}}\left(\frac{1}{1-\varphi x}-\frac{1}{1-\psi x}\right).

Khai triển mỗi số hạng thành chuỗi cấp số nhân: 11−φx=∑n≥0φnxn\frac{1}{1-\varphi x}=\sum_{n\ge0}\varphi^nx^n và 11−ψx=∑n≥0ψnxn\frac{1}{1-\psi x}=\sum_{n\ge0}\psi^nx^n.

Lấy hệ số của xnx^n ở hai vế ta được Fn=15(φn−ψn)F_n=\frac{1}{\sqrt{5}}\left(\varphi^n-\psi^n\right), gọi là công thức Binet.

Đại họcỨng dụng thực tiễn và ví dụ minh họa

Hàm sinh là một công cụ dùng được trong thực tế, không chỉ là một điều thú vị lý thuyết: các nhà khoa học máy tính dùng chúng để tìm thời gian chạy chính xác và tiệm cận của các thuật toán đệ quy, các nhà vật lý dùng hàm phân hoạch có liên hệ mật thiết trong cơ học thống kê, còn các nhà xác suất mã hóa toàn bộ phân phối xác suất thành hàm sinh để tính mô-men bằng cách lấy đạo hàm thay vì lấy tổng.

Ví dụ: Đổi tiền với hai loại xu

Có bao nhiêu cách để tạo ra số tiền 44 đơn vị bằng cách dùng không giới hạn xu 11 đơn vị và xu 22 đơn vị, nếu thứ tự các đồng xu không quan trọng?

Lời giải

Mỗi cách tạo ra số tiền là một lựa chọn số xu 11 đơn vị và số xu 22 đơn vị dùng, nên hàm sinh là tích của hàm sinh cho xu 11 đơn vị, 11−x\frac{1}{1-x}, và hàm sinh cho xu 22 đơn vị, 11−x2\frac{1}{1-x^2}: hàm sinh kết hợp là 1(1−x)(1−x2)\frac{1}{(1-x)(1-x^2)}.

Khai triển hai thừa số thành chuỗi cấp số nhân rồi nhân lại: (∑i≥0xi)(∑j≥0x2j)\left(\sum_{i\ge0}x^i\right)\left(\sum_{j\ge0}x^{2j}\right). Hệ số của x4x^4 đếm số cặp (i,j)(i,j) với i+2j=4i+2j=4 và i,j≥0i,j\ge0.

Các cặp hợp lệ là (4,0)(4,0), (2,1)(2,1), (0,2)(0,2), vậy có 33 cách: bốn xu 11 đơn vị; hai xu 11 đơn vị và một xu 22 đơn vị; hai xu 22 đơn vị.

Ví dụ: Công thức Binet từ hàm sinh

Dùng công thức đóng F(x)=x1−x−x2F(x)=\frac{x}{1-x-x^2} và công thức Binet Fn=15(φn−ψn)F_n=\frac{1}{\sqrt{5}}\left(\varphi^n-\psi^n\right) để tính F5F_5 trực tiếp, không cần liệt kê lần lượt F0,…,F4F_0,\dots,F_4.

Lời giải

Theo định lý ở trên, φ=1+52\varphi=\frac{1+\sqrt{5}}{2} và ψ=1−52\psi=\frac{1-\sqrt{5}}{2} là các nghiệm dùng trong công thức Binet Fn=15(φn−ψn)F_n=\frac{1}{\sqrt{5}}\left(\varphi^n-\psi^n\right).

Về mặt số học, φ≈1.618\varphi\approx1.618 và ψ≈−0.618\psi\approx-0.618, nên φ5≈11.09\varphi^5\approx11.09 và ψ5≈−0.09\psi^5\approx-0.09.

Khi đó F5=15(φ5−ψ5)≈15(11.09−(−0.09))=11.185≈5F_5=\frac{1}{\sqrt5}(\varphi^5-\psi^5)\approx\frac{1}{\sqrt5}(11.09-(-0.09))=\frac{11.18}{\sqrt5}\approx5.

Quả thực F5=5F_5=5, khớp với giá trị thu được khi lặp hệ thức truy hồi 0,1,1,2,3,50,1,1,2,3,5 — nhưng công thức Binet cho phép ta nhảy thẳng tới bất kỳ FnF_n nào mà không cần tính các số hạng trước đó.

Hàm sinh thường của dãy hằng an=1a_n=1 với mọi n≥0n\ge0 là gì?

Hệ số của x3x^3 trong 1(1−x)2\frac{1}{(1-x)^2} bằng bao nhiêu?

Bài toán nào sau đây được giải một cách tự nhiên nhất bằng hàm sinh?

Hàm sinh của dãy Fibonacci F(x)=∑FnxnF(x)=\sum F_nx^n thỏa mãn công thức đóng nào?

Tài liệu tham khảo

  1. Herbert S. Wilf (1994). generatingfunctionology
  2. Philippe Flajolet, Robert Sedgewick (2009). Analytic Combinatorics