Bài giảng Cấu trúc dữ liệu và giải thuật: Các khái niệm cơ bản - Đậu Ngọc Hà Dương có nội dung trình bày tổng quan về cấu trúc dữ liệu, tiêu chuẩn đánh giá thuật toán, độ tăng của hàm, độ phức tạp thuật toán, các phương pháp đánh giá độ phức tạp,... Mời các bạn cùng tham khảo!
Cấu trúc dữ liệu và giải thuật CÁC KHÁI NiỆM CƠ BẢN Giảng viên: Đậu Ngọc Hà Dương Tài liệu tham khảo Kenneth H.Rosen, Toán rời rạc ứng dụng Tin học, ltb 5, nxb Giáo Dục, 2007, tr 131 -143 Mark A Weiss, Data Structures & Algorithm Analysis in C++, 2nd edition, Addision Wesley, 1998, p 41 – 67 Cấu trúc dữ liệu và giải thuật HCMUS 2011 Nội dung Cấu trúc dữ liệu và giải thuật HCMUS 2011 Dẫn nhập According to Peter J Denning, the fundamental question underlying computer science is, "What can be (efficiently) automated?“ [Wikipedia.org, tháng – 2009] Cấu trúc dữ liệu và giải thuật HCMUS 2011 Dẫn nhập Để giải nhu cầu tự động hóa, nhu cầu Khoa học Máy tính, nhà khoa học máy tính phải tạo trừu tượng hóa tốn giới thực, để người sử dụng máy tính có thể hiểu được và có thể biểu diễn và xử lý được bên trong máy tính. Ví dụ: Cấu trúc d ữ liệu và giải thuậệt HCMUS 2011 Mơ hình hóa vi c biểu diễn cầu thủ bóng đá Dẫn nhập Thơng thường, tìm trừu tượng hóa thường khó, vì: Giới hạn về khả năng xử lý của máy Phải cung cấp cho máy một mơ hình về thế giới đến mức chi tiết như những gì con người có, khơng chỉ là sự kiện mà cịn cả các ngun tắc và mối liên hệ Cấu trúc dữ liệu và giải thuật HCMUS 2011 Trừu tượng hóa: đơn giản hóa Sự trừu tượng hóa sử dụng đơn giản hóa, thay tình phức tạp nhiều chi tiết giới thực mơ hình dễ hiểu để giải tốn Có thể hiểu loại bớt chi tiết có tác dụng khơng có tác dụng lời giải tốn -> tạo mơ hình cho phép giải với chất tốn Cấu trúc dữ liệu và giải thuật HCMUS 2011 Mơ hình liệu Mơ hình liệu (data model) trừu tượng dùng để mơ tả tốn, thơng thường mơ tả cách thức mà liệu (data) biểu diễn (represented) truy xuất (accessed) Cấu trúc dữ liệu và giải thuật HCMUS 2011 Kiểu liệu Kiểu liệu (của biến) khái niệm lập trình, tập giá trị mà biến chấp nhận Ví dụ: Kiểu dữ liệu kiểu số nguyên, Kiểu dữ liệu kiểu số thực, Kiểu dữ liệu chuỗi Cấu trúc dữ liệu và giải thuật HCMUS 2011 Kiểu liệu 10 Kiểu liệu sơ cấp kiểu liệu mà giá trị đơn Ví dụ: Trong ngơn ngữ lập trình C chuẩn, kiểu int gọi là kiểu sơ cấp vì kiểu này bao gồm các số ngun từ 32768 đến 32767 và các phép tốn +, , *, /, %… Mỗi ngơn ngữ có cung cấp sẵn kiểu liệu (basic data type), gọi kiểu liệu chuẩn Ví dụ, trong ngơn ngữ C thì các kiểu sau là kiểu dữ Cấu trúc d liệơ u và gi ải thuật HCMUS 2011 liệữu c bản: int, char, float… Độ phức tạp cố định thuật tốn 30 Vì phép sơ cấp sử dụng thuật toán phép so sánh, nên phép so sánh dùng làm thước đo độ phức tạp Tại số hạng, ta thực phép so sánh, phép xem hết dãy hay chưa phép so với cực đại tạm thời Vì hai phép so sánh dùng từ số hạng thứ đến n, thêm phép so sánh để khỏi vòng lặp, nên ta có xác 2(n-1) + = 2n – phép so sánh Do vậy, độ phức tạp thuật toán O(n) Cấu trúc dữ liệu và giải thuật HCMUS 2011 31 Độ phức tạp trường hợp xấu Bước Gán i = Bước Trong i ≤ n x tăng i thêm while (i ≤ n and x ai) i = i + Bước Nếu i ≤ n, trả giá trị i Ngược lại, i > n, trả giá trị cho biết khơng tìm x dãy a Cấu trúc dữ liệu và giải thuật HCMUS 2011 32 Độ phức tạp trường hợp xấu Số phép so sánh dùng làm thước đo Ở bước vòng lặp, thực phép so sánh Cuối vòng lặp, thực phép so sánh Như vậy, x = ai, số phép so sánh thực (2i +1) Trong trường hợp xấu nhất, khơng tìm x tổng số phép so sánh 2n + Từ đó, thuật tốn tìm kiếm đòi hỏi tối đa O(n) phép so sánh Cấu trúc dữ liệu và giải thuật HCMUS 2011 33 Độ phức tạp trường hợp tốt Trong trường hợp tốt nhất, ta bắt gặp x phần tử nên cần tốn phép so sánh Khi đó, ta nói thuật tốn tìm kiếm địi hỏi O(1) phép so sánh Cấu trúc dữ liệu và giải thuật HCMUS 2011 34 Độ phức tạp trường hợp trung bình Nếu x số hạng thứ i, số phép so sánh sử dụng để tìm x 2i + Do đó, số phép so sánh trung bình ta cần sử dụng là: n(n 1) (2n 1) n 2(1 n) n n 2 n n n Như độ phức tạp trung bình thuật tốn tìm kiếm O(n) Cấu trúc dữ liệu và giải thuật HCMUS 2011 Ghi 35 Trong thực tế, phép so sánh cần để xác định xem tới cuối vòng lặp hay chưa thường bỏ qua, không đếm Trong đa số trường hợp khơng địi khỏi khắt khe tính xác, người ta sử dụng Big-O cho trường hợp Hệ số hàm theo đa thức không tính phân tích độ phức tạp, ví dụ O(n3) Cấu trúc dữ liệu và giải thuật HCMUS 2011 O(20000n3) nhau, thực tế đôi Sự phân lớp độ phức tạp 36 Độ phức tạp Thuật ngữ/tên phân lớp O(1) Độ phức tạp số O(log2n) Độ phức tạp logarit O(n) Độ phức tạp tuyến tính O(nlog2n) Độ phức tạp nlog2n O(na) Độ phức tạp đa thức O(an), a > Độ phức tạp hàm mũ O(n!) Độ phức tạp giai thừa Cấu trúc dữ liệu và giải thuật HCMUS 2011 Sự phân lớp độ phức tạp 37 • logn n nlogn n2 2n n! 10 3.10-9 10-8 3.10-8 10-7 10-6 3.10-3 102 7.10-9 10-7 7.10-7 10-5 4.1013 năm * 103 1,0.10-8 10-6 1.10-5 10-3 * * 104 1,3.10-8 10-5 1.10-4 10-1 * * 105 1,7.10-8 10-4 2.10-3 10 * * 106 2.10-8 10-3 2.10-2 17 phút * * Lưu ý: • Mỗi phép tốn giả sử thực 10-9 giây (~ CPU 1GHz) • *: thời gian lớn 100100 năm Cấu trúc dữ liệu và giải thuật HCMUS 2011 Một số lưu ý mở rộng 38 Có số thuật tốn có độ phức tạp trường hợp xấu lớn trường hợp trung bình lại chấp nhận Đơi khi, thực tế ta phải tìm nghiệm gần thay nghiệm xác Có số tốn tồn chứng minh khơng có lời giải cho chúng (ví dụ toán Halting) Trong thực tế, đa số ta khảo sát tốn có độ phức tạp đa thức trở xuống Cấu trúc dữ liệu và giải thuật HCMUS 2011 39 Các phương pháp đánh giá độ phức tạp Phương pháp đếm Phương pháp hàm sinh Một số kết hoán vị Các kết quả, định lý liên quan đến cấu trúc liệu cụ thể … Cấu trúc dữ liệu và giải thuật HCMUS 2011 Bài tập 40 Các hàm sau có O(x) hay không? a) f(x) = 10 b) f(x) = 3x + c) f(x) = 2x2 + 2 Mô tả thuật tốn tìm số nhỏ dãy hữu hạn số tự nhiên Có phép so sánh, phép gán thuật toán? Cấu trúc dữ liệu và giải thuật HCMUS 2011 Bài tập 41 Phân tích độ phức tạp thuật tốn tính tổng dãy 1 số sau: S n! Cho biết số phép gán, số phép so sánh đoạn code sau theo n: sum = 0; for (i = 0; i < n; i++) { Cấu trúc dữ liệu và giải thuật HCMUS 2011 Bài tập 42 Cho biết số phép gán, số phép so sánh đoạn code sau theo n: for (i = 0; i < n ; i++) for (j = 0; j < n; j++) { C[i][j] = 0; for (k = 0; k < n; k++) C[i][j] = C[i][j] + A[i][k]*B[k][j]; } Cấu trúc dữ liệu và giải thuật HCMUS 2011 Bài tập 43 Hãy cho biết hàm g(n) cho hàm f(n) (f(n) = O(g(n))) f(n) = (2 + n) * (3 + log2n) f(n) = 11 * log2n + n/2 – 3542 f(n) = n * (3 + n) – 7 * n f(n) = log2(n2) + n Cấu trúc dữ liệu và giải thuật HCMUS 2011 44 Hỏi Đáp Cấu trúc dữ liệu và giải thuật HCMUS 2011 ... 1 0-5 4.1013 năm * 103 1,0.1 0-8 1 0-6 1.1 0-5 1 0-3 * * 104 1,3.1 0-8 1 0-5 1.1 0-4 1 0-1 * * 105 1,7.1 0-8 1 0-4 2.1 0-3 10 * * 106 2.1 0-8 1 0-3 2.1 0-2 17 phút * * Lưu ý: • Mỗi phép toán giả sử thực 1 0-9 ... tạp hàm mũ O(n!) Độ phức tạp giai thừa Cấu? ?trúc? ?dữ liệu? ?và? ?giải? ?thuật HCMUS 2011 Sự phân lớp độ phức tạp 37 • logn n nlogn n2 2n n! 10 3.1 0-9 1 0-8 3.1 0-8 1 0-7 1 0-6 3.1 0-3 102 7.1 0-9 1 0-7 7.1 0-7 ... phép so sánh bao nhiêu? Cấu? ?trúc? ?d ữ liệu? ?và? ?giải? ?thuật HCMUS 2011 Gán: f(2n + 2), So sánh: f(n) Độ tăng hàm 19 Big-O Một số kết Big-O quan trọng Cấu? ?trúc? ?dữ liệu? ?và? ?giải? ?thuật HCMUS 2011