Mô hình cho phân tích phức tạp của các thuật toán


16

Phân tích trường hợp xấu nhất và trung bình là các biện pháp nổi tiếng về độ phức tạp của thuật toán. Phân tích trơn tru gần đây đã xuất hiện như một mô hình khác để giải thích tại sao một số thuật toán theo cấp số nhân trong trường hợp xấu nhất hoạt động rất tốt trong thực tế, ví dụ như thuật toán đơn giản.

Câu hỏi của tôi là - có bất kỳ mô hình nào khác để đo lường độ phức tạp của một thuật toán không? Tôi đặc biệt quan tâm đến những nỗ lực giải thích tại sao một số thuật toán có độ phức tạp trong trường hợp xấu nhất hoạt động tốt trong thực tế.

Câu trả lời:


21

Có những biến thể tự nhiên của phân tích trường hợp xấu nhất cũng hữu ích. Có lẽ nổi tiếng nhất là sự phức tạp tham số. Ở đây, chúng tôi xem xét một phép đo "hai chiều": độ dài đầu vào thông thường và một số nguyên không âm bổ sung , tham số. Mặc dù thuật toán có thể chạy khủng khiếp trong trường hợp xấu nhất (đối với tất cả các giá trị của và ), có thể là tất cả các trường hợp trong ứng dụng của một người cần được giải quyết, tham số xảy ra ở mức thấp, vì vậy thuật toán chạy tốt trong những trường hợp đónknkk

Ví dụ: giả sử bạn muốn giải quyết Tập hợp độc lập tối đa trên một số loại biểu đồ và phát triển một thuật toán thú vị nhanh đến mức đáng ngạc nhiên. Nghiên cứu sâu hơn vào lớp biểu đồ, bạn thấy rằng tất cả các biểu đồ bạn kiểm tra chỉ xảy ra để có treewidth nhiều nhất là . Chà, Bodlaender (xem Neidermeier [1]) đã chỉ ra rằng khi treewidth là k, Max Independent Set là tham số cố định có thể điều chỉnh được: nó có thể được giải trong thời gian . Điều này đưa ra một số giải thích về lý do tại sao thuật toán của bạn hoạt động tốt.10Ôi(2k(|E|+|V|))

[1] R. Niedermeier, Mời các thuật toán tham số cố định. Oxford Bài giảng về Toán học và các ứng dụng của nó, Nhà xuất bản Đại học Oxford, Oxford, 2006.


15

Có sự phức tạp được khấu hao - tại sao một số hoạt động có thể tốn kém trong trường hợp xấu nhất, nhưng nếu bạn xem xét nhiều hoạt động, chi phí trung bình cho mỗi hoạt động là tốt.

Một ví dụ cổ điển là một cấu trúc dữ liệu tự làm trống khi nó đầy bằng cách sao chép tất cả các thành phần của nó vào một số lưu trữ. Hoạt động sao chép có thể tốn kém, nhưng nó không xảy ra thường xuyên - bạn phải chèn đủ các yếu tố vào cấu trúc dữ liệu để kích thích nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.