Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
182,1 KB
Nội dung
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TOÁN- CƠ- TIN HỌC Tiểu Luận MƠN: PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN Chủ Đề : Phương Pháp Quy Hoạch Động Giảng viên : PGS.TS Nguyễn Thị Hồng Minh Thành viên nhóm: Nguyễn Văn Thạo Mai Vũ Vĩnh Tiến Nguyễn Xuân Duẩn Nguyễn Thành Vinh 1|Phương pháp quy hoạch động LỜI MỞ ĐẦU Trong thực tế, gặp toán, vấn đề cần giải quyết, ta mong muốn tìm phương án cho kết tốt nhất, tối ưu Bởi vậy, lớp toán tối ưu hóa ln đóng cai trị quan trọng, tính ứng dụng cao thực tiễn Đối với lớp tốn tối ưu, có nhiều phương pháp để giải như: phương pháp nhánh cận, phương pháp tham lam, phương pháp quy hoạch động Tùy tốn cụ thể mà ta sử dụng phương pháp thích hợp, nhằm đạt hiệu cao (hiệu năng, tốc độ thực hiện, độ phức tạp, nhớ sử dụng ) Trong đó, phương pháp quy hoạch động (Dynamic programming) ln ưu tiên lựa chọn tính hiệu cao tối ưu hầu hết phương pháp khác Các toán quy hoạch động chiếm vị trí quan trọng tổ chức hoạt động sản xuất Chính lẽ mà kì thi học sinh giỏi quốc gia quốc tế thường gặp loại toán Phương pháp quy hoạch động phương pháp giải tốt toán tối ưu, đồng thời áp dụng giải số tốn khơng tối ưu cho kết tốt Tuy nhiên, việc áp dụng phương pháp quy hoạch động khơng phải dễ, tốn có đặc điểm tính chất riêng cách giải hồn tồn khác Hy vọng báo cáo này, nhóm em làm rõ phần câu hỏi Và cho người thấy tông quan quy hoạch động toán giải phương pháp quy hoạch động 2|Phương pháp quy hoạch động MỤC LỤC: LỜI MỞ ĐẦU I Thuật toán quy hoạch động .4 Thuật ngữ Các yêu cầu toán tối ưu sử dụng phương pháp quy hoạch động Phương thức tiếp cận .6 Các nguyên tắc Quy Hoạch Động Các bước để giải toán Quy Hoạch Động Ưu điểm hạn chế phương pháp quy hoạch động II Phân tích tốn .8 Bài toán 1: Bài toán đổi tiền a b Phân tích thuật tốn: Xây dựng thuật tốn QHĐ để tìm nghiệm tối ưu Bài toán :Sắp xếp họp 10 a b Mơ hình tốn 10 Xây dựng thuật tốn QHĐ để tìm nghiệm tối ưu toán .10 Đánh giá thuật toán 12 a Độ phức tạp liệu 12 b Độ phức tạp tính tốn 13 Cải tiến thuật toán: 13 a Đổi thuật toán xếp 13 b Cải tiến thuật tốn quy hoạch động tìm nghiệp tối ưu 13 Kết thức nghiệm 14 a Sử dung thuật toán ban đầu 14 b Sử dụng thuật toán cải tiến 15 Kết luận 17 3|Phương pháp quy hoạch động I Thuật toán quy hoạch động 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 đệ qui, 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 tốn Có số tốn sử dụng phương pháp quy hoạch động lại cho hiệu cao hơn hẳn so với nhiều phương pháp khác Thuật ngữ - Trong ngành Khoa học máy tính, Quy Hoạch Động phương pháp giáp thời gian chạy thuật tốn thể tính chất “Bài toán gối nhau”(overlapping Subproblem) “Cấu trúc tối ưu”(optimal substructure) - Bài toán gối nhau: 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 tố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 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 - 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 4|Phương pháp quy hoạch động - Bài toán tối ưu: Bài toán tối ưu tốn thường có nhiều nghiệm chấp nhận nghiệm có giá trị đánh giá Mục tiêu đặt tìm nghiệm tối ưu, nghiệm có giá trị đánh giá lớn nhỏ (tối ưu) - Đặc điểm : Thường dùng để giải toán tối ưu Phân rã thành tốn con, hình thành lời giải từ toán Lưu trữ lời giải toán bảng liệu thay cho giải lại toán (đệ quy) Quy hoạch động làm giảm độ phức tạp, giảm thời gian giải toán 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: 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 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 Q trình từ bài tốn sở tìm lời giải toán ban đầu phải qua hữu hạn bước 5|Phương pháp quy hoạch động 3 Phương thức tiếp cận Quy hoạch động thường dùng hai cách tiếp cận: - Top-down (Từ xuống): Bài toán chia thành toán con, toán giải lời giải ghi nhớ để phòng trường hợp cần dùng lại chúng Đây đệ quy lưu trữ kết hợp với - Bottom-up (Từ lên): Tất tốn cần đến giải trước, sau dùng để xây dựng lời giải cho toán lớn Cách tiếp cận tốt không gian nhớ dùng cho ngăn xếp số lời gọi hàm Tuy nhiên, việc xác định tất toán cần thiết cho việc giải tốn cho trước khơng trực giác Cách tiếp cận từ lên hiệu nên cách tiếp cận từ lên (bottom up) thường sử dụng nhiều Các nguyên tắc Quy Hoạch Động Nguyên tắc đánh số giai đoạn từ lên Ngun tắc thơng số hóa toán Nguyên tác lồng Nguyên lý tối ưu Bellman: Ta biết quy hoạch động thường dùng để giải tốn tối ưu- tốn u cầu tìm giải pháp tốt giải pháp tìm được.Cơ sở quy hoạch động toán tối ưu nguyên lý tối ưu Bellman Nguyên lý tối ưu Bellman phát biểu sau: “Dãy tối ưu định trình định nhiều giai đoạn có thuộc tính dù trạng thái định ban đầu nào, định lại phải tạo thành cách giải tối ưu không phụ thuộc vào trạng thái sinh từ định ban đầu” Hay nói cách khác: “Giải pháp tối ưu cho toán P cần chứa giải pháp tối ưu cho toán P” Do giải toán theo quy hoạch động dùng 6|Phương pháp quy hoạch động một phương pháp gồm nhiều bước tiến hành điều kiện cần để giải pháp tối ưu xây dựng từ nghiệm tối ưu bước trước Các bước để giải tốn Quy Hoạch Động - Lập cơng thức truy hồi - Giải tất tốn sở (thơng thường dễ), lưu lời giải vào bảng phương án - Dùng công thức truy hồi phối hợp lời giải toán nhỏ lưu bảng phương án để tìm lời giải toán lớn lưu chúng vào bảng phương án Cho tới tốn ban đầu tìm lời giải - Dựa vào bảng phương án, truy vết tìm nghiệm tối ưu Ưu điểm hạn chế phương pháp quy hoạch động - Ưu điểm: Phương pháp quy hoạch động cải thiện đáng kể khơng gian lưu trữ thời gian tính tốn so với hầu hết phương pháp giải toán tối ưu khác - Hạn chế: Việc tìm hệ thức truy hồi tìm cách phân rã tốn khơng phải dễ 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 kích cỡ liệu lớn Có tốn tối ưu khơng thể giải quy hoạch động - Tổng kết: 7|Phương pháp quy hoạch động 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 II Phân tích tốn Để phân tích toán ta xét toán cụ thể sau Bài toán 1: Bài toán đổi tiền Giả sử có N loại tiền có mệnh giá a1,a2….,an.bây muốn đổi số tiền M theo N loại mệnh giá.hỏi đổi để số tờ tiền nhỏ a Phân tích thuật toán: Dữ liệu đầu vào : + N mệnh giá tiền số tiền M + mệnh giá a1,a2,… ,an Dữ liệu đầu + số lượng tối thiểu số tờ tiền để đổi số tiền M b Xây dựng thuật tốn QHĐ để tìm nghiệm tối ưu Gọi Dm số lượng tối thiểu để đổi cho số tiền M Đầu tiên t chọn tờ tiền a1 số tiền cịn lại M-a1 DM-a1 số lượng tối thiểu để đổi số tiền => số lượng tổng số số tờ tiền + DM-a1 Tương tự ta lặp lại trình với tất đồng xu tiếp t heo ta thu phương án đổi tiền: + DM-a1, + DM-a2 ,……… ,1 + DM-an 8|Phương pháp quy hoạch động Vì ta có cơng thức quy hoạch động sau: DM = mini:ai Giả sử chọn tờ tiền để tìm số lượng tối thiểu cho giá trị.bây lấy số tiền M trừ cho giá trị ta có giá trị khác để thực lặp lại trình để tất đồng tiền cần thiết Vì vậy, vấn đề cần lưu trữ đồng tiền cần thiết cho giá trị sau nhận đồng tiền tối ưu cho giá trị Cách triển khai thuật toán: COIN-CHANGE-MODIFIED(a, m, n) D[n+1] D[0] = S[n+1] S[0] = for j in to m minimum = INF for i in to n if j >= a[i] if 1+D[j-a[i]] < minimum minimum = 1+D[j-a[i]] coin = i D[j] = minimum S[j] = coin //Cod e to print the coins l=m while l>0 print a[S[l]] l = l-a[S[l]] return D[n] time complexity : O(M*N) 9|Phương pháp quy hoạch động 2 Bài tốn :Sắp xếp họp Có phịng để để chức họp Các họp xếp vào lịch khoảng thời gian làm việc chúng giao không nhiều thời điểm tiếp nối Cho n họp, họp thứ i bắt đầu vào thời điểm kết thúc thời điểm bi Hãy xếp lịch để phục vụ nhiều họp a Mơ hình tốn - Phần liệu đầu vào: Nhập tay qua hình (với số lượng họp ít) Nhập file (dữ liệu nhiều họp) - Phần thực chương trình: Dùng thuật toán xếp để xếp liệu họp đầu vào tăng dần theo thời gian kết thúc họp Xây dựng thuật toán quy hoạch động để tìm nghiệm tối ưu toán - Phần liệu đầu ra: Hiển thị kết hình Xuất kết file b Xây dựng thuật tốn QHĐ để tìm nghiệm tối ưu toán Hàm mục tiêu: f số lượng họp - Gọi S dãy họp bố trí thoả mãn yêu cầu đầu Vì số lượng họp S phụ thuộc vào dãy họp cho ban đầu bảng phương án bảng chiều - Ta bổ xung vào đầu dãy S hai họp thứ ([-maxint, -maxint]) họp thứ n+1 ([maxint, maxint]) sau: S= {[-maxint, -maxint], [a1, b1], [a2, b2], …, [an, bn], [maxint, maxint]}, 10 | P h n g p h p q u y h o c h đ ộ n g Chắc chắn dãy họp có số lượng dài bắt đầu họp thứ kết thúc họp n+1 - Gọi L(i) độ dài lớn dãy họp thoả mãn yêu cầu đầu họp thứ i L(i) tính điều kiện giá trị L(i+1)…L(n+1) biết Các bước xây dựng thuật toán QHĐ cho toán sau: Bước 1: Tìm sở phương án Dễ thấy n = hay nói cách khác có họp cần bố trí S = {[a1, b1]} hay phương án sở L(1) = Bước 2: Tìm cơng thức truy hồi Tính L(i): Dãy họp bố trí dài họp thứ i bố trí cách ghép họp thứ i vào đầu dãy họp dài họp j đứng sau họp i Vậy ta ghép họp i vào đầu dãy họp j thoả mãn điều kiện b i aj , dĩ nhiên ta chọn dãy dài để ghép vào a L(i) tính sau: Chọn số số j từ i+1 đến n+1 mà bi aj Chọn số jmax có L(jmax) lớn Đặt L(i)= L(jmax)+1: L(i)= Max (L(j))+1(với i=b[i]) and (L[j]>L[jmax]) then jmax:=j; L[i]:=L[jmax]+1; ; 11 | P h n g p h p q u y h o c h đ ộ n g end; end; Bước 3: Lập bảng phương án Sử dụng mảng chiều Trace[] để lưu lại dãy họp theo nguyên tắc Trace[i] cho biết họp đứng liền sau họp i dãy họp dài họp i Bước 4: Tìm nghiệm tốn thơng qua nghiệm tốn nhỏ dựa vào công thức truy hồi bước Bước 5: Xây dựng nghiệm tốn thơng qua bảng phương án (mảng chiều Trace[]) - Tại bước xây dựng L(i)= L(jmax)+1 với i+1 jmax n+1 Trace[i]= jmax để lưu lại họp Trace[i] đứng sau họp i - Sau tính xong dãy L(i) mảng Trace[] ta bắt đầu Trace[0] kết thúc n+1 nghĩa dãy số họp là: Trace[0] Trace[Trace[0]]… n+1 Q trình truy vết diễn tả thơng qua thủ tục sau: procedure truyvet; var i,j,k:integer; begin i:=Trace[0]; while (in+1) begin ; i:=Trace[i]; end; end; 12 | P h n g p h p q u y h o c h đ ộ n g Đánh giá thuật toán a Độ phức tạp liệu - Dữ liệu đầu vào: mảng chiều a b có độ dài n nên có độ phức tạp tuyến tính O(n) - Dữ liệu đầu ra: Mảng lưu trữ độ dài L mảng truy vết Trace có độ dài n nên có độ phức tạp tuyến tính O(n) b Độ phức tạp tính tốn - Độ phức tạp thuật toán O(n) Cải tiến thuật toán: a Đổi thuật toán xếp Sử dụng thuật toán xếp nhanh, với độ phức tạp O(nlogn) b Cải tiến thuật tốn quy hoạch động tìm nghiệp tối ưu Với số k, gọi St[k] số x họp x thoả mãn: - Dãy họp dài x có độ dài k Nếu có nhiều họp thoả mãn điều kiện thi ta chọn họp có a x phần tử lớn Việc tính giá trị St[k] thực đồng thời với việc tính giá trị L[?] phương pháp sau: St[1]:=n+1; m:=1; for i:=n downto begin ; if (k>m) then begin m:=k; St[k]:=i; end; else if (a[i] > a[St[k]) then St[k]:=i; End 13 | P h n g p h p q u y h o c h đ ộ n g Khi bắt đầu vào lần lặp với giá trị i, ta biết được: + m: Độ dài dãy họp dài có số từ i+1 tới n+1 thoả mãn yêu cầu đầu + St[k] (1 k m): Giá trị aSt[k] giá trị lớn số giá trị a1 aSt[k-1] hay nói cách khác dãy họp dài họp thứ St[k] có độ dài k Do cách tính tốn nên ta dễ thấy : aSt[k] < aSt[k-1]