1. Trang chủ
  2. » Công Nghệ Thông Tin

Phân tích thiết kế thuật toán

67 207 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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ết kế thuật toá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ết kế thuật toán đệ quy Xây dựng số thuật toá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ết kế thuật toán đệ quy • • Tham số hố tốn Phân tí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ân tí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ân tí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ân tí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 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

Ngày đăng: 12/05/2018, 09:25

TỪ KHÓA LIÊN QUAN

w