Trong khoa học máy tính ngày nay, hiệu quả của các thuật toán và hiệu suất đạt được không chỉ phụ thuộc vào độ phức tạp tính toán lý thuyết, mà còn bị ảnh hưởng trực tiếp bởi hiệu suất phần cứng thực tế.Điều này đặc biệt rõ ràng, bởi vì nhiều thuật toán được coi là tối ưu có thể không thực hiện cũng như dự kiến trong các ứng dụng trong thế giới thực.Với sự tiến bộ của công nghệ, chúng ta thấy một kết nối sâu sắc giữa thiết kế của các thuật toán và kiến trúc phần cứng.Mối tương quan này đặt ra một câu hỏi chính: Trong khi tìm kiếm tối ưu hóa thuật toán, nên thiết kế và hiệu suất của phần cứng thích ứng như thế nào với sự thay đổi này?
Nếu thuật toán ngày càng tối ưu, điều đó có nghĩa là ở thang đầu vào đủ lớn, không có thuật toán nào có thể vượt qua hiệu suất của nó, chỉ bị giới hạn bởi một yếu tố không đổi.
Khái niệm về các thuật toán tối ưu tiến bộ thường được nhìn thấy trong khoa học máy tính và nó thường liên quan đến hiệu suất của các thuật toán khi xử lý các đầu vào lớn.Cụ thể, khi hiệu suất của thuật toán là O (f (n)), nếu giới hạn dưới của nó được chứng minh là ω (f (n)) cho một vấn đề cụ thể, thì thuật toán được gọi là tối ưu tiến bộ.Ví dụ, trong trường hợp phân loại so sánh, tất cả các loại so sánh đều đòi hỏi ít nhất ω (n log n) so sánh trong các tình huống trung bình và trường hợp xấu nhất, trong khi phân loại hợp nhất và phân loại heap có thể được sắp xếp theo thời gian O (n log n) và do đó có thể được coi là tối ưu.
Tuy nhiên, trong nhiều trường hợp, các thuật toán khác có hiệu suất cao hơn, đặc biệt là khi dữ liệu đầu vào có các thuộc tính cụ thể.Nếu n đối tượng được biết là các số nguyên trong phạm vi [1, n], chúng có thể được sắp xếp trong O (n), chẳng hạn như sử dụng phân loại xô.Điều này cho thấy rằng một bất biến duy nhất không nên giới hạn chúng ta ở một thuật toán nhất định, bởi vì các cấu trúc hoặc thuật toán dữ liệu cụ thể nhất định có thể cải thiện đáng kể hiệu suất.
Ngay cả một thuật toán tối ưu tiến bộ, mà không xem xét tối ưu hóa phần cứng, có thể không thực hiện tối ưu trong dữ liệu thực.
Đối với các máy tính đương đại, tối ưu hóa phần cứng như bộ nhớ cache bộ nhớ và xử lý song song có thể bị "phá hủy" bởi các thuật toán tối ưu dần dần.Điều này có nghĩa là nếu phân tích của nó không tính đến các tối ưu hóa phần cứng này, có thể có một số thuật toán dưới mức tối ưu có thể sử dụng các đặc điểm này tốt hơn và vượt ra ngoài thuật toán tối ưu trong dữ liệu trong thế giới thực.Lấy thuật toán thời gian tuyến tính của Bernard Chazelle cho tam giác đa giác đơn giản làm ví dụ, đây là một lựa chọn tối ưu gia tăng, nhưng nó hiếm khi được sử dụng trong thực tế.Hơn nữa, mặc dù các cấu trúc dữ liệu mảng động về mặt lý thuyết có thể được lập chỉ mục tại các thời điểm không đổi, nhưng chúng sẽ vượt quá đáng kể hiệu suất của các chỉ mục mảng thông thường trên nhiều máy.
Mặc dù tầm quan trọng của các thuật toán tối ưu tiến bộ không thể bị bỏ qua, nhưng sự phức tạp của chúng đôi khi khiến chúng khó áp dụng trong một số tình huống thực tế.Nếu thuật toán quá phức tạp, khó hiểu và thực hiện của nó có thể vượt quá các lợi ích tiềm năng trong phạm vi kích thước đầu vào được xem xét.Trên thực tế, các đầu vào chúng ta phải đối mặt trong nhiều trường hợp, có các thuộc tính xảy ra để tạo ra các thuật toán hoặc heuristic hiệu suất cao khác thực hiện lý tưởng, ngay cả khi thời gian trường hợp xấu nhất của chúng không tốt.
Dựa trên các quan điểm này, chúng ta có thể thấy rằng sự đánh đổi giữa tính tối ưu tiến bộ và hiệu quả phần cứng thực sự rất phức tạp.Với sự tiến bộ của công nghệ, cần phải đánh giá lại thiết kế thuật toán để thích nghi tốt hơn với môi trường phần cứng luôn thay đổi.Nếu chúng ta chỉ tập trung vào hiệu quả lý thuyết, chúng ta có thể bỏ lỡ các giải pháp có nhiều lợi thế hơn về khả năng sử dụng, tính linh hoạt và hiệu suất.
Khi khám phá các thuật toán, bạn cũng có thể nghĩ về: loại thiết kế phần cứng nào có thể đóng góp vào hiệu suất tốt nhất của các thuật toán?