Tôi thực sự thích ví dụ từ cuốn sách Giới thiệu về Thuật toán , trong đó minh họa tầm quan trọng của hiệu quả thuật toán:
Hãy so sánh hai thuật toán sắp xếp: sắp xếp chèn và sắp xếp hợp nhất . Độ phức tạp của chúng lần lượt là và . Thông thường sắp xếp hợp nhất có hệ số hằng lớn hơn, vì vậy, giả sử . O ( n log n ) = c 2 n lg n c 1 < c 2Ô ( n2) = c1n2O ( n logn ) = c2n lgnc1< c2
Để trả lời câu hỏi của bạn, chúng tôi đánh giá thời gian thực hiện của một máy tính (A) chạy thuật toán sắp xếp chèn nhanh hơn so với máy tính chậm hơn (B) chạy thuật toán sắp xếp hợp nhất.
Chúng tôi giả sử:
- kích thước của bài toán đầu vào là 10 triệu số: ;n = 107
- máy tính A thực hiện hướng dẫn mỗi giây (~ 10GHz);1010
- máy tính B chỉ thực hiện lệnh mỗi giây (~ 10 MHz);107
- các yếu tố không đổi là (được đánh giá quá thấp) và (trong thực tế là nhỏ hơn).c 2 = 50c1= 2c2= 50
Vì vậy, với những giả định này, nó cần
107
2 ⋅ ( 107)2 hướng dẫn1010 hướng dẫn / giây= 2 ⋅ 104 giây
cho máy tính A để sắp xếp số và
107
50 ⋅ 107lg107 hướng dẫn107 hướng dẫn / giây≈ 1163 giây
cho máy tính B.
Vì vậy, máy tính, chậm hơn 1000 lần, có thể giải quyết vấn đề nhanh hơn 17 lần. Trong thực tế, lợi thế của sắp xếp hợp nhất sẽ còn quan trọng hơn và tăng theo quy mô của vấn đề. Tôi hy vọng ví dụ này giúp trả lời câu hỏi của bạn.
Tuy nhiên, đây không phải là tất cả về độ phức tạp của thuật toán. Ngày nay, gần như không thể có được một sự tăng tốc đáng kể chỉ bằng cách sử dụng máy có tần số CPU cao hơn. Mọi người cần thiết kế các thuật toán cho các hệ thống đa lõi có quy mô tốt. Đây cũng là một nhiệm vụ khó khăn, vì với sự gia tăng của lõi, chẳng hạn, chi phí quản lý truy cập bộ nhớ cũng tăng theo. Vì vậy, gần như không thể có được một tăng tốc tuyến tính.
Vì vậy, để tóm tắt, việc thiết kế các thuật toán hiệu quả ngày nay cũng quan trọng như trước đây, bởi vì không tăng tần số hay lõi bổ sung sẽ cung cấp cho bạn tốc độ so với thuật toán hiệu quả mang lại.