KHi search từ khóa “Thuật toán” trong diễn đàn mình. Cái mình thấy hầu hết là các câu hỏi về cách cài đặt thuật toán và giải bài toán từ thuật toán cho trước. Cũng như chia sẻ thuật toán, cách học hiệu quả thuật toán nhưng ít ai thắc mắc tại sao phải học nó!
Vậy tại sao chúng ta phải học thuật toán? Thuật toán có lợi gì cho chúng ta mà chúng ta phải học. Nếu nó chỉ giải quyết một bài toán, vậy chả phải chỉ cần một hàm API với các input dựng sẵn là ok rồi sao? Vừa khỏe người, đỡ hại não??
Trích cmt của Thomas Cormen trên Quora:
Thuật toán rõ ràng là để giải một bài toán nào đó…
Nhưng có 2 điều bạn nên biết về thuật toán.
1/ Nó có giải được vấn đề không?
2/ Nguồn tài nguyên khi chạy code có được xử dụng một cách hợp lý?
Nếu bạn code một bài toán nhưng lại không giải được nó, hoặc là code đấy sử dụng tài nguyên của máy tính chưa hiệu quả (ví dụ là chiếm quá nhiều thời gian để giải hoặc quá nhiều bộ nhớ để thực hiện), vậy thì xin chia buồn là code đó của bạn hoàn toàn vô dụng!
Đó là lý do tại sao chúng ta học thuật toán. Để đảm bảo rằng code của mình giải được bài toán và sử dụng một cách hợp lý tài nguyên. Và đảm bảo rằng code của mình sẽ luôn đúng và hiệu quả đạt tối ưu với mọi trường hợp xảy ra, hoặc ít nhất nếu có trường hợp sai và không giải quyết được, thì chúng ta cũng sẽ suy đoán được và làm giải thiểu điều đó đi đến mức nào đó dường như người dùng sẽ không thực hiện được cái sai đó.
Thậm chí nếu bạn code theo kiểu gọi các hàm API và nhờ người khác thiết kế thuật toán hộ mình, thì bạn cũng nên ít nhất là tìm hiểu sơ về thuật toán cũng như cấu trúc dữ liệu mà hàm API đó cung cấp cho bạn. Bạn biết đấy, chả có thuật toán hay cấu trúc dữ liệu nào hoàn hảo tuyệt đối. Nên nếu học thuật toán hoặc CTDL, bạn sẽ dễ dàng nắm được điểm yếu cũng như điểm mạnh của từng cấu trúc, từng thuật toán, từ đó dễ dàng đưa ra quyết định giải quyết bài toán một cái hợp lý nhất!
Còn ý kiến của mọi người thì sao? Tại sao phải học thuật toán?