Giáo trình Toán rời rạc Chương 4

11 785 1
Giáo trình Toán rời rạc Chương 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Giáo trình Toán rời rạc

Chương IVĐẾM CÁC PHẦN TƯÛI) Các phương pháp đếm cơ bản1. Mở đầuSố serial của phiên bản Windows 98 của hãng MicroSoft gồm một dãy 25 chữ số thập phân và chữ cái trong bộ mẫu tự tiếng Anh (không phân biệt hoa/ thường). Vậy có bao nhiêu số serial khã dó dùng cho các bản copy của phiên bản đó? Có tất cả bao nhiêu lời gọi đệ qui xảy ra khi thực hiện đoạn chương trình giải bài toán tháp Hà Nội với kích thước dữ liệu đầu vào N? Tìm kiếm câu trả lời cho các câu hỏi tương tự như vậy đều dẫn đến việc thực hiện các phép đếm. Khi số lượng thực hiện thao tác đếm với số lượng cần phải đếm là rất lớn hoặc các cấu hình cần phải đếm thay đổi phức tạp thì việc phát triễn các kỹ thuật đếm là rất cần thiết. 2. Các nguyên lý đếm cơ bản.Các kỹ thuật đếm thường dựa trên nguyên tắc chia bài toán đếm thành các bài toán nhỏ hơn có cấu hình quen thuộc mà việc đếm các phần tử trong cấu hình đó chỉ cần dựa trên một số các nguyên lí đếm cơ bản. Dó nhiên bài toán đếm chỉ có nghóa khi nó dẫn đến đáp số hữu hạn (mặc dù đáp số này có thể là một con số khổng lồ!). Vì vậy mọi tập hợp X được xét sau đây đều mặc đònh là tập hữu hạn và N(X) để chỉ số phần tử của X. o Nguyên lí cộng:Nếu A và B là hai tập hợp rời nhau thì N(A∪B)=N(A)+N(B). Ví dụ: Có bao nhiêu cách chọn một vận động viên từ danh sách 12 người của Huyện Chợ Lách, danh sách 14 người của Huyện Châu Thành và danh sách 20 người của Huyện Ba Tri biết rằng không có vận động viên nào thi đấu cho hơn một huyện?Lời giải:Rõ ràng các danh sách là các tập rời nhau và việc lựa chọn vận động viên trên mỗi danh sách là độc lập với nhau. Vì vậy số cách lựa chọn vận động viên là: 12+14+20=46 cách.Ví dụ: Xét đoạn mã chương trình viết bằng ngôn ngữ Pascal sau:41 Var K,n1,n2,n3:byte;Begin{ .}K := 7; n1:=5; n2:=10; n3:=15;For i:=1 to n1 do K:=K+1; For j:=1 to n2 do K:=K+1; For t:=1 to n3 do K:=K+1; writeln(‘K = ’,K);{ .}Đoạn chương trình này khi thực thi xong thì kết xuất của dòng lệnh cuối cùng là gì?Lời giải:ƠÛ mỗi lần lặp trong mỗi vòng lặp K đều tăng lên một đơn vò. Sau mỗi vòng lặp K tăng lên đúng bằng số lần lặp. K được khởi tạo trước vòng lặp đầu tiên bằng 7. Vì các vòng lặp là rời nhau nên sau vòng lặp thứ nhất K=7+n1, sau vòng lặp thứ hai K=7+n1+n2, sau vòng lặp thứ ba K=7+n1+n2+n3. Kết xuất của dòng lệnh cuối cùng là:K = 37o Nguyên lí nhân:Nếu mỗi thành phần ai của bộ có thứ tự (a1,a2, .,ak) có ni khả năng lựa chọn (1 i k≤ ≤) thì số cấu hình tạo ra là tích số các khả năng này. Nói cách khác: Nếu (1 ),i ii i k a A∀ ≤ ≤ ∈ thì: N(A1xA2x .x Ak) = N(A1).N(A2) .N(Ak)Ví dụ:Có bao nhiêu cách chọn ba vận động viên thuộc ba huyện theo thứ tự từ danh sách 12 người của Huyện Chợ Lách, danh sách 14 người của Huyện Châu Thành và danh sách 20 người của Huyện Ba Tri biết rằng mỗi huyện được chọn đúng một vận động viên?Lời giải:Rõ ràng mỗi cách lựa chọn là một bộ ba (a1,a2,a3). Trong đó a1 là vận động viên của Chợ Lách, a2 là vận động viên của Châu Thành, a3 là vận động viên của Batri. Có 12 cách lựa chọn a1. Với mỗi cách lựa chọn a1 đó có 14 cách lựa chọn a2. Với mỗi cách lựa chọn a1 và a2 đó có 20 cách lựa chọn a3. Vì vậy số cấu hình lựa chọn có thể có là: 12x14x20 =3360.Ví dụ: Xét đoạn mã chương trình viết bằng ngôn ngữ Pascal sau:Var K,n1,n2,n3:word;Begin{ .}42 K := 7; n1:=5; n2:=10; n3:=15;For i:=1 to n1 do For j:=1 to n2 do For t:=1 to n3 do K:=K+1; writeln(‘K = ’,K);{ .}Cho biết kết xuất của dòng lệnh cuối cùng là gì?Lời giải:ƠÛ đây ta có ba vòng lặp FOR lồng nhau. Trình biên dòch Pascalsẽ biên dòch để với mỗi lần lặp của vòng lặp bên ngoài thì vòng lặp ngay bên trong nó được thực hiện đầy đủ các lần lặp. Vậy mỗi lần lặp của ba vòng lặp lồng nhau đó tương ứng với một cấu hình là bộ ba có thứ tự (i,j,t). ƠÛ mỗi lần lặp K đều tăng lên một đơn vò. Sau tất cả lần lặp K tăng lên đúng bằng số lần lặp. K được khởi tạo trước khi vào vòng lặp bằng 7. Vì i vét qua tất cả n1 giá trò khác nhau, j vét qua tất cả n2 giá trò khác nhau, t vét qua tất cả n3 giá trò khác nhau nên số cấu hình được tạo ra cho bộ (i,j,t) là n1.n2.n3. Đó cũng chính là toàn bộ số lần lặp. Vậy sau khi toàn bộ vòng lặp đã thực hiện xong thì K=7 + n1.n2.n3. Kết xuất của dòng lệnh cuối cùng là:K = 757.Ví dụ:Số serial của phiên bản Windows 98 của hãng MicroSoft gồm một dãy 25 chữ số thập phân và chữ cái trong bộ mẫu tự tiếng Anh (không phân biệt hoa/ thường). Vậy có bao nhiêu số serial khã dó dùng cho các bản copy của phiên bản đó? Lời giải:Mỗi số serial là một dãy 25 chữ cái và chữ số. Chẳng hạn:HQ6K2-QPC42-3HWDM-BF4KJ-W4XWJ.Bảng mẫu tự tiếng anh có 26 chữ cái (Từ A đến Z). Số chữ số thập phân là 10 chữ số (từ kí tự 0 đến kí tự 9). Vậy mỗi vò trí trong số serial có 36 lựa chọn khác nhau. Vậy có tất cả 3625 ≅ 8.0828127746476406064313960045654e+38 khả năng lựa chọn số serial khác nhau. Đây quả thật là một con số kinh khủng!o Nguyên lí bù trừ:Khi thực hiện nguyên lý cộng vào bài toán đếm ta phải giả thiết hai tập cần được đếm A và B là rời nhau. Nếu không có giả thiết đó thì buộc phải loại bớt các phần tử trùng nhau của hai tập bò đếùm qua quá một lần: N(A∪B)=N(A)+N(B)-N(A∩B)43 Ví dụ: Có bao nhiêu xâu nhò phân độ dài 8 bit với 3 bit 111 đứng đầu hoặc 2 bit 00 đứng cuối.Lời giải:Số xâu độ dài 8 bit với 3 bit 111 đứng đầu là: 25 = 32 (Áp dụng nguyên lí nhân đối với 5 bít cuối do chỉ còn 5 bit cuối là thay đổi).Tương tự, số xâu độ dài 8 bit với 2 bit 00 đứng cuối là: 26 = 64 (do chỉ còn 6 bit đầu là thay đổi).Số xâu vừa có 3 bit đứng đầu 111, vừa có 2 bit đứng cuối 00 là: 23= 8.Vậy số xâu thỏa điều kiện đòi hỏi là: (32+64) - 8 = 88Tổng quát hơn:Giả sử A1,A2, .,Am là các tập. Khi đó:11 2 1 2( . ) . ( 1)mm mN A A A N N N−= − + + −U U UTrong đó Nk là tổng các phần tử của tất cả các giao của k tập lấy từ m tập đã cho.Cụ thể N1 là tổng các phần tử của tất cả các giao của 1 tập lấy từ m tập đã cho. Hay: N1=N(A1)+N(A2)+ .+N(Am).N2 là tổng các phần tử của tất cả các giao của 2 tập lấy từ m tập đã cho. Có tất cả 2mC phần giao như vậy. Hay: N2 = N(A1∩A2)+N(A1∩A3)+ .+N(Ai∩Aj)+ N2 = , 1( )mi ji ji jN A A=≠∩∑ Nk = 1 21 2j, , ., 1các i khác nhau đôi một( . )kkmi i ii i iN A A A=∑I I I Nm là tổng các phần tử của tất cả các giao của m tập lấy từ m tập đã cho. Hay Nm=N(A1∩A2∩A3∩ .∩Am)Ta chấp nhận không chứng minh tính chất trên.Ví dụ:Trong tập X={1,2, . , 10000} có bao nhiêu số không chia hết cho bất cứ số nào trong ba số 3,4,7?Lời giải:Đặt Ai là tập các số thuộc X mà chia hết cho i {i=3,4,7}.44 Khi đó A3∪A4∪A7 là tập các số thuộc X mà chia hết cho ít nhất một trong ba số 3,4,7. Vậy theo công thức trên ta sẽ có số các số chia hết cho ít nhất một trong 3 số 3,4,7 là:N(A3∪A4∪A7) = N1-N2 + N3.Sử dụng toán tử div cho phép chia nguyên, ta cóù:N1= N(A3)+N(A4)+N(A7) = (10000 div 3)+(10000 div 4)+(10000 div 5) = 3333+2500+1428 = 7261N2= N(A3∩A4)+N(A3∩A7)+N(A4∩A7)= (10000 div (3x4))+(10000 div (3x7))+(10000 div (4x7)) = 833+476+357 =1666N3= N(A3∩A4∩A7)=(10000 div (3x4x7))=119.Suy ra số các số thuộc X mà không chia hết cho số nào trong 3 số 3,4,7 là:N(X)-N(A3∪A4∪A7)=10000 - (7261-1666+119) = 4286.o Biểu đồ cây.Trong một số trường hợp giải bài toán đếm bằng biểu đồ cây làm cho lời giải được trực quan và sáng sủa hơn. Ví dụ:Xem đoạn chương trình giải bài toán tháp Hà Nội1 sau đây:Procedure Ch(n:số đóa; A,B,C : Vò trí){Thủ tục Chuyển n đóa từ vò trí A sang vò trí C lấy vò trí B làm trung gian}BEGINIF (n>=1) THEN BEGINCh(n-1,A,C,B)Output(A,C) {Dời 1 đóa ở A qua C}Ch(n-1,B,A,C) ENDENDChúng ta biết rằng các kết xuất của đoạn chương trình trên chỉ có thể thực hiện khi toàn bộ các lời gọi đệ qui đã được thực thi. Với n là dữ liệu nhập câu hỏi đặt ra là có tất cả bao nhiêu lời gọi đệ qui đã được thực hiện khi chương trình thực hiện Output?Biểu đồ cây sau đây (với n=3) cho thấy các lời gọi đệ qui đã diễn ra như thế nào.1 Người viết giả thiết rằng người đọc đã biết phát biểu của bài toán này. Và ở thời điểm đọc phần này người đọc đã hiểu về lời gọi đệ qui trong một ngôn ngữ lập trình nào đó.45 Biểu đồ trên cho thấy mỗi lời gọi Ch(n,x,x,x) lại gọi đệ qui tiếp hai lời gọi Ch(n-1,x,x,x) nữa trừ khi n=0. Như vậy số lời gọi đệ qui là:K = 1+1.2+2.2+(2.2).2+(2.2.2).2+ . +(2n-1).2Hay K=1+21+22+23+24+ .+2nCó thể dùng truy chứng để chứng minh rằng K=2n+1 - 1 0,n n N∀ ≥ ∈Do đó với n=3 có tất cả 24-1 = 15 lời gọi thủ tục Ch. Mỗi lời gọi thủ tục Ch với n>0 ứng với một lần kết xuất. Điều đó chứng tỏ rằng với 3 đóa cần phải có 23-1=7 lần chuyển đóa mới đưa được hết số đóa từ vò trí A sang vò trí C.Rõ ràng nếu không dùng biểu đồ cây trong trường hợp này ta sẽ gặp khó khăn rất nhiều trong việc hình dung ra phép đếm số lần dời đóa cần thiết.o Nguyên lý Dirichlet:Nguyên lí Dirichlet còn gọi là nguyên lí chuồng thỏ và phát biểu như sau:46Số lần gọi Ch(n,.)Số lần gọi Ch(n-1,.) Số lần gọi Ch(n-3,.) Số lần gọi ch(0,.) “Nếu số thỏ nhiều hơn số chuồng thì có ít nhất một chuồng có nhiều hơn một con thỏ”Ví dụ: Nếu chấm điểm bài thi theo thang điểm 10 và điểm chấm là số nguyên không âm thì trong một phòng thi 15 người thế nào cũng có hai người có cùng một điểm số.Ví dụ: Trong một lớp 20 sinh viên thì thế nào cũng có ít nhất 2 sinh viên sinh cùng tháng.Nguyên lí chuồng thỏ phát biểu rất đơn giản - gần như hiển nhiên -Tuy nhiên lại có những áp dụng rất tinh tế trong các chứng minh, đặc biệt là các chứng minh liên quan đến sự tồn tại.Ví dụ: Chứng tỏ rằng trong n+1 số nguyên dương không lớn hơn 2n tồn tại ít nhất một số nguyên chia hết cho một số nguyên khác trong đó.Lời giải:Ta nhận xét rằng mỗi số nguyên dương đều có thể viết được dưới dạng 2 .jkjqtrong đó kj là một số nguyên không âm và qj là một số nguyên lẻ. Vậy ta viết n+1 số nguyên dương nói trên thành dãy:112 .kq 222 .kq 332 .kq . 2 .nknq 112 .nknq++ (tất cả đều bé hơn 2n)Vì lẽ chỉ có n số nguyên dương lẻ bé hơn 2n (số chuồng: n)nên trong dãy: q1 q2 qn qn+1 (số thỏ: n+1)phải tồn tại hai số qi và qj bằng nhau (áp dụng nguyên lí Dirichlet)Và do đó một trong hai số 2 .ikiq , 2 .jkjq phải chia hết cho số còn lại.II) Giải tích tổ hợpDo phần lớn nội dung này sinh viên đã được học khá kỹ lưỡng từ trường phổ thông nên giáo trình này chỉ nhắc lại các đònh nghóa và kết quả chủ yếu mà thôi. Các chứng minh và các ví dụ sẽ bò bỏ qua.1. Chỉnh hợp, hoán vò và tổ hợp:Chỉnh hợp lặp chập m của n phần tử : Đònh nghóa: Một chỉnh hợp lặp chập m của n phần tử của tập 1 2{ , , ., }nb b blà một dãy có thứ tự (a1,a2, ., am) trong đó 1 21, ., { , , ., }i ni m a b b b∀ = ∈Đònh lí: Số chỉnh hợp lặp chập m của n phần tử là mnA = nm47 Chỉnh hợp không lặp chập m của n phần tử : Đònh nghóa: Một chỉnh hợp không lặp chập m của n phần tử (m≤n) của tập 1 2{ , , ., }nb b blà một dãy có thứ tự (a1,a2, ., am) trong đó 1 21, ., { , , ., }i ni m a b b b∀ = ∈ và ai ≠aj nếu i≠j.Đònh lí: Số chỉnh hợp không lặp chập m của n phần tử là mnP = n.(n-1).(n-2) .(n-m+1).Hoán vò của n phần tử:Đònh nghóa:Một hoán vò của n phần tử là một chỉnh hợp không lặp chập n của n phần tử đó.Đònh lí:Số hoán vò của n phần tử là Pn = n!Tổ hợp m phần tử của n phần tử .Đònh nghóa:Một tổ hợp gồm m phần tử của một tập n phần tử là một tập con gồm m phần tử của tập đó.Đònh lí:Số tổ hợp m phần tử của một tập n phần tử là !!( )!mmnnmmPnCP m n m= =−Đònh lí:11với(n k 0)k k kn n nC C C−+= + ≥ ≥ (*) i n in nC C−= với mọi i ≤ n (**)2. Hệ số nhò thức:Xét biểu thức (a+b)n. Biểu thức này là tích gồm n thừa số: (a+b)(a+b)(a+b) (a+b) (1)Khai triển tích này ta được một tổng các số hạng dạng aibj trong đó a được lấy i lần trong n thừa số khác nhau còn b được lấy j lần trong các thừa số còn lại (ie: j = n-i).Vậy khai triển của biểu thức gồm một tổng các đơn thức dạng K(i).ai.b(n-i) :(a+b)n = ( )0( ). .ni n iiK i a b−=∑ trong đó K(i) là hệ số đạt được do gom lại các số hạng đồng dạng aib(n-i) làm thừa số chung. 48 Mỗi số hạng đồng dạng aib(n-i) như vậy tương ứng với một tổ hợp gồm i vò trí của a trong n vò trí có thể có của (1). Suy ra K(i) chính là số tổ hợp chập i của n phần tửHay:(a+b)n = ( )0ni i n iniC a b−=∑Ví dụ:(a+b)5=0 0 55C a b+1 1 45C a b+2 2 35C a b+3 3 25C a b+4 4 15C a b+5 5 05C a b.Sau khi tính các hệ số, ta được:(a+b)5=1.a0b5+5.a1b4+10.a2b3+10.a3b2+5.a4b1+1.a5b0Hay: (a+b)5= b5+5.ab4+10.a2b3+10.a3b2+5.a4b+a5Trong thực tế tính toán ta không lần lượt tính các hệ số nhò thức inC như vậy mà hay dựa vào công thức (*) và (**) để xây dựng lên bảng các hệ số sau đây (gọi là tam giác Pascal)1 Các hệ số ứng với n = 01 1 .Các hệ số ứng với n = 11 2 1 .Các hệ số ứng với n = 21 3 3 1 .Các hệ số ứng với n = 31 4 6 4 1 .Các hệ số ứng với n = 41 5 10 10 5 1 Các hệ số ứng với n = 5 .Bảng này cho chúng ta tham chiếu các hệ số nhò thức thuận tiện hơn nhiều. Ví vụ để viết triển khai của (a+b)6 ta chỉ cần xây dựng bảng trên thêm một hàng nữa để có ngay:(a+b)6=a6+6a5b+15a4b2+20a3b3+15a2b4+6ab5+b6. 3. Thuật toán sinh các hoán vò.Ta thấy số tổ hợp !!( )!mnnCm n m=− là một hàm theo n và tăng rất nhanh theo n (với m khác 0). Các phép đếm liên quan đến các cấu hình phát sinh có thể gặp trường hợp số cấu hình phát sinh quá nhiều (gọi là bùng nổ tổ hợp) mà ngay đến máy tính cũng không tính xuể! Mặt khác khi giải một số bài toán liên quan đến việc liệt kê các cấu hình cần có phương pháp để việc duyệt các cấu hình không bò bỏ sót bất cứ cấu hình có thể có nào. Để làm được việc đó bài toán liệt kê các cấu hình phải thỏa mãn hai điều kiện:a) Có thể xây dựng được một thứ tự trên tập các cấu hình cần liệt kê.49 b) Xây dựng được giải thuật để dưa ra được một cấu hình mới, kế tiếp cấu hình đang xét nếu cấu hình đang xét chưa phải là cấu hình cuối cùng trong dãy cần liệt kê.Điều kiện a) tùy thuộc rất nhiều vào bản chất của bài toán đang xét. Giả sử giải quyết được điều kiện a) thì giải thật nói trong điều kiện b) gọi là thuật toán sinh kế tiếp. Có thể mô tả thuật toán đó như sau:Procedure GenerateBEGINXây dựng cấu hình ban đầuStop:=FALSEWhile not stop doBeginThông báo cấu hình đang cóIF cấu hình đang có là cấu hình cuối cùng THENStop:=TRUEELSESinh cấu hình kế tiếpEndENDVí dụ: Xây dựng một chương trình liệt kê các hoán vò của một tập n phần tử.Lời giải:Việc liệt kê các hoán vò của một tập có n phần tử có thể được mô hình hóa bằng việc liệt kê các hoán vò của tập X={1, 2, 3, ., n}.Mỗi hoán vò của X là một bộ có thứ tự (a1,a2, .,an) thỏa mãn:1, , :ii n a X∀ = ∈i ja a≠ nếu i≠jTrên tập các hoán vò của X có thể xác đònh một thứ tự từ điển p (đọc là: nhỏ hơn) như sau:(a1,a2, .,an) p (a’1,a’2, .,a’n) nếu và chỉ nếu/ / / /1 1 2 2 1 1(1 ) : , , ., ,k k k kk k n a a a a a a a a− −∃ ≤ ≤ = = = <Với thứ tự đó thì cấu hình ban đầu là (1,2,3, .,n) và cấu hình kết thúc trong liệt kê là (n,n-1,n-2, .,1).Vấn đề còn lại là xây dựng một phương pháp sinh ra cấu hình kế tiếp từ một hoán vò đang biết (mà không phá vở thứ tự đã được đònh nghóa).Để trực quan ta thử xét với X={1,2,3,4,5,6}. Giả sử cấu hình đang có là(a1,a2,a3,a4,a5,a6)=(3,6,2,5,4,1)50 [...]... tại Đổi chỗ aj với ak để được một cấu hình khác: Ta được (3,6 ,4, 5,2,1) Lật ngược đoạn từ aj+1 đến an: Do quá trình xây dựng cấu hình nên dãy con bên phải aj hiện tại là dãy lớn nhất của cấu hình con này Lật ngược dãy con bên phải này để được cấu hình sinh ra là cấu hình nhỏ nhất trong các cấu hình lớn hơn cấu hình ban đầu Ta được hoán vò (3,6 ,4, 1,2,5) Giải thuật: Procedure SinhHoanvi BEGIN Hoán vò đang... giải thuật trên ta được các hoán vò theo thứ tự từ điển là: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 Không phải bài toán liệt kê cấu hình nào cũng cho phép xây dựng một thứ tự tuyến tính để từ đó xây dựng được một giải thuật sinh phần tử Có một thuật toán gọi là “quay lui” sẽ được nghiên cứu trong các chương sau giúp cho việc tìm ra một cấu hình thích hợp một cách tổng quát hơn  51 ... trái trên hoán vò đang có chỉ số j đầu tiên thỏa mãn aj . serial có 36 lựa chọn khác nhau. Vậy có tất cả 3625 ≅ 8.0828127 746 47 640 60 643 13960 045 654e+38 khả năng lựa chọn số serial khác nhau. Đây quả thật là một. cóù:N1= N(A3)+N(A4)+N(A7) = (10000 div 3)+(10000 div 4) +(10000 div 5) = 3333+2500+ 142 8 = 7261N2= N(A3∩A4)+N(A3∩A7)+N(A4∩A7)= (10000 div (3x4))+(10000 div

Ngày đăng: 13/11/2012, 16:17

Hình ảnh liên quan

a) Coù theơ xađy döïng ñöôïc moôt thöù töï tređn taôp caùc caâu hình caăn lieôt keđ. - Giáo trình Toán rời rạc Chương 4

a.

Coù theơ xađy döïng ñöôïc moôt thöù töï tređn taôp caùc caâu hình caăn lieôt keđ Xem tại trang 9 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan