Bài giảng Phân tích và thiết kế thuật toán - Bài 1: Giới thiệu

pdf 20 trang phuongnguyen 4591
Bạn đang xem tài liệu "Bài giảng Phân tích và thiết kế thuật toán - Bài 1: Giới thiệu", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_phan_tich_va_thiet_ke_thuat_toan_bai_1_gioi_thieu.pdf

Nội dung text: Bài giảng Phân tích và thiết kế thuật toán - Bài 1: Giới thiệu

  1. 2/2/2017 Design and Analysis of Algorithms Lecture 1 Introduction Lecturer: Ha Dai Duong duonghd@mta.edu.vn 2/2/2017 1 Nội dung 1. Giới thiệu 2. Thuật toán . Khái niệm thuật toán . Biểu diễn thuật toán . Tính đúng đắn và hiệu quả của TT 3. Đánh giá độ phức tạp TT . Độ tăng của hàm . Độ phức tạp của TT . Đánh giá bằng thực nghiệm 2/2/2017 2 Nội dung 1. Giới thiệu 2. Thuật toán 3. Độ phức tạp thuật toán 2/2/2017 3 1
  2. 2/2/2017 Mục đích • Cung cấp kiến thức về 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 4 Nội dung môn học • Tổng quan về thuật toán và độ phức tạp của 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 5 Hình thức kiểm tra • 10% Chuyên cần • 20% Thường xuyên (bài tập, bài kiểm tra) • 70% Thi cuối kỳ (vấn đáp) – Mô tả bài toán – Thiết kế thuật toán – Đánh giá – Cài đặt – Báo cáo 2/2/2017 6 2
  3. 2/2/2017 Tài liệu tham khảo • Slide bài giảng. • Bài giảng Thiết kế và Đá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 bản lần 2), NXB KHKT, 2006. • Cấu trúc dữ liệu và giải thuật, Đỗ Xuân Lôi, NXB ĐH Quốc Gia, 2006. • Giải một bài toán trên máy tính như thế nào (3 tập), Hoàng Kiếm, NXB Giáo dục, 2005 2/2/2017 7 Tài liệu tham khảo • Giải thuật và 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 8 Nội dung 1. Giới thiệu 2. Thuật toán 3. Độ phức tạp thuật toán 2/2/2017 9 3
  4. 2/2/2017 Khái niệm • Một thuật toán là một bản liệt kê các chỉ dẫn, các quy tắc cần thực hiện theo từng bước xác định nhằm giải quyết một bài toán đã cho trong một khoảng thời gian hữu hạn. • Ví dụ: Mô tả thuật toán giải quyết bài toán tìm phần tử lớn nhất trong dãy có n số cho trước. 2/2/2017 10 Ví dụ 1 1. Chỉ số phần tử lớn nhất tạm thời (LNTT) = chỉ số phần tử đầu tiên; 2. So sánh số tiếp theo với giá trị lớn nhất tạm thời, nếu lớn hơn giá trị lớn nhất tạm thời thì đặt: . Chỉ số phần tử LNTT = chỉ số phần tử đó; 3. Lặp lại bước 2) nếu còn phần tử trong dãy. 4. Phần tử lớn nhất tạm thời ở thời điểm này chính là phần tử lớn nhất trong dãy. 2/2/2017 11 Ví dụ 2 • Mô tả dưới dạng giả mã 2/2/2017 12 4
  5. 2/2/2017 Tính chất của TT 1. Tính chính xác: để đảm bảo kết quả tính toán hay các thao tác mà máy tính thực hiện được là chính xác. 2. Tính rõ ràng: Thuật toán phải được thể hiện bằng các câu lệnh minh bạch; các câu lệnh được sắp xếp theo thứ tự nhất định. 2/2/2017 13 Tính chất của TT 3. Tính khách quan: Một thuật toán dù được viết bởi nhiều người trên nhiều máy tính vẫn phải cho kết quả như nhau. 4. Tính phổ dụng: Thuật toán không chỉ áp dụng cho một bài toán nhất định mà có thể áp dụng cho một lớp các bài toán có đầu vào tương tự nhau. 5. Tính kết thúc: Thuật toán phải gồm một số hữu hạn các bước tính toán. 2/2/2017 14 Biểu diễn thuật toán • Có 3 cách biểu diễn thuật toán: – Dùng ngôn ngữ tự nhiên – Sơ đồ khối và – Giả mã. • Dùng ngôn ngữ tự nhiên: mô tả các bước xử lý bằng ngôn ngữ viết. 2/2/2017 15 5
  6. 2/2/2017 Mô tả dữ liệu vào/ra • Dữ liệu đầu vào: Một thuật toán phải mô tả rõ các giá trị đầu vào từ một tập hợp các dữ liệu xác định. Ví dụ, dãy số nguyên a(1), a(2), , a(n), với n< . • Dữ liệu đầu ra: Từ một tập các giá trị đầu vào, thuật toán sẽ tạo ra các giá trị đầu ra. Các giá trị đầu ra chính là nghiệm của bài toán. Ví dụ, io là chỉ số phần tử lớn nhất trong a(1), ,a(n). 2/2/2017 16 Ví dụ • Thuật toán tìm số lớn nhất 2/2/2017 17 Sơ đồ khối • Sử dụng bộ kí hiệu các khối để thể hiện thuật toán. • Bộ kí hiệu: – Hộp chữ nhật: Các toán tử gán và phép toán tính toán; – Hình thoi: Phép toán so sánh cho kết quả thuộc tập: {đúng, sai}. – Đường kẻ + mũi tên: Chỉ thao tác tiếp theo; – Hình elip: Biểu thị sự bắt đầu hoặc kết thúc thuật toán 2/2/2017 18 6
  7. 2/2/2017 START input a1, a2, , an k = 1 i = 2 NO i ≤ n output k YES i = i + 1 NO ai > 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 một ngôn ngữ lập trình. • Cần tuân thủ quy tắc của một ngôn ngữ: – Có các cấu trúc cơ bản: tuần tự, lặp và rẽ nhánh. – Có hệ thống từ khóa, từ điển (phụ thuộc vào bài toán). • Dễ hiểu, dễ cài đặt. 2/2/2017 20 Ví dụ 1: Tìm phần tử lớn nhất 2/2/2017 21 7
  8. 2/2/2017 Ví dụ 2: Tìm phần tử có giá trị b • Tìm trong dãy có n số cho trước. 2/2/2017 22 Chất lượng biểu diễn thuật toán 1. Đúng với ý tưởng đặt ra của bài toán 2. Đơn giản, dễ hiểu 3. Dễ cài đặt 2/2/2017 23 Tính đúng đắn của 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 ra kết quả phù hợp với bài toán – Thuật toán kết thúc và cho ra kết quả – Kết quả phù hợp với yêu cầu của bài toán – Ví dụ: • Các thuật toán dựa trên qui hoặc động • Các thuật toán vét cạn 2/2/2017 24 8
  9. 2/2/2017 Tính đúng đắn của thuật toán • Phương pháp thực nghiệm: – Thuật toán có thể được xây dựng trên một ý tưởng dạng intuitive, là gần đúng hoặc không chứng minh được tính đúng đắn của thuật toán bằng phương pháp lý thuyết. – Thuật toán được chương trình hóa và được thực hiện trên một tập dữ liệu đủ lớn, bao hàm các trường hợp có thể xảy ra đối với bài toán ban đầu. 2/2/2017 25 Tính hiệu quả 1. Thời gian: Chi phí cho thời gian tính toán ít hơn so với các thuật toán giải quyết cùng bài toán. 2. Bộ nhớ: Chiếm dụng bộ nhớ ít hơn so với các thuật toán giải quyết cùng bài toán. 3. Độ chính xác: Nếu là cung cấp lời giải gần đúng thì gần với lời giải đúng hơn so với thuật toán giải quyết cùng bài toán 2/2/2017 26 Tính hiệu quả • Tùy theo bài toán, mục đích mà xét các tiêu chí nói trên. • Tùy theo chất lượng của thuật toán mà có thể xét trên mọi tập dữ liệu thử nghiệm, hoặc trên một số tập dữ liệu minh họa cho một vài khía cạnh nào đó. 2/2/2017 27 9
  10. 2/2/2017 Nội dung 1. Giới thiệu 2. Thuật toán 3. Độ phức tạp thuật toán 2/2/2017 28 Độ tăng của hàm • Cho f và g, f: R R, g: R R. • Định nghĩa 1: f(x) = o(g(x)) khi x dần tới dương vô cùng, nếu như limx + f(x)/g(x) = 0. f(x) tăng chậm hơn so với g(x) khi 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 của hàm • Cho f và g, f: R R, g: R R. • Định nghĩa 2: f(x) là O-lớn của g(x) khi x , kí hiệu f(x) = O(g(x)), nếu  C>0 và N >0 sao cho  x > N thì |f(x)| C.|g(x)|. • Ví dụ: – f(x) = x2+2x+3 = O(x2), vì với mọi x>1 ta có f(x) x2 + 2x2 + 3x2 = 6x2. Ngược lại, x2 = O(f(x)) vì hiển nhiên là với mọi x>0 ta có x2 < f(x). 2/2/2017 30 10
  11. 2/2/2017 Độ tăng của hàm • Cho f và g, f: R R, g: R R. • Định nghĩa 2: f(x) là O-lớn của g(x) khi x , kí hiệu f(x) = O(g(x)), nếu  C>0 và N >0 sao cho  x > N thì |f(x)| C.|g(x)|. • Ví dụ: – kx2 = O(x3) với k>0, vì với x k ta có kx2 1.x3. – 1/(1+x2) = O(1) – sin(x) = O(1) Cặp giá trị C và N, nếu tồn tại, rõ ràng không phải là duy nhất 2/2/2017 31 Độ tăng của hàm • Cho f và g, f: R R, g: R R. • Định nghĩa 3: f(x) tương đương với g(x) khi x dần tới dương vô cùng, kí hiệu f(x) g(x), nếu như limx + f(x)/g(x) = 1. • Ví dụ: – 1+x+x2 x2, – (2x+4)2 16x2 – 2/2/2017 32 Độ tăng của hàm • Cho f và g, f: R R, g: R R. • Định nghĩa 4: Ta nói rằng f(x) = (g(x)) nếu như tồn tại C>0 và dãy x1, x2, x3, + , sao cho với mọi i: f(xi)> Cg(xi). • Ví dụ: – x = (log(x)) – 2/2/2017 33 11
  12. 2/2/2017 Độ tăng của hàm • Cho f và g, f: R R, g: R R. • Định nghĩa 5: Ta nói rằng hàm f tăng theo hàm mũ nếu tồn tại c >1 và d sao cho f(x) = (cx) và f(x) = O(dx). • Ví dụ: – f(x) = e2x, – f(n) = n! 2/2/2017 34 Một số tính chất của O-lớn 1 2 n-1 n n • f(x)=a0 + a1x + a2x + + an-1x + anx =O(x ) • Chứng minh 2/2/2017 35 Qui tắc cộng • f(x)=O(u(x)) và g(x)=O(v(x)) (f+g)(x) = O(max{u(x),v(x)}) • Chứng minh – Từ giả thiết suy ra tồn tại C1, k1, C2, k2 để • x > k1 thì f(x) C1.u(x), và • x > k2 thì g(x) C2.v(x) – Đặt k = max { k1, k2}, và C=C1+C2 – Rõ ràng là với mọi x > k thì f(x) C.u(x) và g(x) C.v(x) hay f(x)+g(x) C max{ u(x), v(x) } (đpcm) 2/2/2017 36 12
  13. 2/2/2017 Qui tắc nhân • f(x) = O(u(x)) và g(x) = O(v(x)) (f.g)(x) = O(u(x).v(x)) • Chứng minh – Bài tập về nhà 2/2/2017 37 Độ phức tạp của TT • Tính hiệu quả của thuật toán thông thường được đo bởi: – Thời gian tính (thời gian được sử dụng để tính bằng máy hoặc bằng phương pháp thủ công) khi các giá trị đầu vào có kích thước xác định – Dung lượng bộ nhớ đã sử dụng để tính toán khi kích thước đầu vào đã xác định. 2/2/2017 38 Độ phức tạp của TT • Hai thước đo đã nêu ở trên liên quan đến độ phức tạp tính toán của một thuật toán, được gọi là: – Độ phức tạp thời gian và – Độ phức tạp không gian (dung lượng nhớ) • Trước đây khi kích thước bộ nhớ còn 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 được hiểu là độ phức tạp thời gian. 2/2/2017 39 13
  14. 2/2/2017 Độ phức tạp thời gian • Độ phức tạp thời gian của một thuật toán thường được biểu diễn thông qua số phép toán (cơ bản) trong khi thực hiện thuật toán với các giá trị dữ liệu đầu vào có kích thước (n) xác định. • Lý do: Thời gian chạy thực còn phụ thuộc vào máy (chứ không chỉ thuật toán). • Thường đánh giá trên số lượng các phép toán cơ bản như: so sánh, gán, cộng, trừ, nhân, chia 2/2/2017 40 Ví dụ 1 • Xét thuật toán tìm kiếm phần tử lớn nhất trong dãy số nguyên cho trước như sau: Kích thước bài toán: số phần tử - n Số các 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
  15. 2/2/2017 Ví dụ 2 1 2 • Tính giá trị đa thức f(x) = a0 + a1x + a2x + n-1 n + an-1x + anx tại 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 – Nếu xo là giá trị lớn, giá trị trung gian x = xo có thể sẽ rất lớn 2/2/2017 44 • Đánh giá – Số phép toán so sánh, cộng, gán, nhân là n, 2n, n, n. n – Tránh được phép tính xo . 2/2/2017 45 15
  16. 2/2/2017 Ví dụ 2 1 2 • Tính giá trị đa thức f(x) = a0 + a1x + a2x + n-1 n + an-1x + anx tại 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 là n, 2n, n, n Kích thước bài 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 được đưa về một trong các dạng độ phức tạp sau đây 2/2/2017 47 Một số đánh giá thường dùng • Độ phức tạp thuật toán thường được đưa về một trong các dạng độ phức tạp sau đây 2/2/2017 48 16
  17. 2/2/2017 Lớp P và NP a. Một thuật toán được gọi là có độ phức tạp đa thức, hay còn gọi là có thời gian đa thức, nếu số các phép tính cần thiết khi thực hiện thuật toán không vượt quá O(nk), với k nguyên dương nào đó, còn n là kích thước của dữ liệu đầu vào. b. Các thuật toán với O(bn), trong đó n là kích thước dữ liệu đầu vào, còn k là một số nguyên dương nào đó gọi là các thuật toán 2/2/2017có độ phức tạp hàm mũ hoặc thời gian mũ. 49 Lớp P và NP • P (Polynomial time) là lớp các bài toán giải được với thời gian đa thức. • NP (Nondeterministic Polynomial time) là lớp các bài toán mà lời giải của nó có thể 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 là một bài toán mở quan trọng trong lĩnh vực khoa học máy tính. • Nó đặt ra vấn đề là: bất kì bài toán nào có lời giải có thể được kiểm chứng với thời gian đa thức (lớp NP) cũng có thể được giải quyết với thời gian đa thức (lớp P) hay không? hay P = NP ??? 2/2/2017 51 17
  18. 2/2/2017 P = NP ??? • Được Stephen Cook đưa ra năm 1971 trong bài báo nổi tiếng "The complexity of theorem proving procedures” • Là một trong số bảy bài toán của giải thiên niên kỷ được chọn bởi Viện Toán học Clay. • Mỗi bài trong số bảy bài này có giải thưởng US$1,000,000 cho lời giải đúng đầu tiên. 2/2/2017 52 Bài toán tổng tập hợp con • Cho một tập hợp các số nguyên, tìm một tập hợp con khác rỗng có tổng bằng 0. Ví dụ, có tập hợp con nào của {−2, −3, 15, 14, 7, −10} có tổng bằng 0? – Lời giải "có, vì {−2, −3, −10, 15} có tổng bằng 0" có thể được kiểm chứng dễ dàng bằng cách cộng các số đó lại. – Tuy nhiên, hiện chưa có thuật toán nào để tìm ra một tập hợp như thế trong thời gian đa thức. 2/2/2017 53 Bài toán tổng tập hợp con • Cho một tập hợp các số nguyên, tìm một tập hợp con khác rỗng có tổng bằng 0. Ví dụ, có tập hợp con nào của {−2, −3, 15, 14, 7, −10} có tổng bằng 0? – Có một thuật toán đơn giản thực thi trong thời gian hàm mũ là kiểm tra tất cả 2n-1 tập hợp con khác rỗng. – Bài toán này nằm trong NP (kiểm chứng nhanh chóng) nhưng chưa biết có nằm trong P (giải nhanh chóng) hay không 2/2/2017 54 18
  19. 2/2/2017 NP-Đầy đủ (NP-Complete) • Bài toán A NP được gọi là NP-đầy đủ nếu thỏa mãn tính chất: A giải được với thời gian đa thức thì mọi bài toán khác trong NP giải được bằng thời gian đa thức. • Khi đó ta có P = NP 2/2/2017 55 Một số bài 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 1. Nêu định nghĩa, tính chất và các cách thức biểu diễn thuật toán. 2. Cho các bài 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 của n số tự nhiên đầu tiên. c) Tìm số có giá trị x trong dãy x1, x2, ,xn. d) Tìm số có giá trị lớn nhất trong dãy x1, x2, ,xn. Hãy tìm thuật toán để giải bài toán trên, mô tả các thuật toán sử dụng ngôn ngữ tự nhiên và chỉ ra các 2/2/2017tính chất của thuật toán đó. 57 19
  20. 2/2/2017 Bài tập 3. Mô tả các thuật toán trong bài 2 dạng sơ đồ khối. 4. Mô tả các thuật toán trong bài 2 dạng giả mã 2/2/2017 58 20