Bài giảng Phân tích thiết kế và giải thuật - Chương 2: Kỹ thuật thiết kế giải thuật cung cấp cho người học các kiến thức: Giới thiệu, từ bài toán đến chương trình, các kỹ thuật thiết kế giải thuật. Mời các bạn cùng tham khảo nội dung chi tiết.
KỸ THUẬT THIẾT KẾ GIẢI THUẬT Nội dung • Giới thiệu • Từ tốn đến chương trình • Các kỹ thuật thiết kế giải thuật – Chia để trị – Tham ăn (gready) – Quay lui • Quét cạn • Cắt tỉa Alpha-Beta • Nhánh cận Giới thiệ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 tốn thực tế: tốn dạng áp dụng kỹ thuật Mơ hình từ tốn đến chương trình Thiết kế Lập trình Đánh giá Bài tốn thực tế Giải thuật Kỹ thuật thiết kế giải thuật: - Chia để trị, - Tham ăn, - Quay lui … 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 giải thuật #include … Chương trình Ngơn ngữ lập trình: •PASCAL, C/C++, •JAVA, …Ngơn ngữ lập trình: •PASCAL, C/C++, JAVA, … Kỹ thuật chia để trị • Yêu cầu: – Cần phải giải tốn có kích thước n • Phương pháp: – 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 lời giải – Tổng hợp lời giải ta có lời giải tốn ban đầu • Chú ý – Đối với toán con, ta lại chia chúng thành toán nhỏ – Quá trình phân chia dừng lại kích thước tốn đủ nhỏ mà ta dễ dàng giải gọi toán sở Kỹ thuật chia để trị • Kỹ thuật chia để trị bao gồm hai q trình: – Phân tích tốn cho thành toán sở – Tổng hợp kết từ tốn sở để có lời giải tốn ban đầu • Sơ đồ sau mô tả kỹ thuật chia để trị mà chia tốn thành hai tốn nhỏ Đây trường hợp phổ biến kỹ thuật tốn kích thước n tốn kích thước n/2 lời giải cho tốn tốn kích thước n/2 lời giải cho toán lời giải cho tốn ban đầu Nhìn lại giải thuật QuickSort MergeSort • Giải thuật QuickSort – Sắp xếp dãy n số theo thứ tự tăng dần • Áp dụng kỹ thuật chia để trị – Phân chia: Tìm giá trị chốt phân hoạch danh sách cho thành hai danh sách “bên trái” “bên phải” • Sắp xếp “bên trái” “bên phải” ta danh sách có thứ tự • Bài tố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 Nhìn lại giải thuật QuickSort MergeSort • Ví dụ QuickSort: Độ phức tạp QuickSort • Xấu – Dãy n số thứ tự tăng dần – Phân hoạch bị lệch: phần tử chốt phần tử nhỏ => cần n phép so sánh để biết phần tử – Độ phức tạp trường hợp là: O(n2) • Tốt nhất: – Phân hoạch cân bằng: phần tử chốt phần tử dãy => C(n) = 2C(n/2) + n – Độ phức tạp trường hợp là: O(nlogn) 10 ĐV TL GT ĐG B 10 25 2.5 A 15 30 2.0 TGT =0 W=37,CT = 92.5 XB=3 D 1.5 C 2 1.0 TGT=75 W=7 CT = 89 XB=2 B TGT=50 W=17 CT = 84 A XB=1 C TGT=25 W=27 CT = 79 XB=0 D * Với nút B, ta có: * Với nút D, ta có: • TGT = 0+3*25=75 • TGT = 0+1*25=25 • W = 37 – 3*10 = • W = 37 – 1*10 = 27 • CT = 75 + 7*2 =89 * Với nút C, ta có: • CT = 25 + 27*2 =79 * Với nút E, ta có: • TGT = 0+2*25=50 • TGT = 0+0*25=0 • W = 37 – 2*10 = 17 • W = 37 – 0*10 = 37 • CT = 50 + 17*2 =84 • CT = + 37*2 =74 TGT=0 W=37 CT = 74 66 E ĐV TL GT ĐG B 10 25 2.5 A 15 30 2.0 TGT =0 W=37,CT = 92.5 XB=3 D 1.5 C 2 1.0 * Với nút F, ta có: • TGT = 75+0*30=75 XB=2 TGT=75 W=7 CT = 89 B XA=0 TGT=75 F W=7 CT=85.5 TGT=50 W=17 CT = 84 A XB=1 C TGT=25 W=27 CT = 79 XB=0 D TGT=0 W=37 CT = 74 * Với nút B, ta có cận lớn nên ta phân nhánh cho nút B trước • W = – 0*15 = • CT = 75 + 7*1.5 =85,5 67 E ĐV TL GT ĐG B 10 25 2.5 A 15 30 2.0 TGT =0 W=37,CT = 92.5 XB=3 D 1.5 C 2 1.0 * Với nút G, ta có: • TGT = 75+1*6=81 • W = – 1*4 = • CT = 81 + 3*1 =84 * Với nút H, ta có: XB=2 TGT=75 W=7 CT = 89 B XA=0 TGT=75 F W=7 CT=85.5 XD=1 TGT=81 W=3 CT = 84 A XB=1 TGT=50 W=17 CT = 84 C TGT=25 W=27 CT = 79 XB=0 D TGT=0 W=37 CT = 74 * Với nút F, ta có cận lớn nên ta tiếp tục phân nhánh cho nút F XD=0 G TGT=75 W=7 CT = 82 H • TGT = 75+0*6=75 • W = – 0*4 = • CT = 75 + 7*1 =82 68 E ĐV TL GT ĐG B 10 25 2.5 A 15 30 2.0 TGT =0 W=37,CT = 92.5 XB=3 D 1.5 C 2 1.0 * Với nút I, ta có: • TGT = 81+1*2=83 • W = – 1*2 = XB=2 TGT=75 W=7 CT = 89 B XA=0 TGT=75 F W=7 CT=85.5 XD=1 * Với nút J, ta có: TGT=81 W=3 CT = 84 A XB=1 TGT=50 W=17 CT = 84 C TGT=25 W=27 CT = 79 XB=0 D TGT=0 W=37 CT = 74 * Ta tiếp tục phân nhánh cho nút G XD=0 G TGT=75 W=7 CT = 82 H • TGT = 81+0*2=81 • W = – 0*2 = XC=1 TGT=83 W=1 XC=0 I TGT=81 W=3 J 69 E •Nút I J hai nút (biểu diễn cho phương án) với nút số đồ vật chọn xong TGT =0 W=37,CT = 92.5 A • Nút I biểu diễn cho phương án XB=3 Xb=3, Xa=0, Xd=1, Xc=1 Giá: 83 XB=2 TGT=75 W=7 CT = 89 B XB=1 TGT=50 W=17 CT = 84 C TGT=25 W=27 CT = 79 XB=0 D TGT=0 W=37 CT = 74 =0 • Nút J biểu diễn cho phươngX án A Xb=3, Xa=0, Xd=1, Xc=0 TGT=75 W=7 CT=85.5 E Giá: 81 XD=1 TGT=81 W=3 CT = 84 XD=0 G XC=1 TGT=83 W=1 TGT=75 W=7 CT = 82 H XC=0 I TGT=81 W=3 J 70 •Như giá trị lớn tạm thời 83 TGT =0 W=37,CT = 92.5 • Quay lui lên nút H, ta thấy A cận H 82 83 Tiếp tục phân nhánh XB=3 XB=2 TGT=75 W=7 CT = 89 B XA=0 TGT=75 W=7 CT=85.5 XB=1 TGT=50 W=17 CT = 84 C XA=1 E TGT=25 W=27 CT = 79 XB=0 TGT=0 W=37 CT = 74 D XA=0 K L cho nút C XD=1 TGT=81 W=3 CT = 84 XD=0 G XC=1 TGT=83 W=1 TGT=75 W=7 CT = 82 H Cắt tỉa XC=0 I TGT=81 W=3 J 71 E ĐV TL GT ĐG B 10 25 2.5 A 15 30 2.0 TGT =0 W=37,CT = 92.5 XB=3 D 1.5 C 2 1.0 * Với nút K, ta có: • TGT = 50+1*30=80 • W = 17 – 1*15 = • CT = 80 + 2*1,5 =83 * Với nút L, ta có: 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 XB=1 TGT=50 W=17 CT = 84 C XA=1 E A 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 W=17 CT=75.5 L XD=0 G TGT=75 W=7 CT = 82 H • TGT = 50+0*30 = 50 • W = 17 – 0*15 = 17 • CT = 50 + 17*1,5 =75,5 XC=1 TGT=83 W=1 Cắt tỉa XC=0 I TGT=81 W=3 J 72 E • Hai giá trị K, L không lớn 83 TGT =0 W=37,CT = 92.5 Nên hai nút bị cắt tỉa A • Tương tự nút D E bị cắt tỉa • Như tất nút XB=3 XB=2 TGT=75 W=7 CT = 89 B XA=0 phân nhánh bị cắt tỉa W=7 TGT=75 E XD=1 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 W=17 CT=75,5 L XD=0 G XC=1 TGT=83 W=1 TGT=50 W=17 CT = 84 XA=1 CT=85.5 TGT=81 W=3 CT = 84 XB=1 TGT=75 W=7 CT = 82 H Cắt tỉa XC=0 I TGT=81 W=3 J 73 E • Vậy phương án tốt tạm thời phương án cần tìm • Theo ta cần chọn: X =3 Xa=3, Xb=0, Xd=1, Xc=1 TGT=75 W=7 Tổng giá trị: 83 CT = 89 Tổng trọng lượng: 36 XB=2 B B XA=0 TGT=75 W=7 CT=85.5 E 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 A XB=1 XA=1 XD=1 TGT=81 W=3 CT = 84 TGT =0 W=37,CT = 92.5 TGT=75 W=7 CT = 82 H Cắt tỉa XC=0 I TGT=81 W=3 J 74 E Kết luận • Mỗi kỹ thuật phù hợp với số loại toán • Mỗi kỹ thuật có ưu khuyết điểm, khơng có kỹ thuật “trị bá bệnh” – Kỹ thuật nhánh cận cần phải có cách ước lượng cận tốt mong cắt nhiều nhánh – Kỹ thuật vét cạn có độ phức tạp thời gian cao (lũy thừa) Chỉ dùng n nhỏ khơng cịn cách khác 75 Bài tập Tham ăn, nhánh cận • Bài 1: Cho tốn ba lô với trọng lượng ba lô W=30 loại đồ vật cho bảng bên Tất loại đồ vật có a) Giải toán kỹ thuật tham ăn (Greedy) b) Giải toán kỹ thuật nhánh cận Loại đồ vật A B C D E Trọng lượng 15 10 Giá trị 30 25 24 76 Bài tập Tham ăn, nhánh cận • Bài 2: Bài tốn mua hàng: có bà nội trợ mang số tiền M vào siêu thị n Giả sử siêu thị có n loại hàng i có giá trị dinh dưỡng lượng si giá tiền vi Bà nội trợ cần phương án mua hàng cho tiền không vượt M tổng giá trị dinh dưỡng lớn – Cho toán mua hàng cụ thể với số tiền M=40 số liệu loại hàng bảng sau: a) Giải toán mua hàng cụ thể kỹ thuật tham ăn b) Giải toán mua hàng cụ thể kỹ thuật nhánh cận Loại hàng Giá tiền A B C D E 10 15 Giá trị dinh dưỡng 25 30 24 Số lượng 1 77 Bài tập Kỹ thuật Alpha-Beta • Bài 1: Dùng kĩ thuật cắt tỉa alpha-beta để định trị cho nút gốc trò chơi sau (các số nút giá trị gán cho chúng) 78 Bài tập Kỹ thuật Alpha-Beta • Bài 2: Dùng kỹ thuật cắt tỉa alpha – beta để định trị cho nút gốc trò chơi sau (các nút gán trị): 79 Bài tập Kỹ thuật Alpha-Beta • Bài 3: Cho cặp số (a,b) hai người thay phiên nhau, đến lượt viết cặp số (a, a+b) (a+b, b) với điều kiện số viết nhỏ số nguyên dương N cho trước Cho cặp số ban đầu (1,1) N=6 a) Vẽ tồn trị chơi b) Dùng kỹ thuật cắt tỉa Alpha-Beta để định trị cho nút gốc cho biết thắng trò chơi hai nước tốt 80 ... 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ị, - Tham ăn, - Quay lui … Kỹ thuật phân tích đánh giá giải thuật: - Độ phức tạp giải thuậ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 tốn thực tế: tốn dạng áp dụng kỹ thuật Mơ hình từ tốn đến chương. .. tốn đến chương trình • Các kỹ thuật thiết kế giải thuật – Chia để trị – Tham ăn (gready) – Quay lui • Quét cạn • Cắt tỉa Alpha-Beta • Nhánh cận Giới thiệu • Biết kỹ thuật thiết kế giải thuật: