Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật Thực hành cấu trúc dữ liệu và giải thuật
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 int LinearExhaustive(int a[], int n, int x){ for(int i=0; i