Bỏ qua

Lộ Trình Học Lập Trình C++ Nâng Cao

Đối tượng: Học sinh THCS, THPT — Đã hoàn thành khóa C++ Cơ Bản
Thời lượng: 45 buổi học (mỗi buổi 90–120 phút)
Ngôn ngữ: C++ (chuẩn C++17)
Công cụ: VS Code + MinGW / Code::Blocks / Dev-C++
Định hướng: Chuyên sâu Cấu trúc dữ liệu & Giải thuật, tối ưu hóa độ phức tạp, tạo nền tảng vững chắc thi Tin học trẻ / Học sinh giỏi Tin / Lập trình thi đấu


Mục Tiêu Khóa Học

Sau khi hoàn thành khóa học C++ Nâng Cao (45 buổi), học sinh sẽ:

  • Hiểu sâu sắc bản chất thuật toán, thành thạo cách tính và tối ưu hóa độ phức tạp thời gian/không gian (Big-O).
  • Làm chủ kỹ thuật lập trình từ nền tảng (vét cạn/trâu bò, đệ quy) đến các chiến lược giải thuật nâng cao (chia để trị, tham lam, quy hoạch động).
  • Hiểu cặn kẽ và tự cài đặt được các thuật toán sắp xếp kinh điển từ cơ bản đến hiệu năng cao (\(O(N \log N)\)) như Merge Sort, Quick Sort, nắm vững các phương pháp phân hoạch và tối ưu hóa Pivot.
  • Thành thạo các kỹ thuật xử lý mảng thực chiến: mảng đánh dấu, mảng cộng dồn (Prefix Sum), mảng hiệu (Difference Array), hai con trỏ (Two Pointers).
  • Nắm vững nguyên lý và thành thạo các cấu trúc dữ liệu cốt lõi: Bảng băm (Hash Table), Danh sách liên kết (Linked List), Ngăn xếp (Stack), Hàng đợi (Queue), Hàng đợi ưu tiên (Priority Queue / Heap).
  • Tự tin phân tích đề bài, nhận dạng mô hình thuật toán, phân bổ thời gian làm bài thi và giải quyết trọn vẹn các bài toán trong các kỳ thi Học sinh giỏi các cấp.

Yêu Cầu Đầu Vào

Học sinh cần nắm vững kiến thức của khóa C++ Cơ Bản:

  • Cú pháp cơ bản, các kiểu dữ liệu nguyên thủy, toán tử và nhập/xuất cin/cout.
  • Các cấu trúc rẽ nhánh (if-else, switch-case) và cấu trúc vòng lặp (for, while, do-while).
  • Mảng 1 chiều cơ bản, chuỗi ký tự (string), hàm (function) và truyền tham trị/tham chiếu (&).

Giai Đoạn 2: C++ Nâng cao — 45 Buổi


Phần 1: Thuật Toán Là Gì

2 buổi (Buổi 1 → 2)

Buổi Chủ đề chính Nội dung chi tiết
1 Bản chất thuật toán & Quy trình 4 bước Khái niệm thuật toán, 5 đặc trưng cốt lõi, quy trình 4 bước giải toán tin học & nhận diện corner cases
2 Biểu diễn thuật toán: Sơ đồ khối & Mã giả 3 phương pháp biểu diễn (ngôn ngữ tự nhiên, sơ đồ khối Flowchart, mã giả Pseudocode) & thực hành thiết kế

Phần 2: Độ Phức Tạp Thuật Toán

2 buổi (Buổi 3 → 4)

Buổi Chủ đề chính Nội dung chi tiết
3 Độ phức tạp thời gian, không gian & Ký hiệu Big-O Time & Space Complexity, các bậc Big-O tăng dần (\(O(1) \to O(N!)\)) & quy tắc cộng/nhân
4 Ước lượng thời gian chạy & Kỹ thuật tối ưu I/O Quy tắc \(10^8\) phép tính/giây, phân biệt TLE/MLE, tối ưu hóa nhập xuất Fast I/O trong C++

Phần 3: Thuật Toán Trâu Bò (Brute Force)

3 buổi (Buổi 5 → 7)

Buổi Chủ đề chính Nội dung chi tiết
5 Tư duy duyệt vét cạn toàn phần Tư duy Exhaustive Search, đánh giá không gian tìm kiếm & bài toán duyệt nghiệm nguyên
6 Kỹ thuật sinh cấu hình vét cạn Sinh chuỗi nhị phân (\(2^N\)), sinh hoán vị bằng std::next_permutation, bài toán mở khóa số
7 Chiến lược ăn điểm Subtask & Sinh test đối chiếu Phân tích subtask trong đề thi HSG, kỹ thuật ăn điểm test nhỏ & Stress Testing bằng sinh test ngẫu nhiên

Phần 4: Kỹ Thuật Lập Trình Đệ Quy

3 buổi (Buổi 8 → 10)

Buổi Chủ đề chính Nội dung chi tiết
8 Nguyên lý đệ quy & Cơ chế Call Stack Base case, Recursive step, cơ chế cấp phát/giải phóng frame bộ nhớ trong ngăn xếp gọi hàm
9 Các bài toán đệ quy kinh điển Fibonacci, thuật toán Euclid UCLN, bài toán Tháp Hà Nội & giải thuật lũy thừa nhanh \(O(\log N)\)
10 Đệ quy có nhớ & Phòng tránh Stack Overflow Nhập môn Memoization tránh lặp tính toán, phòng tránh tràn Stack (\(> 10^5\)) & kỹ thuật khử đệ quy

Phần 5: Bài Toán Sắp Xếp Dãy

3 buổi (Buổi 11 → 13)

Buổi Chủ đề chính Nội dung chi tiết
11 Các giải thuật sắp xếp cơ bản \(O(N^2)\) Khái niệm sắp xếp, cài đặt Selection Sort, Insertion Sort, Bubble Sort
12 Thư viện chuẩn std::sort & Hàm so sánh tùy biến Nền tảng Introsort \(O(N \log N)\), viết Custom Comparator & biểu thức Lambda hiện đại
13 Sắp xếp nâng cao với pair & struct Sắp xếp mảng cấu trúc nhiều trường tiêu chí, sắp xếp tọa độ với pair & phân biệt Stable Sort

Phần 6: Kỹ Thuật Liên Quan Đến Dãy

4 buổi (Buổi 14 → 17)

Buổi Chủ đề chính Nội dung chi tiết
14 Mảng đánh dấu & Đếm phân phối (Frequency Array) Dùng giá trị làm chỉ số mảng, đếm tần suất xuất hiện \(O(N)\) & kỹ thuật xử lý mảng lệch trục (Offset)
15 Mảng cộng dồn 1 chiều (Prefix Sum 1D) Khái niệm mảng tiền tố \(P[i]\), kỹ thuật truy vấn tổng đoạn con \([L, R]\) trong \(O(1)\) cho \(Q\) truy vấn lớn
16 Mảng hiệu (Difference Array) Khái niệm mảng hiệu \(D[i]\), kỹ thuật cộng thêm \(V\) vào đoạn \([L, R]\) trong \(O(1)\) & khôi phục mảng
17 Kỹ thuật Hai con trỏ (Two Pointers) Bài toán 2Sum trên mảng đã sắp xếp, kỹ thuật Cửa sổ trượt (Sliding Window) cố định và biến thiên

Phần 7: Kỹ Thuật Băm (Hashing)

3 buổi (Buổi 18 → 20)

Buổi Chủ đề chính Nội dung chi tiết
18 Bản chất Bảng băm & Xử lý xung đột Khái niệm Hash Table, Hash Function & hai phương pháp giải quyết xung đột: Chaining và Open Addressing
19 Cấu trúc std::unordered_set & std::unordered_map Tìm kiếm/đếm phần tử trung bình \(O(1)\), so sánh hiệu năng với set/map dạng cây đỏ đen (\(O(\log N)\))
20 Kỹ thuật Băm chuỗi (String Hashing) Băm chuỗi đa thức (Polynomial Rolling Hash), chọn modulo, giải thuật tìm xâu mẫu Rabin-Karp

Phần 8: Cấu Trúc Linked List (Danh Sách Liên Kết)

3 buổi (Buổi 21 → 23)

Buổi Chủ đề chính Nội dung chi tiết
21 Bản chất Danh sách liên kết đơn & Cấu trúc Node Cấu trúc Node (data + next), so sánh ưu nhược điểm với mảng động (vector), cấp phát bộ nhớ bằng new
22 Cài đặt các thao tác cốt lõi trên Linked List Chèn đầu/cuối/giữa, xóa node đầu/cuối/theo giá trị, giải phóng bộ nhớ (delete) & duyệt danh sách
23 Danh sách liên kết đôi & Thư viện std::list Danh sách liên kết 2 chiều (next + prev), sử dụng std::list STL & bài toán đếm vòng Josephus

Phần 9: Cấu Trúc Stack, Queue (Ngăn Xếp & Hàng Đợi)

3 buổi (Buổi 24 → 26)

Buổi Chủ đề chính Nội dung chi tiết
24 Ngăn xếp (Stack) & Nguyên lý LIFO Cơ chế Last In First Out, tự cài đặt bằng mảng & sử dụng thư viện chuẩn std::stack
25 Ứng dụng Stack: Dãy ngoặc & Biểu thức Ba Lan Kiểm tra dãy ngoặc lồng nhau hợp lệ, chuyển đổi biểu thức trung tố \(\to\) hậu tố & tính giá trị biểu thức
26 Hàng đợi (Queue) & Nguyên lý FIFO Cơ chế First In First Out, sử dụng std::queue, std::deque & bài toán mô phỏng tiến trình

Phần 10: Hàng Đợi Ưu Tiên (Priority Queue / Heap)

3 buổi (Buổi 27 → 29)

Buổi Chủ đề chính Nội dung chi tiết
27 Cấu trúc cây Heap (Vun đống) Khái niệm cây nhị phân gần hoàn chỉnh, nguyên lý Min-Heap/Max-Heap & thao tác Heapify up/down \(O(\log N)\)
28 Thư viện chuẩn std::priority_queue trong C++ Khai báo Max-Heap mặc định, khai báo Min-Heap bằng greater & tùy biến hàm so sánh cho struct/pair
29 Ứng dụng Priority Queue & Giải thuật Heap Sort Tìm \(K\) phần tử lớn nhất/nhỏ nhất trong luồng dữ liệu, hợp nhất \(K\) danh sách & giải thuật Heap Sort

Phần 11: Chiến Lược Chia Để Trị (Divide and Conquer)

3 buổi (Buổi 30 → 32)

Buổi Chủ đề chính Nội dung chi tiết
30 Tư duy thiết kế thuật toán Chia để trị Mô hình 3 bước (Chia \(\to\) Trị \(\to\) Kết hợp), phân tích cây đệ quy & định lý Master cơ bản
31 Thuật toán Tìm kiếm nhị phân (Binary Search) Chia đôi khoảng tìm kiếm \(O(\log N)\), cài đặt đệ quy/vòng lặp, sử dụng hàm std::lower_bound/upper_bound
32 Kỹ thuật Chặt nhị phân kết quả (Binary Search on Answer) Nhận diện dạng toán Max-Min/Min-Max, xây dựng hàm kiểm tra check(mid) & giải bài toán tối ưu thi HSG

Phần 12: Sắp Xếp Trộn (Merge Sort)

3 buổi (Buổi 33 → 35)

Buổi Chủ đề chính Nội dung chi tiết
33 Nguyên lý giải thuật Merge Sort & Thao tác chia đôi Mô hình chia nhỏ dãy số về bài toán cơ sở, phân tích cây đệ quy & khung hàm mergeSort(a, l, r)
34 Cài đặt thao tác Trộn (Merge) & Thuật toán hoàn chỉnh Kỹ thuật trộn 2 dãy con có thứ tự trong \(O(N)\), hoàn thiện thuật toán đệ quy & đánh giá độ phức tạp \(O(N \log N)\)
35 Tính ổn định (Stable Sort) & Đếm số cặp nghịch thế Khái niệm tính ổn định khi sắp xếp, ứng dụng Merge Sort đếm số cặp nghịch thế trong thời gian \(O(N \log N)\)

Phần 13: Sắp Xếp Nhanh (Quick Sort)

3 buổi (Buổi 36 → 38)

Buổi Chủ đề chính Nội dung chi tiết
36 Nguyên lý giải thuật Quick Sort & Ý nghĩa Pivot Tư tưởng chọn phần tử chốt (Pivot) và phân hoạch dãy số; so sánh triết lý với Merge Sort
37 Cài đặt phân hoạch Lomuto vs Hoare Cài đặt kỹ thuật phân hoạch Lomuto và Hoare, so sánh hiệu năng & hoàn thiện hàm đệ quy quickSort
38 Độ phức tạp, Tối ưu hóa Pivot & Thuật toán Quick Select Xử lý trường hợp xấu nhất \(O(N^2)\) bằng Pivot ngẫu nhiên & giải thuật Quick Select tìm phần tử thứ \(K\) trong \(O(N)\)

Phần 14: Giải Thuật Tham Lam (Greedy Algorithm)

4 buổi (Buổi 39 → 42)

Buổi Chủ đề chính Nội dung chi tiết
39 Tư duy giải thuật Tham lam & Cách chứng minh Triết lý tối ưu cục bộ \(\to\) tối ưu toàn cục, điều kiện áp dụng & phương pháp chứng minh đổi chỗ (Exchange Argument)
40 Bài toán Đổi tiền & Lập lịch công việc Thuật toán đổi tiền với hệ thống mệnh giá chuẩn & bài toán chọn khoảng không giao nhau (Activity Selection)
41 Bài toán Cái túi phân số & Cây mã hóa Huffman Thuật toán Fractional Knapsack theo tỷ lệ giá trị/trọng lượng & nhập môn nén dữ liệu bằng cây Huffman
42 Các bài toán Tham lam kinh điển trong đề thi HSG Bài toán nối thanh kim loại chi phí nhỏ nhất (Priority Queue), chia nhóm chênh lệch nhỏ nhất & cây khung Kruskal

Phần 15: Quy Hoạch Động (Dynamic Programming)

3 buổi (Buổi 43 → 45)

Buổi Chủ đề chính Nội dung chi tiết
43 Bản chất Quy hoạch động: Top-down vs Bottom-up Bài toán con gối nhau, cấu trúc con tối ưu, Top-down (Memoization) vs Bottom-up (Tabulation), bài toán bước nhảy ếch
44 Quy hoạch động 1 chiều: Dãy con tăng dài nhất (LIS) Xác định mảng trạng thái \(DP[i]\), công thức truy hồi, bài toán LIS \(O(N^2)\) & kỹ thuật truy vết lời giải (Traceback)
45 Bài toán Cái túi 0/1 & Tổng kết toàn bộ lộ trình Bảng phương án 2D \(DP[i][w]\), kỹ thuật nén mảng về 1D \(DP[w]\) & hệ thống hóa bức tranh toàn cảnh giải thuật

Bảng Tổng Kết 15 Phần (45 Buổi)

Phần Tên Chuyên Đề Số Buổi Milestone Đạt Được
1 Thuật toán là gì 2 Nắm vững quy trình 4 bước giải toán & biểu diễn mã giả
2 Độ phức tạp thuật toán 2 Đọc đề biết ngay thuật toán cần dùng theo giới hạn \(N\)
3 Thuật toán trâu bò 3 Thành thạo vét cạn, ăn trọn điểm subtask & sinh test đối chiếu
4 Kỹ thuật lập trình đệ quy 3 Làm chủ Call Stack, đệ quy chia để trị & đệ quy có nhớ
5 Bài toán sắp xếp dãy 3 Tự tin sử dụng std::sort, viết Comparator đa tiêu chí
6 Kỹ thuật liên quan đến dãy 4 Nắm trọn bộ 4 "vũ khí" mảng \(O(N)\): Đếm, Prefix Sum, Mảng hiệu, 2 con trỏ
7 Kỹ thuật băm 3 Tối ưu hóa tìm kiếm \(O(1)\) với bảng băm & băm chuỗi
8 Cấu trúc Linked List 3 Hiểu cặn kẽ con trỏ, quản lý bộ nhớ động và danh sách liên kết
9 Cấu trúc Stack, Queue 3 Giải quyết trọn vẹn bài toán ngoặc, biểu thức Ba Lan & mô phỏng hàng đợi
10 Hàng đợi ưu tiên 3 Làm chủ cấu trúc cây Heap & bài toán tối ưu luồng dữ liệu
11 Chiến lược chia để trị 3 Tuyệt kỹ Chặt nhị phân kết quả (Binary Search on Answer)
12 Sắp xếp trộn 3 Hiểu sâu thuật toán chia để trị kinh điển & đếm nghịch thế \(O(N \log N)\)
13 Sắp xếp nhanh 3 Nắm vững phân hoạch Lomuto/Hoare & giải thuật Quick Select \(O(N)\)
14 Giải thuật tham lam 4 Nhận dạng và giải quyết bài toán tham lam tối ưu hoá
15 Quy hoạch động 3 Xây dựng công thức DP, cài đặt LIS, Cái túi 0/1 & truy vết
TỔNG 15 Chuyên đề 45 Hoàn thành chương trình C++ Nâng cao

Nguồn Tài Liệu Tham Khảo Xây Dựng Giáo Trình

Lộ trình 45 buổi được phân tích và thiết kế dựa trên các giáo trình kinh điển của các lớp Chuyên Tin tại Việt Nam kết hợp với chuẩn mực đào tạo Lập trình thi đấu quốc tế:

1. Nguồn Giáo Trình Chuyên Tin Chuẩn Việt Nam

  1. Bộ sách "Tài liệu Chuyên Tin học" (Quyển 1, 2, 3) — Thầy Hồ Sĩ Đàm (Chủ biên), Đỗ Đức Đông, Lê Minh Hoàng, Nguyễn Thanh Hùng (NXB Giáo Dục Việt Nam):
  2. Giáo trình "Giải thuật và Lập trình" — Thầy Lê Minh Hoàng (Đại học Sư phạm Hà Nội):
  3. Chuyên đề chuyên sâu VNOI Wiki (Vietnam Olympiad in Informatics — vnoi.info):

2. Nguồn Giáo Trình Khoa Học Máy Tính & Thi Đấu Quốc Tế

  1. "Introduction to Algorithms" (CLRS) — Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein (MIT Press):
  2. "Competitive Programmer's Handbook" — TS. Antti Laaksonen (Đại học Helsinki / Ban đề thi Olympic Tin học Baltic):
  3. Hệ thống giáo trình USACO Guide (USA Computing Olympiad — usaco.guide):
  4. Hệ thống giáo trình Codeforces Educational Rounds (Codeforces — codeforces.com)