Thiết kế thuật toán và phương pháp trực tiếp

26 367 0
Thiết kế thuật toán và phương pháp trực tiếp

Đ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

17/02/2016 Phân tích Thiết kế THUẬT TOÁN Hà Đại Dương duonghd@mta.edu.vn Web: fit.mta.edu.vn/~duonghd Bài - Thiết kế thuật toán Phương pháp trực tiếp PHÂN TÍCH VÀ THIẾT KẾ THUẬ TOÁN 17/02/2016 NỘI DUNG I Giới thiệu II Thiết kế thuật toán Modul hóa phân tích từ xuống (top-down) Một số phương pháp thiết kế Tối ưu thuật toán III Phương pháp trực tiếp Lược đồ chung Một số toán áp dụng IV Bài tập I Giới thiệu  Thiết kế thuật toán vấn đề mang tính: • Kỹ thuật • Nghệ thuật  Đòi hỏi người thực phải có: • Kiến thức • Kinh nghiệm • Kỹ  Thuật toán thiết kế phải: • Đúng, đơn giản, dễ dùng • Phù hợp với nhớ máy tính có thời gian thực hợp lý 17/02/2016 II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Các toán cần giải máy tính ngày đa dạng, phức tạp • Các thuật toán đòi hỏi có quy mô lớn, tốn nhiều thời gian công sức Bài toán cần giải quyết: A Chia nhỏ toán thành toán nhỏ: Bài toán cần giải modul ->Chia toán thành modul nhỏ Đây cách tiếp cận thông thường người với hầu hết vấn đề đặt sống II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN A A1 … A2 A21 A3 A22 17/02/2016 II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Phương pháp phân tích top-down để giải toán: • Là trình phân tích toán thực từ xuống dưới; • Từ mức tổng quát ý tưởng giải quyết, bước để giải toán, mức chi tiết câu lệnh chương trình • Quá trình phân rã toán thực theo mức khác II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Phương pháp phân tích top-down để giải toán: • Mức có số thấp (đầu tiên) gọi mức tổng quan Ở mức tổng quan xem xét tổng thể lời giải toán thông qua nhiệm vụ • Mức mức nhiệm vụ để thực lời giải toán Công việc chủ yếu mức mô tả cụ thể nhiệm vụ • Quá trình phân tích tiếp tục phân rã lời giải toán thành nhiệm vụ nhận đơn thể (hàm thủ tục), công việc hình dung rõ ràng xác định 17/02/2016 II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự Cho xâu ký tự S Hãy sửa xâu S cho: • Giữa hai âm tiết có dấu cách; • Sau dấu đặc biệt dấu chấm phảy ";", dấu phảy "’,", dấu chấm ".", dấu hai chấm “:” có kí tự trắng; • Trước dấu đặc biệt kí tự trắng • Đầu câu phải viết hoa • Ví dụ, cho S = " học tập , phấn đấu rèn luyện ", cần sửa thành "Học tập, phấn đấu Rèn luyện " II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức tổng quan: Hình dung toàn thao tác (nhiệm vụ chính) phải thực S Có nhiều cách phân chia toán, ta xét nhiều cách phân chia nhiệm vụ sau: Xóa dấu trống đầu cuối Ví dụ, S = "học tập , phấn đấu rèn luyện " Xóa hết kí tự trắng đứng liên tiếp: nghĩa không để kí tự trắng đứng cạnh Ví dụ S = "học tập , phấn đấu rèn luỵện " 17/02/2016 II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức tổng quan: Hình dung toàn thao tác (nhiệm vụ chính) phải thực S Có nhiều cách phân chia toán, ta xét nhiều cách phân chia nhiệm vụ sau: Xóa hết kí tự trắng (nếu có) đứng trước dấu “: ; , ” Ví dụ S = "học tập, phấn đấu.rèn luyện " Thêm kí tự trắng (nếu cần) vào sau dấu “: ; , ” Ví dụ S = "học tập, phấn đấu rèn luyện " Sửa (nếu cần) kí tự đầu câu thành viết hoa Ví dụ S = "Học tập, phấn đấu Rèn luyện " II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức chi tiết 1: Mô tả chi tiết nhiệm vụ 17/02/2016 II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức chi tiết 1: II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức chi tiết 1: 17/02/2016 II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức chi tiết 1: II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức chi tiết 1: 17/02/2016 II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức chi tiết 2: Mô tả chi tiết nhiệm vụ II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức chi tiết 2: Mô tả chi tiết nhiệm vụ 17/02/2016 II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức chi tiết 2: Mô tả chi tiết nhiệm vụ II Thiết kế thuật toán MODUL HÓA VÀ PHÂN TÍCH TOP-DOWN • Ví dụ - Bài toán: Chuẩn hóa xâu ký tự • Mức chi tiết 2: Mô tả chi tiết nhiệm vụ 10 17/02/2016 II Thiết kế thuật toán MỘT SỐ PHƯƠNG PHÁP THIẾT KẾ  Phương pháp tham lam (Greedy Method) • Giải toán tối ưu rời rạc • Dựa nguyên tắc: lời giải tối ưu toán đạt nhờ việc chọn tối ưu bước toán • Ví dụ: tối ưu số tờ tiền phải trả máy ATM, toán người du lịch …  Phương pháp quy hoạch động (Dynamic Programming) • • • • Giải toán tối ưu Một dạng cách tiếp cận chia để trị Dựa nguyên lý Bellman: lời toán tối ưu lời giải toán tối ưu Ví dụ: Bài toán túi … II Thiết kế thuật toán MỘT SỐ PHƯƠNG PHÁP THIẾT KẾ  Phương pháp quay lui (Back Tracking) • Thường dùng cho toán thuật giải trực tiếp • Tư tưởng chiến lược Thử-và-sai • Bài toán: Bài toán liệt kê hoán vị, 8-hậu…  Phương pháp nhánh cận (Branch and Bound) • Dùng cho toán thuật giải trực tiếp • Khi kích thước lớn pp quay lui dẫn đến không đáp ứng thời gian • Bài toán: Cái túi, hoán vị … 12 17/02/2016 II Thiết kế thuật toán TỐI ƯU THUẬT TOÁN  Việc xem xét thuật toán, chỉnh sửa để thuật toán hiệu cần thiết  Việc tối ưu thuật toán thường dựa “Điểm thời gian thuật toán”  Tối ưu vòng lặp  Tối ưu điều khiển chọn II Thiết kế thuật toán TỐI ƯU THUẬT TOÁN  Tối ưu vòng lặp: • Là điểm cần quan tâm • Cố gắng giảm vòng lặp lồng • Tăng số lệnh thực vòng lặp để giảm số lượng bước lặp • Tách lệnh không phụ thuộc vào số lặp khỏi vòng lặp 13 17/02/2016 II Thiết kế thuật toán TỐI ƯU THUẬT TOÁN  Tối ưu vòng lặp: • Ví dụ 1: tính ex II Thiết kế thuật toán TỐI ƯU THUẬT TOÁN  Tối ưu vòng lặp: • Ví dụ 1: tính ex T(n) = O(n2) 14 17/02/2016 II Thiết kế thuật toán TỐI ƯU THUẬT TOÁN  Tối ưu vòng lặp: • Ví dụ 1: tính ex T(n) = ??? II Thiết kế thuật toán TỐI ƯU THUẬT TOÁN  Tối ưu vòng lặp: • Ví dụ 2: C = A.B T(n) = O(n3) 15 17/02/2016 II Thiết kế thuật toán TỐI ƯU THUẬT TOÁN  Tối ưu vòng lặp: • Ví dụ 2: C = A.B II Thiết kế thuật toán Độ phức tạp : T(n) ??? 16 17/02/2016 II Thiết kế thuật toán TỐI ƯU THUẬT TOÁN  Tối ưu vòng lặp: • Ví dụ 3: Thuật toán xếp chọn Thể for (int i=0;i 0) {n++; c[n] = nhớ;} 4) output c = (c[n] c[1]); 22 17/02/2016 III TKTT Phương pháp trực tiếp Bài toán áp dụng  Ví dụ - Cho số nguyên a có không 100 chữ số số nguyên b,  b  Tính c = ab Độ phức tạp thuật toán: Thuật toán: input: a = (a[n], , a[1])  N, n ≤ 100; b {0, 1, , 9} output: c=ab 1) nhớ = 0; 2) for (i = 1; i ≤ n; i++) a) tg = b*a[i] + nhớ; b) c[i] = tg % 10; c) nhớ = tg/10; 3) if (nhớ > 0) {n++; c[n] = nhớ;} 4) output c = (c[n] c[1]); Các bước 1), 3), 4) có độ phức tạp O(1), bước 2) có độ phức tạp O(n) Tổng hợp (theo qui tắc cộng): độ phức tạp thuật toán O(n) III TKTT Phương pháp trực tiếp Bài toán áp dụng  Ví dụ - Giải phương trình bậc 2: a.x2+b.x+c =  Đầu vào: a, b, c - Số (thực nguyên), ràng buộc a≠0  Đầu ra: Kết luận nghiệm, x1, x2  Quan hệ đầu vào, đầu ra: • Tính delta = b2 – 4ac • Nếu delta Vô nghiệm • Nếu delta=0 -> Có nghiệm kép • Nếu delta>0 -> Có nghiệm phân biệt  Độ phức tạp: n ???, T(n) ??? 23 17/02/2016 III TKTT Phương pháp trực tiếp Bài toán áp dụng  Ví dụ 3a - Tìm kiếm Cho dãy số A[1 n], tìm xem giá trị x có dãy A hay không  Đầu vào: A[1 n], x  Đầu ra: Chỉ số k mảng mà A[k]=x, k = -1 xA[1 n]  Quan hệ đầu vào đầu ra: Duyệt phần tử (i) dãy A thực phép so sánh phần tử xét A[i] x, phép so sánh cho kết -> i số cần tìm (k=i)  Độ phức tạp T(n)=O(n) III TKTT Phương pháp trực tiếp Bài toán áp dụng  Ví dụ 3b - Tìm kiếm Cho dãy số A[1 n] xếp theo thứ tự tăng dần, tìm xem giá trị x có dãy A hay không  Đầu vào: A[1 n], x  Đầu ra: Chỉ số k mảng mà A[k]=x, k = -1 xA[1 n]  Quan hệ đầu vào đầu ra: Dựa thông tin dãy A xếp -> Tìm kiếm nhị phân  Độ phức tạp T(n)=O(log2n) 24 17/02/2016 III TKTT Phương pháp trực tiếp Bài toán áp dụng  Ví dụ - Nhân hai ma trận vuông cấp n A, B hai ma trận vuông cấp n, tính ma trận C tích A.B  Đầu vào: A, B  Đầu ra: C  Quan hệ đầu vào đầu ra: phép toán ma trận (i,j = n)  Độ phức tạp T(n)=O(n3) III TKTT Phương pháp trực tiếp Bài toán áp dụng  Ví dụ - Tính định thức cấp n A ma trận vuông cấp n, tính định thức (det(A)) A  Đầu vào: A, B  Đầu ra: C  Quan hệ đầu vào đầu ra: Định thức cách tính (khai triển theo dòng i)  Độ phức tạp T(n)=O(n!) 25 17/02/2016 NỘI DUNG BÀI HỌC I Giới thiệu II Thiết kế thuật toán Modul hóa thiết kế từ xuống (top-down) Một số phương pháp thiết kế Tối ưu thuật toán III Phương pháp trực tiếp Lược đồ chung Một số toán áp dụng IV Bài tập Mô tả thông tin đầu vào, đầu quan hệ (quy luật quan hệ đó: Giải hệ phương trình bậc ẩn (x, y) Giải hệ n phương trình n ẩn Chuyển điểm từ dạng số -> Dạng chữ (0.0-10.0) • chữ số sau dấu thập phân • chữ số sau dấu thập phân Chuyển số tiền dạng số chẵn -> dạng chữ Chuyển số tiền dạng số có phần lẻ -> dạng chữ 26

Ngày đăng: 14/11/2016, 17:35

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan