1. Trang chủ
  2. » Khoa Học Tự Nhiên

Quy hoạch động

4 265 2

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 40 KB

Nội dung

Quy ho ạch độ n g - Presentation Transcript Ch ươ n g III: Qui ho ạch độ n g (Dynamic Programming) Gi i thi ệu Ph ươ n g pháp th ự c hi ện M ột s ố toán t ối u gi ải b ằng ph ươ n g pháp quy ho ạch độ ng Gi i thi ệu Vi ệc th ự c hi ện m ột gi ải thu ật đệ quy có th ể không t ối ưu v ề m ặt th i gian/không gian nh Ví d ụ: Tính ph ần t th ứ n c dãy s ố Fibonaci Function F(n: integer): integer; then F:=1Begin If n else F:= F(n-1)+F(n-2); End; 1.61803 Độ phức tạp: O(a n ) với a Do F(n-1) F(n-2) tính cách độc lập! Số lần gọi cần để tính F(n) số lần gọi để tính F(n-1) cộng với số lần gọi để tính F(n-2) Đặc điểm lời giải đệ quy: thực toán từ việc phân tích mức cao xuống mức thấp Nếu giải toán từ mức thấp lên mức cao ta có giải thuật sau: Function F(n: integer): integer; var i: integer; a: array[1 100] of integer; Begin a[1]:=1; a[2]:=1; For i:=3 to n a[i]:=a[i-1]+a[i-2]; F:= a[i]; End; Độ phức tạp: O(n) Đặc điểm lời giải toán theo phương pháp quy hoạch động: giải toán đệ quy từ mức thấp trước, lời giải chúng lưu lại sử dụng để tìm lời giải toán mức cao Tư tưởng phương pháp Sử dụng nguyên lý: “chia để trị” Cách tiếp cận: “dưới-lên” Phạm vi áp dụng Các toán có việc tổ hợp nghiệm toán Các toán tối ưu hoá rời rạc Nguyên lý phương pháp: Nguyên lý tối ưu Bellman: Trong dãy tối ưu lựa chọn dãy tối ưu Phương pháp thực Phân tích toán (biểu diễn toán dạng toán nhiều mức) Xây dựng giải pháp đệ quy (lập công thức truy hồi) Lập bảng (sử dụng mảng để tính toán giá trị theo kiểu dưới-lên) Tổng hợp kết (kiến tạo lời giải cho toán từ thông tin tính toán) Xét ví dụ Phân tích toán: Xây dựng hàm: Function F(n: integer): integer; Giải pháp đệ quy: F(n) = F(n-1)+F(n-2) Lập bảng: Sử dụng mảng chiều a (array[1 max] of integer) để tính: a[i] = F(i) với i = n Cụ thể: a[1] = a[2] = 1, và: a[i] = a[i-1] + a[i-2]; với i = n, Tổng hợp kết quả: F(n) = a[n]; Độ phức tạp tính toán: O(n) Ví dụ tính C(k,n): tổ hợp chập k n Phân tích toán: Xây dựng hàm: Function C(k, n: byte): longint; {giả thiết k 1: m[s], s-1] } c[s] + l[r – k l[r, s] = max { k r div m[s] k 0 m[s], s-1] c[s] + l[r – k’ = k’ u[r, s] = k’ Lập bảng (Bài toán túi xách) Procedure LapBang; Begin For r:=0 to p For s:=1 to n If s=1 then Tính u[r, 1] l[r, 1] else Tính u[r, s] l[r, s]; End; Độ phức tạp tính toán: O(np ) Tổng hợp kết (Bài toán túi xách) Procedure TongHop; Begin r:=p; For s:=n downto begin x[s]:= u[r,s]; r:= r – x[s].m[s]; end; End; Độ phức tạp tính toán: O(n) Bài toán Phép nhân tổ hợp nhiều ma trận M n  M Cần tính M = M m[i] (i=1 n)Trong đó: M i ma trận cấp m[i-1] Hãy xác định thứ tự thực phép nhân cho số phép tính tối thiểu M 3 M Ví dụ: Tính M = M 5] 50] [50  20] [20 [10 M có số phép toán là: M ) ( M = 12500 50  50 +  20 10 M ) có số phép toán là: ( M M = 6000 50  +  20 10 Phép nhân tổ hợp nhiều ma trận Phân tích toán: s M s , với r   M r+1 Gọi P (r, s) toán nhân ma trận: M r (bài toán ban đầu P (1, n) ) Giá trị cần tìm: k[r,s]: vị trí phép toán thực cuối toán P (r, s) M s )  M k+1  ( M k  M k-1 )   M r+1 (M r [r+1, s]k = k[r,s] l[r, s]: số phép tính nhân tối ưu toán P (r, s) Phép nhân tổ hợp nhiều ma trận Giải pháp đệ quy: Trường hợp 1: Khi s = r : l[r, r] = Trường hợp 2: Khi s = r+1: m[r+1] m[r] l[r, r+1] = m[r-1] k[r, r+1] = r+1 Trường hợp 3: Khi s > r+1: m[s] + l[v, s] } m[v-1] l[r, s] = { l[r, v-1] + m[r-1] s v r+1 (v vị trí phép toán thực cuối khác nhau) m[s] + l[v’, s] m[v’-1] = l[r, v’-1 ] + m[r-1] (v’ vị trí tối ưu số vị trí v) k[r, s] = v’ Nhận xét : Có thể ghép trường hợp vào trường hợp 3! Lập bảng (Bài toán phép nhân tổ hợp nhiều ma trận) Procedure LapBang; Begin For s:=1 to n For r:=s downto If r = s then l[r, r] := else Tính l[r, s] k[r, s]; End; Độ phức tạp tính toán: O(n ) Tổng hợp kết (Bài toán phép nhân tổ hợp nhiều ma trận) Procedure TongHop; Begin writeln(‘S ố phép tính tối thiểu:’, l[1, n]); i:=n; TimVT(1, n); {Nhằm xác định giá trị x[i]: vị trí phép nhân cần thực lần nhân thứ i (i=1 n-1)} writeln(‘ Thứ tự thực phép nhân :’); For i:=1 to n-1 writeln(x[i]); End; Trong thủ tục TimVT xây dựng đệ quy sau: Procedure TimVT(r, s); Begin i:=i-1; vt:= k[r, s]; x[i]:= vt; If (vt > r+1) and (vt < s) then begin TimVT(r, vt-1); TimVT(vt, s); end; End; Bài tập Tính giá trị xác suất P(i, j) (i, j: byte) Biết rằng: P(i, j) = i=0 j>0 = (P(i-1, j)+ P(i, j-1))/2 i>0 j>0 = ngược lại Bài toán xâu cực đại: S xâu T S nhận cách xoá số ký tự Ví dụ: ‘ABC’ xâu ‘GAHEBOOC’ Bài toán: Cho xâu T1, T2 Tìm xâu S xâu chung T1 T2 có độ dài cực đại Ví dụ: T1=‘ABCDAE’ T2=‘XYACADK’ có xâu ‘ACD’ xâu chung với độ dài cực đại Bài toán du lịch: Một người từ thành phố đến thành phố n  i k  i …  i qua n-1 thành phố khác 1, 2, , n-1 , theo lộ trình : n, t rong đó: < i < i < …< i k < n, Giá vé xe từ thành phố i đến thành phố j c[i,j] Tìm lộ trình từ thành phố đến thành phố n cho tổng chi phí giá vé đạt cực tiểu Bài toán sinh viên ôn thi: Một sinh viên m ngày để ôn thi n môn Theo kinh nghiệm anh ta, ôn môn j i ngày điểm a[i,j] Giả sử cho biết a[i,j] (với a[i,j] ... kết quả: C(k,n) = a[k,n] Độ phức tạp tính toán: O(k.n) Một số toán tối ưu giải phương pháp quy hoạch động Chiếc túi xách Phép nhân tổ hợp nhiều ma trận Các tập Bài toán túi xách Một kho chứa n... loại đồ vật s tối ưu cần lấy (tức: x[s]) toán P (r, s) Bài toán túi xách P (r, s) Giải pháp đệ quy: Khi s = 1: u[r, 1] = r div m[1] c[1]l[r, 1] = u[r, 1] Khi s > 1: m[s], s-1] } c[s] + l[r... k[r,s] l[r, s]: số phép tính nhân tối ưu toán P (r, s) Phép nhân tổ hợp nhiều ma trận Giải pháp đệ quy: Trường hợp 1: Khi s = r : l[r, r] = Trường hợp 2: Khi s = r+1: m[r+1] m[r] l[r, r+1] = m[r-1]

Ngày đăng: 07/12/2015, 16:55

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w