Sáng kiến kinh nghiệm Tin học lớp 10: Thuật toán quay lui và ứng dụng giải bài toán tối ưu

35 84 0
Sáng kiến kinh nghiệm Tin học lớp 10: Thuật toán quay lui và ứng dụng giải bài toán tối ưu

Đ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

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, ai­1, 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((w­weight)/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]*(w­weight)/a[i+1]> fopt then Nhanh_can(i+1);           weight:=weight­a[i]*x[i];           Cost:=cost­c[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 n­k 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ố n­k+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        123541 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   2014­2015) 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[i­3]=0) and (x[i­2]=0) and (x[i­1]=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

Ngày đăng: 08/01/2020, 07:54

Từ khóa liên quan

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

Tài liệu liên quan