Competitive Programming từ cơ bản tới nâng cao

Trong bài viết trước về Competitve Programming, mình đã giới thiệu cho các bạn biết Competitive Programming là gì và lợi ích của nó. Bài viết này sẽ giúp các bạn nắm rõ những kiến thức cần học từ cơ bản tới nâng cao …

Lưu ý: Competitive Programming được coi như một bộ môn thể thao trí tuệ. Giúp ích cho các bạn trong con đường lập trình viên nhưng không đảm bảo sẽ có công việc nếu theo đuổi bộ môn này. Các bạn vẫn nên trau dồi kĩ năng, kiến thức ứng dụng thực tiễn nhé.

Beginner — Hiểu rõ khái niệm cơ bản

Nếu như ngay từ lúc bắt đầu bạn đã nhảy vào thuật toán khó như Aho Corasick, BFS, DFS, … thì sẽ cực kì quá tải. Có thể gây ra tình trạng bão hòa học xong chẳng nhớ được gì, nản ngành, … Vì thế trước khi bắt đầu tham gia vào bộ môn giải thuật này bạn cần nắm rõ những khái niệm cơ bản nhất ví dụ:

  • Tại sao Array lại được ra đời và dùng để làm gì?

  • Linked list là gì và ứng dụng mà nó mang lại có gì hay hơn?

  • Sự khác nhau giữa các thuật toán sort là gì?

geeksforgeeks.org/data-structures: Học cấu trúc dữ liệu cơ bản

geeksforgeeks.org/fundamentals-of-algorithms: Các thuật toán cơ bản (Đây là trang web đã được các sinh viên ngành Computer Science tại nước ngoài học)

Luôn bắt đầu từ những gì cơ bản nhất để tránh ăn “hành" nặng nhé.Luôn bắt đầu từ những gì cơ bản nhất để tránh ăn “hành" nặng nhé.

Level Up — Học rồi sau đó “hành"

Sau khi đã nắm chắc lí thuyết, hiểu được cách từng thuật toán hoạt động thì bây giờ đã tới lúc bạn dấn thân vào ăn hành. Lên các trang web, tìm các đề thi giải thuật sau đó giải sẽ giúp bạn hiểu hơn cách triển khai thuật toán từ lí thuyết, cách áp dụng thuật toán vô bài cụ thể. Tiện ăn hành và rút ra xem mình thiếu kĩ năng, kiến thức nào để rèn luyện thêm. Một số trang “hành" tốt:

hackerrank.com: Trang này thì không cần bình luận nhiều. Trang quốc dân luôn rồi. Hackerrank sẽ cho bạn nhiều bài tập từ dễ tới nâng cao cũng như các cuộc thi để va chạm thực tế. Hỗ trợ đa ngôn ngữ nên bạn thích Java thì code Java thích C++ thì code C++, …

codechef.com: Cũng như trên nhưng có một cộng đồng lớn hỗ trợ, support nhau giúp nâng cao trình độ. Mục tiêu trang này hướng tới cả đối tượng học sinh/sinh viên, là nền tảng luyện tập, thi đấu, nâng cao trình độ bản thân.

codelearn.io: Trang luyện giải thuật, thi đấu ở Việt Nam. Được tài trợ bởi FPT Software. Có chức năng thi lấy chứng chỉ có thể làm bằng chứng cho việc học và “hành" của mình

Kĩ lí thuyết rồi thì nâng level lên thực hành đi chứ còn chờ gì nữa?Kĩ lí thuyết rồi thì nâng level lên thực hành đi chứ còn chờ gì nữa?

Master — Học, học nữa, học mãi

Sau khi đã ăn hành kha khá thì bây giờ đã đến lúc để bạn học những thuật toán cao cấp hơn. Đây là những thuật toán được liệt vào độ khó Expert. Nằm trong những câu hỏi phỏng vấn Expert của Google mà theo cựu lập trình viên Google:

“Khi cho ứng viên đề bài này, tôi không mong rằng ứng viên sẽ giải được chi tiết mà chỉ cần nói ra được hướng chính xác đã là một sự thành công" — Clément Mihailescu

geeksforgeeks.org/top-algorithms-and-data-structures-for-competitive-programming: Đây là những thuật toán cao cấp chuyên dùng ở những cuộc thi tầm cỡ quốc tế, để hiểu và ứng dụng được là một quá trình khổ luyện, tu hành của lập trình viên.

Bạn có thể tham khảo một số video phỏng vấn của cựu lập trình viên Google Clément Mihailescu có áp ****dụng những thuật toán cao cấp trên:

https://www.youtube.com/watch?v=qz9tKlF431k

Kết luận

Competitive Programming có thể coi là một bộ môn trí tuệ. Nhưng để thành thạo được thì cũng cần một quá trình rèn luyện rất lớn. Những bạn đam mê thì không sao nhưng những bạn không thích bộ môn này thì đừng lo. Việc tuyển dụng hiện tại tập trung nhiều vào kiến thức ứng dụng thực tế, lập trình ứng dụng nên bạn có thể không cần biết nhiều về thuật toán nhé.

Happy Coding!