Bài giảng Cấu trúc dữ liệu và giải thuật: Độ tăng của hàm cung cấp cho người học các kiến thức về định nghĩa toán học của Big-O, ý nghĩa của Big-O, một số kết quả Big-O quan trọng, độ tăng của tổ hợp các hàm,... Mời các bạn cùng tham khảo.
33 Big-O Một số kết Big-O quan trọng Cấu trúc liệu giải thuật - HCMUS 2016 34 Khái niệm Big-O lần đưa nhà toán học người Đức Paul Bachmann vào năm 1892 Big-O trở nên phổ biến nhờ nhà toán học Landau Do vậy, Big-O gọi ký hiệu Landau, hay Bachmann-Landau Donald Knuth xem người truyền bá khái niệm Big-O tin học từ năm 1970 Ông người đưa khái niệm BigOmega Big-Theta Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 35 Cho f g hai hàm số từ tập số nguyên số thực đến số thực Ta nói f(x) O(g(x)) tồn số C k cho: |f(x)| ≤ C |g(x)| với x > k Cấu trúc liệu giải thuật - HCMUS 2016 36 Cho f g hai hàm số từ tập số nguyên số thực đến số thực Ta nói f(x) O(g(x)) tồn số C k cho: |f(x)| ≤ C |g(x)| với x > k • Ví dụ, hàm f(x) = x2 + 3x + O(x2) Thật vậy, x > x < x2 < 2x2 Do x2 + 3x + < 6x2 Nghĩa ta chọn C = k = Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 37 Big-O giúp xác định mối quan hệ f(x) g(x), g(x) thường hàm ta biết trước Từ ta xác định tăng trưởng hàm f(x) cần khảo sát C k định nghĩa khái niệm Big-O gọi chứng mối quan hệ f(x) O(g(x)) Cấu trúc liệu giải thuật - HCMUS 2016 38 Big-O phân hoạch hàm với độ tăng khác Nếu có hai hàm f(x) g(x) cho f(x) O(g(x)) g(x) O(f(x)) ta nói hai hàm f(x) g(x) có bậc Ví dụ: f(x) 7x2 O(x2) (chọn k = 0, C = 7) Do 7x2 x2 + 3x + 2, x2 hàm có bậc Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 39 Lưu ý: 7x2 O(x3) x3 không O(7x2) Thật vậy: Nếu x3 O(7x2) ta phải tìm C k cho |x3| ≤ C|7x2| x ≤ 7C với x > k Điều khơng thể xảy khơng thể tìm k C Do vậy, quan hệ f(x) O(g(x)), hàm g(x) thường chọn nhỏ Cấu trúc liệu giải thuật - HCMUS 2016 40 Hàm đa thức: f(x) = anxn + an-1xn-1 + … + a1x + a0 Khi f(x) O(xn) Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 41 Nếu f(x) O(g(x)) c.f(x) O(g(x)) với c số Cho f1(x) O(g1(x)) f2(x) O(g2(x)) Khi đó: tắc tổng: (f1(x)+f2(x)) O(max(|g1(x)|, |g2(x)|)) Quy tắc nhân: (f1(x) * f2(x)) O(g1(x) * g2(x)) Quy Cấu trúc liệu giải thuật - HCMUS 2016 42 Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 43 Cấu trúc liệu giải thuật - HCMUS 2016 44 Nói sau khơng xác: f(x) = O(g(x)) Nói lại khơng xác: f(x) > O(g(x)) Chỉ sử dụng sau: f(x) O(g(x)), f(x) với bậc g(x) Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 45 Cấu trúc liệu Giải thuật Chương trình Cấu trúc liệu giải thuật - HCMUS 2016 46 Tốc độ thực thi Tính xác Đơn giản, dễ hiểu, dễ bảo trì Mức phổ dụng … Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 47 Thời gian giải toán phụ thuộc vào nhiều yếu tố: Tốc độ thực thi máy tính (phần cứng lẫn phần mềm) Tài ngun (ví dụ: nhớ) Thuật tốn Làm đánh giá thời gian thực thi hiệu quả? Cấu trúc liệu giải thuật - HCMUS 2016 48 Đánh giá thời gian thực dựa phép toán quan trọng như: Phép so sánh Phép gán Đánh giá cách tính số lượng phép tốn quan trọng theo độ lớn liệu Từ đó, thời gian thực thuật tốn đánh giá theo hàm phụ thuộc vào độ lớn đầu vào Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 49 Bước Gán tổng = Gán i = Bước Tăng i thêm đơn vị Gán Tổng = Tổng + i Bước So sánh i với 10 Nếu i < 10, quay lại bước Ngược lại, i ≥ 10, dừng thuật toán Số phép gán thuật toán bao nhiêu? Số phép so sánh bao nhiêu? Gán: g(n) = 2n + 2, So sánh: s(n) = n Cấu trúc liệu giải thuật - HCMUS 2016 50 Độ phức tạp thuật tốn khơng đổi Khi thuật tốn cho lời giải thỏa đáng? Phải ln cho đáp số Phải hiệu (độ phức tạp tính tốn) Trường hợp xấu Độ phức tạp thời gian Trường hợp trung bình Độ phức tạp khơng gian Trường hợp tốt Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 51 Thuật toán: B1 Đặt giá trị cực đại tạm thời số nguyên dãy B2 So sánh số nguyên tiếp sau với giá trị cực đại tạm thời Nếu lớn giá trị cực đại tạm thời đặt cực đại tạm thời số ngun B3 Lặp lại B2 cịn số nguyên dãy B4 Dừng không số nguyên dãy Cực đại tạm thời số nguyên lớn dãy Cấu trúc liệu giải thuật - HCMUS 2016 52 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 liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 10 53 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 liệu giải thuật - HCMUS 2016 54 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 liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 11 55 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 liệu giải thuật - HCMUS 2016 56 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) 2(1 n) n n n 2 n n n2 Như độ phức tạp trung bình thuật tốn tìm kiếm O(n) Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 12 57 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) O(20000n3) nhau, thực tế hệ số quan trọng Cấu trúc liệu giải thuật - HCMUS 2016 58 Độ 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), O(n!) a>1 Độ phức tạp hàm mũ Độ phức tạp giai thừa Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 13 59 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 liệu giải thuật - HCMUS 2016 60 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ụ tốn Halting) Trong thực tế, đa số ta khảo sát toán có độ phức tạp đa thức trở xuống Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 14 61 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 liệu giải thuật - HCMUS 2016 62 Các hàm sau có O(x) hay khơng? a) b) c) f(x) = 10 f(x) = 3x + 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 liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 15 63 Phân tích độ phức tạp thuật tốn tính tổng dãy số sau: 1 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++) { scanf("%d", &x); sum = sum + x; } Cấu trúc liệu giải thuật - HCMUS 2016 64 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 liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 16 65 Hãy cho biết hàm số f(n) Big-O hàm số g(n) nào? f(n) = (2 + n) * (3 + log2n) f(n) = 11 * log2n + n/2 – 3542 f(n) = n * (3 + n) – * n f(n) = log2(n2) + n Cấu trúc liệu giải thuật - HCMUS 2016 66 Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 17 ... g2(x)) Quy Cấu trúc liệu giải thuật - HCMUS 2016 42 Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 43 Cấu trúc liệu giải thuật - HCMUS 2016... với bậc g(x) Cấu trúc liệu giải thuật - HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 45 Cấu trúc liệu Giải thuật Chương trình Cấu trúc liệu giải thuật - HCMUS 2016... 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 giây (~ CPU