Có một cuốn sách giáo khoa đang chờ để được viết vào một lúc nào đó, với tiêu đề làm việc Cấu trúc dữ liệu, Thuật toán và Trao đổi . Hầu như mọi thuật toán hoặc cấu trúc dữ liệu mà bạn có khả năng học ở cấp đại học đều có một số tính năng giúp nó tốt hơn cho một số ứng dụng so với các ứng dụng khác.
Hãy lấy việc sắp xếp làm ví dụ, vì mọi người đều quen thuộc với các thuật toán sắp xếp tiêu chuẩn.
Trước hết, sự phức tạp không phải là mối quan tâm duy nhất. Trong thực tế, các yếu tố không đổi quan trọng, đó là lý do tại sao (nói) sắp xếp nhanh có xu hướng được sử dụng nhiều hơn sắp xếp heap mặc dù sắp xếp nhanh có độ phức tạp trong trường hợp xấu nhất.
Thứ hai, luôn có cơ hội bạn thấy mình trong tình huống bạn đang lập trình dưới những ràng buộc lạ lùng. Tôi đã từng phải thực hiện trích xuất định lượng từ bộ sưu tập mẫu có kích thước khiêm tốn (1000 hoặc hơn) nhanh nhất có thể, nhưng đó là trên một vi điều khiển nhỏ có rất ít bộ nhớ đọc ghi dự phòng, do đó loại trừ hầu hết sắp xếp các thuật toán. Shell sort là sự đánh đổi tốt nhất, vì nó là bậc hai và không cần thêm bộ nhớ.O(nlogn)
Trong các trường hợp khác, các ý tưởng từ thuật toán hoặc cấu trúc dữ liệu có thể được áp dụng cho một vấn đề có mục đích đặc biệt. Sắp xếp bong bóng dường như luôn chậm hơn so với sắp xếp chèn trên phần cứng thực, nhưng ý tưởng thực hiện vượt qua bong bóng đôi khi chính xác là những gì bạn cần.
Ví dụ, hãy xem xét một số loại hình ảnh 3D hoặc trò chơi video trên thẻ video hiện đại, trong đó bạn muốn vẽ các vật thể theo thứ tự từ máy ảnh gần nhất đến máy ảnh xa nhất vì lý do hiệu suất, nhưng nếu bạn không nhận được đơn đặt hàng chính xác, phần cứng sẽ xử lý nó. Nếu bạn di chuyển xung quanh môi trường 3D, thứ tự tương đối của các đối tượng sẽ không thay đổi nhiều giữa các khung, do đó, việc thực hiện một bong bóng vượt qua mọi khung hình có thể là một sự đánh đổi hợp lý. (Công cụ nguồn của Valve thực hiện điều này cho các hiệu ứng hạt.)
Có sự tồn tại, đồng thời, cục bộ bộ đệm, khả năng mở rộng trên một cụm / đám mây và một loạt các lý do có thể khác tại sao một cấu trúc dữ liệu hoặc thuật toán có thể phù hợp hơn so với một cấu trúc tính toán tương tự cho các hoạt động mà bạn quan tâm.
Như đã nói, điều đó không có nghĩa là bạn nên ghi nhớ một loạt các thuật toán và cấu trúc dữ liệu chỉ trong trường hợp. Hầu hết các trận chiến đều nhận ra rằng có một sự đánh đổi sẽ được khai thác ngay từ đầu và biết phải tìm ở đâu nếu bạn nghĩ có thể có thứ gì đó phù hợp.