Độ Phức Tạp Của Thuật Toán Độ Phức Tạp Của Thuật Toán Bởi: Wiki Pedia Đặt vấn đề Thời gian mà máy tính thực thuật toán không phụ thuộc vào thân thuật toán đó, tùy thuộc máy tính Để đánh giá hiệu thuật toán, xét số phép tính phải thực thực thuật toán Thông thường số phép tính thực phụ thuộc vào cỡ toán, tức độ lớn đầu vào Vì độ phức tạp thuật toán hàm phụ thuộc đầu vào Tuy nhiên ứng dụng thực tiễn, không cần biết xác hàm mà cần biết ước lượng đủ tốt chúng Để ước lượng độ phức tạp thuật toán ta thường dùng khái niệm bậc O-lớn bậc Θ (bậc Theta) Bậc O-lớn Gọi n độ lớn đầu vào Tùy thuộc toán mà n nhận giá trị khác Chẳng hạn, toán tính giai thừa n số cần tính giai thừa Nhiều toán số trị, chẳng hạn tính sai phân n số chữ số có nghĩa cần đạt Trong phép tính ma trận n số hàng cột ma trận Độ phức tạp toán phụ thuộc vào n Ở ta không đặc trưng độ phức tạp số lượng phép tính, mà dùng đại lượng tổng quát tài nguyên cần dùng R(n) Đó số lượng phép tính (có thể tính số lần truy nhập nhớ, ghi vào nhớ); thời gian thực chương trình (độ phức tạp thời gian) dung lượng nhớ cần phải cấp để chạy chương trình (độ phức tạp không gian) Xét quan hệ tài nguyên độ lớn đầu vào, tìm số C > 0, C không phụ thuộc vào n, cho với n đủ lớn, hàm R(n),g(n) dương 1/3 Độ Phức Tạp Của Thuật Toán ta nói thuật toán có độ phức tạp cỡ O(g(n)) Diễn giải Độ phức tạp độ đo xác lượng tài nguyên máy cần dùng, mà đặc trưng cho động thái hệ thống kích thước đầu vào tăng lên Chẳng hạn với thuật toán có độ phức tạp tuyến tính O(n) (xem phần dưới), kích thước đầu vào tăng gấp đôi ước tính tài nguyên cần dùng tăng khoảng gấp đôi Nhưng với thuật toán có độ phức tạp bình phương O(n2) tài nguyên tăng gấp bốn Mặt khác, với thuật toán có độ phức tạp hàm mũ O(2n) cần công thêm đơn vị vào độ lớn đầu vào làm tài nguyên tăng gấp lần (tức theo cấp số nhân) Các độ phức tạp thường gặp thuật toán thông thường gồm có: • Độ phức tạp số, O(1) Số phép tính/thời gian chạy/dung lượng nhớ không phụ thuộc vào độ lớn đầu vào Chẳng hạn thao tác hệ thống: đóng, mở file • Độ phức tạp tuyến tính, O(n) Số phép tính/thời gian chạy/dung lượng nhớ có xu hướng tỉ lệ thuận với độ lớn đầu vào Chẳng hạn tính tổng phần tử mảng chiều • Độ phức tạp đa thức, O(P(n)), với P đa thức bậc cao (từ trở lên) Chẳng hạn thao tác tính toán với mảng nhiều chiều (tính định thức ma trận) • Độ phức tạp logarit, O(logn) (chú ý: bậc thấp so với O(n)) Chẳng hạn thuật toán Euclid để tìm ước số chung lớn • Độ phức tạp hàm mũ, O(2n) Trường hợp bất lợi phi thực tế thực thuật toán với độ phức tạp Lưu ý Định nghĩa mang tính "an toàn" theo nghĩa xét tiêu tốn tài nguyên không vượt ngưỡng g(n) đó, không thiết g(n) (chú ý dấu bất đẳng thức) Theo đó, thuật toán có độ phức tạp cỡ n đồng thời có độ phức tạp cỡ n2; với hàm ý thuật toán động thái phức tạp hóa vượt qua ngưỡng đa thức bậc hai Bậc Ω Θ Tương tự với bậc O-lớn, tìm số C,k1,k2 dương không phụ thuộc vào n, cho với n đủ lớn, hàm R(n),f(n) h(n) dương 2/3 Độ Phức Tạp Của Thuật Toán ta nói thuật toán có độ phức tạp cỡ lớn Ω(n), cỡ Θ(h(n)) Như xét cách chặt chẽ, kí hiệu Θ biểu thị độ phức tạp thuật toán cách chặt chẽ Tuy nhiên qua thời gian dài kí hiệu O(n) dùng phổ biến, chẳng hạn 3/3 .. .Độ Phức Tạp Của Thuật Toán ta nói thuật toán có độ phức tạp cỡ O(g(n)) Diễn giải Độ phức tạp độ đo xác lượng tài nguyên máy cần dùng, mà đặc trưng cho động thái hệ thống kích... R(n),f(n) h(n) dương 2/3 Độ Phức Tạp Của Thuật Toán ta nói thuật toán có độ phức tạp cỡ lớn Ω(n), cỡ Θ(h(n)) Như xét cách chặt chẽ, kí hiệu Θ biểu thị độ phức tạp thuật toán cách chặt chẽ Tuy nhiên... Mặt khác, với thuật toán có độ phức tạp hàm mũ O(2n) cần công thêm đơn vị vào độ lớn đầu vào làm tài nguyên tăng gấp lần (tức theo cấp số nhân) Các độ phức tạp thường gặp thuật toán thông thường