1. Trang chủ
  2. » Luận Văn - Báo Cáo

Ứng dụng phương pháp quy hoạch động trong bồi dưỡng học sinh giỏi tin – trung học phổ thông

85 1,2K 8

Đ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

Thông tin cơ bản

Định dạng
Số trang 85
Dung lượng 649,54 KB

Nội dung

Luận văn này bao gồm ba chương. Chương 1 giới thiệu cho chúng ta có cái nhìn khái quát về thuật toán quy hoạch động. Chương 2 giới thiệu về mối quan hệ giữa phương pháp quy hoạch động và một số phương pháp khác: đệ quy, vét cạn, tham lam. Chương 3 phân loại một số bài toán giải bằng phương pháp quy hoạch động. Phần phụ lục là dùng Pascal để cài đặt, giải bài toán được giới thiệu ở chương 3 bằng phương pháp quy hoạch động. Bởi vì hiện nay thi học sinh giỏi THPT chủ yếu là sử dụng ngôn ngữ lập trình Pascal nên toàn bộ các thuật toán sẽ được cài đặt bằng Pascal. Việc này sẽ thuận tiện hơn cho các em học sinh và giáo viên trong việc học tập và giảng dạy.

LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu riêng cá nhân tơi, hướng dẫn khoa học PGS.TS Hoàng Quang Các kết nêu luận văn trung thực chưa cơng bố cơng trình khoa học khác LỜI CẢM ƠN Lời đầu tiên, xin gởi lời cảm ơn chân thành sâu sắc đến Quý thầy cô giáo Khoa Công nghệ thông tin - Trường Đại học Khoa học Huế tận tình hướng dẫn, truyền đạt kiến thức, tạo điều kiện thuận lợi trình học tập thực luận văn tốt nghiệp Tôi xin chân thành gửi lời biết ơn đến PGS.TS Hoàng Quang, người thầy hướng dẫn tận tình có góp ý sâu sắc, hướng dẫn q báu cho tơi suốt q trình nghiên cứu, kịp thời cho nhiều lời động viên nhận xét đắn để tơi hoàn thành tốt đề tài Trong trình thực đề tài, xin chân thành gửi lời cảm ơn đến giúp đỡ, lời động viên từ phía gia đình, đồng nghiệp, bạn bè động lực to lớn giúp tơi hồn thành tốt đề tài nghiên cứu Tơi gửi lời cảm ơn đến trường THPT Đông Hà, nơi công tác tạo điều kiện học thực đề tài nghiên cứu Bản thân cố gắng trình thực đề tài chắn khơng tránh khỏi thiếu sót Kính mong q thầy bạn tận tình góp ý, bảo Xin chân thành cám ơn! MỤC LỤC Trang LỜI CAM ĐOAN i LỜI CẢM ƠN ii MỤC LỤC iii DANH MỤC CÁC HÌNH v MỞ ĐẦU Chương CƠ SỞ LÝ THUYẾT VỀ PHƯƠNG PHÁP QUY HOẠCH ĐỘNG 1.1 MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ PHƯƠNG PHÁP QUY HOẠCH ĐỘNG 1.1.1 Phương pháp quy hoạch động 1.1.2 Các toán gối 1.1.3 Cấu trúc tối ưu 1.1.4 Hai cách tiếp cận quy hoạch động thường dùng 1.1.5 Nguyên lý phương pháp 1.2 CÁC BƯỚC THỰC HIỆN GIẢI BÀI TOÁN QUY HOẠCH ĐỘNG 1.2.1 Các bước thực 1.2.2 Một số ví dụ 11 1.3 TIỂU KẾT CHƯƠNG .17 Chương MỐI QUAN HỆ GIỮA PHƯƠNG PHÁP QUY HOẠCH ĐỘNG VÀ MỘT SỐ PHƯƠNG PHÁP KHÁC 18 2.1 SỰ KHÁC NHAU GIỮA PHƯƠNG PHÁP QUY HOẠCH ĐỘNG VÀ PHƯƠNG PHÁP ĐỆ QUY .18 2.2 MỐI QUAN HỆ GIỮA PHƯƠNG PHÁP QUY HOẠCH ĐỘNG VÀ PHƯƠNG PHÁP VÉT CẠN .20 2.2.1 Giới thiệu thuật toán vét cạn 20 2.2.2 Phương pháp quy hoạch động phương pháp vét cạn .21 2.3 MỐI QUAN HỆ GIỮA PHƯƠNG PHÁP QUY HOẠCH ĐỘNG VÀ PHƯƠNG PHÁP THAM LAM 25 2.3.1 Giới thiệu thuật toán tham lam 25 2.3.2 Phương pháp quy hoạch động phương pháp tham lam 26 2.4 TIỂU KẾT CHƯƠNG .30 Chương PHÂN LOẠI MỘT SỐ BÀI TOÁN GIẢI BẰNG PHƯƠNG PHÁP QUY HOẠCH ĐỘNG 31 3.1 BÀI TỐN XẾP BA LƠ (KNAPSACK) 32 3.2 BÀI TOÁN DÃY CON ĐƠN ĐIỆU DÀI NHẤT .47 3.3 BÀI TOÁN BIẾN ĐỔI XÂU 53 3.4 BÀI TOÁN NHÂN MA TRẬN 61 3.5 BÀI TOÁN GHÉP CẶP .66 3.6 BÀI TOÁN DI CHUYỂN 69 3.7 TIỂU KẾT CHƯƠNG .72 KẾT LUẬN 73 TÀI LIỆU THAM KHẢO 75 PHỤ LỤC DANH MỤC CÁC HÌNH Trang Hình 1.1 Đồ thị toán cho dãy Fibonacci Hình 1.2 Tìm đường ngắn sử dụng cấu trúc tối ưu; đường lượn sóng đại diện cho đường ngắn hai đỉnh mà nối Hình 1.3 Đồ thị có hướng tốn tìm đường dài Hình 2.1 Tam giác Pascal .19 Hình 2.2 Cây biểu diễn khơng gian ứng viên toán giá với n=3 24 Hình 3.1 Bài tốn ba lơ 32 Hình 3.2 Trò chơi với băng số 52 MỞ ĐẦU Tại trường Trung học phổ thông nay, nhiệm vụ quan trọng đào tạo cách toàn diện đồng thời trọng bồi dưỡng lực học sinh Chính tiêu chí đánh giá chất lượng giáo dục trường THPT kết việc thực hoạt động bồi dưỡng học sinh giỏi Đối với giáo viên THPT, bồi dưỡng học sinh giỏi nhiệm vụ quan trọng khó khăn Nó đòi hỏi giáo viên phải tìm hiểu, học tập nhiều kiến thức chuyên ngành phương pháp giảng dạy thích hợp Đối với giáo viên môn Tin học, bồi dưỡng học sinh giỏi đòi hỏi giáo viên phải hiểu biết lập trình cần có phương pháp giảng dạy thuật tốn tốt giúp học sinh dễ dàng tiếp thu vận dụng Học sinh muốn đạt kết cao kỳ thi học sinh giỏi tỉnh cao cần phải có lượng kiến thức lớn sâu việc lập trình Những kiến thức chương trình phổ thơng bình thường khơng đủ đáp ứng Nhiệm vụ giáo viên cung cấp thêm cho em kiến thức, phương pháp lập trình để học sinh đạt kết tốt kỳ thi Có nhiều phương pháp dùng để thiết kế thuật toán như: chia để trị (divide and conquer), vét cạn (exhaustivesearch), tham lam (greedy algorithms), quy hoạch động (dynamic programming) Trong đó, thuật toán áp dụng cho lớp toán phù hợp Trong ngành khoa học máy tính, quy hoạch động (Dynamic Programming) phương pháp giảm thời gian chạy thuật tốn thể tính chất toán gối (overlapping subproblem) cấu trúc tối ưu (optimal substructure) [1] Phương pháp quy hoạch động phương pháp hiệu việc giải tốn tối ưu hố rời rạc Có số toán sử dụng phương pháp quy hoạch động lại cho hiệu cao so với phương pháp khác Trong kỳ thi học sinh giỏi tỉnh cao nay, từ 30% đến 40% thi cần đến quy hoạch động tốn khó, đòi hỏi học sinh phải có tư lập trình cao Có thể có cách khác để giải tốn Nhưng thi có giới hạn thời gian, nhớ chương trình, nên thuật toán hiệu cần thiết Và trường hợp vậy, quy hoạch động thuật toán phù hợp Chỉ cần làm học sinh gần có giải Tuy nhiên việc làm cho em học sinh phổ thơng sử dụng thành thạo phương pháp lập trình khơng phải vấn đề dễ dàng Hiểu rõ thuật toán bước đầu giúp em học sinh tự tin đồng thời phân tích toán xác định phương pháp giải đắn giúp em có thành tích tốt Biết mối quan hệ quy hoạch động phương pháp khác giúp việc giải toán dễ dàng nhanh chóng Là giáo viên giảng dạy môn Tin học trường trung học phổ thông, việc bồi dưỡng học sinh giỏi nhiệm vụ vô quan trọng, nhận thấy việc ứng dụng phương pháp quy hoạch động thiết kế thuật toán mảng kiến thức cần thiết học sinh tham gia bồi dưỡng học sinh giỏi Vì vậy, chọn đề tài “Ứng dụng phương pháp Quy hoạch động bồi dưỡng học sinh giỏi Tin – Trung học phổ thông” để làm đề tài nghiên cứu Hy vọng tư liệu hữu ích cho giáo viên, học sinh người quan tâm đến phương pháp Luận văn bao gồm ba chương Chương giới thiệu cho có nhìn khái qt thuật tốn quy hoạch động Chương giới thiệu mối quan hệ phương pháp quy hoạch động số phương pháp khác: đệ quy, vét cạn, tham lam Chương phân loại số toán giải phương pháp quy hoạch động Phần phụ lục dùng Pascal để cài đặt, giải toán giới thiệu chương phương pháp quy hoạch động Bởi thi học sinh giỏi THPT chủ yếu sử dụng ngôn ngữ lập trình Pascal nên tồn thuật tốn cài đặt Pascal Việc thuận tiện cho em học sinh giáo viên việc học tập giảng dạy Mặc dù thân tơi ln cố gắng q trình thực đề tài chắn không tránh khỏi thiếu sót, kính mong q thầy bạn tận tình góp ý, bảo Chương CƠ SỞ LÝ THUYẾT VỀ PHƯƠNG PHÁP QUY HOẠCH ĐỘNG Quy hoạch động không nằm nội dung chương trình tin học phổ thơng kỹ thuật lập trình thường sử dụng kỳ thi học sinh giỏi, Olympic, tin học trẻ… Chương giới thiệu thuật toán quy hoạch động, bao gồm phần: khái niệm quy hoạch động, bước để giải tốn quy hoạch động số ví dụ minh hoạ 1.1 MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ PHƯƠNG PHÁP QUY HOẠCH ĐỘNG 1.1.1 Phương pháp quy hoạch động Trong ngành khoa học máy tính, quy hoạch động phương pháp giảm thời gian chạy thuật tốn thể tính chất toán gối (overlapping subproblem) cấu trúc tối ưu (optimal substructure) [7] Nhà toán học Richard Bellman (1920-1984) phát minh phương pháp quy hoạch động vào năm 1953 Phương pháp xây dựng chủ đề kỹ thuật phân tích tốn tổ chức IEEE thừa nhận [2] Phương pháp quy hoạch động việc giải tất toán nhỏ (bài toán sở) để từ bước giải toán lớn giải toán lớn (bài toán ban đầu) Ý tưởng phương pháp quy hoạch động tránh tính tốn lại tốn xét, nói cách khác phương pháp quy hoạch động thể sức mạnh nguyên lý chia để trị đến cao độ 1.1.2 Các toán gối Tương tự thuật toán chia để trị, quy hoạch động chia toán lớn thành toán nhỏ Quy hoạch động sử dụng toán gọi gọi lại Phương pháp quy hoạch động lưu kết toán này, gọi, khơng cần phải tính lại, làm giảm thời gian tính tốn Quy hoạch động khơng thể áp dụng (hoặc nói áp dụng khơng có tác dụng gì) tốn khơng gối Ví dụ với thuật tốn tìm kiếm nhị phân, quy hoạch động khơng thể tối ưu cả, chia nhỏ tốn lớn thành toán con, toán cần giải lần mà không gọi lại Một ví dụ điển hình tốn gối tốn tính số Fibonacci Việc thực thuật tốn đệ quy khơng tối ưu mặt thời gian/khơng gian nhớ Hình 1.1 Đồ thị tốn cho dãy Fibonacci Đây khơng phải cấu trúc mà đồ thị có hướng phi chu trình mơ tả quan hệ tốn gối Ví dụ: Tính phần tử thứ n dãy số Fibonaci Function F(n: integer): integer; Begin If n then F:=1 else F:= F(n-1)+F(n-2); End; Độ phức tạp: O(an) với a  1.61803 Do F(n-1) F(n-2) tính cách độc lập Số lần gọi cần để tính F(n) số lần gọi để tính F(n-1) cộng với số lần gọi để tính F(n-2) Nếu tính tốn trên, có nhiều tốn tính tính lại, điển hình số F(1) F(2) Đặc điểm lời giải đệ quy: thực tốn từ việc phân tích mức cao xuống mức thấp.Và quy hoạch động số phương pháp giúp tối ưu hóa q trình tính tốn Mỗi tốn (số F) lưu lại trước tính tốn lớn Nhờ đó, mà việc tính toán giảm đáng kể, toán cần tính lần Một ví dụ quy hoạch động với toán cách giải từ mức thấp lên mức cao ta có thuật tốn sau: Function F(n: integer): integer; var i: integer; a: array[1 100] of integer; Begin a[1]:=1; a[2]:=1; For i:=3 to n a[i]:=a[i-1]+a[i-2]; F:= a[n]; End; Độ phức tạp: O(n) Đặc điểm lời giải toán theo phương pháp quy hoạch động: giải toán đệ quy từ mức thấp trước, lời giải chúng lưu lại sử dụng để tìm lời giải tốn mức cao [7] 1.1.3 Cấu trúc tối ưu Hình 1.2 Tìm đường ngắn sử dụng cấu trúc tối ưu; đường lượn sóng đại diện cho đường ngắn hai đỉnh mà nối Cấu trúc tối ưu có nghĩa lời giải tối ưu cho toán sử dụng để tìm lời giải tối ưu cho tốn tồn cục [7] Ví dụ, đường ngắn tới đỉnh đồ thị tìm thấy cách: trước hết tính đường ngắn tới đích từ tất đỉnh kề nó, dùng kết để chọn đường toàn cục tốt nhất, hình 1.2 Nói chung, ta giải toán với cấu trúc tối ưu quy trình ba bước: [3] Lê Minh Hồn(2002), Chun đề Giải thuật lập trình, Đại học sư phạm Hà Nội [4] Trần Đỗ Hùng (Chủ biên - 2007) Bài tập quy hoạch động (chuyên đề bồi dưỡng HSG THPT), Nxb Giáo dục Việt Nam [5] Võ Văn Trị (2013), Chuyên đề Quy hoạch động trạng thái, THPT chuyên Võ Nguyên Giáp, Quảng Bình [6] N Wirth (1982), Cấu trúc liệu + Giải thuật = Chương trình, Bản dịch tiếng Việt Nguyễn Văn Ba, Nguyễn Văn Lư, Vũ Duy Mẫn, Hồ Thuần, Nxb Thống kê Tiếng Anh [7] T Cormen, C E Leiserson, R L Rivest (2005), Introduction to Algorithms, Cambridge, MIT Press, 2nd Edition [8] Stuart Dreyfus (2002), Richard Bellman on the birth of Dynamic Programming [9] Albert Cohen (2007), Approximation by Greedy Algorithms, SIAM News, Volume 40, Number [10] J D Smith (2000), Design and Analysis of Computer Algorithms, PWSKENT 66 PHỤ LỤC MỘT SỐ CHƯƠNG TRÌNH MINH HOẠ Knapsack khơng bị chặn program btctx; const fi='ChiecTX.inp'; fo='ChiecTX.Out'; var r,s,n,p,k:integer; m,x:array[0 100] of byte; c:array[0 100] of real; l:array[0 50,0 50] of real; u:array[0 50,0 50] of byte; procedure nhapdl; var i:byte; begin assign(input,fi); reset(input); assign(output,fo); rewrite(output); read(n);read(p); for i:=1 to n begin read(m[i]); read (c[i]); readln; end; end; procedure lapbang; var tam:real; begin for s:=1 to n for r:=0 to p if s=1 then begin u[r,1]:=r div m[1]; l[r,1]:=u[r,1]*c[1]; end else begin PL1 {tính u[r,s] l[r,s]} l[r,s]:=0; u[r,s]:=0; for k:=0 to r div m[s] begin tam:=k*c[s]+l[r-k*m[s],s-1]; if tam>l[r,s] then begin l[r,s]:=tam; u[r,s]:=k; end; end; end; end; procedure tonghop; var k:byte; begin r:=p; For s:=n downto Begin x[s]:=u[r,s]; r:=r-x[s]*m[s]; End; writeln('Gia tri cuc dai cua tui xach la:',l[p,n]); for s:=1 to n writeln('Do vat ',s,' can lay: ',x[s], ' cai'); end; procedure dongtep; begin close(input); close(output); end; BEGIN nhapdl; lapbang; tonghop; PL2 dongtep; END Knapsack 0/1 program btctx; const fi='ChiecTX.inp'; fo='ChiecTX.Out'; var r,s,n,p,k:integer; m,x:array[0 100] of byte; c:array[0 100] of real; l:array[0 50,0 50] of real; u:array[0 50,0 50] of byte; procedure nhapdl; var i:byte; begin assign(input,fi); reset(input); assign(output,fo); rewrite(output); read(n);read(p); for i:=1 to n begin read(m[i]); read (c[i]); readln; end; end; procedure lapbang; var tam:real; begin for s:=1 to n for r:=0 to p if s=1 then if m[1]l[r,s] then begin l[r,s]:=tam; u[r,s]:=k; end; end; end; end; procedure tonghop; var k:byte; begin r:=p; For s:=n downto Begin x[s]:=u[r,s]; r:=r-x[s]*m[s]; End; writeln('Gia tri cuc dai cua tui xach la:',l[p,n]); for s:=1 to n writeln('Do vat ',s,' can lay: ',x[s], ' cai'); end; procedure dongtep; begin close(input); close(output); PL4 end; BEGIN nhapdl; lapbang; tonghop; dongtep; END Dãy đơn điệu dài uses crt; Const Max = 5000; fi='DCTDN.INP'; fo='DCTDN.OUT'; Var a,L,T:array [1 Max] of integer; i,j,N,jmax:integer; g:text; Procedure Docfile; var i:integer; begin assign(input,fi); reset(input); assign(output,fo); rewrite(output); readln(n); for i:=1 to n read (a[i]); end; procedure Lapbang; Begin L[1]:=1;T[1]:=0;a[N+1]:=32767; for i:=2 to N+1 begin jmax:=0; L[i]:=1; for j:=1 to i-1 if (a[j]b then min:=b else min:=a; if min>c then min:=c; end; Procedure Docfile; PL6 Begin Assign(input,fi); Reset(input); Assign(output,fo); Rewrite(output); Readln(X); Readln(F); End; Procedure Lapbang; Var i,j:integer; Begin m:=Length(X); n:=length(F); For i:=0 to m L[i,-1]:=101; For j:=0 to n L[-1,j]:=101; For i:=1 to m L[i,0]:=i; For j:=1 to n L[0,j]:=j; For i:=1 to M For j:=1 to N Begin If X[i]=F[j] then L[i,j]:=L[i-1,j-1]; If X[i]F[j] then L[i,j]:=Min(L[i-1,j],L[i,j-1],L[i-1,j-1]) +1; End; writeln(L[m,n]); End; Procedure Tonghopketqua; Var i,j:integer; Begin While (m0) or (n0) If X[m]=F[n] then Begin dec(m); dec(n); End Else Begin Write(X,' ->'); PL7 If L[m,n]=L[m,n-1]+1 then Begin Write('Insert(',m,', ',F[n],')'); Insert(F[n],X,m+1); dec(n); End Else If L[m,n]=L[m-1,n-1]+1 then Begin write('Replace(',m,', ',F[n],')'); X[m]:=F[n]; dec(n); dec(m); End Else Begin write('Delete(',m, ')'); Delete(X,m,1); dec(m); End; writeln('->', X); End; End; Procedure Dongfile; Begin close(input); close(output); End; BEGIN Docfile; Lapbang; Tonghopketqua; Dongfile END Bài toán nhân ma trận program PhepNhanToHopNhieuMaTran; const fi='PNNMT.inp'; fo='PNNMT.Out'; PL8 var n,i,s,v,r:byte; m:array[0 100] of byte; x:array[1 100] of byte; l:array[1 50,1 50] of real; k:array[1 50,1 50] of byte; procedure nhapdl; var j:byte; begin assign(input,fi); reset(input); assign(output,fo); rewrite(output); readln(n); for j:=0 to n readln(m[j]); end; procedure lapbang; var tam:real; begin for s:=1 to n for r:=s downto if r=s then l[r,s]:=0 else begin {tinh l[r,s] va k[r,s]} l[r,s]:=m[r-1]*m[r]*m[r+1]; k[r,s]:=r; for v:=r to s-1 begin tam:=l[r,v]+m[r-1]*m[v]*m[s]+l[v+1,s]; {writeln('tam:',tam:4:0); writeln('l[',r,',',s,']:',l[r,s]:4:0);} if tamb then max:=a else max:=b; if max

Ngày đăng: 17/01/2019, 17:23

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w