Cấu trúc dữ liệu & Giải thuật

Thuật toán căn bản Sắp xếp & tìm kiếm Giải thuật đệ quy ...

Chuyên mục tổng hợp các chủ đề cấu trúc dữ liệu & giải thuật miễn phí, bạn có thể tham khảo và sử dụng tài liệu cấu trúc dữ liệu & giải thuật mà tại đây.

Mình sẽ liên tục cập nhật các bài viết liên tục, bạn hãy chọn một series phù hợp với mình nhé. Hoặc có thể bắt đầu bằng series đầu tiên.

Thuật toán căn bản Thuật toán căn bản
Sắp xếp & tìm kiếm Sắp xếp & tìm kiếm
Giải thuật đệ quy Giải thuật đệ quy
Danh sách liên kết đơn Danh sách liên kết đơn
Danh sách liên kết đôi Danh sách liên kết đôi
Cấu trúc cây Cấu trúc cây
Ngăn xếp Stack Ngăn xếp Stack
Hàng đợi Queue Hàng đợi Queue

Để trở thành một lập trình viên chuyên nghiệp thì đòi hỏi bạn phải có tư duy lập trình vững chắc, hay còn gọi là background vững chắc, vì vậy hầu như các trường cao đẳng và đại học luôn cho học sinh học những ngôn ngữ như C, C++ trước để rèn luyện tư duy của họ.

Khi bạn đã biết về cú pháp và cách sử dụng các ngôn ngữ đó thì bạn phải tìm hiểu thêm về thuật toán và giải thuật, sau đó áp dụng nó để đưa vào bài toán lập trình cụ thể, điều này sẽ được trình bày trong chuỗi bài học này.

Thuật toán là gì? Giải thuật là gì?

Nếu định nghĩa chính xác thì rất là khó hiểu, vì vậy mình dùng lời văn đơn giản cho gần gũi với mọi người nhé.: Thuật toán trong tiếng anh có nghĩa là Algorithms, ngoài ra nó còn được gọi là giải thuật, là tập hợp những bước thực hiện để giải quyết một bài toán cụ thể.

Ví dụ để kiểm tra một số có chia hết cho 2 hay không thì ta sẽ áp dụng vào định nghĩa như sau: Một số chia hết cho 2 là số chẵn, và không chia hết cho 2 là số lẻ.

  • b = c thì P(x) có nghiệm bất kì
  • bc thì P(c) vô nghiệm

Khi viết một giải thuật bạn phải vẽ sơ đồ, hoặc bạn dùng lời văn cũng được, nhưng phải trình bay rõ ràng về input, output, cũng như là quy trình thực hiện.

Ví dụ: thuật toán để giải phương trình bậc nhất P(x): ax + b = c, (a, b, c là các số thực), trong tập hợp các số thực có thể là một bộ các bước sau đây:

Input: a, b, c

Output: nghiệm

Quy trình:

  • Nếu a = 0
    • b = c thì P(x) có nghiệm bất kì
    • b ≠ c thì P(c) vô nghiệm
  • Nếu a ≠ 0
    • P(x) có duy nhất một nghiệm x = (c - b)/a

Trên là mình đưa ra một ví dụ ở trên wikipedia.

Tại sao cần học giải thuật và thuật toán

Để có tư duy lập trình tốt thì bạn phải học thuật toán thật nhiều, code thật nhiều, điều này sẽ giúp bạn phản xạ cực nhanh. Bản thân mình hiện đang làm PHP là chủ yếu, và do trước đây có học qua C, C++ nên khi tìm hiểu PHP mình cảm thấy rất dễ, bởi mình đã có một nền tảng để có thể tìm hiểu bất kì một ngôn ngữ nào khác.

Các bài toán đơn giản khi vào thực tế đôi khi lại rất quan trọng, nó sẽ giúp bạn xử lý cho một công đoạn nào đó trong chương trình của bạn. Như mình khi đang làm với PHP, mình xử lý vòng lặp cần bổ sung một chức năng nào đó với những lần lặp chẵn, tức là các lần thứ 0, 2, 4, 6 ... như vậy là mình sử dụng thuật toán kiểm tra số chẵn để xử lý.

Và để giúp bạn luyện tư duy, luyện khả năng code của mình thì trong chuỗi bài viết này mình sẽ giới thiệu các bài toán hay gặp nhất, hy vọng sẽ giúp ích cho các bạn.