Các từ Grand Motzkin có độ dàin được ký hiệuGM(n).
Định lý 3.9. Cho α ∈ GM(n) là một từ Grand Motzkin và α = σtxp và σ ∈ {a, b,0}∗;
x∈ {a, b}; t∈ {a, b,0} với t6=x thì với mọi `,0≤`≤(p+ 1):
• β =σtx`0xp−` là một từ Grand Motzkin có độ dài là n+ 1, đường chạy cuối cùng của
• β = σtx`yxp−`+1 là một từ Grand Motzkin có độ dài là n+ 2, với y ∈ {a, b}, y 6= x
đường chạy cuối cùng của β làp−`+ 1. Chú ý 3.8.
(1) Nếu α∈GM(n) có độ dài đường chạy cuối cùng làp, theo cách xây dựng trên thìα
có p+ 1từ kế tiếp có độ dài(n+ 1)và α cóp+ 2từ kế tiếp có độ dài (n+ 2).
(2) Với từ rỗng δ ∈ GM(0) có 3 từ kế tiếp. Vì vậy, theo cách xây dựng trên ta có quy luật kế tiếp: (1) (2k+ 1) 1 (3)(5). . .(2k+ 1) 2 (5)(5)(7). . .(2k+ 3)
Ví dụ 3.9. Cho α =abab∈GM(4), theo quy luật kế tiếp cho các từ Grand Motzkin trên ta cóp= 1 do đó α cóp+ 1 = 2 từ kế tiếpβ ∈M(5)và p+ 2 = 3từ kế tiếpβ ∈M(6) bao gồm các từ sau: β=aba0b với `= 0. β=abab0 với `= 1. β=abaabb với `= 0. β=ababab với `= 1. β=ababba với `= 2. 3.4. Các từ Schr¨oder Định lý 3.10. Cho α∈S(n) là một từ Schr¨oder và α=σtbp, σ∈ {a, b,0}∗, t=a, t= 0thì
β =σtb`abp−`+1 hoặc β =σtb`00bp−` là từ Schr¨oder có độ dài (n+ 2) với mọi ` thỏa mãn 0≤`≤p.
Chú ý 3.9.
(1) Nếuα∈S(n)là một từ Schr¨oder có độ dài đường chạy cuối cùng làpthìαcó2(p+ 1)
từ kế tiếp có độ dàin+ 2.
(2) Từ rỗng δ ∈ S(0) có hai từ kế tiếp. Vậy theo cách xây dựng trên ta có quy luật kế tiếp cho các từ Schr¨oder:
(2)
Hình 3.9 : Năm từ kế tiếp của từ Grand Motzkin α = abab ∈ GM(4): aba0b , abab0,abaabb, ababab,ababba
Ví dụ 3.10. Nếu từ α=aab00b∈S(6) thì ta thu được các từ β∈S(8)là các từ kế tiếp của
α theo quy luật trên: t= 0, p= 1
β=aab00abb với`= 0.
β=aab00bab với`= 1.
β=aab0000bvới `= 0.
β=aab00b00 với `= 1.
3.5. Các từ Grand Schr¨oder
Định lý 3.11. Cho α ∈ GS(n) là một từ Grand Schr¨oder có độ dài là n và α = σtxp với mọiσ ∈ {a, b,0}∗, x∈ {a, b}, t∈ {a, b,0}, t6=x thì mọi 0≤`≤(p+ 1) ta có:
• β=σtx`00xp−` là một từ Grand Schr¨oder có độ dài(n+ 2), độ dài đường chạy cuối cùng củaβ là p−`.
• β =σtx`yxp−`+1 là một từ Grand Schr¨oder có độ dài (n+ 2), y ∈ {a, b}, y 6=x, độ dài đường chạy cuối cùng củaβ là p−`+ 1.
Chú ý 3.10.
(1) Theo cách xây dựng trên, nếuα∈GS(n)có độ dài của đường chạy cuối cùng làpthì
Hình 3.10 : Bốn từ kế tiếp của từ Schr¨oder α = aab00b ∈ S(6) : aab00abb, aab00bab, aab0000b, aab00b00∈S(8). Các kí tự được chèn vào đánh dấu chấm chấm.
(2) Từ rỗng δ∈GS(0)có 3 từ kế tiếp. Vì vậy theo cách xây dựng trên ta có quy luật kế tiếp sau: (3) (2k+ 1) (3)(5)(5)(5)(7)(7). . .(2k+ 1)(2k+ 1)(2k+ 3)
Ví dụ 3.11. Nếu từα =ab00ab∈GS(6)thì ta thu được các từ β∈GS(8) là các từ kế tiếp củaα theo quy luật trên:t= 0, p= 1.
β=ab00a00bvới `= 0. β=ab00ab00 với `= 1. β=ab00aabb với`= 0. β=ab00abab với`= 1. β=ab00abba với`= 2. 3.6. Các từ nhị phân mật độ cố định
Ngoài các lớp từ trên, các từ nhị phân mật độ cố định cũng được sinh ra theo cùng một quy luật. Mật độ của một từ α ∈ {a, b}∗ được ký hiệu là |a, b|b. Ta ký hiệu C(k, n) là tập hợp các từ độ dàintrên tập hợp {a, b}với trọng số k. Các từ thuộc C(k, n) là một đại diện phổ biến của các tổ hợp. Vậy cách xây dựng các từ kế tiếp cho C(n, k) như sau:
Định lý 3.12. Cho α ∈ C(k, n) với α =σbp, σ∈ {a, b}∗, p≥0 thì β =σb`abp−` là một từ có độ dài n+ 1 ký hiệu C(k+ 1, n+ 1) với mọi0≤`≤p, độ dài đường chạy cuối cùng của
β làp−`. Chú ý 3.11.
(1) Nếu α∈C(k, n) có độ dài đường chạy cuối cùng làp thìα có (p+ 1) từ kế tiếp theo cách xây dựng trên.
(2) Từ bk∈C(k, k) có (k+ 1)từ kế tiếp. Vậy quy luật kế tiếp cho lớp từ này:
(k+ 1)
(p) (1)(2)...(p)
Ví dụ 3.12. Nếu từ α =bbb ∈ C(3,3) thì ta thu được các từ β ∈C(4,4) là các từ kế tiếp củaα theo quy luật trên:
β=abbb với `= 0.
β=babb với `= 1.
β=bbab với `= 2.
Chương 4
Giả mã và phân tích độ phức tạp các thuật toán sinh
4.1. Giải thuật chung cho một số lớp từ tổ hợp
Giải thuật chung cho một số từ tổ hợp dựa trên phương pháp đường chạy cuối cùng. Chương trình chính gọi genword(0). Biến nb và các hàm γ, χ dựa vào từng loại từ, hàm
γ(j) trả về một ký tự chèn vào vị trí đang xét, còn hàm χ(j) trả về độ dài của từ nối dài thêm. Từ được khởi tạo bằng một danh sáchn ký tự 0b0 (để tránh mỗi lần chèn ký tự 0b0), khi đónlà độ dài của từ được sinh ra. Thông thường, ta chỉ chèn một ký tự vào vị trí đang xem xét trên đường chạy cuối cùng.
Giải thuật sinh từ như sau:
Giải thuật 4.1.
procedure Genword(size) local i, j, k, c if size=n then output word else for i∈lastrun do for j= 1 to nb do c=γ(j) k=χ(j) word[i] =c Genword(size+k) word[i] := ’b’ end for
end for end if
end procedure
Với giải thuật sinh trên, khi kích thước của từ bằng nthì một từ mới có độ dài n được sinh ra, ngược lại nếu kích thước của từ chưa bằngnthì tiếp tục tìm bit tiếp theo của từ.Từ giải thuật chung này, ta đưa ra các giải thuật riêng cho từng lớp từ.
4.2. Giải thuật sinh cho các lớp từ
4.2.1. Giải thuật sinh cho lớp từ Dyck
Vấn đề sinh các từ Dyck có thể được mô tả giả mã như sau:
Giải thuật 4.2.
procedure Gen_Dyck(size) local i if size=n then Print(D) else D[size+ 2] := ’b’ i:=size+ 1 repeat D[i] := ’a’
Gen_Dyck(size+ 2)
D[i] := ’b’
i:=i−1 untilD[i]6= ’b’ end if
end procedure
Giải thuậtGen_Dyck(size) cho phép sinh vị trísizecủa từ Dyck, nếusize=nthì hiển thị từ Dyck có độ dàin qua thủ tụcPrint(D) ngược lại thì tiếp tục sinh các vị trí tiếp theo của từ Dyck. Phần tử D[i] chứa bit thứ i của từ Dyck. Sinh từ Dyck có độ dài n, trong chương trình chính ta gọiGen_Dyck(0).
4.2.2. Giải thuật sinh cho lớp từ Grand Dyck
Tương tự giải thuật sinh các từ Dyck, ta có giải thuật sinh cho lớp từ Grand Dyck:
Giải thuật 4.3.
procedure Gen_GDyck(size) local i, s, t if size=n then Print(GD) else GD[size+ 1] := ’a’ GD[size+ 2] := ’b’
Gen_GDyck(size+ 2)
GD[size+ 1] := ’b’
GD[size+ 2] := ’a’
Gen_GDyck(size+ 2) ifGD[size] = ’b’ then s:= ’b’ t:= ’a’ else s:= ’a’ t:= ’b’ end if i:=size GD[size+ 1] :=GD[size+ 2] :=s whileGD[i] :=s do GD[i] :=t
Gen_GDyck(size+ 2)
GD[i] :=s i:=i−1 end while end if
end procedure
4.2.3. Giải thuật sinh cho lớp từ Dyck k - phân m - màu
Với lớp từ Dyck k- phân m - màu được mã hóa như sau: a1 ∼1,b1∼2,a2∼3,b2 ∼4, ... , ai ∼i∗2−1,bi∼i∗2, vớii= 1,2, ..., m,mmàu tăng hay giảm được đặc trưng bởi các số1,2, ...,2∗m, vànluôn là bội của k(các từ Dyck k- phân m - màu có độ dài làn).
Giải thuật cho lớp từ này như sau:
Giải thuật 4.4.
procedure GenM KDyck(size) local i, j, c if size=n then Print(M KD) else c:=M KD[size] if c6= 0 then for j= 2 tok do M KD[size+j] :=c end for i:=m+ 1 repeat M KD[i] :=c−1
GenM KDyck(size+k)
M KD[i] :=c i:=i−1 untilM KD[i]6=c end if for i:= 1 tom do if i∗26=c then M KD[size+ 1] :=i∗2−1 for j := 2to k do M KD(size+j) end for
GenM KDyck(size+k) end if
end for end if
end procedure
4.2.4. Giải thuật sinh cho lớp từ Motzkin
Ở chương trước, xây dựng các từ Motzkin kế tiếp có hai cách xây dựng dựa trên quy luật kế vị. Tương ứng hai cách xây dựng đó, ta có hai giải thuật sinh cho lớp từ Motzkin.
a) Giải thuật sinh thứ nhất cho lớp từ Motzkin: Với giải thuật này, ban đầu ta khởi tạo các phần tửX[1] = 0, X[2] = 1,A[1] = 2,A[0] = 1,M1[1] = 0và trong chương trình chính ta gọi thủ tụcGenM otzkin1(2,1).
Giải thuật 4.5.
procedure GenM otzkin1(k, size) local i, j, c if size=n then Print(M1) else j:=X[size+ 1] M1[size+ 1] := ’b’ for i:= 1 to (k−1)do M1[j] := ’a’ if A[j] =p+ 1 then A[X[j]] :=A[j] + 1 X[A[j] + 1] :=X[j] else A[X[j]] :=A[j] X[A[j]] :=X[j] end if
GenM otzkin1(i, size+ 1)
M1[j] := 0
if A[j] =size+ 1then
A[X[j]] :=j X[A[j] + 1] :=j
else A[X[j]] :=j X[A[j]] :=j end if j:=X[j] end for M1[size+ 1] := 0 X[size+ 2] :=size+ 1 A[size+ 1] :=size+ 2 if (k= 1)then
GenM otzkin1(2, size+ 1) else
GenM otzkin1(k+ 1, size+ 1) end if
end if end procedure
b) Giải thuật sinh thứ hai cho lớp từ Motzkin:
Giải thuật 4.6.
procedure GenM otzkin2(size) local i if size≥n then if size=nthen Print(M2) end if else
GenM otzkin2[size+ 2] := ’b’
i:=size+ 1 repeat
M2[i] := ’a’
GenM otzkin2(size+ 2)
M2[i] := ’b’
until(M2[i]6=0b0)
i:=size+ 1 repeat
M2[i] := 0
GenM otzkin2(size+ 1)
M2[i] := ’b’
i:=i−1 until (S2[i]<> ’b’) end if
end procedure
Sinh các từ Motzkin có độ dài ntheo phương pháp thứ hai, trong chương trình chính ta gọiGenM otzkin2(0).
4.2.5. Giải thuật sinh cho lớp từ Schr¨oder
Giải thuật sinh cho lớp từ Schr¨oder ta sử dụng mảngSđể lưu các bit của các từ Schr¨oder; trong chương trình chính ta gọi thủ tụcGenSchroder(0).
Giải thuật 4.7.
procedure GenSchroder(size) local i if size=n then Print(M1) else i:=size+ 1 repeat S[i] := 0 S[i+ 1] := 0 GenSchroder(size+ 2) S[i] := ’b’ S[i+ 1] := ’b’ i:=i−1 until (S[i]6= ’b’) i:=size+ 1
S[size+ 2] := ’b’ repeat S[i] := ’a’ GenSchroder(size+ 2) S[i] := ’b’ i:=i−1 until (S[i] = ’b’) end if end procedure
4.3. Đánh giá độ phức tạp của các giải thuật
Các quy luật tăng trưởng theo đường chạy cuối cùng cho họ các từ Dyck, các từ Schr¨oder và các quy luật tăng trưởng đường chạy cuối cùng thứ 2 cho các từ Motzkin có thể được thực hiện trực tiếp bởi các thuật toán sinh CAT. Thực chất, các thuật toán sinh ở đây là các thuật toán đệ qui thực hiện trực tiếp từ các quy luật tăng trưởng tương ứng cho mỗi lớp các từ.
Như vậy, vòng lặp chính trong mỗi lời gọi đệ qui là cho việc xử lý đường chạy cuối cùng của từ hiện tại. Theo quy luật tăng trưởng trên, nếu chiều dài của đường chạy cuối cùng của một từ đưa ra làpthì nó có ít nhất p+ 1từ kế tiếp, điều đó có nghĩa là mỗi lời gọi có bậc ít nhất là 2. Vì vậy, nó thỏa mãn yêu cầu của một thuật toán CAT.
Tuy nhiên, quy luật tăng trưởng theo đường chạy cuối cùng của các từ nhị phân mật độ cố định đại diệnC(k, n)không đưa ra một thuật toán CAT trong trường hợp chung. Kết quả thử nghiệm dưới đây, khi trọng số k tỷ lệ với độ dài n, chúng ta có thể thấy quy luật tăng trưởng này có thể được thực hiện bởi một thuật toán CAT.
Liên quan tới các quy luật tăng trưởng đường chạy cuối cùng đầu tiên của các từ Motzkin, xem kết quả thử nghiệm trong bảng dưới đây, chúng ta thấy rằng tỷ lệ của số lượng của các lời gọi đệ qui với số lượng các đối tượng được sinh ra giảm dần về khoảng 1.50. Vì vậy, chúng ta hy vọng chứng minh được thuật toán cho các lớp từ thỏa mãn CAT.
Một số kết quả thử nghiệm cho một số lớp từ: Các kết quả thử nghiệm của quy tắc đường chạy cuối cùng cho các số nhị phân mật độ cố địnhC(k, n) được minh họa trong bảng dưới. Các chỉ số dòng đầu tiên các giá trị độ dàin; các chỉ số cột đầu tiên các giá trị của trọng số
các đối tượng được sinh ra tương ứng. . .. n 20 15 10 .. k . .. 1 10.5 8 5.5 .. 2 7 5.33 3.67 .. 3 5.25 4 2.75 .. 4 4.2 3.2 2.2 .. 5 3.5 2.67 1.83 .. 6 3 2.29 1.57 .. 7 2.62 2 1.38 .. 10 1.91 1.45 1 .. .. .. .. .. ..
Bảng 4.1 : Các kết quả thử nghiệm của thuật toán cho luật đường chạy cuối cùng cho các số nhị
phân mật độ cố địnhC(k, n) n 4 5 6 8 11 13 16 17 21 22 23 ... P calls P objects 1.75 1.76 1.73 1.67 1.61 1.59 1.58 1.57 1.56 1.55 1.55 ... Bảng 4.2: Các kết quả thử nghiệm của thuật toán cho luật đường chạy cuối cùng thứ nhất của các từ Motzkin
Các thuật toán sinh trên được thực hiện rất nhanh và đặc tính CAT. Điều này có nghĩa là tổng số các phép tính toán chia cho tổng số lượng đối tượng được sinh ra luôn biến đổi trong một hằng số, tức là, chỉ có một lượng không đổi các phép tính toán được thực hiện trên từng đối tượng có thể phán đoán được. Qua các kết quả thử nghiệm của các thuật toán với quy luật đường đường chạy cuối cùng cho các lớp từ, ta thấy tỷ lệ tổng số các phép tính toán với tổng số lượng đối tượng giảm dần. Các từ được sinh ra một cách đầy đủ không bị bỏ sót trong thời gian cho phép.
n 4 6 8 10 12 14 16 18 20 22 . . . P
calls
P
objects 1.33 1.363 1.33 1.30 1.284 1.271 1.26 1.254 1.249 1.24 . . . Bảng 4.3 : Các kết quả thử nghiệm của thuật toán với quy luật đường chạy cuối cùng cho các từ
Schr¨oder n 4 6 8 12 16 18 20 22 . . . P calls P objects 1.333 1.40 1.40 1.379 1.366 1.361 1.358 1.356 . . .
Bảng 4.4 : Các kết quả thử nghiệm của thuật toán với quy luật đường chạy cuối cùng cho các từ Grand Dyck
KẾT LUẬN
Luận văn "Phương pháp sinh toàn bộ một số đối tượng tổ hợp" đã đạt được những kết quả sau:
- Nghiên cứu một số đối tượng tổ hợp quan trọng: Dyck, Motzkin, Schr¨oder và các hướng mở rộng của chúng.
- Nghiên cứu phương pháp sinh ECO cho các đối tượng trên và đưa ra phương pháp sinh các đối tượng tổ hợp một cách có hiệu quả dựa vào quy luật tăng trưởng cho đường chạy cuối cùng của mỗi đối tượng tổ hợp.
- Đưa ra giải thuật sinh các đối tượng tổ hợp và cài đặt, biểu diễn một số đối tượng tổ hợp trên đồ thị.
- Phân tích đánh giá độ phức tạp cho các giải thuật sinh các đối tượng tổ hợp.
Qua các kết quả thử nghiệm của các thuật toán với quy luật đường đường chạy cuối cùng cho các lớp từ, ta thấy tỷ lệ tổng số các phép tính toán với tổng số lượng đối tượng giảm dần. Các từ được sinh ra một cách đầy đủ không bị bỏ sót trong thời gian cho phép. Vấn đề sinh toàn bộ các đối tượng tổ hợp cũng như việc nghiên cứu các đối tượng này được rất nhiều tác giả trong và ngoài nước quan tâm. Vì vậy, tôi cho rằng: Đây là bước khởi điểm để tôi tiếp tục nghiên cứu và đề xuất được các phương pháp sinh cho các đối tượng này một cách có hiệu quả và nghiên cứu ứng dụng của chúng trong các lĩnh vực.
Tài liệu tham khảo
[1] A. Bernini, I. Fanti, and L. Ferrari (2007) "An exhaustive generation algorithm for Catalan objects and others", PU.M.A.
[2] Phan Thuan DO, Vincent VAJNOVSZKI, (2007), "CAT generation of Dyck words and relatives", CGCS2007, Marseille - Luminy, France.
[3] E. Barcucci, A. Del Lungo, E. Pergola, and R. Pinzani (1999) "ECO: a methodology for the enumeration of combinatorial objects", Journal of Difference Equations and Appli- cations, (5:435–490).
[4] E. Barcucci, E. Pergola, R. Pinzani, and S. Rinaldi (2000), "ECO-systems for Dyck and Schr¨oder paths", PU.M.A., 11:401 – 407.
[5] Enrica Duchi, Jean-Marc Fedou, Simone Rinaldi () "From object grammars to ECO systems".
[6] Luca Ferrari,(2008), "Journal Article: Some combinatorics related to central binomial co- efficients: Grand-Dyck paths, coloured noncrossing partitions and signed pattern avoid- ing permutations", http://arxiv.org.
[7] L. Ferrari, E. Pergola, R. Pinzani, and S. Rinaldi (2003), "Jumping succession rules and their generating functions", Discrete Math, (271:29–50).