SKKN áp dụng phương pháp QHĐ để giải quyết các bài toán tối ưu trong tin học

20 783 1
SKKN áp dụng phương pháp QHĐ để giải quyết các bài toán tối ưu trong tin học

Đ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 2014 – Mai Hồng Kiên -THPT chuyên SỞ GIÁO DỤC VÀ ĐÀO TẠO LÀO CAI TRƯỜNG THPT CHUYÊN TỈNH LÀO CAI - - SÁNG KIẾN KINH NGHIỆM ỨNG DỤNG PHƯƠNG PHÁP QHĐ VÀO GIẢI QUYẾT MỘT SỐ BÀI TOÁN TRONG TIN HỌC HỌ TÊN GIÁO VIÊN: MAI HỒNG KIÊN Đơn vị: Tổ Toán - tin Năm học 2013 – 2014 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên MỤC LỤC Nội dung Đặt vấn đề Giải vấn đề 2.1 Cơ sở lý luận 2.2 Thực trạng vấn đề 2.3 Các biện pháp thực giải vấn đề 2.3.1 Áp dụng phương pháp QHĐ 2.3.2 Ví dụ minh họa 2.3.3 Một số toán tối ưu giải phương pháp QHĐ 2.4 Hiệu SKNN Kết luận Tài liệu tham khảo Trang 4 16 17 17 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên Đặt vấn đề - Sự phát triển vũ bão Công nghệ Thông tin Truyền thông đóng vai trò không nhỏ phát triển chung nhân loại Đảng nhà nước xác định rõ ý nghĩa tầm quan trọng tin học, Công nghệ Thông tin Truyền thông yêu cầu đẩy mạnh ứng dụng Công nghệ Thông tin, đào tạo hệ trẻ động, sáng tạo, nắm vững tri thức khoa học công nghệ để làm chủ hoàn cảnh công tác hoạt động xã hội thời kỳ công nghiệp hóa đại hóa đất nước - Chính xác định tầm quan trọng nên nhà nước đưa môn tin học vào nhà trường từ tiểu học học sinh tiếp xúc môn tin học để làm quen dần với lĩnh vực công nghệ thông tin, tạo móng ban đầu để học phần nâng cao - Trong chương trình Tin học THPT lớp 10 học sinh giới thiệu kiến thức đại cương tin học, lớp 11 học sinh giới thiệu lập trình, lớp 12 học sinh học sở liệu Trong chương trình Tin học THPT chương trình lớp 11 phần cho khó nhất, học sinh phải làm quen với ngôn ngữ lập trình Pascal nắm số thuật toán Chương trình tin học lớp 11 nhằm rèn luyện tư thuật toán cho học sinh, rèn luyện kĩ lập trình, tính kiên trì, tỉ mỉ cẩn thận - Tuy nhiên từ thực tiễn giảng dạy học sinh đại trà học sinh đội tuyển tin học trường THPT chuyên Lào Cai thấy rằng, học sinh gặp khó khăn chuyển lời giải toán từ toán sang ngôn ngữ lập trình Đặc biệt việc phân tích toán, nhận biết toán giải phương pháp nào, cỏ lời giải tối ưu hay không ? Xuất phát từ sở trên, chọn đề tài “Áp dụng phương pháp quy hoạch động để giải toán tối ưu tin học”, giúp học sinh nắm phương pháp quy hoạch động giải toán tối ưu tin học Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên Giải vấn đề 2.1 Cơ sở lí luận - Nguyên lý tối ưu Bellman Phương pháp quy hoạch động nguyên lý tối ưu nhà toán học Mỹ R.Bellman đề xuất vào năm 50 kỷ 20 Phương pháp áp dụng để giải hàng loạt toán thực tế trình kỹ thuật cộng nghệ, tổ chức sản xuất, kế hoạch hoá kinh tế… Trong thực tế, ta thường gặp số toán tối ưu loại sau: Có đại lượng f hình thành trình gồm nhiều giai đoạn ta quan tâm đến kết cuối giá trị f phải lớn nhỏ nhất, ta gọi chung giá trị tối ưu f Giá trị f phụ thuộc vào đại lượng xuất toán mà giá trị chúng gọi trạng thái hệ thống phụ thuộc vào cách thức đạt giá trị f giai đoạn mà cách tổ chức gọi điều khiển Đại lượng f thường gọi hàm mục tiêu trình đạt giá trị tối ưu f gọi trình điều khiển tối ưu Bellman phát biểu nguyên lý tối ưu (cũng gọi nguyên lý Bellman) mà ý tưởng sau: “Với trình điều khiển tối ưu, trạng thái bắt đầu A0, với trạng thái A trình đó, phần trình kể từ trạng thái A xem trạng thái bắt đầu tối ưu” Chú ý nguyên lý thừa nhận mà không chứng minh Phương pháp tìm điều khiển tối ưu theo nguyên lý Bellman thường gọi quy hoạch động Thuật ngữ nói lên thực chất trình điều khiển động: số bước lựa chọn điều khiển tối ưu dường không tốt tựu chung trình lại tốt Hiểu một cách đơn giản quy hoạch động là phương pháp giải bài toán từ nhỏ đến lớn, việc giải – tìm phương án tối ưu của các bài toán nhỏ và lưu trữ các kết quả Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên này lại sẽ giúp ta có thể giải các bài toán với kích thước lớn dần đến đạt được kết quả mong muốn 2.2 Thực trạng vấn đề Xét toán sau: Cho dãy N số nguyên A1, A2,…,AN Hãy tìm cách xoá số số hạng để dãy lại đơn điệu hay nói cách khác chọn số nhiều số hạng cho dãy B gồm số hạng theo trình tự xuất dãy A đơn điệu Quá trình chọn B điều khiển qua N giai đoạn để đạt mục tiêu số lượng số hạng dãy B nhiều nhất, điều khiển giai đoạn i thể việc chọn hay không chọn Ai vào dãy B Giả sử dãy cho 10 Nếu ta chọn 1, 8, 10 chọn số hạng bỏ qua 10 ta chọn số hạng 1, 2, 4, 6, Khi giải toán cách “chia để trị” chuyển việc giải toán kích thước lớn việc giải nhiều toán kiểu có kích thước nhỏ thuật toán thường thể chương trình đệ quy Khi đó, thực tế, nhiều kết trung gian phải tính nhiều lần Vậy ý tưởng quy hoạch động : Tránh tính toán lại thứ hai lần, mà lưu giữ kết tìm kiếm vào bảng làm giả thiết cho việc tìm kiếm kết trường hợp sau Chúng ta làm đầy dần giá trị bảng kết trường hợp trước giải Kết cuối kết toán cần giải 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 độ Quy hoạch động kỹ thuật thiết kế bottom-up (từ lên) Nó bắt đầu với trường hợp nhỏ (thường đơn giải giải ngay) Bằng cách tổ hợp kết có (không phải tính lại) trường hợp con, đạt đạt Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên tới kết trường hợp có kích thước lớn dần lên tổng quát hơn, cuối đạt tới lời giải trường hợp tổng quát Trong số trường hợp, giải toán A, trước hết ta tìm họ toán A(p) phụ thuộc tham số p (có thể p véc tơ) mà A(p0)=A với p0 trạng thái ban đầu toán A Sau tìm cách giải họ toán A(p) với tham số p cách áp dụng nguyên lý tối ưu Bellman Cuối cho p=p nhận kết toán A ban đầu 2.3 Các biện pháp thực giải vấn đề 2.3.1 Áp dụng phương pháp quy hoạch động Bước 1: Lập hệ thức Dựa vào nguyên lý tối ưu tìm cách chia trình giải toá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ã toán thành “bài toá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 toán con” kiểu có kích thước nhỏ nhằm xây dựng phương trình truy toán (dạng hàm thủ tục đệ quy) Về cách xây dựng phương trình truy toán: Ta chia việc giải toán thành n giai đoạn Mỗi giai đoạn i có trạng thái ban đầu t(i) chịu tác động điều khiển d(i) biến thành trạng thái t(i+1) giai đoạn i+1 (i=1,2,…,n-1) Theo nguyên lý tối ưu Bellman việc tối ưu giai đoạn cuối không làm ảnh hưởng đến kết toàn toán Với trạng thái ban đầu t(n) sau làm giai đoạn n tốt ta có trạng thái ban đầu giai đoạn n-1 t(n-1) tác động điều khiển giai đoạn n-1 d(n-1), tiếp tục xét đến giai đoạn n-1 Sau tối ưu giai đoạn n-1 ta lại có t(n-2) d(n-2) lại tối ưu giai đoạn n-2 … giai đoạn từ n giảm đến tối ưu coi hoàn thành toán Gọi giá trị tối ưu toán tính đến giai đoạn k Fk, giá trị tối ưu toán tính riêng giai đoạn k Gk Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên Fk = Fk-1 + Gk ax {G k (t (k ), d ( k )) + Fk −1 (t (k − 1))} (*) Hay là: F1 (t (k )) = m ∀d ( k ) Bước 2: Tổ chức liệu chương trình Tổ chức liệu cho đạt yêu cầu sau:  Dữ liệu tính toán dần theo bước  Dữ liệu lưu trữ để giảm lượng tính toá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ị Fk 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 toán có kích cỡ nhỏ toán giải: F1 (t (1)) = m ax {G (t (1), d (1)) + F0 (t (0))} ∀d (1) • Dựa vào công thức, phương trình truy toán (*) giá trị có bảng để tìm dần giá trị lại bảng • Ngoà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 toán Bước 3: Làm tốt Làm tốt thuật toán cách thu gọn hệ thức (*) 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 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên 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.2 Ví dụ minh họa Cho số tự nhiên n ≤ 100 Hãy cho biết có cách phân tích số n thành tổng dãy số nguyên dương, cách phân tích hoán vị tính cách n = có cách phân tích: = + + + + = + + + = + + = + + 5 = + = + = (Lưu ý: n = coi có cách phân tích thành tổng số nguyên dương (0 tổng dãy rỗng) Bước 1: Lập hệ thức Nhận xét: Nếu gọi F[m, v] số cách phân tích số v thành tổng số nguyên dương ≤ m Khi đó: Các cách phân tích số v thành tổng số nguyên dương ≤ m chia làm hai loại: - Loại 1: Không chứa số m phép phân tích, số cách phân tích loại số cách phân tích số v thành tổng số nguyên dương < m, tức số cách phân tích số v thành tổng số nguyên dương ≤ m - F[m - 1, v] - Loại 2: Có chứa số m phép phân tích Khi cách phân tích loại ta bỏ số m ta cách phân tích số v - m thành tổng số nguyên dương ≤ m (Lưu ý: điều không tính lặp lại Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên hoán vị cách) Có nghĩa mặt số lượng, số cách phân tích loại F[m, v - m] Trong trường hợp m > v rõ ràng có cách phân tích loại 1, trường hợp m ≤ v có cách phân tích loại loại Vì thế: F[m 1, v]; if m > v F[m, v]=  F[m-1,v]+F[m,v-m]; if m ≤ v Bước 2: Tổ chức liệu chương trình Ta có công thức xây dựng F[m, v] từ F[m - 1, v] F[m, v - m] Công thức có tên gọi công thức truy hồi đưa việc tính F[m, v] việc tính F[m', v'] với liệu nhỏ Tất nhiên cuối ta quan tâm đến F[n, n]: Số cách phân tích n thành tổng số nguyên dương ≤ n Ví dụ với n = 5, bảng F là: F m 1 1 1 1 1 1 2 2 3 3 4 5 V Nhìn vào bảng F, ta thấy F[m, v] tính tổng của: Một phần tử hàng trên: F[m - 1, v] phần tử hàng, bên trái: F[m, v - m] Cài đặt: program Analysis_Counting; const max = 100; var F: array[0 max, max] of Integer; n, m, v: Integer; begin Write('n = '); ReadLn(n); FillChar(F[0], SizeOf(F[0]), 0); F[0, 0] := 1; Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên end for m := to n for v := to n if v < m then F[m, v] := F[m - 1, v] else F[m, v] := F[m - 1, v] + F[m, v - m]; WriteLn(F[n, n], ' Analyses'); Bước 3: Làm tốt Cải tiến dùng mảng chiều Cách làm tóm tắt lại sau: Khởi tạo dòng bảng, sau dùng dòng tính dòng 1, dùng dòng tính dòng v.v… tới tính hết dòng n Có thể nhận thấy tính xong dòng thứ k việc lưu trữ dòng từ dòng tới dòng k - không cần thiết việc tính dòng k + phụ thuộc giá trị lưu trữ dòng k Vậy ta dùng hai mảng chiều: Mảng Current lưu dòng thời xét bảng mảng Next lưu dòng kế tiếp, mảng Current gán giá trị tương ứng dòng Sau dùng mảng Current tính mảng Next, mảng Next sau tính mang giá trị tương ứng dòng Rồi lại gán mảng Current := Next tiếp tục dùng mảng Current tính mảng Next, mảng Next gồm giá trị tương ứng dòng v.v… Vậy ta có cài đặt cải tiến sau: program Analysis_Counting_2; const max = 100; var Current, Next: array[0 max] of Integer; n, m, v: Integer; begin Write('n = '); ReadLn(n); FillChar(Current, SizeOf(Current), 0); Current[0] := 1; for m := to n begin for v := to n if v < m then Next[v] := Current[v] else Next[v] := Current[v] + Next[v - m]; Current := Next; end; WriteLn(Current[n], ' Analyses'); end 10 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên 2.3.3 Một số toán tối ưu giải phương pháp quy hoạch động Bài toán 1: Bài toán túi Trong siêu thị có n gói hàng (n ≤ 100), gói hàng thứ i có trọng lượng W[i] ≤ 100 trị giá V[i] ≤ 100 Một tên trộm đột nhập vào siêu thị, tên trộm mang theo túi mang tối đa trọng lượng M (M ≤ 100) Hỏi tên trộm lấy gói hàng để tổng giá trị lớn Input: file văn BAG.INP - Dòng 1: Chứa hai số n, M cách dấu cách - n dòng tiếp theo, dòng thứ i chứa hai số nguyên dương W[i], V[i] cách dấu cách Output: file văn BAG.OUT - Dòng 1: Ghi giá trị lớn tên trộm lấy - Dòng 2: Ghi số gói bị lấy BAG.INP BAG.OUT 11 11 33 521 44 54 10 44 Bài giải: Nếu gọi F[i, j] giá trị lớn có cách chọn gói {1, 2, …, i} với giới hạn trọng lượng j Thì giá trị lớn chọn số n gói với giới hạn trọng lượng M F[n, M] Công thức truy hồi tính F[i, j] 11 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên Với giới hạn trọng lượng j, việc chọn tối ưu số gói {1, 2, …, i - 1, i} để có giá trị lớn có hai khả năng: o Nếu không chọn gói thứ i F[i, j] giá trị lớn cách chọn số gói {1, 2, …, i - 1} với giới hạn trọng lượng j Tức F[i, j] = F[i - 1, j] o Nếu có chọn gói thứ i (tất nhiên xét tới trường hợp mà W[i] ≤ j) F[i, j] giá trị gói thứ i V[i] cộng với giá trị lớn có cách chọn số gói {1, 2, …, i - 1} với giới hạn trọng lượng j - W[i] Tức mặt giá trị thu được: F[i, j] = V[i] + F[i - 1, j - W[i]] Vì theo cách xây dựng F[i, j] giá trị lớn có thể, nên F[i, j] Max giá trị thu Cơ sở quy hoạch động: Dễ thấy F[0, j] = giá trị lớn cách chọn số gói = Tính bảng phương án: Bảng phương án F gồm n + dòng, M + cột, trước tiên điền sở quy hoạch động: Dòng gồm toàn số Sử dụng công thức truy hồi, dùng dòng tính dòng 1, dùng dòng tính dòng 2, v.v… đến tính hết dòng n Truy vết Tính xong bảng phương án ta quan tâm đến F[n, M] giá trị lớn thu chọn n gói với giới hạn trọng lượng M Nếu F[n, M] = F[n 1, M] tức không chọn gói thứ n, ta truy tiếp F[n - 1, M] Còn F[n, M] ≠ F[n 1, M] ta thông báo phép chọn tối ưu có chọn gói thứ n truy tiếp F[n - 1, M W[n]] Cứ tiếp tục truy lên tới hàng bảng phương án program Bag; const InputFile = 'BAG.INP'; OutputFile = 'BAG.OUT'; max = 100; var W, V: Array[1 max] of Integer; F: array[0 max, max] of Integer; n, M: Integer; 12 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên procedure Enter; var i: Integer; fi: Text; begin Assign(fi, InputFile); Reset(fi); ReadLn(fi, n, M); for i := to n ReadLn(fi, W[i], V[i]); Close(fi); end; procedure Optimize; var i, j: Integer; begin FillChar(F[0], SizeOf(F[0]), 0); for i := to n for j := to M begin {Tính F[i, j]} F[i, j] := F[i - 1, j]; if (j >= W[i]) and (F[i, j] < F[i - 1, j - W[i]] + V[i]) then F[i, j] := F[i - 1, j - W[i]] + V[i]; end; end; procedure Trace; var fo: Text; begin Assign(fo, OutputFile); Rewrite(fo); WriteLn(fo, F[n, M]); while n begin if F[n, M] F[n - 1, M] then begin Write(fo, n, ' '); M := M - W[n]; end; Dec(n); end; Close(fo); end; begin Enter; 13 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên Optimize; Trace; end Bài toán 2: Chia thưởng Cần chia hết m phần thưởng cho n học sinh theo thứ tự từ giỏi trở xuống cho bạn không nhận phần thưởng bạn xếp sau ≤ m, n ≤ 70 Hãy tính số cách chia Thí dụ, với số phần thưởng m = 7, số học sinh n = có 11 cách chia phần thưởng cho học sinh theo yêu cầu đầu Đó là: Phương án 10 11     5 4 3 2 3 2 0 1 1 0 0 0 0 1 Bài giải Lập hệ thức Gọi Chia(i, j) số cách chia i phần thưởng cho j học sinh, ta thấy: - Nếu học sinh (j = 0) cách chia (Chia = 0) 14 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên - Nếu phần thưởng (i = 0) có cách chia (Chia(0,j) = - học sinh nhận phần thưởng) Ta quy ước Chia(0, 0) = - Nếu số phần thưởng số học sinh (i < j) phương án chia, từ học sinh thứ i + trở không nhận phần thưởng nào: Chia(i, j) = Chia(i, i) i < j Ta xét tất phương án chia trường hợp i ≥ j Ta tách phương án chia thành hai nhóm không giao dựa số phần thưởng mà học sinh đứng cuối bảng thành tích, học sinh thứ j, nhận: - Nhóm thứ gồm phương án học sinh thứ j không nhận thưởng, tức i phần thưởng chia cho j - học sinh đó, số cách chia, tức số phần tử nhóm là: Chia(i, j - 1) - Nhóm thứ hai gồm phương án học sinh thứ j nhận thưởng Khi đó, học sinh đứng cuối bảng thành tích nhận thưởng học sinh khác có thưởng Do thưởng nên ta bớt người phần thưởng (để họ lĩnh sau), số phần thưởng lại (i - j) chia cho j học sinh Số cách chia Chia(i - j, j) Tổng số cách chia cho trường hợp i ≥ j tổng số phần tử hai nhóm, ta có: Chia(i, j) = Chia(i, j - 1) + Chia(i - j, j) Tổng hợp lại ta có: Điều kiện i: số phần thưởng j: số học sinh j=0 i = and j ≠ i } if i = then {i = 0; j > } Chia := else {i,j > } if i < j then {0 < i < j } Chia := Chia(i,i) else {i >= j > } Chia := Chia(i,j-1)+Chia(i-j,j); end; Phương án chạy chậm phát sinh nhiều lần gọi hàm trùng lặp Bảng liệt kê số lần gọi hàm Chia giải toán chia thưởng với bảy phần thưởng (m = 7) học sinh (n = 4) Thí dụ, hàm Chia(1,1) gọi lần,… Tổng số lần gọi hàm Chia 79 79 lần gọi hàm để sinh kết 11 tốn 16 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên              1 9 6 0 5 1 3 1 2 0 1 0 1 1 Số lần gọi hàm Chia cục tính hàm Chia(7,4) Làm tốt Phương án dễ triển khai chương trình chạy lâu Diễn tả đệ quy thường sáng, nhàn tản, thực sinh tượng gọi lặp lại hàm đệ quy Cải tiến tránh lần gọi lặp Muốn tính sẵn giá trị hàm theo trị đầu vào khác điền vào mảng hai chiều cc Mảng cc mô tả sau: 17 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên const j-1 i-j i [i,j1] j [i-j,j] [i,j] MN = 70;{ gioi han tren cua m va n } var cc: array[0 MN,0 MN] of longint; Ta quy ước cc[i, j] chứa số cách chia i phần thưởng cho j học sinh Theo phân tích phương án 1, ta có:  cc[0, 0] = 1; cc[i, 0] = 0, với i:=1 m  cc[i, j] = cc[i, i], i < j  cc[i, j] = cc[i, j-1]+cc[i-j, j], i ≥ j Từ ta suy quy trình điền trị vào bảng cc sau:  Khởi trị  cc[0,0 ]:= 1;  với i := m: cc[i,0] := 0;  Điền bảng: Lần lượt điền theo cột j:= n Tại cột j ta đặt:  với i := j-1: cc[i,j] := cc[i,i];  với i := j m: cc[i,j] := cc[i,j-1]+cc[i-j,j]; Nhận kết quả: Sau điền bảng, giá trị cc[m, n] kết cần tìm Phương án dùng mảng chiều: function Chia2(m,n: integer):longint; var i,j: integer; begin cc[0,0] := 1; for i := to m cc[i,0] := 0; for j := to n begin for i := to j-1 cc[i,j] := cc[i,i]; 18 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên for i := j to m cc[i,j] := cc[i,j-1]+cc[i-j,j]; end; Chia2 := cc[m,n]; end; 2.4 Hiệu SKKN - Trong trình trao đổi, thảo luận, trình bày học sinh thể khả vận dụng, hiểu biết nên em tỏ hăng hái việc giơ tay phát biểu tranh luận - Đa số học sinh lớp 11Toán, 11A1 nắm “phương pháp quy hoạch động” 100% học sinh đội tuyển nắm vận dụng tốt kĩ thuật - Kết đạt được: Trong năm học trước 2011-2012, 2012-2013 đội tuyển Tin học trường giải HSGQG đến năm học 2013-2014 đội tuyển Tin học trường đạt giải HSG cấp tỉnh có giải giải nhì 01 giải HSG Quốc gia 19 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên Kết luận Như nói trên, chìa khóa thuật toán quy hoạch động việc xây dựng toán mà ta gọi mảng quy hoạch động Mảng 1, nhiều chiều tùy thuộc vào lời giải toán phụ thuộc vào loại tham số Tiếp đến cách quy nạp thu gọn toán sau bước, tức không gian toán (kích thước liệu) nhỏ lại, ta hoàn toàn giải toán nhỏ (điểm dừng quy nạp) Bản chất công việc ta phải xây dựng lời giải toán qua toán con, tức lập công thức truy hồi, dựa vào công thức truy hồi, ta biết cần phải khởi tạo Trong phần trên, khảo sát số toán dùng thuật toán quy hoạch động để giải cách hiệu Những vấn đề liên quan đến toán tìm phương án tối ưu để thực công việc chúng có chung tính chất đáp án tốt cho toán trì toán trở thành phần toán lớn Thuật toán quy hoạch động thường áp dụng để giải toán tối ưu, toán đếm, … Vì vậy, giới hạn kích thước liệu toán tối ưu lớn việc sử dụng thuật toán khác (như duyệt, nhánh cận, ) có độ phức tạp thời gian lớn nghĩ đến thuật toán quy hoạch động TÀI LIỆU THAM KHẢO 1.Sách giáo khoa tin học 11 Sách giáo viên tin học 11 Tài liệu giáo khoa chuyên tin Hồ Sĩ Đàm Hồ Sĩ Đàm Hồ Sĩ Đàm Chủ biên Chủ biên Chủ biên 20 [...]... bài toán có thể dùng thuật toán quy hoạch động để giải quyết một cách hiệu quả Những vấn đề này đều liên quan đến bài toán tìm phương án tối ưu để thực hiện một công việc nào đó và chúng có chung một tính chất là áp án tốt nhất cho một bài toán con vẫn được duy trì khi bài toán con đó trở thành một phần trong bài toán lớn hơn Thuật toán quy hoạch động thường được áp dụng để giải các bài toán tối ưu, ... bày học sinh được thể hiện khả năng vận dụng, hiểu biết của mình nên các em tỏ ra hăng hái trong việc giơ tay phát biểu tranh luận - Đa số học sinh các lớp 1 1Toán, 11A1 nắm được phương pháp quy hoạch động” và 100% học sinh đội tuyển nắm và vận dụng tốt kĩ thuật này - Kết quả đạt được: Trong các năm học trước 2011-2012, 2012-2013 đội tuyển Tin học của trường không có giải HSGQG nào thì đến năm học. .. là cách quy nạp thu gọn bài toán sau mỗi bước, tức là không gian bài toán (kích thước dữ liệu) nhỏ lại, cho đến khi nào ta hoàn toàn có thể giải được bài toán nhỏ (điểm dừng của quy nạp) Bản chất của công việc này là ta phải xây dựng được lời giải của bài toán qua các bài toán con, tức là lập được công thức truy hồi, và dựa vào công thức truy hồi, ta sẽ biết được cần phải khởi tạo như thế nào Trong các. .. tuyển Tin học của trường đạt 8 giải HSG cấp tỉnh trong đó có giải nhất và giải nhì 01 giải HSG Quốc gia 19 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên 3 Kết luận Như đã nói ở trên, chìa khóa trong thuật toán quy hoạch động là việc xây dựng các bài toán con mà ta gọi là mảng quy hoạch động Mảng này có thể là 1, 2 hoặc có thể nhiều chiều tùy thuộc vào lời giải của bài toán phụ thuộc vào các. .. áp dụng để giải các bài toán tối ưu, bài toán đếm, … Vì vậy, nếu giới hạn kích thước dữ liệu của các bài toán tối ưu lớn và việc sử dụng các thuật toán khác (như duyệt, nhánh cận, ) có độ phức tạp thời gian lớn thì chúng ta hãy nghĩ đến thuật toán quy hoạch động TÀI LIỆU THAM KHẢO 1.Sách giáo khoa tin học 11 2 Sách giáo viên tin học 11 3 Tài liệu giáo khoa chuyên tin Hồ Sĩ Đàm Hồ Sĩ Đàm Hồ Sĩ Đàm Chủ... Kiên -THPT chuyên 2.3.3 Một số bài toán tối ưu giải bằng phương pháp quy hoạch động Bài toán 1: Bài toán cái túi Trong siêu thị có n gói hàng (n ≤ 100), gói hàng thứ i có trọng lượng là W[i] ≤ 100 và trị giá V[i] ≤ 100 Một tên trộm đột nhập vào siêu thị, tên trộm mang theo một cái túi có thể mang được tối đa trọng lượng M (M ≤ 100) Hỏi tên trộm sẽ lấy đi những gói hàng nào để được tổng giá trị lớn nhất... sinh (i < j) thì trong mọi phương án chia, từ học sinh thứ i + 1 trở đi sẽ không được nhận phần thưởng nào: Chia(i, j) = Chia(i, i) nếu i < j Ta xét tất cả các phương án chia trong trường hợp i ≥ j Ta tách các phương án chia thành hai nhóm không giao nhau dựa trên số phần thưởng mà học sinh đứng cuối bảng thành tích, học sinh thứ j, được nhận: - Nhóm thứ nhất gồm các phương án trong đó học sinh thứ j... học sinh và do đó, số cách chia, tức là số phần tử của nhóm này sẽ là: Chia(i, j - 1) - Nhóm thứ hai gồm các phương án trong đó học sinh thứ j cũng được nhận thưởng Khi đó, do học sinh đứng cuối bảng thành tích được nhận thưởng thì mọi học sinh khác cũng sẽ có thưởng Do ai cũng được thưởng nên ta bớt của mỗi người một phần thưởng (để họ lĩnh sau), số phần thưởng còn lại (i - j) sẽ được chia cho j học. .. Bài giải Lập hệ thức Gọi Chia(i, j) là số cách chia i phần thưởng cho j học sinh, ta thấy: - Nếu không có học sinh nào (j = 0) thì không có cách chia nào (Chia = 0) 14 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên - Nếu không có phần thưởng nào (i = 0) thì chỉ có một cách chia (Chia(0,j) = 1 - mỗi học sinh nhận 0 phần thưởng) Ta cũng quy ước Chia(0, 0) = 1 - Nếu số phần thưởng ít hơn số học. .. nhất khi được chọn trong số n gói với giới hạn trọng lượng M chính là F[n, M] Công thức truy hồi tính F[i, j] 11 Sáng kiến kinh nghiệm 2014 – Mai Hồng Kiên -THPT chuyên Với giới hạn trọng lượng j, việc chọn tối ưu trong số các gói {1, 2, …, i - 1, i} để có giá trị lớn nhất sẽ có hai khả năng: o Nếu không chọn gói thứ i thì F[i, j] là giá trị lớn nhất có thể bằng cách chọn trong số các gói {1, 2, …, ... giải tối ưu hay không ? Xuất phát từ sở trên, chọn đề tài Áp dụng phương pháp quy hoạch động để giải toán tối ưu tin học , giúp học sinh nắm phương pháp quy hoạch động giải toán tối ưu tin học. .. vấn đề Giải vấn đề 2.1 Cơ sở lý luận 2.2 Thực trạng vấn đề 2.3 Các biện pháp thực giải vấn đề 2.3.1 Áp dụng phương pháp QHĐ 2.3.2 Ví dụ minh họa 2.3.3 Một số toán tối ưu giải phương pháp QHĐ 2.4... Giải vấn đề 2.1 Cơ sở lí luận - Nguyên lý tối ưu Bellman Phương pháp quy hoạch động nguyên lý tối ưu nhà toán học Mỹ R.Bellman đề xuất vào năm 50 kỷ 20 Phương pháp áp dụng để giải hàng loạt toán

Ngày đăng: 12/12/2015, 17:47

Từ khóa liên quan

Mục lục

  • TÀI LIỆU THAM KHẢO

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

Tài liệu liên quan