1. Trang chủ
  2. » Giáo Dục - Đào Tạo

“Bài tập vận dụng phương pháp quy học động

18 83 0

Đ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 18
Dung lượng 509,53 KB

Nội dung

Lời mở đầu Phương pháp quy hoạch động (Dynamic Program) Quy hoạch động (Dynamic Program) phương pháp hiệu để giải nhiều toán Tin học, đặc biệt toán tối ưu Richard Bellman đề xuất vào năm 1940 Mục đích để cung cấp cách tiếp cận việc giải toán tối ưu mang chất đệ quy Một số toán dùng phương pháp quy hoạch động cho hiệu cao hẳn so với nhiều phương pháp khác Số lượng toán Tin học giải phương pháp quy hoạch động lớn Đặc biệt, toán quy hoạch động xuất nhiều kì thi học sinh giỏi quốc gia, quốc tế, Trại hè Hùng Vương, Kỳ thi chọn học sinh giỏi trường THPT Chuyên khu vực Duyên hải Đồng Bắc Cơ sở phương pháp quy hoạch động từ tốn lớn ta chia thành nhiều toán con, toán chia thành tốn nhỏ đến gặp lời giải cụ thể Lời giải tối ưu toán sử dụng để tìm lời giải tối ưu cho tốn lớn Nói chung gặp tốn việc khó nhìn nhận tốn thuộc lớp tốn nào, phương pháp giải phần quy hoạch động Khi gặp toán dạng này, nên đưa toán quen thuộc đừng nghĩ chúng q phức tạp Sau tìm cơng thức quy hoạch động việc quan trọng định cài đặt, điều kĩ lập trình định Có thể nói quy hoạch động thuật tốn tương đối khó thuật tốn cài đặt nên cần phải hiểu cách tường tận Vì vậy, để giúp học sinh hiểu phương pháp quy hoạch động, viết tài liệu “Bài tập vận dụng phương pháp Quy học động” Trong tài liệu có đầy đủ tập tất dạng phương pháp Quy hoạch động từ đơn giản đến phức tạp Các toán phát biểu hay, lôi người đọc Với mục sau: Phát biểu tốn, Mơ tả thuật toán, Code tham khảo test chấm I Oranges - BONUS I.1 Phát biểu toán Minh người thắng thi “Hái hoa quả” nhận phần thưởng nhà vườn ĐÔRA tài trợ trái cam tươi ngon Các phần thưởng bố trí bảng hình vng có kích thước 𝑛 × 𝑛 có dạng lưới vng kích thước đơn vị Các dịng bảng đánh số từ đến n, từ xuống ô bảng đánh số từ đến n, từ trái sang phải Ô nằm giao dịng i cột j gọi (i,j) có quà có giá trị 𝑎𝑖𝑗 tương ứng với số trái cam (1 < i,j < n) Để nhận phần thưởng, Minh phép chọn hình vng kích thước k 𝑥 k chiếm chọn ô bảng nhận hết tất trái cam nằm hình vng u cầu: Hãy xác định tổng số cam lớn mà Minh nhận ? Dữ liệu: Input: Vào từ file BONUS.INP - Dòng thứ chứa số nguyên dương n k - Dòng thứ i n dòng chứa n số nguyên dương, số thứ j aịj (aij < 1000) Output: Đọc file BONUS.OUT - Gồm số tổng số cam lớn mà Minh nhận Example BONUS.INP 43 BONUS.OUT 86 1911 9999 1999 9 14 Subtask 1: 25% số test ứng với n i)&1 - Dễ dàng nhận thấy: • Trạng thái x thỏa mãn: (x>>i)&1 != (x>>(i+1))&1 với i = 0, 1, • Trạng thái x y thỏa mãn nhau: (x>>i)&1 != (y>>i)&1 với i = 0, 1, 2, Kết quả: max f[n,x] với x = 0, 1, 2,…, 15 c Đánh giá thuật toán - Thuật toán 1: ĐPT O(2n) - Thuật toán 2: ĐPT O(225*n) VII Trộn xâu - STMERGE VII.1 Phát biểu toán: Cho xâu ký tự X = x1, x2, …, xm Y = y1, y2, …, yn Cần xây dựng xâu T = t1, t2, t3, …, tn+m gồm tất ký tự xâu X tất cá ký tự xâu Y, cho ký tự X xuất T theo thứ tự xuất X ký tự Y xuất T theo thứ tự xuất Y Tổng chi phí trộn hai xâu X Y để thu xâu T tính cơng thức: C(T) = sum (C(tk,tk+1)) với k = 1, 2, …, n+m-1 Trong đó, chi phí C(tk,tk+1) tính sau: - Nếu hai ký tự liên tiếp tk, tk+1 lấy từ xâu X Y C(tk,tk+1) = - Nếu hai ký tự liên tiếp tk, tk+1 xi, yj chi phí phải trả C(xi, yj) Nếu hai ký tự liên tiếp tk,tk+1 yj, xi cho phí phải trả C(yj, xi) = C(xi, yj) 10 Yêu cầu: Hãy tìm cách trộn xâu có tổng chi phí trộn nhỏ nhất? Dữ liệu: Input: Vào từ tệp văn STMERGE.inp dòng chứa Q (Q < 100) số lượng liệu Tiếp đến Q nhóm dịng, nhóm cho thơng tin liệu theo khuôn dạng sau: - Dòng thứ chứa số nguyên dương m, n (m, n < 1000); - Dòng thứ i m dòng chứa n số nguyên dương, số không vượt 109: C(xi, y1), C(xi, y2), …, C(xi, yn), i = 1, 2, …, m Output: Ghi tệp văn STMERGE.out gồm Q dòng, dòng chứa số nguyên tổng chi phí theo cách xây dựng xâu T tìm tương ứng với liệu vào Example STMERGE.inp STMERGE.out 3 30 Giải thích -Xâu T = y1 y2 x1 x2 y3 -Chi phí trộn xâu = C(x1,y2) + C(x2,y3) = + = 15 Subtask 1: 60% số test ứng với m,n < 10 Subtask 2: 40% số test ứng với m,n < 1000 VII.2 Thuật toán: a Thuật toán 1: Duyệt xâu nhị phân độ dài m+n (𝒎, 𝒏 ≤ 𝟏𝟎) - Theo đề bài, ta cần tạo xâu T độ dài m+n từ xâu X Y (dễ thấy m+n < 20) Đối với tốn có giới hạn < 20 ta thường nghĩ đến duyệt nhị phân, lưu kết vào mảng chiều x[ ], kích thước m+n - Xâu T lấy từ xâu cũ X Y nên ta liên tưởng đến trạng thái nhị phân là: • x[i] = ký tự thứ i xâu T lấy từ xâu X • x[i] = ký tự thứ i xâu T lấy từ xâu Y - Tuy nhiên, vấn đề duyệt xâu nhị phân độ dài m+n ta phải duyệt qua hết 2m+n trạng thái xảy Mỗi trạng thái dãy bit Mà xâu tạo cấu tạo từ m ký tự xâu X n ký tự xâu Y 11 ➔ Sau duyệt xong trạng thái Ta phải kiểm tra lại xem có m bit n bit hay khơng? - Sau có trạng thái thỏa mãn, ta tính tổng chi phí trộn xâu tương ứng C(T) Kết tốn chi phí trộn xâu nhỏ min(C(T)) b Thuật toán 2: Sử dụng phương pháp quy hoạch động (𝒎, 𝒏 ≤ 𝟏𝟎𝟎𝟎) - Thoạt nhìn qua đề bài, ta liên tưởng đến tốn quy hoạch động điển hình Dãy chung dài Tuy nhiên tốn có thêm trọng số từ +1 thay C(tk,tk+1) - Trên sở đó, ta có trạng thái quy hoạch động F(i,j): giá trị chi phí trộn xâu nhỏ xây dựng xâu có độ dài i+j mà gồm i ký tự đầu xâu X j ký tự đầu xâu Y - Tuy nhiên ta nhận thấy vướng mắc, ký tự cuối thuộc vào xâu X hay xâu Y nên ta khơng thể tính tốn - Do vậy, ta cải tiến công thức chút để biết xem ký tự cuối thuộc xâu ➔ Sử dụng mảng chiều F(i, j, state), state có trạng thái Ta có F(i, j, state): chi phí nhỏ xây dựng xâu độ dài i+j mà gồm i ký tự đầu xâu X j ký tự đầu xâu Y, và: • Nếu state = ký tự cuối T thuộc xâu X • Nếu state = ký tự cuối T thuộc xâu Y - Để tính F(i, j, state) ta xét khả xảy ra: • Nếu ký tự cuối xâu T xi, tức F(i, j, 0), ký tự trước có trường hợp: ▪ xi-1 xi → F(i, j, 0) = F(i-1, j, 0) ▪ yj xi → F(i, j, 0) = F(i-1, j, 1) + C(i, j) • Nếu ký tự cuối xâu T yj, tức F(i, j, 1), ký tự trước có trường hợp: ▪ yj-1 yj → F(i, j, 1) = F(i, j-1, 1) ▪ xi yj → F(i, j, 1) = F(i, j-1, 0) + C(i, j) - Từ ta có cơng thức: • F(i, j, 0) = min(F(i-1, j, 0), F(i-1, j, 1) + C(i, j)) • F(i, j, 1) = min(F(i, j-1, 0) + C(i, j), F(i, j-1, 1)) - Kết toán min(F(m, n, 0), F(m, n, 1)) c Đánh giá thuật toán: - Thuật toán 1: ĐPT: O(2m+n) - Thuật toán 2: ĐPT: O(m*n) 12 VIII Giao hàng - LEM3 VIII.1 Phát biểu toán Sau hội chợ trái bạn xong Hoàng lại nhận đến Hoàng phải làm thêm Hoàng làm nhân viên giao hàng Nhiệm vụ Hoàng phải giao hàng cho hết n khách hàng với n địa đánh số từ đến n Đường từ địa khách hàng i đến địa khách hàng j số nguyên cij (0 < cij 0) { Đẩy phần dư x cho vào stack s; Giảm x nửa; } } * Lưu ý: stack s vector thực phải khai báo biến trung ương vector a ln phải có n phần tử - Thủ tục turnoff() xây dựng sau: turnoff(x, i) // Thay đổi bit thứ n-i trạng thái x thành bit lưu lại giá trị x hệ 10 { return x- 2i; // Trả số nguyên x sau thay đổi bit thứ n-i thành bit } c Đánh giá thuật toán: - Thuật toán 1: ĐPT: O(n!) - Thuật toán 2: ĐPT: O(2n*n2) 15 Lời kết Như thấy Quy hoạch động phương pháp hay nhất, hiệu để giải tốn Tin học Chúng tơi mong với dạng bài, toán, thuật toán giúp ích bạn q trình tìm hiểu, nghiên cứu phương pháp Quy hoạch động giải toán khác liên quan Trong thời gian làm đề tài phương pháp Quy hoạch động tham khảo, học tập kinh nghiệm từ tài liệu liên quan nhiều tác giả Tuy có nhiều cố gắng đề tài không tránh khỏi thiếu sót Chúng tơi mong thày người quan tâm đến đề tài tiếp tục có ý kiến đóng góp để đề tài hồn thiện 16 TÀI LIỆU THAM KHẢO [1] https://vnoi.info/wiki/translate/topcoder/dynamic-programming [2] https://vnoi.info/wiki/algo/dp/basic-problems [3] https://viblo.asia/p/quy-hoach-dong-mot-thuat-toan-than- thanhE375zy01lGW [4] https://thefullsnack.com/posts/dynamic-programming.html 17 18 ... nhật kết max - Sử dụng mơ hình đệ quy quay lui duyệt chỉnh hợp lặp 0,1 (với không chọn chọn) để xét khả thỏa mãn toán cập nhật vào biến res kết toán b Thuật toán 2: Quy hoạch động trạng thái (

Ngày đăng: 13/12/2021, 18:13

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w