Sử dụng phương pháp quy hoạch động để giải một số bài toán nhằm bồi dưỡng học sinh giỏi tin học 11.

17 1.4K 18
Sử dụng phương pháp quy hoạch động để giải một số bài toán nhằm bồi dưỡng học sinh giỏi  tin học 11.

Đ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

I. MỞ ĐẦU I.1.1 LÝ DO CHỌN ĐỀ TÀI Ngày nay cùng với sự phát triển của đất nước, công nghệ thông tin đang đóng một vai trò hết sức quan trọng, tác động đến hầu hết các lĩnh vực của đời sống xã hội. Việc đào tạo một thế hệ tương lai có một sự phát triển toàn diện đòi hỏi ngành giáo dục luôn phải có sự quan tâm đúng mức là điều rất cần thiết để có một nguồn nhân lực đáp ứng yêu cầu CNH, HĐH mở cửa và hội nhập hướng tới nền kinh tế tri thức của nước ta nói riêng và thế giới chung. Tin học là một môn học mới, việc truyền đạt kiến thức cơ bản trong sách giáo khoa đã là khó khăn, làm sao để dạy học bồi dưỡng học sinh khá giỏi. Giúp các em không chỉ nắm được những kiến thức cơ bản mà còn hiểu và giải quyết được những bài toán đòi hỏi những thuật toán phức tạp hơn: Hoán vị, tổ hợp,tham lam,chia để trị,..đó là việc khiến các giáo viên phải luôn luôn trăn trở và tìm những phương pháp phù hợp. Một thuật toán chỉ giải được một bài toán, nhưng một bài toán lại có thể có rất nhiều thuật toán khác nhau. Làm thế nào để tìm ra thuật toán phù hợp, nhanh gọn, dễ hiểu, tốn ít dung lượng bộ nhớ. Phương pháp quy hoạch động là một phương pháp hay, có nhiều ưu điểm nhưng cũng có nhược điểm đó là khó tìm được công thức truy hồi. Ngoài ra kiến thức mới cũng làm học sinh khó hấp thụ. Cách giải những bài toán phức tạp nhưng dùng những kiến thức cũ đôi khi giúp học sinh dễ hiểu hơn. Từ những lí do trên tôi đã quyết định chọn đề tài “sử dụng phương pháp quy hoạch động để giải một số bài toán nhằm bồi dưỡng học sinh giỏi tin học 11” I.1.2 MỤC ĐÍCH NGHIÊN CỨU ĐỀ TÀI Mục tiêu chính của đề tài là nghiên cứu về pháp Quy Hoạch Động để giải một số bài toán nhằm bồi dưỡng học sinh giỏi tin học 11. Giúp cho việc ôn thi học sinh giỏi tin học thi đạt kết quả ngày càng cao. Tạo ra nguồn tài liệu tham khảo về phương pháp cũng như thuật toán nhằm hỗ trợ cho học sinh, giáo viên dạy bồi dưỡng học sinh giỏi tin học 11. I.1.3 ĐỐI TƯỢNG NGHIÊN CỨU VÀ PHẠM VI NGHIÊN CỨU ĐỐI TƯỢNG NGHIÊN CỨU Sử dụng phương pháp quy hoạch động và một số bài toán Học sinh giỏi tin học khối 11, Giáo viên giảng dạy học sinh giỏi tin học 11 PHẠM VI NGHIÊN CỨU ĐỀ TÀI Sử dụng phương pháp quy hoạch động để giải một số bài toán bồi dưỡng học sinh giỏi tin học 11. I.1.4 PHƯƠNG PHÁP NGHIÊN CỨU TÀI LIỆU Thu thập, phân tích các tài liệu và thông tin liên quan đến quy hoạch động Lựa chọn 1 số bài toán để sử dụng phương pháp quy hoạch động. Thiết kế các bài toán đã được lựa chọn trong chương trình tin học 11 để bồi dưỡng học sinh giỏi bằng phương pháp quy hoạch động. Dùng ngôn ngữ lập trình turbo Pascal hoặc Free pascal để cài đặt bài toán và chạy thử nghiệm trên một số bộ test để đánh giá kết quả. II NỘI DUNG SÁNG KIẾN KINH NGHIỆM II.2.1 CƠ SỞ LÝ LUẬN: + Luật giáo dục nước ta đã cụ thể hoá tại chương II, mục 2 điều 23 là: “Mục tiêu của giáo dục phổ thông là giúp học sinh phát triển toàn diện về đạo đức, trí tuệ, thể chất, thẩm mỹ và các kỹ năng cơ bản nhằm hình thành nhân cách con người Việt Nam xã hội chủ nghĩa, xây dựng tư cách và trách nhiệm công dân, chuẩn bị cho học sinh tiếp tục học lên hoặc đi vào cuộc sống lao động tham gia xây dựng và bảo vệ Tổ Quốc”. + Môn tin học, cũng như mọi môn học khác, căn cứ vào mục tiêu trên để xác định nhiệm vụ cụ thể của môn học, tổ chức hoạt động đào tạo góp phần thực hiện mục tiêu giáo dục mà Đảng và nhà nước đề ra. + Ngoài việc tạo điều kiện cho học sinh chiếm lĩnh những tri thức và kỉ năng Tin học cần thiết, Tin học còn có tác dụng phát triển năng lực trí tuệ chung như: phân tích, tổng hợp, trừu tượng hoá, khái quát hoá…rèn luyện những đức tính, phẩm chất của người lao động mới. Học sinh sẽ thấy rõ hiệu quả mạnh mẽ của công nghệ thông tin và nhận thức cần có. II.2.2 THỰC TRẠNG VẤN ĐỀ CỦA SÁNG KIẾN KINH NGHIỆM A.Thực trạng chung: Hiện nay nhu cầu xã hội đang rất cần những kĩ sư Công Nghệ Thông tin có trình độ cao. Tuy nhiên việc đào tạo và bồi dưỡng học sinh yêu thích môn Tin học ở trường Phổ thông hiện nay đang gặp rất nhiều khó khăn. Tin học 11 là một môn học mới, để học tốt được lập trình đòi hỏi học sinh phải có một kiến thức cơ bản tốt, phải có khả năng tư duy và niềm đam mê, ngoài ra học sinh phải có điều kiện thực hành thường xuyên. Đa số các em học sinh tập trung học các môn khối để ôn thi THPT Quốc Gia nên không dành được nhiều thời gian cho môn Tin học. Trường đã có máy tính để thực hành nhưng số lượng ít chưa đủ để tất cả các tiết thực hành đều được đáp ứng. Tài liệu tham khảo dành cho môn tin học chưa có nhiều nên việc tiếp cận với những kiến thức mới còn gặp nhiều khó khăn. Đó là cũng thực trạng chung của hầu hết các trường phổ thông hiện nay. B Một số thuận lợi và khó khăn khi thực hiện đề tài ở trường THPT Tĩnh Gia I. 1. Thuận lợi: Nhà trường: Trường THPT Tĩnh Gia 1 là ngôi trường có truyền thống với bề dày 54 năm. Là trường chuẩn quốc gia nên trường cũng là nơi có điều kiện cơ sở vật chất tương đối đảm bảo đáp ứng cho điều kiện học tập. Nhà trường đã tạo điều kiện để học sinh có điều kiện tốt nhất để học, tạo điều kiện về máy móc, trang thiết bị phục vụ cho việc dạy và học môn Tin học. Học sinh: Là môn học có tính ứng dụng cao nên đa số học sinh có ý thức tìm hiểu về môn học nói riêng và CNTT nói chung. Một số học sinh có khả năng phát triển về lập trình và yêu thích lập trình. Có nhiều gia đình đã có máy vi tính nên các em cũng có điều kiện thực hành. 2. Khó khăn: Nhà trường: Nhà trường đã có hai phòng máy vi tính để cho học sinh học nhưng vẫn còn hạn chế về số lượng cũng như chất lượng, mỗi ca thực hành có tới 2 – 3 em ngồi cùng một máy nên các em không có nhiều thời gian để thực hành làm bài tập một cách đầy đủ. Tuy đã có hai phòng thực hành nhưng số lớp nhiều (30 lớp học) và mỗi lớp số lượng học sinh khoảng 40 45 học sinh, tất cả các lớp đều học buổi sáng, tiết học thực hành cũng nằm trong phân phối chương trình với các tiết khác nên không thể tránh khỏi việc chồng chéo trong việc đăng kí lịch thực hành giữa các lớp. Giáo viên: Đa số các giáo viên đều còn trẻ nên còn chưa có nhiều kinh nghiệm. Môn tin học mới đưa vào giảng dạy nên giáo viên thường gặp khó khăn về phân hoá học sinh và bồi dưỡng học sinh yêu thích và học khá giỏi môn tin. Do đó việc lựa chọn học sinh giỏi là rất khó khăn vì học sinh giỏi thường học tốt các môn tự nhiên. Học sinh: Có nhiều học sinh có kiến thức cơ bản tốt và có tư duy nhưng các em lại không có máy tính thực hành ở nhà hoặc chỉ dành thời gian cho các môn khối mà không chọn vào đội tuyển thi học sinh giỏi môn Tin. Học sinh đa số chưa tiếp cận ngôn ngữ lập trình nên rất khó khăn trong học lập trình. Các bài toán sử dụng phương pháp quy hoạch động thường khó lại là kiến thức mới ngoài sách giáo khoa nên học sinh khó tiếp cận và thực hiện. III GIẢI PHÁP VÀ TỔ CHỨC THỰC HIỆN. Học sinh được bồi dưỡng thi học sinh giỏi không chỉ cần nắm vững kiến thức trong sách giáo khoa mà còn phải có khả năng tư duy tốt để giải quyết các bài toán khó. Việc dạy học không chỉ là truyền đạt kiến thức cho các em mà giáo viên còn phải kích thích sự sang tạo, niềm đam mê, sự say mê học hỏi và muốn tìm hiểu cái mới. Phương pháp quy hoạch động dùng để giải bài toán tối ưu có bản chất đệ quy, tức là để tìm phương án tối ưu cho bài toán nào đó có thể đưa về tìm phương án tối ưu của một số hữu hạn các bài toán con. Phương pháp quy hoạch động là một kỹ thuật nhằm đơn giản hoá việc tính toán các công thức truy hồi bằng cách lưu toàn bộ hay một phần kết quả tính toán tại mỗi bước trước đó với mục đích sử dụng lại. Như vậy, Quy hoạch động = Chia để trị + Mảng (lưu lại kết quả). Phương pháp quy hoạch động do nhà toán học người Mỹ Richard Bellman ( 1920 – 1984) phát minh năm 1953. Phương pháp này dung để giải các bài toán tối ưu có bản chất đệ qui, tức là tìm phương pháp tối ưu cho bài toán đó có thể đưa về tìm phương án tối ưu cho bài toán đó có thể đưa về tìm phương án tối ưu của một số hữu hạn các bài toán. Điểm khác nhau cơ bản giữa quy hoạch động và phương pháp đệ quy là: + Phương pháp đệ quy giải quyết bài toán theo hướng TOP _ DOWN, nghĩa là để giải bài toán ban đầu, ta phải đi giải tất cả các bài toán con của nó. Đây là một phương pháp hay, tuy nhiên phương pháp này sẽ gặp hạn chế về mặt thời gian, tốc độ do phải tính đi tính lại nhiều lần một số bài toán con giống nhau nào đó. + Phương pháp quy hoạch động sử dụng nguyên lý Bottom – up, nghĩa là “ đi từ dưới lên”. Đầu tiên, ta sẽ phải giải các bài toán con đơn giản nhất, có thể tìm ngay ra nghiệm. Sau đó kết hợp các bài toán con này lại để tìm lời giải cho bài toán lớn hơn và cứ như thế cho tới khi giải được bài toán yêu cầu. Với phương pháp này, mỗi bài toán con sau khi giải xong đều được lưu trữ lại và đem ra sử dụng nếu cần. Do đó tiết kiệm được bộ nhớ và cải thiện được tốc độ. +QHĐ có ưu điểm là chương trình thực hiện nhanh do không phải tốn nhiều thời gian để giải lại các bài toán con đã được giải. Công thức phối hợp nghiệm của các bài toán con để có nghiệm của các bài toán lớn gọi là công thức truy hồi của quy hoạch động Không gian lưu trữ lời giải các bài toán con để tìm cách phối hợp chúng gọi là bảng phương án của quy hoạch động Tạo bảng trong quy hoach động bằng cách: + Gán giá trị cho 1 số ô nào đó. + Giá trị cho các ô khác nhờ vào giá trị của các ô trước đó. + Tra bảng và xác định kết quả của bài toán ban đầu Quy hoạch động thường dùng một trong 2 cách tiếp cân: + Tiếp cận từ dưới lên (bottom up) + Tiếp cận từ trên xuống (top down) Tôi xin giới thiệu một số bài toán có thể sử dụng phương pháp quy hoạch động giúp học sinh dễ hiểu hơn, nó cũng là một cách để chúng ta so sánh các cách giải 1 bài toán và nâng cao khả năng tư duy của học sinh. Ví dụ 1: Tìm số fibonaci thứ n. Mô tả cây nhị phân tìm kiếm số Fib(4) theo phương pháp chia để trị có dạng cây như sau: Để tính được F(5) ta phải gọi F(4) và F(3), tính được F(4) phải gọi F(3) và F(2), F(1) và F(2) đã cho từ ban đầu. BẢNG GIÁ TRỊ CỦA FIBONACI I 0 1 2 3 4 5 6 7 8 9 10 Fi 0 1 1 2 3 5 8 13 21 34 55 Chương trình minh họa Function Fib(n:integer):longint; Begin IF n=0 THEN fib:=0 else If n=1 then fib:=1 else If n=2 then fib:=1 Else fib:=fib(n1)+ fib(n2); End; Begin Readln(n); Writeln(Fib(n)); End. Cách 2: Phương pháp quy hoạch động Ta sử dụng mảng S0..MaxN, Si để lưu lại lời giải cho bài toán tính số Fibonacci thứ i const MaxN = 1000; var s: array0..MaxN of int64; n, k: longint; function f(n:longint) : int64; Begin if sn=1 then begin if n< = 1then sn := n else sn := f(n1) + f(n2); end; f := sn; end; begin readln(n); for k:=0 to MaxN do sk:=1; writeln(f(n)); readln; end. Hoặc ta có thể làm như sau const MaxN= 1000; var s: array0..MaxN of int64; n, i: longint; begin readln(n); s0:=0; s1:=1; for i:=2 to n do si := si1 + si2; Writeln(sn); Readln; End. Trong cách giải thứ nhất để tìm ra số fibonaci thứ n ta phải tính tất cả các giá trị trước đó. Tuy nhiên các giá trị tính toán trước đó không được lưu lại. Đối với cách giải thứ 2 tất cả các giá trị được lưu trong mảng A nên khi cần sử dụng lại những giá trị trước đó máy tính sẽ không phải tính lại. Để thấy rõ hơn ưu nhược điểm của 2 cách ta xét ví dụ 2. Ví dụ 2: Tính tổng 2 số fibonaci thứ n và thứ (n 2). Nếu dùng cách giải chia để trị ta có thể tính tổng rất nhanh bằng cách gọi 1 lời gọi trong chương trình chính: Tong:=fib(n)+ fib(n2); Tuy nhiên với lời gọi trên thì máy tính sẽ phải tính n + (n2)=2n2 phép toán. Trong khi nếu dùng phương pháp quy hoạch động như trong cách 2 ví dụ 1 Ta chỉ cần tính: Tong:=an+an2; Với phương pháp này các giá trị đã được lưu vào mảng nên máy tính chỉ phải tính 1 lần và số phép tính thực hiện là: n. VÍ DỤ 6:BÀI TOÁN TÍNH SỐ TỔ HỢP CHẬP K CỦA N PHẦN TỬ Tìm các phần tử của mảng Cn,k = = số tổ hợp chập k của n phần tử. với Biết rằng: Ý tưởng bài toán: Bài toán trên cho ta gợi ý về thuật toán đệ quy như sau. Function C(n,k:Longint):longint; Begin If (k=0) or (n=0) then c:=1 else C:=C(n1,k1) + C(n1,k); End; Gọi T là thời gian để tính số tổ hợp chập k của n thì ta có phương trình đệ quy như sau T(1) =C1 và T(n)=2T(n1) + C2. Giải phương trình này ta được T(n) = O(2n) Như vậy là một giải thuật thời gian mũ, Trong khi chỉ có một đa thức các bài toán con. Điều đó chứng tỏ rằng có những bài toán con được giải nhiều lần. Chẳng hặn như tính C(4,2) thì ta phải tính C(3,1) và C(3,2). Tính C(3,1) thì phải tính C(2,0) và C(2,1). Tính C(3,2) thì phải tính C(2,1) và C(2,2). Như vậy để tính C(4,2) thì phải tính C(2,1) 2 lần. Hình minh họa Để khắc phục được việc tính toán lập đi lập lại nhiều lần ta có thể sử dụng thuật toán quy hoạch động như sau Ta xây dựng một bảng gồm n+1 dòng (từ 0 đến n) và n+1 cột( từ 0 đến n) và điền giá trị cho C(i,j) theo quy tắc như sau: C(0,0) =1; C(i,0)=1; C(i,i)=1 Với i> 0; C(i,j) = C(i1,j1) + C(i1,j) với 0Ai1,j) then Ai,j:=bi+Ai1,jWi; if (jWib then max:=a else max:=b; end; begin clrscr; assign(f, Xau.inp); reset(f); readln(f,s1); readln(f,s2); close(f); fillchar(l,sizeo(l),0); m:=length(s1); n:= length(s2); for i:=1 to m do for j:=1 to n do if s1i= s2j then li,j : = 1 + li1,j1 else li,j:= max(li,j1,li1,j); s30:=chr(lm,n); i:= m; j:=n; repeat if s1i = s2j then begin insert(s1i,s3,1); dec(i); dec(j); end else begin if li,j = Li1,j then dec(i) else dec(j); end; until (i=0) or (j=0); writeln( s3); write(lm,n); end. Qua thực hiện chương trình cho ta thấy dung quy hoạch động đã khắc phục được nhiều khuyết điểm về mặt thời gian Ví dụ 6: Bài toán Dãy con chung dài nhất Cho hai số nguyên dương M,N (0

Ngày đăng: 02/09/2017, 20:47

Từ khóa liên quan

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

Tài liệu liên quan