Học Thuật Toán như thế nào?



  • 0_1482128508893_Capture.JPG
    Mình chia sẻ lại bài hướng dẫn cách học thuật toán, kèm theo các tài liệu học cụ thể được đăng trong một ghi chú, trên trang Facebook cá nhân của tác giả Phạm Nguyễn Sơn Tùng, là một giảng viên khoa CNTT của trường ĐH Khoa Học Tự Nhiên TP. HCM. Link bài gốc ở đây nhé.

    Học Thuật Toán như thế nào?

    Nếu như học Tiếng Anh bạn cần 4 kỹ năng (Nghe - Nói - Đọc - Viết), thì thuật toán cũng vậy, để học tốt thuật toán, bạn cũng cần có kỹ năng, sau đây là 4 kỹ năng theo mình là cần thiết để bạn học tốt thuật toán:

    1. Đọc: Đọc là một kỹ năng cực kỳ quan trọng dù bạn học bất cứ ngành gì, học thuật toán cũng vậy, tuy nhiên học thuật toán bạn phải đọc rộng hơn, nghĩa là bạn không chỉ đọc sách mà còn phải biết đọc blog, đọc diễn đàn và đặc biệt là đọc "code" của người khác. Sau đây là các tài liệu bạn cần phải đọc để bước vào con đường thuật toán:

    Sách: Đây là 2 quyển sách nền tảng về thuật toán sẽ giúp bạn có được cái nhìn tổng quan trước khi bắt đầu tìm hiểu cao hơn.

      1. Algorithms (4th Edition) Tác giả: Robert Sedgewick và Kevin Wayne.
      1. Introduction to Algorithms, 3rd Edition Tác giả: Thomas H. Cormen and Charles E. Leiserson.
        (2 quyển trên bạn có thể dễ dàng tìm bản pdf trên mạng, nếu có điều kiện hãy mua sách gốc ủng hộ tác giả nhé)

    Link sách gốc trên Amazon: Introduction-Algorithms-3rd-MIT-Presst, Algorithms-4th-Robert-Sedgewick

    Blog: http://petr-mitrichev.blogspot.com/: Đây là blog của huyền thoại thuật toán người Nga Petr Mitrichev người đã từng làm mưa làm gió các BXH các trang thi thuật toán. Nick của anh chàng này trên các trang thuật toán nổi tiếng là Petr. Petr hiện đang làm việc cho Google trong mảng “search engine”. Anh ấy cũng là BTC của kỳ thi Google CodeJam (kỳ thi mà mình đã từng giới thiệu với các bạn trước đây). Rất nhiều những bài viết hay, những chia sẽ thú vị, bạn nên đọc và tham khảo.

    Forum: http://www.geeksforgeeks.org/: Bạn không hiểu cái gì, cứ lên đây search 1 phát tất cả sẽ có đáp án cho bạn. Thậm chí có những thuật toán được code ở mức chi tiết và giải thích từng dòng 1.

    2. Xem: Xem là một cách trực quan nhất để bạn hiểu rõ thuật toán bạn cần học. Các thuật toán hiện nay đa phần đều được giảng và giải thích chi tiết trên các trang học online. Tuy nhiên không phải bài giảng nào cũng chất lượng, bạn phải biết chọn lọc cái nào tốt để xem. Để bắt đầu những bài học về thuật toán tôi khuyên bạn nên học 2 khóa học online miễn phí của trường MIT (Massachusetts Institute of Technology) Mỹ:

    3. Thực hành: Học phải đi đôi với hành. Sau khi học 1 thuật toán, bạn phải ngay lập tức thực hành. Lời khuyên của mình là bạn phải dùng kỹ năng 7 - 7 - 7. Học xong thuật toán phải giải 7 bài cơ bản để hiểu nó là gì, sau đó giải tiếp 7 bài nâng cao để hiểu thuần thục nó và cuối cùng bạn cần giải 7 bài với thuật toán vừa học có kết hợp với các thuật toán khác, việc này sẽ giúp bạn hiểu sâu về nó hơn.
    Thường thì học thuật toán sướng ở chỗ là bạn sẽ có những trang thực hành, chỉ cần submit bài của bạn lên nó sẽ trả về kết quả là đúng hay sai, sau đây là các trang có nhiều dạng bài tập được chia theo các chủ đề. Khi học tới chủ đề nào bạn chỉ cần chọn đúng chủ đề đó để làm bài, các bài đều có chia ra 3 cấp độ Easy - Medium - Hard.

    4. Tham dự các kỳ thi: quên cái chuyện người khác nói với bạn thi là “luyện gà” đi. Đối với thuật toán, học và thực hành xong bạn phải thi, vì chỉ có thi bạn mới biết mình đang ở đâu so với những nhà lập trình hàng đầu thế giới. Khi thi điều quan trọng nhất không phải là kết quả bạn đạt được mà dưới áp lực về mặt thời gian, kiến thức, con người, sẽ giúp bạn hoàn thiện nhiều hơn các kỹ năng của mình, đó mới là điều quan trọng nhất.

    Những kỳ thi không nhất thiết bạn phải thi onsite (thi tại chỗ) chỉ cần bạn có Internet là bạn có thể thi với rất nhiều những lập trình viên giỏi trên thế giới. Sau những kỳ thi bạn sẽ tích lũy được 1 số điểm và điểm này sẽ được tăng "level" khi level bạn đạt đến mức đỏ, điều đó đồng nghĩa với việc, bạn đã nằm trên top những người lập trình giỏi trên thế giới.

    Những trang web liên tục có những kỳ thi. Khi tới kỳ thi nó sẽ có lịch thông báo trên trang chủ cho bạn. Chỉ có điều giờ thi của nó lệch nhiều so với Việt Nam thường thi vào buổi tối hoặc khuya nên bạn phải luôn sẵn sàng sức khỏe tốt nhất để tham dự:

    1. http://codeforces.com/
    2. https://arena.topcoder.com/ (Trang này ngoài lĩnh vực thuật toán nó còn nhiều lĩnh vực khác nên bạn nhớ chọn Competitive Programming)

    => Tóm lại, theo kinh nghiệm nhiều năm của mình để 1 người từ cơ bản lên giỏi thuật toán bạn cần ít nhất 2 đến 3 năm. Uh lâu như vậy đấy. Nhưng lời khuyên của mình dành cho bạn là hãy tìm cho bạn 1 người Thầy, người này không nhất thiết phải là 1 người Giáo Sư hay Giáo Viên gì đâu, người Thầy này bạn phải mở rộng ra có thể là người anh, người bạn hoặc người em những người có kinh nghiệm trong lĩnh vực thuật toán. Tự học cũng có thể giúp bạn giỏi. Nhưng khi có một người dẫn đường bạn sẽ đi nhanh hơn rất nhiều và rút ngắn lại thời gian học của mình.

    -------------- Chúc các bạn học tốt -----------------

    Phạm Nguyễn Sơn Tùng



  • hay lắm anh
    em cũng đã may mắn khi tìm được một nguời sư phụ hướng dẫn hehe


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới Cộng đồng Python Việt Nam, vui lòng đợi một lúc để chúng tôi thử kết nối lại.