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

Bài giảng phân tích thiết kế thuật toán chương 3 kỹ thuật thiết kế giải thuật

87 1,2K 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 87
Dung lượng 1,02 MB

Nội dung

CHƯƠNG 3: KỸ THUẬT THIẾT KẾ GIẢI THUẬT Nguyễn Văn Linh Khoa Công nghệ thông tin Truyền thông Đại học Cần Thơ nvlinh@cit.ctu.edu.vn Nguyễn Văn Linh Mục tiêu • Biết kỹ thuật thiết kế giải thuật: từ ý tưởng giải thuật chi tiết • Hiểu rõ nguyên lý kỹ thuật phân tích thiết kế giải thuật • Vận dụng kỹ thuật phân tích thiết kế để giải toán thực tế: toán dạng áp dụng kỹ thuật Nguyễn Văn Linh Mô hình từ toán đến chương trình Thiết kế Lập trình Đánh giá Bài toán thực tế Giải thuật Kỹ thuật thiết kế giải thuật: Chia để trị, quy hoạch động, … Nguyễn Văn Linh Giải thuật tốt Kỹ thuật phân tích đánh giá giải thuật: •Độ phức tạp giải thuật •Cải tiến GT #include … Chương trình Ngôn ngữ lập trình: •PASCAL, C/C++, JAVA, … Kỹ thuật chia để trị • Cần phải giải toán có kích thước n • Ta chia toán ban đầu thành số toán đồng dạng với toán ban đầu có kích thước nhỏ n • Giải toán tổng hợp lời giải chúng, ta có lời giải toán ban đầu • Đối với toán con, ta áp dụng kỹ thuật để chia chúng thành toán nhỏ • Quá trình phân chia cho toán sở Nguyễn Văn Linh Nhìn lại giải thuật MergeSort QuickSort • MergeSort: – Phân chia: chia danh sách có n phần tử thành danh sách có n/2 phần tử – Quá trình phân chia dẫn đến danh sách có phần tử, toán sở – Tổng hợp: trộn (merge) danh sách có thứ tự thành danh sách có thứ tự • QuickSort: – Phân hoạch danh sách ban đầu thành danh sách “bên trái” “bên phải” – Sắp xếp danh sách “bên trái” “bên phải” ta thu danh sách có thứ tự – Bài toán sở: Sắp xếp danh sách có phần tử nhiều phần tử có giá trị giống – Tổng hợp: bao hàm giai đoạn phân chia Nguyễn Văn Linh Bài toán nhân số nguyên lớn • Các NNLT có kiểu liệu số nguyên (integer Pascal, Int C…), kiểu có miền giá trị hạn chế • Người lập trình phải tìm cấu trúc liệu thích hợp để biểu diễn cho số nguyên • Để thao tác số nguyên biểu diễn cấu trúc mới, người lập trình phải xây dựng phép toán cho số nguyên phép cộng, phép trừ, phép nhân… • Sau ta đề cập đến toán nhân hai số nguyên lớn Nguyễn Văn Linh Giải thuật nhân số nguyên lớn • Xét toán nhân số nguyên lớn X Y, số có n chữ số • Theo cách nhân thông thường: 1426 x 3219 12834 1426 2852 4278 4590294 • Việc nhân chữ số X Y tốn n phép nhân • Nếu phép nhân chữ số tốn O(1) thời gian độ phức tạp giải thuật O(n2) Nguyễn Văn Linh Giải thuật chia để trị cho toán nhân số nguyên lớn • Để đơn giản cho việc phân tích giải thuật ta giả sử n lũy thừa • Còn phương diện lập trình, giải thuật trường hợp n • Biểu diễn X = A10n/2 + B Y = C10n/2 + D • Trong A, B, C, D số có n/2 chữ số • Ví dụ X = 1234 A = 12 B = 34 12*102 + 34 = 1234 = X • Với cách biểu diễn XY = AC10n + (AD + BC)10n/2 + BD Nguyễn Văn Linh Giải thuật chia để trị cho toán nhân số nguyên lớn (tt) • Ta phân tích toán ban đầu thành số toán nhân số có n/2 chữ số • Sau đó, ta kết hợp kết trung gian theo công thức XY = AC10n + (AD + BC)10n/2 + BD • Việc phân chia dẫn đến toán nhân số có chữ số Đây toán sở Nguyễn Văn Linh Đánh giá giải thuật • Theo công thức XY = AC10n + (AD + BC)10n/2 + BD • Ta thực phép nhân số nguyên có n/2 chữ số, phép cộng số lớn n chữ số phép nhân với 10n 10n/2 • Phép cộng số có lớn n chữ số cần O(n) • Phép nhân với 10n tốn O(n) (dịch trái n lần) • Gọi T(n) thời gian nhân số có n chữ số ta có phương trình đệ quy sau: • T(1) = • T(n) = 4T(n/2) + n • Giải hệ ta T(n) = O(n2) Ta không cải tiến so với giải thuật nhân thông thường Nguyễn Văn Linh X-đi X X X O O X-đi Max O-đi Min X X X X O O X X X X O O B A X X X O X O C D X-đi Max X O X X X O O E X X X X O O O F X O X X O X O G X X O X O X O H -1 O-đi Nguyễn Văn Linh Min X O X X X O X O I X O X X X O X O J X X X O X O X O K Cài đặt giải thuật cắt tỉa alpha – beta định trị trò chơi float cat_tia(NodeType Q, ModeType mode, float Vp) { NodeType C; /*C nút nút Q*/ float Vq; /*Vq giá trị tạm Q, sau tất nút Q xét bị cắt tỉa Vq giá trị nút Q*/ if (is_leaf(Q)) return Payoff(Q); /* Khởi tạo giá trị tạm cho Q */ if (mode == MAX) Vq = -∞; else Vq = ∞; /*Xét Q, lần xác định giá trị nút Q, ta phải đặt lại giá trị tạm Vq so sánh với Vp để cắt tỉa hay không*/ Nguyễn Văn Linh Xét C trái Q; while (C Q) { if (mode == MAX) { Vq = max(Vq, Cat_tia(C, MIN, Vq)); if (Vp= Vq) return Vq; } return Vq; } Kỹ thuật nhánh cận • Nhánh cận kỹ thuật xây dựng tìm kiếm phương án tối ưu, không xây dựng toàn mà sử dụng giá trị cận để hạn chế bớt nhánh • Cây tìm kiếm phương án có nút gốc biểu diễn cho tập tất phương án có, nút biểu diễn cho phương án Nút n có nút tương ứng với khả lựa chọn tập phương án xuất phát từ n Kỹ thuật gọi phân nhánh • Vói nút ta xác định giá trị cận Giá trị cận giá trị gần với giá phương án Với toán tìm ta xác định cận với toán tìm max ta xác định cận Cận giá trị nhỏ giá phương án, ngược lại cận giá trị lớn giá phương án Nguyễn Văn Linh Kỹ thuật nhánh cận: toán TSP • Cây tìm kiếm phương án nhị phân đó: • Nút gốc nút biểu diễn cho cấu hình gồm tất phương án • Con trái biểu diễn cho cấu hình gồm tất phương án chứa cạnh đó, phải biểu diễn cho cấu hình gồm tất phương án không chứa cạnh (các cạnh để xét phân nhánh thành lập tuân theo thứ tự đó, chẳng hạn thứ tự từ điển) • Mỗi nút kế thừa thuộc tính tổ tiên có thêm thuộc tính (chứa hay không chứa cạnh đó) • Nút biểu diễn cho cấu hình bao gồm phương án • Ðể trình phân nhánh mau chóng tới nút lá, nút ta cần có định bổ sung dựa nguyên tắc đỉnh chu trình có cấp không tạo chu trình thiếu Nguyễn Văn Linh Kỹ thuật nhánh cận: toán TSP – ví dụ: b 4 a c e Nguyễn Văn Linh d Kỹ thuật nhánh cận: toán TSP- Phân nhánh Các cạnh theo thứ tự từ điển để xét là: ab, ac, ad, ae, bc, bd, be, cd, ce de Tất phương án B C ab !ab E D ac !ad !ae Nguyễn Văn Linh A !ac Tính cận cho nút gốc A b 4 a c e Nguyễn Văn Linh d • • • • • Ðỉnh a chọn ad = 2, ab = Ðỉnh b chọn ba = 3, be = Ðỉnh c chọn ca = 4, cb = Ðỉnh d chọn da = 2, dc = Ðỉnh e chọn eb = 3, ed = Tổng độ dài cạnh chọn 35, cận nút gốc A 35/2 = 17.5 Tính cận cho nút D (ab, ac, !ad, !ae) b 4 a c e Nguyễn Văn Linh d • Ðỉnh a chọn ab = 3, ac = 4, hai cạnh buộc phải chọn • Ðỉnh b chọn ba = 3, be = • Ðỉnh c chọn ca = 4, cb = • Ðỉnh d chọn de = 6, dc = 5, không chọn da nên ta phải chọn de • Ðỉnh e chọn eb = 3, ed = Tổng độ dài cạnh chọn 41, cận nút D 41/2 = 20.5 Áp dụng kỹ thuật nhánh cận cho toán TSP • • • • • • • Xây dựng nút gốc, tính cận cho nút gốc Sau phân nhánh cho nút, ta tính cận cho hai Nếu cận nút >= giá nhỏ tạm thời phương án tìm thấy ta không cần xây dựng cho nút (Ta gọi cắt tỉa nút đó) Nếu hai có cận nhỏ giá nhỏ tạm thời phương án tìm thấy nút có cận nhỏ ưu tiên phân nhánh trước Mỗi lần quay lui để xét nút chưa xét nút ta phải xem xét lại nút để cắt tỉa hay không phương án có giá nhỏ tạm thời vừa tìm thấy Sau tất phân nhánh bị cắt tỉa phương án có giá nhỏ phương án tìm phương án cần tìm Trong trình xây dựng ta xây dựng số nút lá, ta biết nút biểu diễn cho phương án Giá nhỏ số giá phương án gọi giá nhỏ tạm thời Nguyễn Văn Linh Tất PA 17.5 ab 17.5 B ac !ad !ae D 20.5 ad !ae 18 !ac 18 ac 18.5 E F bc !bd !be H !cd ce de !bc !bd be cd ce !de abceda Giá = 23 abecda Giá = 21 Nguyễn Văn Linh A !ad ae 23 I G ad !ae 18.5 L !ab 18.5 C J !ac ad ae 21 !ad ae 23.5 bc !bd be N !cd !ce de !bc bd be !cd ce !de acbeda Giá = 19 acebda Giá = 23 M O K Kỹ thuật nhánh cận: BTcái ba lô • Danh sách đồ vật xếp theo thứ tự giảm đơn giá • Nút gốc biểu diễn cho trạng thái ban đầu ba lô, ta chưa chọn vật Tổng giá trị chọn TGT = Cận nút gốc CT = W * Ðơn giá lớn • Nút gốc có nút tương ứng với khả chọn đồ vật có đơn giá lớn Với nút ta tính lại thông số: – TGT = TGT (của nút cha) + số đồ vật chọn * giá trị vật – W = W (của nút cha) - số đồ vật chọn * trọng lượng vật – CT = TGT + W * Ðơn giá vật xét Nguyễn Văn Linh Kỹ thuật nhánh cận: BTcái ba lô • Trong nút con, ta ưu tiên phân nhánh cho nút có cận lớn trước Các nút tương ứng với khả chọn đồ vật có đơn giá lớn Với nút ta lại phải xác định lại thông số TGT, W, CT theo công thức nói bước • Lặp lại bước với ý: nút có cận nhỏ giá lớn tạm thời phương án tìm thấy ta không cần phân nhánh cho nút (cắt bỏ) • Nếu tất nút phân nhánh bị cắt bỏ phương án có giá lớn phương án cần tìm Nguyễn Văn Linh Kỹ thuật nhánh cận: BTcái ba lô - Ví dụ Ta có ba lô có trọng lượng 37 loại đồ vật với trọng lượng giá trị tương ứng cho bảng bên dưới: ĐV TL GT ĐV TL GT ĐG A 15 30 B 10 25 2.5 B 10 25 A 15 30 2.0 C 2 D 1.5 D C 2 1.0 Nguyễn Văn Linh ĐV TL GT ĐG B 10 25 2.5 A 15 30 2.0 D 1.5 C 2 1.0 TGT =0 W=37,CT = 92.5 XB=3 XB=2 TGT=75 W=7 CT = 89 B XA=0 TGT=75 W=7 CT=85.5 XD=1 TGT=81 W=3 CT = 84 Nguyễn Văn Linh TGT=50 W=17 CT = 84 C TGT=80 W=2 CT = 83 TGT=25 W=27 CT = 79 XB=0 TGT=0 W=37 CT = 74 D XA=0 K TGT=50 L W=17 CT=75.25 XD=0 G XC=1 TGT=83 W=1 XB=1 XA=1 E A TGT=75 W=7 CT = 82 H XC=0 I TGT=81 W=3 Cắt tỉa J E [...]... đấu thủ 4 đấu thủ 1 1 2 8 đấu thủ 3 1 2 3 4 5 6 7 1 2 1 2 3 4 1 2 3 4 5 6 7 8 2 1 2 1 4 3 2 1 4 3 6 5 8 7 3 4 1 2 3 4 1 2 7 8 5 6 4 3 2 1 4 3 2 1 8 7 6 5 5 6 7 8 1 2 3 4 6 5 8 7 2 1 4 3 7 8 5 6 3 4 1 2 8 7 6 5 4 3 2 1 Nguyễn Văn Linh Bài toán con cân bằng • Sẽ tốt hơn nếu ta chia bài toán cần giải thành các bài toán con có kích thước gần bằng nhau • Ví dụ: MergeSort phân chia bài toán thành hai bài... ta có một giải thuật cần O(n2) thời gian Nguyễn Văn Linh TSP: Ví dụ c(1,7) d(15,7) b(4 ,3) a(0,0) Nguyễn Văn Linh e(15,4) f(18,0) TT Canh X1 Y1 X2 Y2 Do dai 1 de 15 7 15 4 3. 00 2 ab 0 0 4 3 5.00 3 bc 4 3 1 7 5.00 4 ef 15 4 18 0 5.00 5 ac 0 0 1 7 7.07 6 df 15 7 18 0 7.62 7 be 4 3 15 4 11.05 8 bd 4 3 15 7 11.70 9 cd 1 7 15 7 14.00 10 bf 4 3 18 0 14 .32 11 ce 1 7 15 4 14 .32 12 ae 0 0 15 4 15.52 13 ad 0 0... C 2 2 D 4 6 Nguyễn Văn Linh Bài toán cái ba lô: ví dụ ĐV TL GT ĐG B 10 25 2.5 A 15 30 2.0 D 4 6 1.5 C 2 2 1.0 Nguyễn Văn Linh • • • • • • • • • • Phương án là X=(Xa,Xb,Xc,Xd) Xb = 37 /10 = 3 W= 37 - 3* 10 = 7 Xa = 7/15 =0 Xd = 7/4 = 1 W = 7-4 = 3 Xc = 3/ 2 = 1 W =3 2=1 TTL là 3* 10 + 1*4 + 1*2 = 36 TGT là 3* 25+1*6+1*2 = 83 ... QuickSort, khi mảng bị phân hoạch lệch thì thời gian thực hiện là O(n2) • Nguyên tắc chung: Chia bài toán thành các bài toán con có kích thước xấp xỉ bằng nhau thì hiệu suất sẽ cao hơn Nguyễn Văn Linh Kỹ thuật “tham ăn” (greedy) • Đây là một kỹ thuật được dùng nhiều để giải các bài toán tối ưu tổ hợp • Áp dụng kỹ thuật này tuy không cho chúng ta lời giải tối ưu nhưng sẽ cho một lời giải “tốt”; bù lại chúng... Nguyễn Văn Linh Kỹ thuật Tham ăn giải bài toán trả tiền của máy ATM • Gọi X = (X1, X2, X3, X4) là một phương án trả tiền • X1 là số tờ giấy bạc 100.000 đồng, X2 là số tờ giấy bạc 50.000 đồng, X3 là số tờ giấy bạc 20.000 đồng và X4 là số tờ giấy bạc 10.000 đồng • Theo yêu cầu ta phải có X1 + X2 + X3 + X4 nhỏ nhất • X1*100.000+X2*50.000+X3*20.000+X4*10.000 = n Nguyễn Văn Linh Kỹ thuật Tham ăn giải bài toán... chu trình • Ðó là một giải thuật thời gian mũ ! Nguyễn Văn Linh TSP: Kỹ thuật tham ăn 1 Sắp xếp các cạnh theo thứ tự tăng của độ dài 2 Xét các cạnh có độ dài từ nhỏ đến lớn để đưa vào chu trình 3 Một cạnh sẽ được đưa vào chu trình nếu: – Không tạo thành một chu trình thiếu – Không tạo thành một đỉnh có cấp ≥ 3 4 Lặp lại bước 3 cho đến khi xây dựng được một chu trình • Với kỹ thuật này ta chỉ cần n(n-1)/2...Cải tiến giải thuật • Ta biến đổi công thức XY = AC10n + (AD + BC)10n/2 + BD • XY = AC10n + [(A -B)(D-C) + AC + BD]10n/2 + BD (**) • Theo công thức này, ta chỉ cần 3 phép nhân các số nguyên có n/2 chữ số, 6 phép cộng trừ và 2 phép nhân với 10n, 10n/2 Ta có phương trình đệ quy sau: • T(1) = 1 • T(n) = 3T(n/2) + n • Giải phương trình ta được T(n) = O(nlog3) = O(n1.59) Rõ ràng cải tiến hơn giải thuật cũ... dung kỹ thuật tham ăn • Kỹ thuật tham ăn thường được vận dụng để giải bài toán tối ưu tổ hợp bằng cách xây dựng một phương án X • Phương án X được xây dựng bằng cách lựa chọn từng thành phần Xi của X cho đến khi hoàn chỉnh (đủ n thành phần) • Với mỗi Xi, ta sẽ chọn Xi tối ưu Với cách này thì có thể ở bước cuối cùng ta không còn gì để chọn mà phải chấp nhận một giá trị cuối cùng còn lại • Áp dụng kỹ thuật. .. cách tiếp cận khác 1 Xuất phát từ một đỉnh bất kỳ, chọn một cạnh có độ dài nhỏ nhất trong tất cả các cạnh đi ra từ đỉnh đó để đến đỉnh kế tiếp 2 Từ đỉnh kế tiếp ta lại chọn một cạnh có độ dài nhỏ nhất đi ra từ đỉnh này thoả mãn hai điều kiện nói trên để đi đến dỉnh kế tiếp 3 Lặp lại bước 2 cho đến khi đi tới đỉnh n thì quay trở về đỉnh xuất phát Nguyễn Văn Linh Bài toán cái ba lô Cho một cái ba lô có thể... lô và quay lại bước 3 cho đến khi không còn có thể chọn được đồ vật nào nữa Nguyễn Văn Linh Bài toán cái ba lô: ví dụ Ta có một ba lô có trọng lượng là 37 và 4 loại đồ vật với trọng lượng và giá trị tương ứng được cho trong bảng bên dưới: Nguyễn Văn Linh Loại đồ vật Trọng lượng Giá trị A 15 30 B 10 25 C 2 2 D 4 6 Bài toán cái ba lô: Vét cạn Loại đồ vật Trọng lượn g Giá trị A 15 30 B 10 25 C 2 2 D 4 ...Mục tiêu • Biết kỹ thuật thiết kế giải thuật: từ ý tưởng giải thuật chi tiết • Hiểu rõ nguyên lý kỹ thuật phân tích thiết kế giải thuật • Vận dụng kỹ thuật phân tích thiết kế để giải toán thực... thực tế: toán dạng áp dụng kỹ thuật Nguyễn Văn Linh Mô hình từ toán đến chương trình Thiết kế Lập trình Đánh giá Bài toán thực tế Giải thuật Kỹ thuật thiết kế giải thuật: Chia để trị, quy hoạch... Nguyễn Văn Linh Giải thuật tốt Kỹ thuật phân tích đánh giá giải thuật: •Độ phức tạp giải thuật •Cải tiến GT #include … Chương trình Ngôn ngữ lập trình: •PASCAL, C/C++, JAVA, … Kỹ thuật chia để

Ngày đăng: 04/04/2016, 12:14

TỪ KHÓA LIÊN QUAN

w