Trong nhiều tỡnh huống sự tồn tại của cấu hỡnh tổ hợp phụ thuộc vào một số điều kiện ràng buộc cỏc tham số ban đầu. Một trong cỏc hướng giải quyết là người ta cố gắng phỏt hiện ra cỏc điều kiện đú Bài toỏn hệ đại diện phõn biệt trỡnh bày dưới đõy là một minh họa cho hướng tỡm kiếm này.
Định nghĩa 3.1: giả sử S1, S2, ..., Sm là một họ cỏc tập con của một tập hợp S (cỏc tập Sikhụng nhất thiết phải khỏc nhau). Ta gọi một bộ cú thứ tự a1, a2, ... , amlà một hệ đại diện phõn biệt của họ này nếu ai Si và ai aj với i j. Hệ đại diện phõn biệt được viết tắt là TRAN (transversal) và thành phần ai của hệ được gọi là đại diện của tập con Si (i = 1, 2, ... ,m)
Vớ dụ 3.14: S = { 1, 2, 3, 4, 5}
Họ tập con S1 ={ 2, 5}, S2 ={ 2, 5}, S3 ={ 1, 2, 3, 4}, S4 ={ 1, 2, 5} cú TRAN là (2, 5, 3, 1)
Hiển nhiờn là nếu một họ cỏc tập con tồn tại một TRAN thỡ mọi hợp của k tập bất kỳ trong họ phải cú ớt nhất k phần tử ( vỡ luụn tỡm được k đại diện khỏc nhau của k tập đú). Núi khỏc đi, nếu tỡm được k tập nào đú của họ mà hợp của chỳng cú ớt hơn k phần tử thỡ chắc chắn họ đang xột sẽ khụng cú TRAN.
Chẳng hạn trong vớ dụ trờn nếu thay S4 ={ 2, 5} thỡ họ sẽ khụng tồn tại TRAN vỡ S1S2S4 ={ 2, 5} cú ớt hơn 3 phần tử.
Định lý Hall: Giả sử cỏc tập con S1, S2, ..., Smthỏa món điều kiện: N S S S k k i i i ... ) ( 1 2 (1)
với mọi 1 k m, 1 i1 < i2 < .... < ik m và mỗi tập con này chứa ớt nhất t phần tử. Khi đú:
- Nếu t m thỡ họ đang xột cú ớt nhất t! TRAN
- Nếu t > m thỡ họ đang xột cú ớt nhất t!/(t-m)! TRAN
Điều kiện (1) được gọi là điều kiện Hall và ta gọi một họ con của họ S1, S2, ..., Sm là tới hạn nếu đối với nú bất đẳng thức (1) trở thành đẳng thức
Chứng minh. Với m=1 ta cú t = t!/(t-1) ! TRAN, định lý đỳng. Giả sử định lý đỳng cho mọi tập con của S cú ớt hơn m tập, ta sẽ chỳng minh định lý đỳng cho họ tập con gồm m tập. Chia làm 2 trường hợp :
Khụng cú họ con giới hạn. Chọn a1 là một phần tử của S1. Loại nú ra khỏi S2, S3, ..., Sm(nếu cú mặt) và gọi họ nhận được là S2’, S3’, ..., Sm’. Dễ thấy họ này thoả món điều kiện Hall và mỗi tập thuộc họ cú ớt nhất t-1 phần tử. Theo giả thiết qui nạp họ này cú ớt nhất (t-1)! TRAN khi t-1 m-1 hay t m và cú ớt nhất (t-1)!/(t-m)! khi t-1 > m-1 hay t > m. Mặt khỏc mỗi TRAN của S2’, S3’, ..., Sm’cựng với a1 xỏc định một TRAN của S1, S2, ..., Sm (a1 đại diện cho S1). Điều này đỳng cho mỗi cỏch chọn a1 trong số ớt nhất t cỏch chọn nú từ S1. Từ đú cú được điều cần chứng minh
Cú một họ con giới hạn. Khụng mất tớnh tổng quỏt, ta giả thiết họ đú là S1, S2, ..., Sk (k < m). Từ sự tồn tại của họ con giới hạn suy ra t k , vỡ vậy theo giả thiết qui nạp, họ S1, S2, ..., Sk cú ớt nhất t! TRAN. Gọi T’ = (a1, a2, ..., ak) là một TRAN như thế. Bỏ cỏc phần tử của T’ nếu cú mặt ra khỏi cỏc tập Sk+1, Sk+2, ..., Sm và gọi cỏc tập thu được là Sk+1’, Sk+2’, ..., Sm’, khi đú họ Sk+1’, Sk+2’, ..., Sm’ sẽ thoả món điều kiện Hall. Thật vậy, nếu cú một họ con gồm k’ tập của họ đang xột mà hợp của chỳng ớt hơn k’ phần tử, thỡ họ con gồm k + k’
..., Sk sẽcú hợp ớt hơn k+k’ phần tử và điều này mõu thuẫn với giả thiết của định lý. Vậy họ Sk+1’, Sk+2’, ..., Sm’ cú ớt nhất một TRAN. Lấy ớt nhất t ! TRAN của họ S1, S2, ..., Sk ghộp với TRAN này ta được ớt nhất t ! TRAN của họ S1, S2, ..., Sm. Định lý được chứng minh.
Việc xột sự tồn tại cũng như xõy dựng TRAN cú nhiều ứng dụng trong thực tế. Dưới đõy là một số vớ dụ về một số bài toỏn mà việc giải quyết nú được đưa về việc xõy dựng TRAN.
Vớ dụ 3.15. (Bài toỏn người thi hành)
Cú m người thi hành và n cụng việc. Giả sử với mỗi người i, ta biết được tập Silà tập cỏc cụng việc mà người đú cú thể làm được. Hỏi cú thể phõn cụng mỗi người làm một việc được khụng?
Lời giải của bài toỏn được dẫn về việc xột sự tồn tại TRAN của họ { Si} và việc xõy dựng một TRAN sẽ là một sự phõn cụng như thế.
Vớ dụ 3.16. (Bài toỏn đỏm cưới vựng quờ)
Tại một làng quờ, cú m chàng trai đến tuổi lấy vợ. Với mỗi chàng trai i, ta biết được tập Si cỏc cụ gỏi mà chàng trai đú thớch. Hỏi rằng cú thể ghộp mỗi cụ cho mỗi chàng mà chàng nào cũng vừa ý khụng?
Ta nhận thấy ngay bài toỏn được dẫn về việc xột sự tồn tại TRAN của họ { Si} , trong trường hợp tồn tại Mỗi TRAN sẽ là một cỏch ghộp mong muốn.
Trong những trường hợp sự tồn tại TRAN là hiển nhiờn thỡ người ta quan tõm đến việc đếm hoặc liệt kờ chỳng. Dưới đay là vài vớ dụ đếm TRAN mà kết quả đếm được dẫn về cỏc cấu hỡnh đó biết.
Vớ dụ 3.17. Xột tập S={1, 2, ..., n}. Đếm số TRAN của họ tập con Si = S - { i} (1 i n)
Giải: Mỗi TRAN là một hoỏn vị (a1, a2, ..., an) của {1, 2, ..., n} sao cho ai i với mọi i do vậy cú thể đồng nhất mỗi TRAN với một mất thứ tự trờn S. Từ đú nhận được số TRAN cần đếm là Dn (số mất thứ tự –chương 2)
Vớ dụ 3.18: Đếm số TRAN của họ tập con của tập {1, 2, ..., n}: S1 = { 1, 2}, S2 = { 1, 2, 3}, S3 = { 2, 3, 4}, ...,Sn-1 = { n-2, n-1, n}, Sn = { n-1, n}
Giải: Để bài toỏn xỏc định với cả n = 1, ta xem trường hợp này S1 = {1}. Gọi Fn là số TRAN cần đếm (với n > 1). Chia cỏc TRAN này thành 2 loại:
1 là đại diện cho S1. Khi đú cỏc thành phần cũn lại sẽ là một hệ đại diện của họ { 2, 3}, { 2, 3, 4}, ...{ n-1, n} . Do vậy loại này cú Fn-1 TRAN
2 đại diện cho S1. Khi đú bắt buộc 1 phải là đại diện ch S2 và cỏc thành phần cũn lại sẽ là một hệ đại diện cho họ { 3, 4}, { 3, 4, 5}, ...{ n-1, n}. Vậy loại này cú Fn-2 TRAN. Từ đú nhận được hệ thức Fn = Fn-1 + Fn-2. Cỏc giỏ trị F1, F2được tớnh trực tiếp. Đõy là hệ thức truy hồi tớnh cỏc số Fibonaci.
BÀI TẬP CHƢƠNG 3
1. Một nhúm cú 9 người, chứng tỏ rằng trong nhúm cú ớt nhất 5 nam hoặc ớt nhất 5 nữ.
2. Một lớp cú 25 học sinh quờ ở Nam Định, Thỏi Bỡnh và Hải Phũng. Chứng tỏ rằng trong lớp cú ớt nhất 9 học sinh cựng quờ.
3. Chứng tỏ rằng trong bất kỳ tập hợp gồm sỏu lớp nào cũng cú ớt nhất hai lớp gặp nhau cựng một ngày, cỏc lớp học một buổi trong một ngày và nghỉ thứ bảy và chủ nhật.
4. Chứng tỏ rằng nếu trong một lớp cú 30 sinh viờn thỡ ớt nhất cú 2 sinh viờn cú tờn bắt đầu bằng cựng một chữ cỏi.
5. Một ngăn tủ cú chứa 12 chiếc tất màu nõu và 12 chiếc tất màu đen. Một người lấy cỏc chiếc tất một cỏch ngẫu nhiờn trong búng tối. Anh ta phải lấy ra bao nhiờu chiếc tất để chắc chắn rằng mỡnh cú ớt nhất hai chiếc tất cựng mầu. 6. Chứng tỏ rằng trong 5 số chọn từ 8 số nguyờn dương đầu tiờn nhất thiết cú một cặp cú tổng bằng 9.
7. Chắng tỏ rằng trong 7 số chọn từ 10 số nguyờn dương đầu tiờn nhất thiết cú ớt nhất hai cặp cú tổng bằng 11. Điều đú cũn đỳng nữa khụng nếu thay cho 7 ta chọn 6 số ?
8. Một cuộc họp cú n người. Chứng tỏ rằng luụn tỡm được hai người trong họ cú số người quen (trong những người dự họp) bằng nhau.
9. Chứng minh rằng trong n + 1 số nguyờn dương khỏc nhau cú ớt nhất hai số cú cựng số dư khi chia cho n.
10. Trong một cuộc lấy ý kiến trờn 7 vấn đề, người được hỏi trả lời bằng cỏch để nguyờn hoặc phủ định cỏc cõu hỏi tương ứng với 7 vấn đề nờu trờn. Chứng minh rằng với 1153 người được hỏi luụn tỡm được 10 người trả lời giống hệt nhau.
11. Cú 17 nhà bỏc học trao đổi với nhau trờn 3 vấn đề. Chứng minh rằng luụn tỡm được 3 nhà bỏc học cựng trao đổi với nhau về một vấn đề.
12. Một bài thi gồm 8 cõu hỏi. Với mỗi cõu hỏi, người dự thi phải trả lời đỳng hoặc sai. Hỏi phải cú ớt nhất bao ngiờu người dự thi để chắc chắn cú ớt nhất hai người trả lời giống hệt nhau.
13. Chứng minh rằng mọi dóy gồm n2 + 1 số thực phõn biệt đều cú một dóy con dài n + 1 hoặc là thực sự tăng hoặc là thực sự giảm.
14. Giả sử trong một nhúm 6 người mà mỗi cặp hai hoặc là bạn hoặc là thự. Chứng tỏ rằng trong nhúm cú 3 người là bạn lẫn nhau hoặc 3 người là kẻ thự lẫn nhau.
15. Cú 16 cầu thủ búng rổ, số ỏo của mỗi ngưũi được đỏnh từ 1 đến 16 đứng thành một vũng trũn theo thứ tự bất kỳ. Chứng minh rằng tồn tại ớt nhất 3 cầu thủ đứng liền nhau cú tổng cỏc số ỏo ớt nhất là 25.
16. Cho (xi, yi, zi) , i = 1, 2, ..., 9 là 9 điểm khỏc nhau cú tọa độ nguyờn trong khụng gian xyz. Chứng tỏ rằng luụn tỡm được hai điểm trong 9 điểm đú cú toạ độ trung điểm của đoạn thẳng nối chỳng là nguyờn.
17. Khi kiểm kờ danh mục 115 chi tiết, mỗi chi tiết cú thể được đỏnh giỏ là “tốt” hoặc “khụng tốt”. Biết rằng cú 60 chi tiết được đỏnh giỏ là “tốt”. Chứng minh rằng cú ớt nhất hai chi tiết được đỏnh giỏ là “tốt” cú số thứ tự cỏch nhau 4 đơn vị.
18. Một nhúm thợ gồm: Hựng cú thể đảm nhận cỏc việc { gũ, hàn, rốn}, Dũng cú thể đảm nhận cỏc việc { mạ, hàn, rốn, rũa}, Minh cú thể đảm nhận cỏc việc { mạ, rốn, gũ}, Phong cú thể đảm nhận cỏc việc { rốn, rũa, đỏnh búng, sơn},
Bỡnh cú thể đảm nhận cỏc việc { mạ, sơn, rũa, đỏnh búng}, Long cú thể đảm nhận cỏc việc { sơn, đỏnh búng, gũ}. Một cụng việc cần thực hiện cỏc khõu: { mạ, rốn, rũa, gũ, đỏnh búng, sơn}. Cú ớt nhất bao nhiờu cỏch phõn cụng cụng việc mà mỗi thợ chỉ thực hiện một khõu. Hóy chỉ ra 2 cỏch phõn cụng (nếu cú).
Chương 4
BÀI TOÁN LIỆT Kấ
4.1. Giới thiệu bài toỏn
Nếu trong bài toỏn đếm, ta chỉ đũi hỏi đếm số cấu hỡnh tổ hợp là bao nhiờu thỡ trong nhiều tỡnh huống, ta cũn phải cần chỉ rừ những cấu hỡnh tổ hợp đú là những cấu hỡnh nào. Bài toỏn đưa ra danh sỏch tất cả cấu hỡnh tổ hợp cú thể cú, được gọi là bài toỏn liệt kờ tổ hợp. Vỡ thế khỏc với bài toỏn đếm tỡm kiếm một cụng thức cho lời giải, bài toỏn liệt kờ lại cần xỏc định một thuật toỏn để theo đú cú thể lần lượt xõy dựng được tất cả cỏc cấu hỡnh đang quan tõm. Tuy cú nhiều phương phỏp khỏc nhau để liệt kờ, xong chỳng phải đảm bảo 2 nguyờn tắc :
- Khụng được lặp lại một cấu hỡnh - Khụng được bỏ sút cấu một cấu hỡnh
Cú thể núi với sự trợ giỳp của mỏy tớnh điện tử nhiều bài toỏn liệt kờ đó được giải quyết. Khú khăn chớnh của phương phỏp này là sự “bựng nổ tổ hợp”.
4.2. Phƣơng phỏp sinh
4.2.1. Giới thiệu thuật toỏn sinh
Để giải quyết cỏc bài toỏn liệt kờ cỏc cấu hỡnh tổ hợp người ta thường ỏp dụng phương phỏp sinh, từ đú xõy dựng cỏc thuật toỏn sinh tương ứng cho cỏc bài toỏn cụ thể.
Tư tưởng chủ yếu của phương phỏp sinh là:
1) Xỏc định một thứ tự trờn tập cỏc cấu hỡnh tổ hợp cần liệt kờ. Từ đú cú thể xỏc định được cấu hỡnh đầu tiờn và cấu hỡnh cuối cựng trong thứ tự đó xỏc định.
2) Xõy dựng được thuật toỏn từ cấu hỡnh chưa phải là cuối cựng đang cú, đưa ra cấu hỡnh kế tiếp nú.
Ta gọi thuật toỏn đó núi trong điều kiện 2) là thuật toỏn sinh kế tiếp. Rừ ràng là thứ tự trong điều kiện 1) cần được lựa chọn sao cho cú thể xõy dựng được thuật toỏn sinh kế tiếp. Giả thiết rằng, hai điều kiện nờu trờn đó được thực hiện, khi đú thuật toỏn sinh để giải bài toỏn liệt kờ đặt ra được mụ tả như sau:
Procedure Generate; Begin
< Xõy dựng cấu hỡnh ban đầu>; kt := true;
While kt do Begin
<Đưa ra cấu hỡnh đang cú>; Sinh_kế_tiếp;
End; End;
Trong đú Sinh_kế_tiếp là thủ tục sinh cấu hỡnh kế tiếp theo thuật toỏn sinh kế tiếp đó xõy dựng. Nếu cấu hỡnh đang cú đó là cuối cựng thủ tục cần gỏn cho biến ktgiỏ trị false, ngược lại thủ tục này sẽ xõy dựng cấu hỡnh kế tiếp của cấu hỡnh đang cú trong thứ tự đó xỏc định.
4.2.2. Cỏc vớ dụ
Vớ dụ 4.1. Liệt kờ tất cả cỏc dóy nhị phõn độ dài n.
Giải: Viết dóy nhị phõn dưới dạng b1b2 …bn trong đú bi { 0, 1}. Xem mỗi dóy nhị phõn b = b1b2 …bn là biểu diễn nhị phõn của một số nguyờn p(b). Khi đú thứ tự hiển nhiờn nhất cú thể xỏc định trờn tập cỏc dóy nhị phõn là thứ tự tự nhiờn (cũn gọi là thứ tự từ điển) được xỏc định như sau:
Ta núi dóy nhị phõn b = b1b2 …bn đi trước dóy nhị phõn b’ = b1’b2’…bn’ trong thứ tự tự nhiờn và kớ hiệu là b < b’ nếu p(b) < p(b’).
Thớ dụ khi n =3 cỏc dóy nhị phõn độ dài 3 được liệt kờ theo thứ tự tự nhiờn như sau:
b P(b) 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7
Như thế dóy đầu tiờn là 00...0, cũn dóy cuối cựng là 11...1. Giả sử b1b2… bnlà dóy đang cú. Nhận xột rằng, nếu dóy này gồm toàn chữ số 1 thỡ quỏ trỡnh liệt kờ kết thỳc, trỏi lại dóy kế tiếp sẽ nhận được bằng cỏch cộng thờm 1 (theo mođun 2 cú nhớ) vào dóy hiện tại. Từ đú ta nhận được qui tắc sinh dóy kế tiếp như sau:
Tỡm i đầu tiờn (theo thứ tự i = n, n-1,..,1) thoả món bi = 0.
Gỏn lại bi = 1 và bj = 0 với tất cả j > i. Dóy mới thu được sẽ là dóy cần tỡm.
Chương trỡnh minh hoạ
Var n,i:integer; b:array[1..30] of 0..1; kt:boolean; procedure init; var i:integer; begin
readln(n);
for i:=1 to n do b[i]:=0; kt:=true;
end;
procedure Sinh_kt; begin
i:=n;
while (i>=1) and (b[i]<>0) do begin
b[i]:=0; i:=i-1; end;
if i< 1 then kt:=false else b[i]:=1; end; Begin init; while kt do begin
for i:=1 to n do write(b[i]:2); writeln;
Sinh_kt; end;
readln; end.
Vớ dụ 4.2. Liệt kờ cỏc hoỏn vị của tập n phần tử
Bài toỏn đặt ra là: Cho X = { 1, 2, ..., n}. Hóy liệt kờ cỏc hoỏn vị từ n phần tử của X.
Mỗi hoỏn vị từ n phần tử của X cú thể biểu diễn bởi bộ cú thứ tự gồm n thành phần a = (a1, a2, …, an) thoả món aiX,i1,n,ap aq,pq. Trờn tập cỏc hoỏn vị từ n phần tử của X cú thể xỏc định nhiều thứ tự khỏc nhau. Thứ tự đơn giản nhất là thứ tự từ điển được định nghĩa như sau:
Ta núi hoỏn vị a = (a1, a2, …, an) đi trước hoỏn vị a’ = (a’1, a’2, …, a’n) trong thứ tự từ điển và ký hiệu a < a’ nếu tỡm được chỉ số k ( 1 k n) sao cho: a1 = a’1, a2 = a’2,…, ak-1 = a’k-1, ak < a’k.
Chẳng hạn, cho X = { 1, 2, 3} thỡ cỏc hoỏn vị của X được liệt kờ theo thứ tự từ điển như sau:
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
Như vậy, theo thứ tự này hoỏn vị đầu tiờn là (1, 2, …, n) và hoỏn vị cuối cựng là (n, n-1, …, 2, 1). Giả sử a = (a1, a2, …, an) là cấu hỡnh đang cú chưa phải là cuối cựng thuật toỏn sau cho phộp xỏc định cấu hỡnh tiếp theo nú trong