Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
143 KB
Nội dung
1 Mở đầu: 1.1 Lí chọn đề tài: Tin học môn học trường trung học phổ thơng (THPT), đưa vào giảng dạy thức trường THPT từ năm 2006 – 2007 Tuy nhiên thực tế môn Tin học đưa vào tham gia thi học sinh giỏi cấp tỉnh, cấp quốc gia từ lâu Như biết, kỳ thi học sinh giỏi lớp tốn tối ưu hóa ln ưu tiên lựa chọn đề thi tính ứng dụng vào thực tiễn cao Để giải lớp tốn tối ưu đó, có nhiều phương pháp như: phương pháp nhánh cận, phương pháp quy hoạch động, phương pháp tham lam Tuy nhiên lại chưa có tài liệu nghiên cứu chuyên sâu vấn đề này, đồng nghiệp, nhà trường chưa có nhiều kinh nghiệm để giải quyết, khắc phục Vậy “Có phải tất tốn tối ưu áp dụng tất phương pháp để giải không?; “Làm để nhận dạng tốn áp dụng phương pháp nào?; “Làm giải tốn phương pháp đó?”;… Chính lý mà nội dung sáng kiến kinh nghiệm lần xin giới thiệu chuyên đề công tác bồi dưỡng học sinh giỏi là: “So sánh phương pháp tham lam quy hoạch động xây dựng thuật toán để ứng dụng bồi dưỡng học sinh giỏi.” 1.2 Mục đích nghiên cứu: Nhằm nâng cao chất lượng giảng dạy học tập học sinh trình bồi dưỡng học sinh giỏi từ nâng cao chất lượng giải kỳ thi học sinh giỏi Tin học 1.3 Đối tượng nghiên cứu: - Học sinh đội tuyển khối 10 khối 11 1.4 Phương pháp nghiên cứu: Trong phần đưa phương pháp nghiên cứu xây dựng sở lý thuyết tổng quan hai phương pháp tham lam, quy hoạch động giới thiệu thêm số phương pháp khác, từ đưa số ví dụ cụ thể có sử dụng hai phương pháp để có sở so sánh, nhằm giúp học sinh nhận biết vận dụng vào loại toán cụ thể 1.5 Những điểm sáng kiến kinh nghiệm: Trong sáng kiến kinh nghiệm này, tơi có rút ưu điểm hạn chế phương pháp tham lam quy hoạch động, từ đưa hướng giải quyết, cách vận dụng nhằm giúp học sinh vận dụng linh hoạt với loại toán giúp đạt hiểu tối ưu Nội dung sáng kiến kinh nghiệm: 2.1 Cơ sở lý luận: Để giải tốn tối ưu cơng tác bồi dưỡng học sinh giỏi có nhiều phương pháp để giải tốn này, ví dụ phương pháp Tham lam, phương pháp Quay lui, phương pháp tìm Nhánh cận, phương pháp Quy hoạch động, Tuy nhiên, làm để nhận dạng tốn áp dụng phương pháp nào?, phương pháp tối ưu hơn? Vậy đưa hai phương pháp tham lam quy hoạch động để tìm hiểu kỹ làm rõ câu hỏi 2.2 Thực trạng vấn đề: Xuất phát từ thực tế, kỳ thi học sinh giỏi tin học lớp tốn tối ưu hóa ln ưu tiên lựa chọn đề kỳ thi học sinh giỏi Tỉnh, kỳ thi Olympic, kỳ thi Quốc gia, ví dụ như: đề thi HSGQG Tin học năm học 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019; đề thi Olympic Tin học 30/4 hầu hết năm; đề thi HSG Tin học Tỉnh Thanh Hóa hầu hết năm Hơn nữa, học sinh thường không nắm rõ phải sử dụng phương pháp giải lớp tốn tối ưu hóa 2.3 Các giải pháp 2.3.1 Phương pháp quy hoạch động 2.3.1.1 Khái niệm phương pháp quy hoạch động a Khái niệm Phương pháp quy hoạch động (Dynamic Programming) kỹ thuật nhằm đơn giản hóa việc tính tốn cơng thức truy hồi cách lưu toàn hay phần kết tính tốn 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 nhà toán học người Mỹ Richard Bellman (1920-1984) phát minh năm 1953 Phương pháp dùng để giải tốn tối ưu có chất đệ quy, tức tìm phương án tối ưu cho tốn đưa tìm phương án tối ưu số hữu hạn toán Điểm khác quy hoạch động phương pháp đệ quy là: Phương pháp đệ quy giải toán theo hướng top-down, nghĩa để giải toán ban đầu, ta phải giải tất tốn Đây phương pháp hay, nhiên phương pháp gặp hạn chế mặt thời gian, tốc độ phải tính tính lại nhiều lần số tốn giống Phương pháp quy hoạch động sử dụng nguyên lý bottom-up, nghĩa "đi từ lên" Đầu tiên, ta phải giải tốn đơn giản nhất, tìm nghiệm Sau kết hợp tốn lại để tìm lời giải cho tốn lớn giải toán yêu cầu Với phương pháp này, toán sau giải xong lưu trữ lại đem sử dụng cần Do tiết kiệm nhớ cải thiện tốc độ b Đặc điểm chung quy hoạch động Quy hoạch động việc giải tất toán nhỏ (bài tốn sở) để từ bước giải toán lớn giải toán lớn (bài toán ban đầu) Quy hoạch động cần phải có bảng phương án Ý 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 độ Tóm lại: + Quy hoạch động dùng để giải toán tối ưu theo nguyên lý “chia để trị” thực chất phương pháp cải tiến phương pháp giải toán theo hướng đệ quy + Quy hoạch động làm giảm độ phức tạp, giảm thời gian giải toán + Quy hoạch động thường tiếp cận theo hướng từ lên (Bottom-up) c Các yêu cầu toán tối ưu sử dụng phương pháp quy hoạch động Một toán tối ưu muốn giải phương pháp quy hoạch động toán tối ưu có đặc điểm đây: i Bài toán lớn phải phân rã thành nhiều toán con, mà phối hợp lời giải tốn cho ta lời giải tốn lớn ii Vì quy hoạch động giải tất tốn nên khơng đủ khơng gian vật lý lưu trữ kết (bộ nhớ, đĩa…) để phối hợp chúng phương pháp quy hoạch động khơng thể thực iii Q trình từ tốn sở tìm lời giải tốn ban đầu phải qua hữu hạn bước 2.3.1.2 Các bước giải toán tối ưu phương pháp quy hoạch động Bước 1: Lập công thức truy hồi Dựa vào nguyên lý tối ưu tìm cách chia trình giải tốn thành giai đoạn, sau tìm hệ thức biểu diễn tương quan định bước xử lý với bước xử lý trước Hoặc tìm cách phân rã tốn thành “bài tốn con” tương tự có kích thước nhỏ hơn, tìm hệ thức nêu quan hệ kết toán kích thước cho với kết “bài tốn con” kiểu có kích thước nhỏ nhằm xây dựng phương trình truy tốn (dạng hàm thủ tục đệ quy) Bước 2: Tổ chức liệu chương trình Tổ chức liệu cho đạt u cầu sau: • Dữ liệu tính tốn dần theo bước • Dữ liệu lưu trữ để giảm lượng tính tốn lặp lại • Kích thước miền nhớ dành cho lưu trữ liệu nhỏ tốt, kiểu liệu chọn phù hợp, nên chọn đơn giản dễ truy cập Cụ thể: • Các giá trị tối ưu toán thường lưu trữ bảng (mảng chiều hai, ba, v.v… chiều) • Cần lưu ý khởi trị giá trị ban đầu bảng cho thích hợp, kết tốn có kích cỡ nhỏ tốn giải • Dựa vào cơng thức giá trị có bảng để tìm dần giá trị lại bảng • Ngồi cần mảng lưu trữ nghiệm tương ứng với giá trị tối ưu gian đoạn • Dựa vào bảng lưu trữ nghiệm bảng giá trị tối ưu giai đoạn xây dựng, tìm kết tốn Bước 3: Truy vết, tìm nghiệm tốn dựa vào bảng phương án Làm tốt thuật toán cách thu gọn hệ thức truy hồi giảm kích thước miền nhớ Thường tìm cách dùng mảng chiều thay cho mảng hai chiều giá trị dòng (hoặc cột) mảng hai chiều phụ thuộc dòng (hoặc cột) kề trước Trong số trường hợp thay mảng hai chiều với giá trị phần tử nhận giá trị 0, mảng hai chiều cách dùng kỹ thuật quản lý bit 2.3.1.3 Ưu điểm hạn chế phương pháp quy hoạch động a Ưu điểm Tiết kiệm thời gian thực khơng cần phải tính tính lại nhiều lần số toán giống Chương trình thực nhanh khơng phải tốn thời gian giải lại toán giải Kỹ thuật quy hoạch động vận dụng để giải tốn tối ưu, tốn có cơng thức truy hồi b Hạn chế Số lượng toán cần giải lưu giữ kết lớn Sự kết hợp lời giải toán chưa cho ta lời giải tốn ban đầu Việc tìm cơng thức truy hồi tìm cách phân rã tốn nhiều đòi hỏi phân tích tổng hợp cơng phu, dễ sai sót, khó nhận thích hợp, đòi hỏi nhiều thời gian suy nghĩ Đồng thời lúc kết hợp lời giải toán cho kết toán lớn Khi bảng lưu trữ đòi hỏi mảng hai, ba chiều… khó xử lý liệu với kích cỡ chiều lớn đến hàng trăm Có tốn tối ưu khơng thể giải quy hoạch động Tóm lại: Khơng phải lúc việc kết hợp toán cho ta kết tốn lớn Hay nói cách khác việc tìm kiếm "cơng thức truy hồi" khó khăn Ngồi ra, số lượng tốn cần lưu trữ lớn, khơng chấp nhận liệu nhớ máy tính khơng cho phép 2.3.1.4 Bài toán balo 0-1 a Phát biểu tốn Cho ba lơ đựng trọng lượng M n đồ vật, đồ vật i có trọng lượng wi giá trị vi (M, wi vi số nguyên dương) Tìm cách lựa chọn đồ vật đựng vào ba lô, chọn loại đồ vật nào, loại lấy cho tổng trọng lượng không vượt M tổng giá trị lớn b Thuật giải • Xây dựng cơng thức - Bài tốn con: F[i, j] giá trị lớn có cách chọn đồ vật {1, 2, …, i} với giới hạn trọng lượng j - Tham số: tham số i j, i = n, j = M; - Công thức truy hồi: Với giới hạn trọng lượng j, việc chọn tối ưu số đồ vật {1, 2, …, i1, i} để có giá trị lớn có hai khả năng: + Nếu trọng lượng ba lô j nhỏ trọng lượng đồ vật i wi (j=w[i]) and (F[i,j] < F[i-1,j-w[i]]+v[i]) then c Độ phức tạp thuật toán F[i,j]:=F[i-1,j-w[i]]+v[i]; end; End; Thuật tốn tính mảng n x M phần tử hai vòng lặp lồng nên độ phức tạp O(nM) d Ví dụ Ta có ba lơ có trọng lượng loại đồ vật với trọng lượng giá trị tương ứng cho bảng bên Bảng 2.1 Thông số đồ vật Loại đồ vật Trọng lượng Giá trị 3 4 5 Dựa vào cơng thức truy hồi ta tính giá trị F[i, j] thu bảng phương án sau: Theo bảng phương án F[4, 5] = 7, giá trị lớn chọn đồ vật Ta thấy F[4, 5] = F[3, 5], tức ta không chọn đồ vật thứ F[3, 5] = F[2, 5], tức ta không chọn đồ vật thứ Truy tiếp, ta thấy F[2, 5] ≠ F[1, 5] nên ta thông báo chọn đồ vật thứ truy tiếp F[n-1, M-wn] F[1, 2] Tiếp theo, ta thấy F[1, 2] ≠ F[0, 2] nên ta thông báo chọn đồ vật thứ 1, truy tiếp đến F[0, 0] dừng Như loại đồ vật sử dụng loại với tổng giá trị lớn 2.3.1.5 Bài toán đổi tiền a Phát biểu tốn Cho n loại tiền giấy có mệnh giá a 1, a2, …, an Cần đổi số tiền S Tìm phương án đổi S thành tờ gồm loại tiền Mỗi phương án (k1, k2, …, kn), ki số tờ mệnh giá ai, i = n Bài tốn quy tìm (k1, k2, …, kn) cho: k1.a1 + k2.a2 + …+ kn.an = S tổng k1 + k2 + … + kn nhỏ b Thuật giải • Xây dựng cơng thức − Bài toán con: L[i] số tờ cần đổi cách đổi tờ số tiền i − Tham số: tham số i, với i = S; − Công thức truy hồi: L[i] = min{L[i - a[k]] + | k = n & i ≥ a[k]} − Điều kiện đầu: L[0] = 0; • Tổ chức liệu Xây dựng mảng chiều L[0 S] với L[i] số tờ cần đổi cách đổi tờ số tiền i Khi số tờ cần đổi cách đổi tờ số tiền S L[S] Xây dựng mảng a[0 n] để ghi nhận mệnh giá đồng tiền Khi a[i] mệnh giá đồng i Xây dựng mảng KQ[0 S] để ghi nhận lại loại tờ cần đổi • Truy vết Như dãy L gồm S+1 ô Trước tiên ta điền sở quy hoạch động 0, sau ta sử dụng cơng thức truy hồi để tính tất lại Sau tính xong dãy L giá trị L[S] thu số tờ cần đổi cách đổi tờ số tiền S Tại bước xây dựng dãy L, đặt L[i] := L[i - a[k]] + 1, ta đặt KQ[i] := k để lưu lại loại tờ tiền k cần chọn phương án đổi tờ số tiền i Sau tính dãy KQ, ta truy vết: KQ[S] loại tờ tiền chọn, KQ[S – a[KQ[S]]] loại tờ tiền thứ hai chọn,… Như vậy, thuật toán quy hoạch động cho toán đổi tiền sau: Procedure DOITIEN_qhd; Begin Fillchar (L, sizeof(L), 0); Fillchar (KQ, sizeof(KQ), 0); For i:=1 to S begin for k:=1 to n if a[k]