Mình đã thử mọi cách, từ sách vở, khóa học (miễn phí và trả phí), và dành hàng nghìn giờ để giải các bài toán trên LeetCode để rút rút những kinh nghiệm sương máu này
Cấu trúc dữ liệu và thuật toán (DSA) không khó, nhưng chỉ khi bạn thực sự hiểu và có phương pháp học đúng và chiến lược ôn tập hiệu quả cũng như làm thế nào để không quên bài sau mỗi lần luyện tập.
Trước hết, chúng ta hãy nói về những chủ đề chính mà bạn cần tập trung vào.
Ba trụ cột chính của DSA là Cấu trúc dữ liệu, Thuật toán và Kỹ thuật giải quyết vấn đề.
Ngoài ra còn có các chủ đề như Segment Trees, Fenwick Trees nhưng chúng ít được hỏi đến trong các buổi phỏng vấn tuyển dụng.
Ở giai đoạn đầu, hãy tập trung vào những chủ đề phổ biến nhất.
Cố gắng học nhiều chủ đề cùng một lúc có thể khiến bạn rất dễ bị rối và lẫn. Bạn chỉ cần tập trung vào một chủ đề tại một thời điểm. Nên bắt đầu với các chủ đề dễ trước, sau đó dần dần chuyển sang các chủ đề khó hơn.
Thứ tự tham khảo: Arrays -> Linked lists -> Stack -> Queues -> Trees -> Heaps -> Graphs.
1. Bắt đầu với kiến thức cơ bản: Bắt đầu bằng cách hiểu rõ bản chất của chủ đề, cách thể hiện trong code, các hoạt động khác nhau có thể thực hiện trên nó và độ phức tạp về thời gian/không gian.Ví dụ: Đối với cây tìm kiếm nhị phân, hãy hiểu cách biểu diễn của nó và tìm hiểu các thao tác phổ biến như chèn một nút, xóa một nút và tìm kiếm một nút.
2. Ứng dụng : Hiểu được nơi nào và cách sử dụng trong các tình huống thực tế.Ví dụ: Đồ thị được sử dụng trong các thuật toán định tuyến để tìm đường đi ngắn nhất giữa các nút trong mạng, chẳng hạn như trong hệ thống định vị GPS.
3. Ghi chép: Việc ghi lại và hình dung các khái niệm sẽ giúp bạn ghi nhớ tốt hơn. Vẽ sơ đồ, sơ đồ luồng và viết code giả để hình dung cách cấu trúc dữ liệu hoặc thuật toán hoạt động.Ví dụ: Đối với danh sách được liên kết, hãy vẽ các nút và con trỏ để xem cách các nút được kết nối và cách các hoạt động như chèn và xóa được thực hiện.
4. Thực hành: Vừa học vừa thực hành code luôn giúp bạn nắm bắt được cơ chế cơ bản.Ví dụ: Triển khai ngăn xếp bằng mảng hoặc danh sách liên kết. Viết các hàm cho các thao tác đẩy, bật và liếc.
5. Tìm hiểu các hàm thư viện tích hợp: Tận dụng các thư viện do ngôn ngữ lập trình của bạn cóVí dụ: Trong Python, hãy học cách sử dụng danh sách, tập hợp và từ điển. Trong Java, thử ArrayList, HashMap và TreeSet.