Bài giảng do GV. Hà Đại Dương biên soạn. Nội dung của bài giảng trình bày khái niệm thuật toán, cách biểu diễn thuật toán, tính đúng đắn và hiệu quả của thuật toán; đánh giá độ phức tạp thuật toán: độ tăng của hàm, độ phức tạp của thuật toán, đánh giá bằng thực nghiệm. Mời các bạn cùng tham khảo.
2/2/2017 Design and Analysis of Algorithms Lecture Introduction Lecturer: Ha Dai Duong duonghd@mta.edu.vn 2/2/2017 Nội dung Giới thiệu Thuật toán Khái niệm thuật toán Biểu diễn thuật toán Tính đắn hiệu TT Đánh giá độ phức tạp TT Độ tăng hàm Độ phức tạp TT Đánh giá thực nghiệm 2/2/2017 Nội dung Giới thiệu Thuật toán Độ phức tạp thuật toán 2/2/2017 2/2/2017 Mục đích • Cung cấp kiến thức việc đánh giá thuật toán – Lý thuyết – Thực nghiệm • Thiết kế thuật giải – Chia để trị – Tham lam – Quy hoạch động –… 2/2/2017 Nội dung môn học • Tổng quan thuật toán độ phức tạp thuật toán • Đánh giá thuật toán • Thiết kế thuật toán • Phương pháp thiết kế thuật toán – Trực tiếp – Chia để trị – Tham lam … 2/2/2017 Hình thức kiểm tra • 10% Chuyên cần • 20% Thường xuyên (bài tập, kiểm tra) • 70% Thi cuối kỳ (vấn đáp) – Mô tả toán – Thiết kế thuật toán – Đánh giá – Cài đặt – Báo cáo 2/2/2017 2/2/2017 Tài liệu tham khảo • Slide giảng • Bài giảng Thiết kế Đánh giá Thuật toán, Trần Xuân Sinh, NXB, ĐHQG, 2010 • Cẩm nang thuật toán, Robert Sedgewich - Trần Đan Thư dịch (tái lần 2), NXB KHKT, 2006 • Cấu trúc liệu giải thuật, Đỗ Xuân Lôi, NXB ĐH Quốc Gia, 2006 • Giải toán máy tính (3 tập), Hoàng Kiếm, NXB Giáo dục, 2005 2/2/2017 Tài liệu tham khảo • Giải thuật lập trình (bài giảng chuyên đề), Lê Minh Hoàng, ĐHSP, 2002 • Computer Algorithms Introduction to Design and Analysis, Addison-Wesley, 1988 • Algorithms and Complexity, Herbert S Wilf, University of Pennsylvania, Philadelphia 1999 • Algorithm Design, Jon Kleinberg, Eva Tardos Pearson, 2006 2/2/2017 Nội dung Giới thiệu Thuật toán Độ phức tạp thuật toán 2/2/2017 2/2/2017 Khái niệm • Một thuật toán liệt kê dẫn, quy tắc cần thực theo bước xác định nhằm giải toán cho khoảng thời gian hữu hạn • Ví dụ: Mô tả thuật toán giải toán tìm phần tử lớn dãy có n số cho trước 2/2/2017 10 Ví dụ 1 Chỉ số phần tử lớn tạm thời (LNTT) = số phần tử đầu tiên; So sánh số với giá trị lớn tạm thời, lớn giá trị lớn tạm thời đặt: Chỉ số phần tử LNTT = số phần tử đó; Lặp lại bước 2) phần tử dãy Phần tử lớn tạm thời thời điểm phần tử lớn dãy 2/2/2017 11 Ví dụ • Mô tả dạng giả mã 2/2/2017 12 2/2/2017 Tính chất TT … Tính xác: để đảm bảo kết tính toán hay thao tác mà máy tính thực xác Tính rõ ràng: Thuật toán phải thể câu lệnh minh bạch; câu lệnh xếp theo thứ tự định 2/2/2017 13 Tính chất TT … Tính khách quan: Một thuật toán dù viết nhiều người nhiều máy tính phải cho kết Tính phổ dụng: Thuật toán không áp dụng cho toán định mà áp dụng cho lớp toán có đầu vào tương tự Tính kết thúc: Thuật toán phải gồm số hữu hạn bước tính toán 2/2/2017 14 Biểu diễn thuật toán • Có cách biểu diễn thuật toán: – Dùng ngôn ngữ tự nhiên – Sơ đồ khối – Giả mã • Dùng ngôn ngữ tự nhiên: mô tả bước xử lý ngôn ngữ viết 2/2/2017 15 2/2/2017 Mô tả liệu vào/ra • Dữ liệu đầu vào: Một thuật toán phải mô tả rõ giá trị đầu vào từ tập hợp liệu xác định Ví dụ, dãy số nguyên a(1), a(2), , a(n), với n ak END YES k=i 2/2/2017 19 Giả mã • Sử dụng ngôn ngữ tự nhiên kết hợp với ngôn ngữ lập trình • Cần tuân thủ quy tắc ngôn ngữ: – Có cấu trúc bản: tuần tự, lặp rẽ nhánh – Có hệ thống từ khóa, từ điển (phụ thuộc vào toán) • Dễ hiểu, dễ cài đặt 2/2/2017 20 Ví dụ 1: Tìm phần tử lớn … 2/2/2017 21 2/2/2017 Ví dụ 2: Tìm phần tử có giá trị b • Tìm dãy có n số cho trước 2/2/2017 22 Chất lượng biểu diễn thuật toán Đúng với ý tưởng đặt toán Đơn giản, dễ hiểu Dễ cài đặt 2/2/2017 23 Tính đắn thuật toán • PP lý thuyết, PP thực nghiệm • Phương pháp lý thuyết: – Chứng minh thuật toán cho kết phù hợp với toán – Thuật toán kết thúc cho kết – Kết phù hợp với yêu cầu toán – Ví dụ: • Các thuật toán dựa qui động • Các thuật toán vét cạn … 2/2/2017 24 2/2/2017 Tính đắn thuật toán • Phương pháp thực nghiệm: – Thuật toán xây dựng ý tưởng dạng intuitive, gần không chứng minh tính đắn thuật toán phương pháp lý thuyết – Thuật toán chương trình hóa thực tập liệu đủ lớn, bao hàm trường hợp xảy toán ban đầu 2/2/2017 25 Tính hiệu Thời gian: Chi phí cho thời gian tính toán so với thuật toán giải toán Bộ nhớ: Chiếm dụng nhớ so với thuật toán giải toán Độ xác: Nếu cung cấp lời giải gần gần với lời giải so với thuật toán giải toán 2/2/2017 26 Tính hiệu • Tùy theo toán, mục đích mà xét tiêu chí nói • Tùy theo chất lượng thuật toán mà xét tập liệu thử nghiệm, số tập liệu minh họa cho vài khía cạnh 2/2/2017 27 2/2/2017 Nội dung Giới thiệu Thuật toán Độ phức tạp thuật toán 2/2/2017 28 Độ tăng hàm • Cho f g, f: RR, g: RR • Định nghĩa 1: f(x) = o(g(x)) x dần tới dương vô cùng, limx+f(x)/g(x) = f(x) tăng chậm so với g(x) x lớn dần đến + • Ví dụ: – x2 = o(x5), sin(x) = o(x) – 1/x = o(1) … 2/2/2017 29 Độ tăng hàm … • Cho f g, f: RR, g: RR • Định nghĩa 2: f(x) O-lớn g(x) x , kí hiệu f(x) = O(g(x)), C>0 N >0 cho x > N |f(x)| C.|g(x)| • Ví dụ: – f(x) = x2+2x+3 = O(x2), với x>1 ta có f(x) x2 + 2x2 + 3x2 = 6x2 Ngược lại, x2 = O(f(x)) hiển nhiên với x>0 ta có x2 < f(x) 2/2/2017 30 10 2/2/2017 Độ tăng hàm … • Cho f g, f: RR, g: RR • Định nghĩa 2: f(x) O-lớn g(x) x , kí hiệu f(x) = O(g(x)), C>0 N >0 cho x > N |f(x)| C.|g(x)| • Ví dụ: – kx2 = O(x3) với k>0, với x k ta có kx2 1.x3 – 1/(1+x2) = O(1) – sin(x) = O(1) Cặp giá trị C N, tồn tại, rõ ràng 2/2/2017 31 Độ tăng hàm … • Cho f g, f: RR, g: RR • Định nghĩa 3: f(x) tương đương với g(x) x dần tới dương vô cùng, kí hiệu f(x) g(x), limx+f(x)/g(x) = • Ví dụ: – 1+x+x2 – (2x+4)2 –… x2, 16x2 2/2/2017 32 Độ tăng hàm … • Cho f g, f: RR, g: RR • Định nghĩa 4: Ta nói f(x) = (g(x)) tồn C>0 dãy x1, x2, x3, +, cho với i: f(xi)> Cg(xi) • Ví dụ: – x = (log(x)) –… 2/2/2017 33 11 2/2/2017 Độ tăng hàm … • Cho f g, f: RR, g: RR • Định nghĩa 5: Ta nói hàm f tăng theo hàm mũ tồn c >1 d cho f(x) = (cx) f(x) = O(d x) • Ví dụ: – f(x) = e2x, – f(n) = n! 2/2/2017 34 Một số tính chất O-lớn • f(x)=a0 + a1x1 + a2x2 + + an-1xn-1 + anxn =O(xn) • Chứng minh 2/2/2017 35 Qui tắc cộng • f(x)=O(u(x)) g(x)=O(v(x)) (f+g)(x) = O(max{u(x),v(x)}) • Chứng minh – Từ giả thiết suy tồn C 1, k1, C2, k2 để • x > k1 f(x) C1.u(x), • x > k2 g(x) C2.v(x) – Đặt k = max { k1, k2}, C=C1+C2 – Rõ ràng với x > k f(x) C.u(x) g(x) C.v(x) hay f(x)+g(x) C max{ u(x), v(x) } (đpcm) 2/2/2017 36 12 2/2/2017 Qui tắc nhân • f(x) = O(u(x)) g(x) = O(v(x)) (f.g)(x) = O(u(x).v(x)) • Chứng minh – Bài tập nhà 2/2/2017 37 Độ phức tạp TT • Tính hiệu thuật toán thông thường đo bởi: – Thời gian tính (thời gian sử dụng để tính máy phương pháp thủ công) giá trị đầu vào có kích thước xác định – Dung lượng nhớ sử dụng để tính toán kích thước đầu vào xác định 2/2/2017 38 Độ phức tạp TT … • Hai thước đo nêu liên quan đến độ phức tạp tính toán thuật toán, gọi là: – Độ phức tạp thời gian – Độ phức tạp không gian (dung lượng nhớ) • Trước kích thước nhớ giới hạn người ta quan tâm đến độ phức tạp KG • Bây giờ: Độ phức tạp thuật toán hiểu độ phức tạp thời gian 2/2/2017 39 13 2/2/2017 Độ phức tạp thời gian • Độ phức tạp thời gian thuật toán thường biểu diễn thông qua số phép toán (cơ bản) thực thuật toán với giá trị liệu đầu vào có kích thước (n) xác định • Lý do: Thời gian chạy thực phụ thuộc vào máy (chứ không thuật toán) • Thường đánh giá số lượng phép toán như: so sánh, gán, cộng, trừ, nhân, chia 2/2/2017 40 Ví dụ • Xét thuật toán tìm kiếm phần tử lớn dãy số nguyên cho trước sau: Kích thước toán: số phần tử - n Số phép so sánh cần dùng: 2(n-1) = O(n) 2/2/2017 41 Ví dụ 1… • Ta nói, thuật toán Có độ phức tạp O(n) 2/2/2017 42 14 2/2/2017 Ví dụ • Tính giá trị đa thức f(x) = a0 + a1x1 + a2x2 + + an-1xn-1 + anxn xo 2/2/2017 43 • Đánh giá – Số phép toán so sánh, cộng, gán, nhân n, 2n, 2n, 2n – Nếu xo giá trị lớn, giá trị trung gian x = x on lớn 2/2/2017 44 • Đánh giá – Số phép toán so sánh, cộng, gán, nhân n, 2n, n, n – Tránh phép tính xon 2/2/2017 45 15 2/2/2017 Ví dụ … • Tính giá trị đa thức f(x) = a0 + a1x1 + a2x2 + + an-1xn-1 + anxn xo • Thuật toán 1: Số phép toán so sánh, cộng, gán, nhân n, 2n, 2n, 2n • Thuật toán 2: Số phép toán so sánh, cộng, gán, nhân n, 2n, n, n Kích thước toán: số phần tử - n Độ phức tạp thuật toán: O(n) 2/2/2017 46 Một số đánh giá thường dùng • Độ phức tạp thuật toán thường đưa dạng độ phức tạp sau 2/2/2017 47 Một số đánh giá thường dùng • Độ phức tạp thuật toán thường đưa dạng độ phức tạp sau 2/2/2017 48 16 2/2/2017 Lớp P NP a Một thuật toán gọi có độ phức tạp đa thức, hay gọi có thời gian đa thức, số phép tính cần thiết thực thuật toán không vượt O(nk), với k nguyên dương đó, n kích thước liệu đầu vào b Các thuật toán với O(bn), n kích thước liệu đầu vào, k số nguyên dương gọi thuật toán có độ phức tạp hàm mũ thời gian mũ 2/2/2017 49 Lớp P NP … • P (Polynomial time) lớp toán giải với thời gian đa thức • NP (Nondeterministic Polynomial time) lớp toán mà lời giải kiểm tra với thời gian đa thức 2/2/2017 50 Bài toán P so với NP • Bài toán P so với NP toán mở quan trọng lĩnh vực khoa học máy tính • Nó đặt vấn đề là: toán có lời giải kiểm chứng với thời gian đa thức (lớp NP) giải với thời gian đa thức (lớp P) hay không? hay P = NP ??? 2/2/2017 51 17 2/2/2017 P = NP ??? • Được Stephen Cook đưa năm 1971 báo tiếng "The complexity of theorem proving procedures” • Là số bảy toán giải thiên niên kỷ chọn Viện Toán học Clay • Mỗi số bảy có giải thưởng US$1,000,000 cho lời giải 2/2/2017 52 Bài toán tổng tập hợp • Cho tập hợp số nguyên, tìm tập hợp khác rỗng có tổng Ví dụ, có tập hợp {−2, −3, 15, 14, 7, −10} có tổng 0? – Lời giải "có, {−2, −3, −10, 15} có tổng 0" kiểm chứng dễ dàng cách cộng số lại – Tuy nhiên, chưa có thuật toán để tìm tập hợp thời gian đa thứ c 2/2/2017 53 Bài toán tổng tập hợp • Cho tập hợp số nguyên, tìm tập hợp khác rỗng có tổng Ví dụ, có tập hợp {−2, −3, 15, 14, 7, −10} có tổng 0? – Có thuật toán đơn giản thực thi thời gian hàm mũ kiểm tra tất 2n-1 tập hợp khác rỗng – Bài toán nằm NP (kiểm chứng nhanh chóng) chưa biết có nằm P (giải nhanh chóng) hay không 2/2/2017 54 18 2/2/2017 NP-Đầy đủ (NP-Complete) • Bài toán A NP gọi NP-đầy đủ thỏa mãn tính chất: A giải với thời gian đa thức toán khác NP giải thời gian đa thức • Khi ta có P = NP 2/2/2017 55 Một số toán NP-Đầy đủ • • • • • Bài toán xếp ba lô Bài toán người bán hàng Chu trình Hamilton Bài toán tô màu đồ thị … 2/2/2017 56 Bài tập Nêu định nghĩa, tính chất cách thức biểu diễn thuật toán Cho toán sau: a) Tính nghiệm phương trình bậc 2: ax2+bx+c=0, a≠0 b) Tính tổng bình phương n số tự nhiên c) Tìm số có giá trị x dãy x1, x2,…,xn d) Tìm số có giá trị lớn dãy x1, x2,…,xn Hãy tìm thuật toán để giải toán trên, mô tả thuật toán sử dụng ngôn ngữ tự nhiên tính chất thuật toán 2/2/2017 57 19 2/2/2017 Bài tập Mô tả thuật toán dạng sơ đồ khối Mô tả thuật toán dạng giả mã 2/2/2017 58 20 ... – Thiết kế thuật toán – Đánh giá – Cài đặt – Báo cáo 2/2/2017 2/2/2017 Tài liệu tham khảo • Slide giảng • Bài giảng Thiết kế Đánh giá Thuật toán, Trần Xuân Sinh, NXB, ĐHQG, 2010 • Cẩm nang thuật. .. giá thuật toán – Lý thuyết – Thực nghiệm • Thiết kế thuật giải – Chia để trị – Tham lam – Quy hoạch động –… 2/2/2017 Nội dung môn học • Tổng quan thuật toán độ phức tạp thuật toán • Đánh giá thuật. .. thời gian tính toán so với thuật toán giải toán Bộ nhớ: Chiếm dụng nhớ so với thuật toán giải toán Độ xác: Nếu cung cấp lời giải gần gần với lời giải so với thuật toán giải toán 2/2/2017 26 Tính