Đối với bộ môn tin học trong khi lập trình chúng ta thường xuyên phải làm các thao tác sắp xếp, phân hoạch, lấp tập con thành tập hợp lớn hơn … trên một tập hợp các phần tử hữu hạn và rờ
Trang 1Đối với bộ môn tin học trong khi lập trình chúng ta thường xuyên phải làm các thao tác sắp xếp, phân hoạch, lấp tập con thành tập hợp lớn hơn … trên một tập hợp các phần tử hữu hạn và rời rạc nghĩa là thường xuyên đụng chạm đến khái niệm của giải tích và tổ hợp đó là :
- Do đặc thù của học sinh THCS còn hạn chế về kiến thức toán học và kỹ thuật
lập trình và khả năng bản thân còn có nhiều hạn chế, nên chuyên đề chỉ nêu
được một số thuật giải mẫu và các ví dụ minh hoạ về “ tổ hợp, chỉnh hợp, hoán
vị ”mà qua quá trình học tập giảng dạy tôi đã sưu tầm và tích lũy được
2 Mục đích của chuyên đề:
-Giúp học sinh hiểu được các khái niệm về tổ hoán vị, chỉnh hợp ,tổ hợp và các
Trang 2thuật toán, cách cài đặt chương trình
-Giúp học sinh chủ động lĩnh hội kiến thức hơn, phát huy vai trò tích cực trong học tập của học sinh Khắc sâu những kiến thức cơ bản, học sinh biết áp dụng , tìm tòi, khám phá không ngừng năng cao chất lượng bồi dưỡng HSG và học
bộ môn tin học trong nhà trường
PHẦN II : NỘI DUNG CỤ THỂ
A CƠ SỞ LÝ LUẬN
Thông qua chuyên đề này học sinh biết vận dụng và được cung cấp các kiến thức cần thiết về phương pháp sử dụng các thuật toán về tổ hợp và kỹ thuật lập trình cơ bản những kinh nghiệm cụ thể trong qua trình tìm tòi lời giải, giúp học sinh rèn luyện các thao tác tư duy, phương pháp suy luận và khả năng sáng tạo
B.CÁC KHÁI NIỆM
I Hoán vị:
1.Khái niệm:
Ví dụ: Có 3 học sinh An (A), Bình (B)và Chính (C) ngồi cùng bàn học Nếu mỗi
tuần một lần thay đổi vị trí ngồi giữa 3 người thì sau bao nhiêu tuần họ lại vế vị
\ trí ban đầu?
ABC ABCBACCBA
ACBBCACAB
Trang 3Giải : Gọi Vị trí ngồi ban đầu là Ao = (A,B,C) “ B ngồi giữa ;A bên phải; C bên
trái ” Các tuần tiếp theo các thay đổi có thể là:
A1 = (A, C, B) ; A2 = (B, A, C) ; A3 = (B, C, A), A4 = (C, A, B), A5 =
(C, B, A)
Vậy sau 5 tuần họ lại vế vị trí ban đầu
*Nhận xét : cách giải trên là cách liệt kê; muốn khẳng định kết quả, ta phải chứng
minh rằng không còn cách sắp xếp nào khác Tuy nhiên nếu với số cho lớn thì các liệt kê không ổn, dễ bỏ sót
* Cách suy luận: Mỗi người nếu ngồi đầu bàn thì chỉ có 2 cách thay đổi vị tri, vậy
có 3 người thì sẽ có 2 x 3 = 6 cách thay đổi vị trị Đầu bài trên hỏi sau mấy tuần quay về vị trí ban đầu thi kết qurả phải là 6 – 1 = 5 (tuần)
*Liên hệ với lý thuyết hoán vị
Nếu mỗi lần “thay đổi vị trí” là một Hoán vị của tập hợp {A; B; C} P = {A, B, C}
thì tập hợp này có tất cả 6 Hoán vị
Cho tập hợp có phần tử ( ) Mỗi thay đổi vị trí sắp xếp phần tử này theo
một thứ tự nhất định, ta được một Hoán vị các phần tử của tập
2 Số các Hoán vị:
Định lí : Số các Hoán vị của một tập hợp có phần tử là:
Bài toán minh họa :
Một đoàn khách du lịch dự định đến tham quan điểm du lịch và
ở Hà Nội Họ đi tham quan theo thứ tự nào đó, chẳng hạn :
Như vậy mỗi cách họ chọn thứ tự tham quan là một Hoán vị của tập Do vậy đoàn khách có tất cả
cách chọn
( Như bài này rõ ràng cách liệt kê thô sơ khõ lòng giải quyết được)
Trang 4Một hoán vị của n phần tử là một bộ gồm n phần tử để được sắp theo một trật
Giải: Ta có thể chọn trong cầu thủ để đá quả đầu tiên.
Tiếp theo có cách chọn cầu thủ đá quả thứ hai,
rồi cách chọn cầu thủ đá quả thứ ba,
cách chọn cầu thủ đá quả thứ tư và cuối cùng có cách chọn cầu thủ đá quả thứ năm Theo quy tắc nhân, mỗi đội sẽ có: cách chọn
Mỗi danh sách có xếp thứ tự cầu thủ được gọi là một chỉnh hợp chập của cầu thủ
*Tổng quát:
Cho tập gồm phần tử và số nguyên , Mỗi lần lấy ra phần
tử của và sắp xếp chúng theo một thứ tự ta được một Chỉnh hợp chập của phần tử thuộc
*Nhận xét:
Hai Chỉnh hợp khác nhau khi và chỉ khi hoặc có ít nhất một phần tử của Chỉnh hợp này không là phần tử của Chỉnh hợp kia hoặc các phần tử của Chỉnh hợp giống nhau nhưng được sắp xếp theo thứ tự khác nhau
Trang 5với quy ước
Ta quy ước: A n0 = 1, do đó công thức (1) đúng với mọi số nguyên thỏa mãn :
Như vậy, lập một Tổ hợp chập của chính là lấy ra phần tử của mà không quan tâm đến thứ tự
* Số các Tổ hợp:
Định lí: Số các Tổ hợp chập của một tập hợp có phần tử ( ) là:
! (2)
Với quy ước: Cn0 = 1thì (2) cũng sẽ đúng với mọi số nguyên thỏa mãn
*Bài toán mẫu:
Trang 6Trong lớp học có học sinh nam và học sinh nữ Mỗi tuần Thầy giáo cần học sinh nam và học sinh nữ đi tham gia 1 sinh hoạt ngoại khóa của trường Hỏi
Theo quy tắc nhân, số cách chọn cần tìm là: 4845.455=2204475 (cách chọn)
4 Hai tính chất cơ bản của Cn k :
Tính chất 1: Cho các số nguyên n,k thỏa mãn ( )
Bài 1: Có bao nhiêu cách xếp chỗ ngồi cho 10 bạn vào ngồi quanh 2 bàn tròn sao
cho bàn thứ nhất có 6 bạn, bàn thứ hai có 4 bạn? Chú ý rằng 2 cách xếp n người cụ thể vào ngồi quanh một bàn tròn được coi là như nhau nếu người ngồi bên trái mỗi người trong 2 cách xếp là giống nhau
Hướng dẫn giải
Trang 7Chia là ba bước.
Bước 1: chọn nhóm 6 người (hoặc 4 người) Có cách
Bước 2: Xếp người vào bàn tròn vị trí cách
Bước 3: Xếp người vào bàn tròn có vị trí cách
Áp dụng quy tắc nhân, tính kết quả
Bài 2 : Một người dùng ổ khóa số gồm 3 vòng số, mỗi vòng có 10 chữ số từ 0 đên
9 Hỏi người đó có bao nhiêu cách đặt mật mã ( số để khóa chỉ người đó biết ) cho
-Số các hoán vị khác nhau của n phần tử là:
C ÁP CÀI ĐẶT CÁC BÀI TOÁN CƠ BẢN TRONG TIN HỌC
1 Hoán vị:
Bài toán:Tìm các hoán vị của n số tự nhiên đầu tiên
• Thuật toán :
- Ta đặt một mảng A[1 n] để chứa các hoán vị tìmđược
- Mảng B[1 n] of boolean để làm cờ với ý nghĩa b[i] cho ta biết số i đã được chọn vào hoán vị hay chưa
Thuật toán được lập theo kiểu đệ quy với hai thủ tục :PRINT và FINT (I: BYTE)
Thủ tục print in hoán vị tìm được
procedure Print;
Trang 10for i:=1 to n do write(g,A[i],' ');writeln(g);
Trang 11Một số được gọi là “ số gần nguyên tố “nếu nó không phải là só nguyên tố nhưng
tồn tại một
cách sắp xếp lại các chữ số của nó (bỏ đi các chữ số 0 vô nghĩa ở đầu số sau khi sắp xếp các chữ số nếu có ) sao cho số sau khi sắp xếp trở thành một số nguyên tố Yêu cầu: Nhập từ bàn phím mọt số nguyên dương N không quá 1000000, sau đó thông
báo ra màn hình “số gần nguyên tố ”lớn nhất có giá trị không vượt quá N Nếu không tìm được “số gần nguyên tố “nào không vượt quá N thì đưa ra dòng thông
báo: KHONG CO Dữ liệu nhập vào coi như là chuẩn, không cần kiểm tra
Ví dụ :
+Nhập N=19 , thì đưa ra dòng thông báo :SO CAN TIM LA 16
+Nhập N=20 , thì đưa ra dòng thông báo :SO CAN TIM LA 20
*Thuật toán :
+ một vòng lặp từ lớn đến nhỏ, với mỗi số nếu không phải là nt thì đổi ra xâu
+ Đưa xâu st vào hoán vị ,
+ Với mỗi hoán vị, ta chuyển lại thành số
Trang 12begin
nt:=false;
for i:=2 to trunc(sqrt(k)) do
if k mod i=0 then exit;
for i:=1 to n do kq:=a[i]+kq;val(kq,k,code);
if nt(k) then begin writeln(g,st);kt:=true; end;
Trang 13*Hãy lập trình giải các bài toán sau đây:
Bài 1: Xếp lại dãy số
Cho dãy số nguyên dương đôi một khác nhau: a1, a2, , an Một hoán vị của dãy số là một cách sắp xếp khác các số hạng của dãy Hãy liệt kê tất cả các hoán vị của dãy đã cho thoả mãn: giữa hai phần tử bất kỳ M và N trong hoán vị đó, không tồn tại phần tử P nào của hoán vị để:2P = M + N
Trang 14Ví dụ: Với dãy: 11, 22, 33, 44 thì
Hoán vị 33 11 22 44 là thoả mãn điều kiện trên
Hoán vị 11, 44, 22, 33 không thoả mãn vì có phần tử P = 22 nằm giữa hai phần tử M = 11 và N = 33 mà: 22 * 2 = 11 + 33.
Dữ liệu vào: Đọc từ file văn bản SORT.INP Các số trên 1 dòng cách nhau ít
nhất 1 dấu trống
• Dòng 1: Chứa số n (2 ≤ n ≤ 11)
• Dòng 2: Chứa các số a1, a2, , an của dãy (1 ≤ ai ≤ 100)
Dữ liệu ra: Ghi ra file văn bản SORT.OUT Các số trên 1 dòng cách nhau ít
nhất 1 dấu trống
• K dòng đầu, mỗi dòng ghi 1 hoán vị tìm được
• Dòng cuối cùng ghi số lượng hoán vị tìm được (K)
Ví dụ:
4
11 22 33 44
Bài 2: Vòng tròn nguyên tố
Một vòng tròn chứa 2n vòng tròn nhỏ (Xem hình vẽ) Các vòng tròn nhỏ được đánh số từ 1 đến 2n theo chiều kim đồng hồ Cần điền một số tự nhiên từ 1
Trang 15đến 2n vào mỗi vòng tròn nhỏ (mỗi số chỉ được phép điền một lần) sao cho tổng của hai số trên hai vòng tròn nhỏ liên tiếp là số nguyên tố Số điền ở vòng tròn nhỏ
1 luôn là số 1
1
2
4 6
3 5
Dữ liệu vào: Đọc từ file văn bản CIRCLE.INP gồm chỉ một dòng chứa số
nguyên dương n (1 < n < 10)
Dữ liệu ra: Ghi ra file văn bản CIRCLE.OUT có cấu trúc như sau:
• k dòng đầu, mỗi dòng ghi các số trong các vòng tròn nhỏ bắt đầu từ vòng tròn nhỏ 1 đọc theo thứ tự của các vòng tròn nhỏ, mỗi số cách nhau một dấu cách
• Dòng cuối cùng ghi số lượng các cách điền số tìm được (k)
Ví dụ:
1 6 5 2 3 42
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 24
Trang 16Bài 1: Xếp lại dãy số
Cho dãy số nguyên dương đôi một khác nhau: a1, a2, , an Một hoán vị của dãy số
là một cách sắp xếp khác các số hạng của dãy Hãy liệt kê tất cả các hoán vị của dãy đã cho thoả mãn: giữa hai phần tử bất kỳ M và N trong hoán vị đó, không tồn tại phần tử P nào của hoán vị để:2P = M + N
*Thuật toán :
+ một vòng lặp từ lớn đến nhỏ, với mỗi số nếu không phải là nguyên tố thì đổi ra xâu
+ Đưa dãy A vào hoán vị ,
+ Kiểm tra hoán vị nào thỏa mãn điều kiện bài toán
+ Nếu thỏa mãn thì in ra hoán vị đó và kết thúc vòng lặp tìm kiếm
Trang 17for h:=i+1 to n do
if 2*a[i]=a[k]+a[h] then Kt :=false;
inc(i);
until not(kt)or(i=n);
if kt then begin inc(d);
for i:=1 to n do write(g,a[i],' ');
Trang 18assign(f,'sort.inp');reset(f);
assign(g,'sort.out'); REWRITE(G);
readln(f,n);
for i:=1 to n do read(f,c[i]);
for i:=1 to n do B[i]:=true;
Trang 19begin
nt:=false;
for i:=2 to trunc(sqrt(n)) do
if n mod i=0 then exit;
if not(nt(a[i]+a[i+1])) then Kt :=false;
if kt then begin inc(d);
for i:=1 to n-1 do write(g,a[i],' ');
Trang 20- Tương tự như phần hoán vị
- chỉ cần sửa lại thủ tục FIND như sau
Trang 21inc(dem);Write('Chinh hop thu ',dem,' : ');
for i:=1 to r do write(A[i]);writeln;
Trang 23- Tương tự như thuật toán chỉnh hợp n chập r nhưng ở đay chỉ cần chọn 1 chỉnh hợp có thứ tự tăng
-Thủ tục FIND cải tiến như sau
Trang 24inc(dem);Write('To hop thu ',dem,' : ');
for i:=1 to r do write(A[i]);writeln;
write('Cho biet so phan tu r=');readln(r);
for i:=1 to n do B[i]:=1;
Find(1);
write('Co ',dem,'to hop');
readln
END
Trang 25Các bài toán luyện tập :
Bài toán1 : Viết chương trình tìm tất cả các hoán vị của chữ COMPUTER
Bài toán2: Viết chương trình tìm tất cả các tập con của tập hợp n số tự nhiên đầu
- Cho tập A={0,1,2} Có bao nhiêu số tự nhiên có đúng 6 chữ số được tạo thành
từ A , sao cho số đó có ít nhất một cặp số 0,2 đứng cạnh nhau
PHẦN III : KẾT LUẬN
Cùng với sự phát triển vũ bão của công nghệ thông tin, yêu cầu giảng dạy bộ môn tin học trong nhà trường ngày một cao hơn các bài tập toán tin cũng ngày ngày một khó thêm với những yêu cầu nhanh hơn dữ liệu lớn hơn, thuật toán khó hơn …
Trang 26Nhưng với đối tượng là học sinh THCS Chuyên đề: “Tổ hợp, chỉnh hợp, hoán vị ”
giúp học sinh có thêm một kiến thức cơ bản để có thể chủ động hơn tự tin hơn trong việc lĩnh hội, tìm tòi kiến thức nó phù hợp với việc đổi mới phương pháp dạy học hiện nay, phát huy vai trò tích cực học tập của học sinh Khắc sâu những kiến thức cơ bản, học sinh biết tự tìm tòi, khám phá không ngừng năng cao chất lượng của việc dạy và học bộ môn tin học trong nhà trường
Trên đây là một số bài tập mà tôi đã sưu tầm biên soạn, mong muốn đóng góp một dạng bài tập nhỏ giúp cho học sinh có thêm một tư liệu để học tập Chuyên
đề này còn hạn chế về thời gian và chưa giới thiệu được nhiều cách giải cho các bài toán hay, chưa đưa ra được các bài tập có cách suy nghĩ và lời giải tương tự và không tránh khỏi những thiếu sót và hạn chế Tôi được rất mong được sự đóng góp chia sẻ của đồng nghiệp
Yên lạc , ngày 15 tháng 4 năm 2013
Người viết sáng kiến kinh nghiệm
Nguyễn Mạnh Hùng