Tại sao phải học thuật toán?

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?? :wink:

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? :smiley:

10 Likes

để giải một bài toán :v bài toán ở đây k chỉ là những bài toán trong sách vở mà còn là những bài toán thực tế, vd như thuật toán tìm đường đi ngắn nhất để áp dụng vào bản đồ chẳng hạn :joy:

2 Likes

Ai cũng chỉ học sử dụng API vậy ai làm ra cái API đó, đơn giản vậy thôi. Có chuyên sâu vào giải thuật hay không là do là sự khác biệt giữa mục tiêu và trình độ. Đó còn chưa kể khi gặp một bài toán mới, bạn sẽ phải tự xây dựng giải thuật. Còn câu trả lời trên kia thì chuẩn rồi.

1 Like

xD vậy là thêm được 2 ý mới hay
Dùng để suy luận giải quyết bài toán mới
Hoặc để có logic suy luận giải toán lạ và ít gặp.

4 Likes

Tất nhiên là để xử lí những bài toán không giống “quy chuẩn” rồi :smiley:

  1. Em nghe nói là để giải quyết vấn đề và để tối ưu tốc độ xử lý
  2. Em thấy làm nó khiến em phải ngồi mày mò, vặn óc và cuối cùng là được tận hưởng cái cảm giác khi giải được, vui như khi giải được toán. Chỉ khác là khi code, em biết em sẽ làm được (vì em sẽ không làm những bài mà cực kì khó), còn làm toán thì … chưa học thì dẹp, nghĩ cỡ nào cũng thế.
  3. Áp dụng thực tế, VD là … ơm … ờ thì … đánh tiến lên em xếp bài = Quicksort thay vì Interchange như hồi xưa :wink:
1 Like

Chuẩn :v
Giải được một bài toán mà vừa nhanh vừa đúng hơn ngta thấy tự hào với đã kinh khủng =))))

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?