Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 67 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
67
Dung lượng
542,72 KB
Nội dung
Chương Thiếtkếthuậttoán Kỹ thuật đệ quy Kỹ thuật chia để trị Kỹ thuật tham ăn Kỹ thuật quy hoạch động Kỹ thuật đệ quy • • • Đại cương Phương pháp thiếtkếthuậttoán đệ quy Xây dựng số thuậttoán đệ quy danh sách liên kết đơn Đại cương • • Chương trình đệ quy chương trình gọi đến Một chương trình đệ quy khơng thể gọi đến mãi mà phải có điểm dừng (trường hợp suy biến) Phương pháp để thiếtkếthuậttoán đệ quy • • Tham số hố tốn Phântích trường hợp chung (biểu diễn toán dạng tốn loại khác phạm vi giải quyết) • Xác định trường hợp suy biến Ví dụ: Sắp xếp mảng a gồm n phần tử • Tham số hố tốn: procedure Sort(dau, cuoi: word); • Phântích trường hợp chung: Thủ tục Sort(dau, cuoi) có biểu diễn lệnh: Sort(dau+1, cuoi); if a[dau]>a[dau+1] then begin swap(a[dau],a[dau+1]); Sort(dau+1, cuoi); end; • Xác định trường hợp suy biến: dau = cuoi (khơng làm gì) procedure Sort(dau, cuoi: word); Begin If daucuoi then begin Sort(dau+1, cuoi); if a[dau]>a[dau+1] then begin swap(a[dau],a[dau+1]); Sort(dau+1, cuoi); end; end; End; • • Lời gọi từ chương trình chính: Sort(1,n); Độ phức tạp tính tốn: O(n ) Ví dụ: Tính a • n Tham số hố tốn: Function Power(a: real; n: byte):real; • Phântích trường hợp chung: n n-1 a = a.a hay Power(a,n) = a* Power(a,n-1) • • Tr.hợp suy biến: n = ( Power(a,1) = a ) Độ phức tạp tính tốn: O(n) n Ví dụ: Tính a (một cách tính khác) • Phântích trường hợp chung: Nếu n chẵn: Power(a,n) = sqr(Power(a,n div 2)) Nếu n lẻ: Power(a,n) = a*sqr(Power(a,n-1 div 2)) • • Trường hợp suy biến: n = (Power(a,1) = a) Độ phức tạp tính tốn: O(log2n) Xây dựng thuật tốn đệ quy danh sách liên kết đơn • Xét khai báo cho trước sau: Type TroNut = ^Nut; Nut = Record Info: Integer; Next: TroNut; End; Var F: TroNut; {danh sách F} Viết chương trình (hàm/thủ tục) • • Xem thử biểu diễn: CTC(F, ) CTC(F^.next, ) Ví dụ: Liệt kê giá trị trường Info nút thuộc danh sách F Procedure List(F: TroNut); Begin If Fnil then begin writeln(F^.Info); List(F^.Next); end; End; Tổng hợp • Để tìm xâu kết S – Đi ngược từ ô l[m,n] hướng l[0,0] – Nếu = bj đặt bj vào bên trái dãy S (ở đầu xâu), lùi L[i - 1, j-1] – Nếu bj • • lùi L[i - 1, j] trường hợp L[i - 1, j] > L[i, j – 1] ngược lại, lùi L[i, j – 1] trường hợp L[i - 1, j] ≤ L[i, j – 1] • Ví dụ : A=’XYACADK’và B=’ABCDAE’ J (A) (B) (C) (D) (A) (E) 0 0 0 0 (X) 0 0 0 (Y) 0 0 0 (A) 1 1 1 (C) 1 2 2 (A) 1 2 3 (D) 1 3 (K) 1 3 i Bài tập Bài toán du lịch: Một người từ thành phố đến thành phố n qua n-1 thành phố khác 1, 2, , n1, theo lộ trình: → i1 → i2 … → ik → n, đó: < i1 < i2 < …< ik < 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 tố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]0 – l[0] = – u[0] = -1 ( khơng có đỉnh kế cuối) – l[s] = (l[k] + c[k,s]) (0 – l[r,1] = a[r,1] – u[r,1] = r – l[r,s] = max (a[k,s] + l[r-k, s-1]) (0 ≤ k ≤ r) = a[k’,s] + l[r-k’, s-1] u[r,s] = k’ Procedure Lapbang; Begin for s:= to n for r:= to m if (s = 1) then Tính l[r,1] u[r,1] else Tính l[r,s] u[r,s] End; Tính l[r,s] u[r,s] Kmax:=0; Lmax:=0; for k:=0 to r begin tam:= a[k,s]+l[r-k,s-1]; if tam>Lmax then begin Lmax:=tam; Kmax:=k; end; end; l[r,s]:=Lmax; u[r,s]:=Kmax; procedure tonghop; begin r:=m; for s:=n downto begin x[s]:=u[r,s]; r:=r-x[s]; end; end; ... A[l] Else Begin MinMax(A, l , (l+r) div 2, GTMin1, GTMax1) MinMax(A, (l+r) div 2+ 1, r, GTMin2, GTMax2) GTMin:=min(GTMin1, GTMin2); GTMax:=max(GTMax1, GTMax2); End; Xếp lịch thi đấu thể thao: xét... chẵn: Power(a,n) = sqr(Power(a,n div 2) ) Nếu n lẻ: Power(a,n) = a*sqr(Power(a,n-1 div 2) ) • • Trường hợp suy biến: n = (Power(a,1) = a) Độ phức tạp tính tốn: O(log2n) Xây dựng thuật tốn đệ quy danh... •• • • Tổng số trận đấu toàn giải là: Nếu n số chẵn (n=2k) n /2 cặp thi đấu ngày cần n-1 ngày Ngược lại n số lẻ n-1 số chẵn nên ta (n-1) /2 cặp thi đấu ngày ta cần n ngày • • Lịch thi đấu bảng