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
660,66 KB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC TIỂU LUẬN ĐỀ TÀI: QUY HOẠCH ĐỘNG GIẢNG VIÊN: LÊ KIM THƯ Họ tên: Bùi Đức Hoàng Mã sinh viên: 20206142 Mã lớp: 129846 Mã học phần: MI3010 Hà Nội, ngày 18 tháng 11 năm 2021 Mục lục A Tổng quan quy hoạch động Giới thiệu chung a) Khái niệm b) Ưu điểm c) Nhược điểm 2 Thuật toán chia để trị 3 Nguyên lý tối ưu Bellman 4 Đặc điểm chung phương pháp quy hoạch động Các bước giải toán tối ưu quy hoạch động a) Các cách tiếp cận b) Các bước giải toán quy hoạch động B Một số toán liên quan đến quy hoạch động kinh điển Bài toán tính 𝒏! Triển khai nhị thức Newton (𝒂 + 𝒃)𝒏 Bài toán xếp ba lô Bài toán tìm đường nhỏ 11 Bài tốn tìm dãy chung dài 11 Bài tốn tìm dãy đơn điệu tăng dài không liên tiếp 13 C Kết luận 15 Page | A Tổng quan quy hoạch động Giới thiệu chung a) Khái niệm Phương pháp quy hoạch động nhà toán học người Mĩ Richard Bellman (1920- 1984) phát minh vào năm 1953 Trong ngành khoa học máy tính, quy hoạch động ( Dynamic Programming) phương pháp giảm thời gian chạy thuật tốn thể tính chất toán gối (overlapping subproblem) cấu trúc tối ưu (optimal substructure) Đây phương pháp hiệu để giải nhiều toán tin học, đặc biệt toán tối ưu Những tốn thường có nhiều nghiệm chấp nhận nghiệm có giá trị lớn nhỏ (tối ưu) Hiện thi thi code, thi hackathon đa số cần đến quy hoạch động Tất nhiên có cách giải khác để giải tốn Nhưng thi code có giới hạn thời gian, nhớ chương trình, nên thuật toán hiệu cần thiết Và trường hợp vậy, quy hoạch động thuật toán cần thiết quan trọng b) Ưu điểm Quy hoạch động ta giải toán đơn giản tốn mẹ Sau kết hợp chúng lại để tìm lời giải cho toán lớn tìm đáp án tốn yêu cầu theo phương pháp quy nạp Quy hoạch động thể sức mạnh chỗ với toán con, toán nhỏ giải lưu trữ lại đem sử dụng cần Do giúp ta tiết kiệm thời gian giải c) Nhược điểm Việc kết hợp toán thành toán lớn, hay chia toán lớn thành tốn nhỏ cơng việc địi hỏi nhanh nhạy chặt chẽ lập luận Vì cơng việc khó khăn để tìm cơng thức truy hồi đơi đưa ta vào bế tắc Hơn nữa, giải với phương pháp quy hoạch động, việc xuất số lượng tốn cần lưu trữ lớn điều khơng thể tránh khỏi Gây Page | tượng tràn nhớ, tốn nhiều nhớ để lưu trữ, địi hỏi máy tính phải có khối lượng nhớ lớn Thuật tốn chia để trị Hay cịn gọi toán gối “ Chia để trị” phương pháp thông dụng tin học Trong thuật toán đệ quy, nguyên lý chia để trị (devide and conquer) thường đóng vai trị cốt lõi việc thiết kế thuật toán Để giải tốn lớn, ta chia nhỏ thành hữu hạn “ toán độc lập”, giải “ toán con" cách riêng lẻ tổ hợp dần lời giải, liên kết lại chúng lại thành toán ban đầu Phương pháp chia để trị thường áp dụng toán lớn, chia nhỏ mang chất tốn đệ quy Quá trình đệ quy xếp dần toán vào ngăn xếp nhớ thực giải toán theo thứ tự từ đơn giản phức tạp, đến giải toán mẹ ban đầu Quy hoạch động dạng đặc biệt thuật toán chia để trị Do quy hoạch động giải đệ quy ( chia để trị) ngược lại chưa Thuật toán chia để trị cài đặt đệ quy mà tốn giải nhiều lần, điều dẫn đến làm tăng thời gian thực chương trình Trong quy hoạch động tối ưu chỗ thuật toán ghi lại kết toán vào biến ( thường biến mảng) sử dụng chúng cần thiết mà giải lại tốn Khi việc thực thi tốn thời gian hơn, tăng tốc độ thực chương trình, nhiên việc sử dụng nhớ tốn tài ngun Một số thuật tốn: Ví dụ 1: Tính số hạng thứ N dãy Fibonacci Công thúc đệ quy dãy Fibonacci: F(1)=1, F(2)=1, F(N)=F(N-1) + F(N-2) với N > Lời giải( mã giả) : Int Fibonacci (int N ) { If (N=1) or (N=2) then F:=1 Else F:=F(N-1)+F(N-2) } Ví dụ 2: Tìm số Catalan thứ N biết Catalan dãy số thoả mãn biểu thức: Page | 𝑛−1 𝑛ế𝑢 𝑛 = 𝐶𝑛 = { ∑𝑖=0 𝐶𝑖 𝐶𝑛−𝑖−1 𝑛ế𝑢 𝑛 > Mã giả: A[0]=1, A[1]=1; For i:=1 to N+1 do{ For j:=0 to i A[i]+= A[j]*A[i-j-1]; } Return A[N]; Nguyên lý tối ưu Bellman Nguyên lý tối ưu Bellman nguyên lý thừa nhận mà không chứng minh Ta biết phương pháp quy hoạch động thường xuyên dùng cho việc giải tốn tối ưu, tốn u cầu tìm phương pháp tốt giải pháp tìm Và nguyên lý tối ưu Bellman sở cốt lõi cho toán quy hoạch động 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” Do ta muốn giải toán phương pháp quy hoạch động Trong vài tốn đơn giản quy hoạch động diễn bước, toán gồm nhiều bước tốn lớn phải xây dựng từ “ toán con” cách tối ưu, hay xây dựng từ nghiệm tối ưu “bài toán con” bước trước, tốn lớ n giải cách tối ưu Đặc điểm chung phương pháp quy hoạch động Với phương pháp quy hoạch động, việc giải hữu hạn toán nhỏ ( tốn sở), từ bước tổng hợp, quy nạp lại để giải toán lớn giải toán lớn ( toán ban đầu) Page | Khi giải toán theo phương pháp chia để trị, ta phải chia toán lớn thành hữu hạn toán kiểu nhỏ giải chúng giải thuật đệ quy Khi đó, thực tế nhiều tốn có kết trung gian giống phải phải tính lại nhiều lần, dẫn tới việc lãng phí tài nguyên nhớ làm chậm tốc độ chạy Đối với phương pháp quy hoạch động, để tối ưu tốn tránh việc phải tính tốn lại số kết trùng lặp gặp lại nhiều lần, kết trung gian giống Ta thường xây dựng bảng phương án dùng cho việc lưu trữ kết tìm Mảng thường mảng N chiều tính tốn theo cơng thức quy hoạch ta tìm Việc áp dụng bảng phương án khiến quy hoạch động tối ưu nhiều, giảm thiếu q trình tính tốn, thể sức mạnh thuật toán quy hoạch động so với thuật toán khác Làm bật lên ngun lí chia để trị Thường khơng có toán hay dấu hiệu nhận biết cho ta biết phải dùng phương pháp quy hoạch động tốn thể tính chất tốn gối hay có cấu trúc tối ưu lúc nên dùng tới phương pháp quy hoạch động Các bước giải toán tối ưu quy hoạch động a) Các cách tiếp cận Bài toán quy hoạch động thường dùng hai cách tiếp cận sau: • Top – down ( Từ xuống): Trong cách tiếp cận ta chia toán lớn thành toán con, giải chúng Bất giải xong toán con, lưu kết vào nhớ để tránh việc phải giải lại tốn gọi lại nhiều lần Đây đệ quy lưu trữ kết hợp với • Bottom-up ( Từ lên): Trong cách tiếp cận này, ta giải vấn đề theo hướng 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 Thường thực cách lưu kết vào mảng N chiều 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 Page | tất toán cần thiết cho việc giải toán cho trước không trực giác b) Các bước giải tốn 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, ta chia tốn thành giai đoạn, tìm cách phân rã toán thành hữu hạn “ toán con” tương tự có kích thước nhỏ hơn, tìm hệ thức quan hệ kết tốn có kích thước cho với kết “ tốn con” kiểu có kích thước nhỏ • Bước 2: Tổ chức liệu chương trình cho toán Ta tổ chức liệu dựa u cầu sau: ✓ Dữ liệu tính tốn dần theo bước ✓ Dư liệu lưu trữ vào bảng phương án để giảm lượng tính tốn lặp lại Các giá trị sau tính tốn thường lưu trữ mảng N chiều cách có thứ tự giúp cho việc tính tốn, truy cập tiến hành cách thuận lợi khoa học • Bước 3: Truy vết, tìm nghiệm tốn dựa vào bảng phương án Dựa vào bảng phương án có sau giải, ta tìm kết tối ưu tốn Sau tìm nghiệm tối ưu toán Để toán cho hiệu suất tốt nhất, giảm thiểu quy trình, tiết kiệm thời gian nhớ, ta tìm cách phát triển thuật cách thu gọn hệ thức truy hồi cung cấp thuật toán B Một số toán liên quan đến quy hoạch động kinh điển Bài toán tính 𝒏! Bài tốn: Hãy tính giá trị 𝑛! biết giá trị n Input: Số nguyên dương n Output: Giá trị 𝑛! Phân tích tốn: Page | , 𝑛=0 Ta có định nghĩa sau 𝑛! = { 𝑛 ∗ (𝑛 − 1)! , 𝑛 > Như để tính 𝑛! ta tính (𝑛 − 1)! Sau ghi nhớ áp dụng cho vòng lặp sau đến giá trị Thuật toán: Gọi GT[n] giá trị 𝑛! Ta có cơng thức quy hoạch động sau: GT[n] := n*GT[n-1]; Như việc tính 𝑛! thực vòng lặp: GT[0]:=1; For i:=1 to n GT[i]:= i*GT[i-1]; Kết quả: Giá trị 𝑛! giá trị nằm phần tử GT[n] Triển khai nhị thức Newton (𝒂 + 𝒃)𝒏 Bài toán: Hãy triển khai nhị thức Newton (𝑎 + 𝑏)𝑛 biết giá trị n (Tìm hệ số khai triển) Input: số nguyên dương n Output: nhị thức (𝑎 + 𝑏)𝑛 triển khai Ví dụ: với n=2; (𝑎 + 𝑏)2 = 𝑎2 + 2𝑎𝑏 + 𝑏2 Phân tích tốn: Nhị thức Newton triển khai theo công thức sau: Với 𝐶𝑛𝑘 = ( 𝑎 + 𝑏) 𝑛 = ∑ 𝑛 𝐶 𝑘 𝑎𝑘 𝑏𝑛−𝑘 𝑘=0 𝑛 𝑛(𝑛−1)(𝑛−2)….(𝑛−𝑘+1) 𝑘! = 𝑛! 𝑘!(𝑛−𝑘)! Như muốn triển khai nhị thức Newton ta phải tính 𝐶𝑛𝑘 với 0≤ 𝑘 ≤ 𝑛 Ta có cơng thức tính tổ hợp chập k n: Page | 𝑘 = 0; 𝑘 = 𝑛 𝑘 𝐶𝑛𝑘 = { 𝐶1𝑘−1 + 𝐶𝑛−1 1≤ 𝑘 ≤ 𝑛−1 𝑛−1 • Ta xây dựng bảng C gồm n+1 dòng n+1 cột biểu diễn phần tử từ đến n • C[i, j] lưu trữ gí trị Newton(i, j) theo quy tắc sau ( quy tắc tam giác Pascal): o C[0,0]=1; o C[i, 0]=1; o C[i, i] =1 với 0< i≤ 𝑛 o C[i, j] = C[i-1, j-1] + C[i-1, j] với 0 0, 𝑥𝑖 ≠ 𝑦𝑖 i B U N H 0 0 j B 1 1 U 2 I 2 H 2 O 2 A 2 N 3 Page | 12 G 3 Kết luận: Vậy dãy chung dài BUIHOANG BUNH là dãy BUH BUN Thuật toán: Int C[m,n]; For i:=0 to m For j:=0 to n If(i=0 or j=0) then C[i, j]=0; Else If (Xi = Yj) then C[i,j] = C[i-1,j-1] + 1; Else C[i,j]= max(C[i,j-1], C[i-1,j]); Bài tốn tìm dãy đơn điệu tăng dài khơng liên tiếp Bài tốn: Cho dãy số nguyên gồm n phần tử 𝑎1 , 𝑎2 , , 𝑎𝑛 Hãy tìm dãy dãy cho cho phần tử đơn điệu tăng Input: Dòng đầu số nguyên n độ dài dãy Dòng sau gồm n phần tử 𝑎1 , 𝑎2 , , 𝑎𝑛 cách dấu cách Output: Độ dài dãy tăng dài Danh sách phần tử dãy Ví dụ: Input Output 10 3457821293 345789 Phân tích tốn: • Trước tiên ta lập mảng A[0…n] để lưu giá trị 𝑎1 , 𝑎2 , , 𝑎𝑛 mảng L • Với i chạy từ tới n ta dùng mảng L để lưu lại giá trị theo công thức truy hồi Page | 13 Ví dụ với A[2]=5 ta xét i chạy từ đến 2, khơng có giá trị A[i] lớn A[2] L[2] = L[1]+1 Còn tồn giá trị i thuộc (0,2) cho A[i] > A[2] ta tính lại L[i]=1 vị trí lớn Lặp lại chạy hết giá trị • Ta tìm công thức truy hồi: { i 𝒏ế𝒖 ∃𝒋 = (𝟎, 𝒊) 𝒔𝒂𝒐 𝒄𝒉𝒐 𝒂𝒊 < 𝒂𝒋 𝑳[𝒊] = 𝟏 𝑳[𝒊] = 𝑴𝒂𝒙𝑳[𝒋]𝟎≤𝒋 𝒂𝒋 ∀𝒋 = (𝟎, 𝒊) Mảng A 2 Mảng 1 L Kết luận: Vậy độ dài chuỗi dài 6: Thuật toán: Int A[100],Int L[100]; Int Lmax //lưu giá trị max từ đầu tới phần tử i L[0]=1; For i:= to n do{ Lmax=0; For j:=0 to i { If ( A[i] > A[j] ) If (L[j]>Lmax) then Lmax=L[j]; } L[i]=Lmax +1; } Page | 14 C Kết luận Quy hoạch động thuật toán đại, lớp thuật toán quan trọng, hiệu có ứng dụng nhiều ngành khoa học máy tính Thuật tốn quy hoạch động có giải hầu hết toán tối ưu Tuy nhiên giải toán quy hoạch động, ta cần tìm đến cơng thức truy hồi thật đắn, tối ưu chứng minh độ xác tin cậy Một số tài liệu hay nên tham khảo quy hoạch động: • Dynamic Programming || Richard Bellman • Dynamic Programming and Optimal Control || Dimitri Bertsekas • Algorithm Design Techniques || Narasimha Karumanchi Page | 15 ... pháp quy hoạch động Các bước giải toán tối ưu quy hoạch động a) Các cách tiếp cận b) Các bước giải toán quy hoạch động B Một số toán liên quan đến quy hoạch động. .. pháp quy hoạch động tốn thể tính chất tốn gối hay có cấu trúc tối ưu lúc nên dùng tới phương pháp quy hoạch động Các bước giải toán tối ưu quy hoạch động a) Các cách tiếp cận Bài toán quy hoạch động. .. Kết luận Quy hoạch động thuật toán đại, lớp thuật tốn quan trọng, hiệu có ứng dụng nhiều ngành khoa học máy tính Thuật tốn quy hoạch động có giải hầu hết toán tối ưu Tuy nhiên giải tốn quy hoạch