Phương pháp quy hoạch động

4 1.3K 41
Phương pháp quy hoạch động

Đang tải... (xem toàn văn)

Thông tin tài liệu

Phương pháp quy hoạch động

Phương pháp quy hoạch độngPhạm Hải MinhQuy hoạch động là một phương pháprất hay và mạnh của tin học. Nhưng để giải được các bài toán bằngphương pháp quy hoạch động thật chẳng dễ dàng chút nào. Chủ yếu họcsinh hiện nay sử dụng quy hoạch động theo kiểu làm từng bài cho nhớ mẫuvà áp dụng vào những bài có dạng tương tự. Qua quá trình học tập tôi đã tự rútra cho mình một số kinh nghiệm về cách giải các bài toán bằng quy hoạchđộng, xin đưa ra để mọi người cùng tham khảo và góp ý. 1. Lí thuyết: Phương pháp quy hoạch động gồm 6 bước: - Bước1: Chia nhỏ bài toánLập vectơ P cócác thành phần x1,x2, ,xn. Mỗi vectơ P ứng với một bài toán con củabài toán. Ban đầu ta xây dựng P với 1 thành phần duy nhất.- Bước 2: Lập hệ thức quy hoạch độngXây dựng hàm f(P) là hàm tối ưu của vectơ P (hay hàm tối ưu cho mỗi bàitoán con)f(P) = g(f(P1),f(P2), ,f(Pn))g có thể là hàm Max,Min hoặctổng tuỳ yêu cầu của bài toán là tìm Max,Min hay tính tổng.P gọi là vectơ chaP1,P2,P3, ,Pn gọi là vectơcon- Bước 3: Kiểm traNếu không xâydựng được hàm f thì thêm tiếp hoặc bỏ đi từng thành phần của vectơP rồi quay lại bước 2. Nếu được thì làm tiếp bước 4.- Bước 4: Tối ưu hoá hệ thứcTối ưu vectơ P bằng cách xét từng thành phần x của vectơ P:Chọn vectơ PBest trong P1,P2,P3, Pn chỉ khác nhau thành phần x sao cho có thể đưa PBest vào thay P1,P2,P3 ,Pn trong hàm g mà không làm thay đổi giá trị của hàm g thì có thể đơn giản thành phầnx của vectơ P.- Bước 5: Chọn kiểu quy hoạch động+ Kiểu 1: Nếu các thànhphần của vectơ con P1 luôn ≤ hay ≥ các thành phần của vectơ cha P thì ta có thể dùng các vònglặp for lồng nhau để cài đặt.+ Kiểu 2: Nếu vectơ P và vectơ P1 luôn có mối quan hệ cha con một chiều thì ta có thểdùng phương pháp đệ quy có nhớ để cài đặt.+ Kiểu 3: Nếu vectơ P và vectơ P1 luôn có mối quan hệ cha con hai chiềunhưng không rõ đâu là vectơ cha , đâu là vectơ con vì còn phụ thuộc vào từng bài toán thì ta có thể dùng phương pháp repeat until để cài đặt. - Bước 6: Tối ưu hoá bộ nhớ (chỉ dùng cho cài đặt kiểu 1)Đơn giản vectơ P bằng cách xét từng thành phần x của vectơ P:Nếu f(P( ,x, ))=g(f(P1( ,x1, )),f(P2( ,x2, )), ,f(Pn( ,xn, )))và x-x1, x-x2, , x-xn≤T nào đó thì ta chỉ cần đưa vòng lặpcủa x lên đầu tiên và bỏ x ra khỏi vectơ P và lưu T+1 vectơ P.2. Ví dụ: Ví dụ 1: Bài toán tìm đường đi ngắn nhất:* Bài toán: Cho đồ thị 1 chiều có trọng số được biểu diễn bởi ma trận kề a. Tìm đường đi ngắn nhất từ đỉnh S đến đỉnh T.* Cách giải bằng quy hoạch động:- Bước 1: Vectơ P (đỉnh hiện tại)- Bước 2: f(P(u)) = f(P1(v))+a[v,u] (f là đường đingắn nhất từ S đến u)- Bước 3: Đúng.- Bước 4: Không cần đơn giản.- Bước 5: Vì P(u) và P1(v) có thể là vectơ cha hayvectơ con tuỳ thuộc bài toán nên ta phải dùng kiểu cài đặt 3.- Bước 6: Không có.Ví dụ 2: Bài toán cái túi:* Bài toán: Cho n đồ vật, đồ vật thứ i có giá trị V[i] và trọng lượng W[i],số lượng không hạn chế. Ta có một túi đựng được trọng lượng khôngquá T. Cần chọn các đồ vật để bỏ vào túi sao cho tổng giá trị làlớn nhất.* Cách giải bằng quy hoạch động:- Bước 1: Vectơ P (trọng lượng hiện tại)- Bước 2: f(P(m))=Max(f(P1(m-W[i]))+V[i]) (f là tổng giágiá trị lớn nhất khi dùng các vật có tổng trọng lượng m)- Bước 3: Đúng.- Bước 4: Không cần đơn giản.- Bước 5: Vì nếu P1(m1) con của P(m) <=> m1< mnên ta có thể dùng kiểu cài đặt 1.- Bước 6: Không cần đơn giản.Ví dụ 3: Bài toán chia kẹo:* Bài toán: Cho n gói kẹo, gói kẹo thứ i có a[i] cái kẹo. Cần chọn ra một số góikẹo sao cho số kẹo là lớn nhất và không vượt quá W cái.* Cách giải bằng quy hoạch động:- Bước 1: Vectơ P (tổng số kẹo hiện tại) - Bước 2 (1): Do không biết những gói kẹo nào đãdùng, những gói kẹo nào chưa dùng nên không thể lập được công thứcquy hoạch động- Bước 3 (1): Chưa đúng nên thêm thành vectơ P (tổngsố kẹo, số gói kẹo đã dùng)- Bước 2 (2): Do vẫn không biết những gói kẹo nàođã dùng, những gói kẹo nào chưa dùng nên không thể lập được côngthức quy hoạch động- Bước 3 (2): Thành phần thêm vào không giải quyếtđược vấn đề nên bỏ đi và thêm thành phần khác vào P (tổng số kẹo,gói keo cuối cùng đã dùng)- Bước 2(3): f(P(u,i))=0 nếu không tồn tạiP1(u-a[i],j]) sao cho f(P1)=1 (với j<i)f(P(u,i))=1 nếu tồn tạiP1(u-a[i],j) sao cho f(P1)=1 (với j<i)- Bước 3(3): Đúng.- Bước 4: Xét thành phần (gói kẹo cuối cùng đã dùng)của vectơ P. Ta thấy chỉ cần chọn P(u,i) trongP1(u,i1),P2(u,i2), ,Pn(u,in) sao cho i min và f(P)=1. Vì thế ta chỉ cần lưui min này vào mảng IMin và như vậy hàm f không hề bị thay đổi. Hàmf lúc này thành:f(P(u))=0 nếu không tồn tại P1(u-a[i]) sao cho f(P1)=1 (vớiIMin[u-a[i]]<i)f(P(u))=1 nếu tồn tại P1(u-a[i]) sao cho f(P1)=1 (vớiIMin[u-a[i]]<i)- Bước 5: Vì nếu P1(u1) là con của P(u) tương đươngu1<u nên ta có thể dùng kiểu cài đặt 1.Ghi chú: Có chương trình mẫu của các ví dụ kèmtheo.3. Bài tập: Bài tập 1: Trên đoạnđường AB dài n km cần đặt k trạm xăng 1 tại A, 1 tại B và sao chokhoảng cách giữa các trạm xăng sau không lớn hơn khoảng cách giữa cáctrạm xăng trước. Tính số cách đặt các trạm xăng. Input: n k (n≤100,k≤n) Output: P số cách đặt các trạm. Ví dụ: Input: 4 3 Output: 2 Bài tập 2: Cho ma trậnn*m chỉ gồm 0 và 1.Hỏi cần ít nhất bao nhiêu nhát cắt thẳng (mỗi nhátcắt thẳng phải chia ma trận ra làm 2 phần) để chia ma trận thành nhữnghình chữ nhật chỉ gồm 0 hoặc 1. Input: n m (n,m≤20) ma trận n*m Output: P số nhát cắt ít nhất. Ví dụ: Input: 3 3 1 1 1 0 0 1 0 0 1 Output: 3 4. Mở rộng: Với phương pháp trên nếu không thể giải được bài toán bằngquy hoạch động do khó khăn trong dữ liệu hay trong việc lập hệ thức,ta có thể nhanh chóng chuyển sang một thuật toán duyệt hoặc tham lam. Nếuhệ thức đúng đắn nhưng không thể lưu trữ ta có thể sử dụng thuậttoán duyệt bằng cách đệ qui (bỏ đi phần có nhớ ) sẽ vẫn cho kếtquả đúng mặc dù có chậm hơn. Nếu không thể lập được hệ thứcđúng ta vẫn có thể cài đặt như một thuật toán tham lam cho kết quảgần đúng. . Phương pháp quy hoạch độngPhạm Hải MinhQuy hoạch động là một phương pháprất hay và mạnh của tin học. Nhưng để giải được các bài toán bằngphương pháp quy. cách giải các bài toán bằng quy hoạch ộng, xin đưa ra để mọi người cùng tham khảo và góp ý. 1. Lí thuyết: Phương pháp quy hoạch động gồm 6 bước: - Bước1:

Ngày đăng: 11/09/2012, 14:32

Từ khóa liên quan

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

Tài liệu liên quan