Sáng kiến kinh nghiệm với mục đích nhằm cung cấp tài liệu để bồi dưỡng học sinh giỏi hàng năm cho giáo viên; tạo ra được hứng thú say mê học, tự học, tự nghiên cứu tài liệu cho học sinh trong quá trình học tập môn Tin học lớp 10. Để nắm chi tiết nội dung nghiên cứu mời các bạn cùng tham khảo sáng kiến kinh nghiệm.
Phần 1: ĐĂT VÂN ĐÊ ̣ ́ ̀ Kinh th ́ ưa quy ́thây cơ giao! ̀ ́ Tiến sĩ triều Lê, Thân Nhân Trung đã nói “Hiền tài là ngun khí của quốc gia, ngun khí thịnh thì thế nước mạnh mà hưng thịnh, ngun khí suy thì thế nước yếu mà thấp hèn”. Vì thế các bậc đế vương thánh minh ln coi việc giáo dục nhân tài, kén chọn kẻ sĩ, vun trồng ngun khí quốc gia làm cơng việc hàng đầu , câu nói bất hủ của Thân Nhân Trung đã cho thấy từ thời xa xưa các thế hệ ơng cha đã rất coi trọng nhân tài và coi những nhân tài là tương lai của đất nước. Với cương vị là một giáo viên chun ngành Tin học trực tiếp giảng dạy, tơi thấy được những nhiệm vụ quan trọng phải làm đầu tiên đó là làm thế nào để học sinh thích học và học giỏi mơn Tin. Trong thời đại ngày nay, Tin học có vai trò và vị trí đặc biệt quan trọng trong khoa học kĩ thuật và đời sống, giúp con người tiếp thu một cách dễ dàng các mơn khoa học khác có hiệu Có thể nói phát hiện và bồi dưỡng HSG là một trong những hoạt động chun mơn chính trong năm học của trường. Bản thân qua tham khảo các đề thi HSG của tỉnh và quốc gia đã thấy hầu hết các đề thi đều có các bài tốn tối ưu. Để giải các bài tốn tơi ưu thì có nhiều phương pháp giải, trong đó ứng dụng thuật tốn quay lui để giải bài tốn tối ưu cũng là một phương pháp được nhiều người sử dụng. Đo cung chinh la ́ ̃ ́ ̀ ly do đê tôi viêt đê tai ́ ̉ ́ ̀ ̀ “Thuật tốn quay lui và ứng dụng giải bài tốn tối ưu” Tơi rât mong đ ́ ược sự gop y cua quy thây cơ đê đê tai ngay cang ́ ́ ̉ ́ ̀ ̉ ̀ ̀ ̀ ̀ được hoan thiên h ̀ ̣ ơn Xin chân thanh cam ̀ ̉ ơn! Trang Phân 2: NH ̀ ỮNG BIÊN PHAP GIAI QUYÊT VÂN ĐÊ ̣ ́ ̉ ́ ́ ̀ I. CƠ SỞ LÝ LUẬN CỦA VẤN ĐỀ: Cũng như trình bày trên bài tốn tối ưu là một trong những bài tốn thường gặp trong các kỳ thi học sinh giỏi Cơng việc khó khăn đây là làm thế nào để các em có thể hiểu được thuật tốn và có thể ứng dụng vào giải các bài tốn liên quan Xuất phát từ thực tiễn như vậy, tơi đã đưa ra một số bước giúp cho các em có thể hiểu được thuật tốn và ứng dụng để giải các bài tốn cùng loại: Ý tưởng của thuật tốn Thuật tốn Ứng dụng thuật tốn giải các bài tốn đơn giản Ứng dụng thuật tốn quay lui có đánh giá cận giải một số bài tốn phức tạp Ứng dụng thuật tốn giải bài tốn trong các đề thi học sinh giỏi II. THỰC TRẠNG CỦA VẤN ĐỀ: 1) Thực trạng về cấp quản lý *) Ưu điểm: Đã quan tâm vào cơng tác phát triển mũi nhọn Có sự phân cơng nhiệm vụ cho từng giáo viên trực tiếp giảng dạy, giám sát và kiểm tra q trình thực hiện của giáo viên Động viên tinh thần cũng như tạo mọi điều kiện thuận lợi nhất để giáo viên thực hiện nhiệm vụ *) Hạn chế: Khi phân cơng nhiệm vụ thì chưa xác định một chiến lược lâu dài, đó là chỉ tập trung phát hiện và bỗi dưỡng học sinh lớp 11 Trang mà khơng phát hiện và bồi dưỡng ngay từ khi các em đang học lớp 10 2) Thực trạng về giáo viên *) Ưu điểm: Được đào tạo về chun mơn cơ bản, có sức khỏe, sức trẻ, có lòng nhiệt tình trong cơng việc. Ln ln học tập trau dồi tri thức, nhằm phục vụ tốt nhất cho sự nghiệp giáo dục Trong q trình giảng dạy, tuy gặp nhiều khó khăn nhưng phần lớn các thầy cơ giáo đều đặt chữ “tâm” lên hàng đầu, đây là một trong những thuận lợi góp phần vào sự thành cơng của ngành giáo dục Có sự đầu tư vào nghiên cứu khi được giao nhiệm vụ *) Hạn chế: Một số giáo viên khơng có tâm huyết, chưa tập trung vào cơng tác chun mơn nên kiến thức về ơn luyện học sinh giỏi còn hạn chế. Việc bồi dưỡng HSG chỉ tập trung cho số ít giáo viên trong tổ 3) Thực trạng về học sinh *) Ưu điểm: Các em HS ngoan, cần cù chịu khó, có ý thức vươn lên trong học tập Có trách nhiệm với việc học tập, trong q trình học tập hăng say phát biểu, đóng góp nên sự thành cơng của bài giảng *) Hạn chế: Kiến thức cơ bản về lập trình còn rất nhiều hạn chế, chỉ có số ít em học sinh trên địa bàn thị trấn, mới được tiếp cận với lập trình ở chương trình lớp 8 – THCS Trang Đa số các em học tốt mơn Tin học thì lại học tốt các mơn khoa học tự nhiên (Tốn, Lí, Hóa), nên đã theo tham gia bồi dưỡng ở các bộ mơn đó Tin học là mơn mà khơng có trong các kỳ thi tốt nghiệp cũng như đại học hàng năm, nên các em cũng khơng mặn mà với việc tham gia học và bồi dưỡng HSG 4) Thực trạng về cơ sở vật chất *) Ưu điểm: Có đủ cơ sở vật chất để phục vụ cho lớp học Có các phương tiện phục vụ cho mục đích giảng dạy , VD: Bảng từ, máy chiếu, máy tính *) Hạn chế: Thiếu tài liệu và sách tham khảo Một số học sinh khơng có đủ kinh phí mua máy tính cá nhân phục vụ cho mục đích ơn tập tại nhà III. CÁC BIỆN PHÁP ĐÃ TIẾN HÀNH ĐỂ GIẢI QUYẾT VẤN ĐỀ: 1. Thuật tốn quay lui: Giả thiết một cấu hình cần tìm được mơ tả bởi một bộ phận gồm n thành phần a1, a2, an. Giả sử tìm được i 1 thành phần a1, a2, ai1, ta tìm thành phần thứ i bằng cách duyệt tất cả các khả năng có thể của ai. Với mỗi khả năng j kiểm tra xem nó có chấp nhận được khơng. Xảy ra hai trường hợp: Chấp nhận được thì xác định ai theo j và kiểm tra xem i = n chưa, nếu i = n thì ta ghi nhận một cấu hình, còn nếu i gia tri ky luc truoc do thi cap nhat lai cau hinh tot hon} if Cost>fopt then Begin xopt:=x; {Ghi nhan cau hinh do vat moi} Trang 21 Fopt:=cost;{Ghi nhan gia tri moi cua tui} End; End; Procedure Nhanh_can(i:integer); Var j,t:integer; Begin t:=trunc((wweight)/a[i]); {Trong luong con lai cua tui co the chua bao nhieu do vat thu i} For j:=t downto 0 do Begin x[i]:=j; weight:=weight+a[i]*x[i]; Cost:=cost+c[i]*x[i]; if i=n then Ghinhan_ky_luc Else if cost+c[i+1]*(wweight)/a[i+1]> fopt then Nhanh_can(i+1); weight:=weighta[i]*x[i]; Cost:=costc[i]*x[i]; End; End; Procedure Inkq; Var i,j:integer; Begin Writeln('********** KET QUA TINH TOAN ***********'); Writeln('Tong gia tri cua cac do vat: ', fopt:4:0); Writeln('Phuong an lay do:'); For j:=1 to n do writeln('So luong do vat ',ind[j],' la: ',xopt[j]:4,' lan'); Trang 22 Writeln('******************************************'); Write('Nhan enter de tiep tuc'); readln; End; BEGIN Clrscr; Readfile; Khoitao; Nhanh_can(1); Inkq; Readln; END Giả sử ta có File dữ liệu là Caitui.txt trong ổ G có nội dung: 4 20 3 5 4 6 20 10 8 15 Thì sau khi chay xong chương trình ta có kết quả: Cho ten file du lieu: G:\caitui.txt Trong luong cai tui: 20 VEC TO GIA TRI DO VAT: 20 10 8 15 3 5 4 6 ********KET QUA TINH TOAN********* Tong gia tri cua cac do vat: 120 Phuong an lay do: So luong do vat 1 la: 6 lan So luong do vat 4 la: 0 lan So luong do vat 3 la: 0 lan Trang 23 So luong do vat 2 la: 0 lan ******************************************** Bài 2: Bài tốn người du lịch Một người du lịch muốn đi tham quan n thành phố T1, T2, , Tn. Xuất phát từ một thành phố nào đó người du lịch muốn đi qua tất cả các thành phố còn lại, mỗi thành phố đúng một lần, rồi quay lại thành phố xuất phát. Cij là chi phí đi từ thành phố Ti đến thành phố Tj (i,j=1,2, ,n), hãy tìm một hành trình (một cách đi thỏa mãn điều kiện đặt ra) với tổng chi phí nhỏ nhất Cố định thành phố xuất phát là T1, bài tốn người du lịch dẫn về bài tốn: f ( x2 , x3 , , xn ) = c[1, x2 ] + c[x2 , x3 ] + + c[xn −1 , xn ] + c[xn , x1 ] Min Với điều kiện (x2,x3, ,xn) là hoán vị của các số 2,3, ,n Ký hiệu cmin = min{c[i, j ]; i, j = 1, 2, , n; i j} là chí phí nhỏ nhất đi lại giữa các thành phố Giả sử ta đang có phương án bộ phận (u1,u2, ,uk). Phương án này tương ứng với thành phần bộ phận đi qua k thành phố: T1 T (u2 ) T (uk −1 ) T (u k ) Vì vậy chi phí phải trả cho hành trình bộ phận này là: σ = c[1, u2 ] + c[u2 , u3 ] + + c[uk −1 , uk ] Để phát triển hành trình bộ phận này thành hành trình đầy đủ, ta phải đi qua nk thành phố còn lại rồi quay về thành phố T1, tức là còn đi qua n k+1 đoạn đường nữa. Do chi phí phải trả cho việc đi qua mỗi một trong số nk+1 đoạn đường còn lại đều khơng nhỏ hơn cmin nên cận dưới cho phương án bộ phận (u1,u2, ,uk) có thể được tính theo cơng thức: g ( u1 , u , , u k ) = σ + (n − k + 1).cmin Trang 24 Dưới đây là chương trình pascal giải bài tốn người du lịch theo thuật tốn quay lui có đánh giá cận: Uses Crt; Var c :array[1 20,1 20] of integer; a,xopt :array[1 20] of integer; chuaxet :array[1 20] of boolean; n,fopt,cmin,can :integer; Procedure readfile; Var f :Text; Name :String; i,j :integer; Begin Write('Nhap ten file du lieu:'); Readln(Name); Assign(f,name); Reset(f); Readln(f,n); For i:=1 to n do Begin For j:=1 to n do read(f,c[i,j]); readln(f); End; Close(f); Cmin:=Maxint;{Maxint=32767} For i:=1 to n do For j:=1 to n do if(ij) and (cmin>c[i,j]) then cmin:=c[i,j]; Trang 25 End; Procedure Ghinhan; Var sum:integer; Begin sum:=can+c[a[n],a[1]]; if sumc[i,j]) then cmin:=c[i,j]; End; Trang 27 Fopt:=maxint; Can:=0; a[1]:=1; End; BEGIN Readfile; init; try(2); inkq; END Giả sử ta có File dữ liệu là Dulich.txt trong ổ G có nội dung: 0 3 14 18 15 3 0 4 22 20 17 9 0 16 4 6 2 7 0 12 9 15 11 5 0 Thì sau khi chay xong chương trình ta có kết quả: Cho ten file du lieu: G:\dulich.txt MA TRAN CHI PHI: 0 3 14 18 15 3 0 4 22 20 17 9 0 16 4 6 2 7 0 12 9 15 11 5 0 Hanh trinh toi uu co chi phi: 22 Trang 28 123541 4. Ứng dụng thuật toán giải bài toán trong đề thi học sinh giỏi Bài: Xâu nhị phân (Thi chọn đội tuyển HSG tỉnh dự thi quốc gia năm 20142015) Xâu nhị phân là xâu chỉ chứa các số 0 và 1. Độ dài xâu là số các số 0 và 1 trong xâu u cầu: Cho biết số n chỉ độ dài của xâu. Hãy đếm số xâu nhị phân có độ dài n và chỉ chứa tối đa 3 số 0 liên tiếp Dữ liệu vào: Cho từ tệp văn bản XAUBIT.INP Dòng đầu tiên ghi số lượngTest k (1 k 12); k dòng tiếp theo mỗi dòng ghi số n (n là độ dài của xâu; 1 n 103) Dữ liệu ra: Ghi ra tệp văn bản XAUBIT.OUT số xâu nhị phân thỏa mã u cầu, mỗi Test trên một dòng Ví dụ: XAUBIT.INP XAUBIT.OUT Giải thích Với n=4 có các xâu sau: 0010 0011 0100 0101 0110 17 Giải: Biểu diễn dãy nhị phân dưới dạng b1,b2, ,bn trong đó bi {0,1}. Thủ tục đệ quy Try(i) xác định bi, trong đó các giá trị đề cử là 0 và 1. Các giá trị này mặc nhiên được chấp nhận mà khơng phải thỏa mãn điều kiện gì (vì vậy bài tốn khơng cần biến trạng thái), ngoại trừ trường hợp 3 phần tử trước nó là 3 bít 0 liên tiếp thì bít kế tiếp phải là bít 1. Thủ tục Khoitao khởi gán biến đếm sl=0, thủ tục Docfile đọc dữ liệu từ tệp ra các biến, thủ tục Ghifile ghi giá trị biến sl tương ứng với các giá trị n vào tệp Program DayNP; Uses Crt; Var x,d:array[1 100] of byte; k,n:byte; Trang 29 sl:longint; Procedure Docfile; Var f:text; i:byte; Begin Assign(f,'d:\xaubit.txt'); Reset(f); readln(f,k); For i:=1 to k do readln(f,d[i]); Close(f); End; Procedure khoitao; Begin sl:=0; End; Procedure Try(i:integer); Var j:byte; Begin For j:=0 to 1 do Begin if (x[i3]=0) and (x[i2]=0) and (x[i1]=0) and (j=0) then j:=j+1; x[i]:=j; if i=n then sl:=sl+1 Else try(i+1); end; End; Procedure Ghifile; Var f:text; i:byte; Begin Assign(f,'D:\xaubitou.txt'); rewrite(f); For i:=1 to k do Begin khoitao; n:=d[i]; Try(1); Writeln(f,sl); End; Close(f); End; BEGIN Trang 30 Clrscr; docfile; ghifile; Readln; END Trang 31 IV HIỆU QUẢ CỦA SKKN: Với tập tài liệu đã soạn chi tiết của giáo viên, học sinh có thể tham khảo trước ở nhà vào những lúc rãnh rổi, giảm được thời gian ghi bảng, chép vở của giáo viên và học sinh Học sinh sơi nổi, hứng thú hơn khi học nhờ được vận dụng kiến thức đã học để giải các bài tốn thực tế Học sinh ham thích mơn học chủ động tiếp thu kiến thức Phần 3: KẾT LUẬN I. NHỮNG BÀI HỌC KINH NGHIỆM: Trong q trình bồi dưỡng học sinh giỏi Tin học ta cần thực hiện những điều sau: 1) Phát hiện và bồi dưỡng ngay các em học sinh từ lớp 10 2) Tạo ra được hứng thú say mê học, tự học, tự nghiên cứu tài liệu 3) Phân loại kiến thức và phân cơng giáo viên giảng dạy theo từng phần 4) Kiên trì trong q trình bồi dưỡng II. Ý NGHĨA CỦA SÁNG KIẾN KINH NGHIỆM: Tin học có ứng dụng hầu hết các ngành, các lĩnh vực trong đời sống xã hội hiện nay. Trong sự phát triển của tin học các nhà lập trình chun nghiệp đóng vai trò khơng nhỏ. Các em đã tham gia bồi dưỡng HSG tin thì đều thi vào các chun ngành cơng nghệ thơng tin của các trường đại học Là tài liệu để bồi dưỡng học sinh giỏi hàng năm cho giáo viên và tài liệu tham khảo cho học sinh Đê tai nay ra đ ̀ ̀ ̀ ời từ kinh nghiêm cua ban thân tôi trong qua trinh ̣ ̉ ̉ ́ ̀ giang day. Rât mong s ̉ ̣ ́ ự gop y chân thanh cua quy thây cô đê sáng ki ́ ́ ̀ ̉ ́ ̀ ̉ ến Trang 32 ngày càng hoàn thiện hơn và co thê tr ́ ̉ ợ giup cho chung ta môt cach hiêu ́ ́ ̣ ́ ̣ qua h ̉ ơn trong cơng việc giảng dạy Xin chân thanh cam ̀ ̉ ơn! III. NHỮNG KIẾN NGHỊ, ĐỀ NGHỊ SAU KHI THỰC HIỆN ĐỀ TÀI: Sau khi thực hiện đề tài, tơi xin có một vài ý kiến sau: - Nên áp dụng rộng rãi đề tài này trong việc bồi dưỡng HSG mơn Tin - Đề nghị cấp trên tạo điều kiện hơn nữa về cơ sở vật chất giúp giáo viên có phương tiện giảng dạy tốt, các em học sinh có điều kiện tiếp xúc với máy tính nhiều hơn. - BGH trường quan tâm nhiều hơn nữa đến chế độ đối với giáo viên tham gia giảng dạy KBang, ngày 10 tháng 03 năm 2015. Tác giả Bùi Hải Đức Trang 33 TAI LIÊU THAM KHAO ̀ ̣ ̉ Tốn rời rạc, Nguyễn Đức Nghĩa (Chu biên), Nguy ̉ ễn Tơ Thành,… , NXB Giao duc, 1997 ́ ̣ Sáng tạo trong thuật tốn và lập trình, Nguyễn Xn Huy, NXB Giao duc, 2007 ́ ̣ Một số tài liệu khác của đồng nghiệp Trang 34 MUC LUC ̣ ̣ Phân 1: ĐĂT VÂN ĐÊ ̀ ̣ ́ ̀ Trang 1 Phân 2: NH ̀ ƯNG BIÊN PHAP GIAI QUYÊT VÂN ĐÊ ̃ ̣ ́ ̉ ́ ́ ̀ Trang 2 I. Cơ sở lý luận của vấn đề Trang 2 II. Thực trạng của vấn đề .Trang 2 1. Thực trạng về cấp quản lý Trang 2 2. Thực trạng về giáo viên .Trang 2 3. Thực trạng về học sinh Trang 2 4. Thực trạng về cơ sở vật chất Trang 3 III. Các bước đã tiến hành để giải quyết vấn đề Trang 4 1. Thuật toán quay lui .Trang 4 2. Ứng dụng thuật toán giải một số bài toán cơ bản Trang 5 3. Phương pháp nhánh và cận Trang 15 4. Ứng dụng giải bài toán trong đề thi học sinh giỏi Trang 26 IV. Hiệu quả của sáng kiến kinh nghiệm: Trang 29 Phần 3: KẾT LUẬN Trang 29 I. Những bài học kinh nghiệm .Trang 29 II. Ý nghĩa của SKKN Trang 29 III. Những kiến nghị đề xuất Trang 30 TÀI LIỆU THAM KHẢO Trang 31 Trang 35 ... Ý tưởng của thuật tốn Thuật tốn Ứng dụng thuật tốn giải các bài tốn đơn giản Ứng dụng thuật tốn quay lui có đánh giá cận giải một số bài tốn phức tạp Ứng dụng thuật tốn giải bài tốn trong các đề thi học sinh giỏi... trên bài tốn tối ưu là một trong những bài tốn thường gặp trong các kỳ thi học sinh giỏi Cơng việc khó khăn đây là làm thế nào để các em có thể hiểu được thuật tốn và có thể ứng dụng vào giải các bài tốn liên quan... Nếu tốt hơn: Cập nhật lại phương án mẫu và đi tiếp Khơng tốt hơn: Quay lại bước trên xét phương án khác d. Thuật giải: Bài tốn tối ưu: Tìm min{f(x): x D} Khái niệm bài tốn tối ưu: Hãy lựa chọn trong số các cấu hình tổ hợp