Bài 1.1: Tại sao cần Cấu trúc dữ liệu & Giải thuật? (Bài toán tối ưu bộ nhớ và thời gian).
Bài 1.2: Độ phức tạp thời gian (Time Complexity) & Độ phức tạp bộ nhớ (Space Complexity).
Bài 1.3: Ký hiệu Big-O ($O$), Big-Omega ($\Omega$), Big-Theta ($\Theta$) – Mối liên hệ với giới hạn hàm số và tăng trưởng đại số.
Bài 1.4: Phân tích vòng lặp, câu lệnh điều kiện và thuật toán đệ quy.
Sản phẩm/Bài tập: Phân tích độ phức tạp Big-O cho 5 đoạn mã Python thực tế.
Bài 2.1: Mảng (Array) & Mảng động (Dynamic Array / Python List).
Bài 2.2: Danh sách liên kết đơn (Singly Linked List) & Danh sách liên kết đôi (Doubly Linked List).
Bài 2.3: Ngăn xếp (Stack - LIFO) & Hàng đợi (Queue - FIFO).
Bài 2.4: Ứng dụng thực tế: Khôi phục thao tác (Undo/Redo), kiểm tra chuỗi ngoặc hợp lệ bằng Stack.
Sản phẩm/Bài tập: Tự cài đặt một LinkedList và Stack bằng class trong Python từ con số 0.
Bài 3.1: Tìm kiếm tuyến tính (Linear Search) vs Tìm kiếm nhị phân (Binary Search).
Bài 3.2: Nguyên lý "Chia để trị" (Divide and Conquer) trong Binary Search.
Bài 3.3: Các thuật toán sắp xếp cơ bản: Bubble Sort, Selection Sort, Insertion Sort ($O(n^2)$).
Bài 3.4: Các thuật toán sắp xếp nâng cao: Merge Sort, Quick Sort ($O(n \log n)$).
Sản phẩm/Bài tập: Cài đặt Merge Sort và so sánh thời gian chạy thực tế với Quick Sort trên mảng 100.000 phần tử.
Bài 4.1: Nguyên lý Bảng băm (Hash Table) & Hàm băm (Hash Function).
Bài 4.2: Xử lý đụng độ (Collision Resolution): Chaining (Danh sách liên kết) vs Open Addressing.
Bài 4.3: Ứng dụng Bảng băm để đạt độ phức tạp tìm kiếm $O(1)$.
Sản phẩm/Bài tập: Giải bài toán kinh điển Two Sum trên LeetCode với độ phức tạp $O(n)$ bằng Hash Table.
Bài 5.1: Định nghĩa Cây, Đỉnh (Node), Cạnh (Edge), Cây nhị phân (Binary Tree).
Bài 5.2: Cây tìm kiếm nhị phân (Binary Search Tree - BST): Quy tắc Trái < Gốc < Phải.
Bài 5.3: Các phép duyệt cây (Tree Traversals): In-order, Pre-order, Post-order, Level-order (BFS).
Bài 5.4: Giới thiệu Cây cân bằng (AVL Tree, Red-Black Tree) & Hàng đợi ưu tiên (Heap / Priority Queue).
Sản phẩm/Bài tập: Xây dựng một cây BST lưu trữ danh sách mã sản phẩm và viết hàm tìm kiếm nhanh.
Bài 6.1: Biểu diễn đồ thị trong máy tính: Ma trận kề (Adjacency Matrix) vs Danh sách kề (Adjacency List).
Bài 6.2: Thuật toán duyệt theo chiều rộng (Breadth-First Search - BFS) & Ứng dụng tìm đường đi ngắn nhất.
Bài 6.3: Thuật toán duyệt theo chiều sâu (Depth-First Search - DFS) & Ứng dụng phát hiện chu trình.
Bài 6.4: Thuật toán Dijkstra tìm đường đi ngắn nhất trên đồ thị có trọng số.
Sản phẩm/Bài tập: Lập trình thuật toán mô phỏng mạng lưới giao hàng giữa các kho bãi.
Bài 7.1: Tư duy Đệ quy (Base case & Recursive step) & Ngăn xếp gọi hàm (Call Stack).
Bài 7.2: Hiện tượng tính toán trùng lặp & Kỹ thuật Ghi nhớ (Memoization - Top-down).
Bài 7.3: Quy hoạch động (Dynamic Programming - Bottom-up): Dựng bảng phương án.
Bài 7.4: Các bài toán DP kinh điển: Dãy Fibonacci, Bài toán cái túi (Knapsack Problem).
Sản phẩm/Bài tập: Giải bài toán Cái túi (0/1 Knapsack) bằng cả hai cách: Đệ quy nhớ và Bảng quy hoạch động.
Bài 8.1: Phương pháp tư duy 5 bước khi gặp bài toán DSA mới.
Bài 8.2: Thiết kế cấu trúc dữ liệu tùy chỉnh (ví dụ: LRU Cache).