🗓️ Tuần 1 – Tư Duy Thuật Toán & Độ Phức Tạp

🧑‍🏫 Buổi 1: Giới thiệu lập trình & tư duy giải bài toán

🎯 Mục tiêu:

  • Hiểu lập trình và thuật toán là gì

  • Làm quen quy trình giải quyết vấn đề: Input → Process → Output

    📚 Nội dung:

  • Lý thuyết: khái niệm thuật toán, ví dụ thực tế

  • Biểu diễn thuật toán bằng lời, bằng code

    🧠 Bài tập thực hành:

  • Viết thuật toán tính tổng từ 1 đến n (3 cách khác nhau)

    🏠 Bài tập về nhà: Viết 3 bài toán thực tế và mô tả thuật toán giải quyết

🧑‍🏫 Buổi 2: Big-O và phân tích hiệu suất

🎯 Mục tiêu:

  • Hiểu Big O Notation

  • So sánh thuật toán tốt/xấu

    📚 Nội dung:

  • Giới thiệu O(1), O(n), O(n²), O(log n)

  • Ví dụ thực tế: tìm phần tử trong mảng

    🧠 Bài tập:

  • So sánh thời gian chạy giữa vòng lặp đơn và lồng nhau

    🏠 Bài tập về nhà: Tự phân tích độ phức tạp của 3 thuật toán đã viết ở buổi trước

🗓️ Tuần 2 – Đệ Quy

🧑‍🏫 Buổi 3: Khái niệm đệ quy và stack lời gọi

🎯 Mục tiêu: Hiểu nguyên lý hoạt động của đệ quy

📚 Nội dung:

  • Giải thích stack gọi hàm

  • Cấu trúc hàm đệ quy: base case, recursive step

    🧠 Bài tập:

  • Viết hàm tính giai thừa factorial(n)

  • Viết hàm tính tổng 1→n bằng đệ quy

    🏠 Bài tập: Viết hàm tính dãy Fibonacci

🧑‍🏫 Buổi 4: Ứng dụng đệ quy

🎯 Mục tiêu: Sử dụng đệ quy giải bài toán thực tế

📚 Nội dung:

  • Đệ quy đảo chuỗi

  • Đệ quy tìm phần tử trong mảng

    🧠 Bài tập:

  • Viết hàm đệ quy đảo ngược chuỗi

  • Viết hàm tìm tổng phần tử trong mảng

    🏠 Bài tập: Viết hàm kiểm tra chuỗi đối xứng bằng đệ quy

🗓️ Tuần 3 – Mảng (Array)

🧑‍🏫 Buổi 5: Cấu trúc mảng và thao tác cơ bản

🎯 Mục tiêu: Nắm cách khai báo và xử lý mảng

📚 Nội dung:

  • Tạo mảng, truy cập phần tử

  • Các hàm push, pop, shift, unshift

    🧠 Bài tập:

  • Tạo mảng điểm học sinh, tính tổng, trung bình

    🏠 Bài tập: Viết chương trình tìm min/max trong mảng

🧑‍🏫 Buổi 6: Duyệt mảng & hàm mảng nâng cao

🎯 Mục tiêu: Biết sử dụng hàm hiện đại

📚 Nội dung:

  • map, filter, reduce, forEach

  • Bài toán Two Sum

    🧠 Bài tập:

  • Lọc ra số chẵn, tính tổng số lẻ

    🏠 Bài tập: Viết hàm nhân đôi mọi phần tử trong mảng

🗓️ Tuần 4 – Linked List

🧑‍🏫 Buổi 7: Khái niệm và cấu trúc

🎯 Mục tiêu: Hiểu khái niệm Node và con trỏ

📚 Nội dung:

  • Node {value, next}, cách tạo danh sách

    🧠 Bài tập:

  • Tạo danh sách gồm 3 phần tử

    🏠 Bài tập: Viết hàm duyệt và in danh sách

🧑‍🏫 Buổi 8: Thao tác trên Linked List

🎯 Mục tiêu: Biết thêm, xóa, đảo ngược danh sách

📚 Nội dung:

  • Thêm node vào đầu/cuối

  • Xóa node theo giá trị

  • Đảo ngược danh sách

    🧠 Bài tập: Viết hàm thêm node cuối và đảo ngược danh sách

    🏠 Bài tập: Tạo danh sách tên học sinh và xóa tên cụ thể

🗓️ Tuần 5 – Stack & Queue

🧑‍🏫 Buổi 9: Stack – LIFO

🎯 Mục tiêu: Hiểu cơ chế LIFO

📚 Nội dung:

  • Cài đặt stack bằng mảng

  • Ứng dụng kiểm tra ngoặc đúng

    🧠 Bài tập:

  • Viết chương trình kiểm tra chuỗi ngoặc

    🏠 Bài tập: Tạo stack lưu lịch sử thao tác

🧑‍🏫 Buổi 10: Queue – FIFO

🎯 Mục tiêu: Hiểu cơ chế FIFO

📚 Nội dung:

  • Cài đặt queue bằng mảng

  • Ứng dụng: mô phỏng hàng chờ

    🧠 Bài tập:

  • Viết queue mô phỏng xếp hàng

    🏠 Bài tập: Thêm chức năng đếm thời gian phục vụ

🗓️ Tuần 6 – String Algorithms

🧑‍🏫 Buổi 11: Xử lý chuỗi

🎯 Mục tiêu: Làm quen với thao tác chuỗi

📚 Nội dung:

  • Các hàm: length, split, replace, toUpperCase

    🧠 Bài tập:

  • Đếm số ký tự trong tên

    🏠 Bài tập: Viết hàm chuẩn hóa tên: “  nGuyEn  vAn  a” → “Nguyen Van A”

🧑‍🏫 Buổi 12: Bài toán chuỗi

🎯 Mục tiêu: Ứng dụng xử lý chuỗi nâng cao

📚 Nội dung:

  • Kiểm tra chuỗi đối xứng

  • Đếm số từ

    🧠 Bài tập:

  • Kiểm tra palindrome

    🏠 Bài tập: Đếm số lần xuất hiện của một ký tự trong chuỗi

🗓️ Tuần 7 – Tree

🧑‍🏫 Buổi 13: Cấu trúc cây

🎯 Mục tiêu: Hiểu cấu trúc phân cấp

📚 Nội dung:

  • Node, Parent, Child

  • Binary Tree

    🧠 Bài tập:

  • Tạo cây đơn giản và duyệt preorder

    🏠 Bài tập: Vẽ sơ đồ cây học sinh – lớp – trường

🧑‍🏫 Buổi 14: Binary Search Tree

🎯 Mục tiêu: Biết thao tác với BST

📚 Nội dung:

  • Chèn node, tìm kiếm node

  • Duyệt inorder

    🧠 Bài tập:

  • Tạo BST từ mảng

    🏠 Bài tập: Viết hàm tìm node lớn nhất/nhỏ nhất

🗓️ Tuần 8 – Graph

🧑‍🏫 Buổi 15: Đồ thị & biểu diễn

🎯 Mục tiêu: Hiểu cấu trúc quan hệ

📚 Nội dung:

  • Biểu diễn bằng danh sách kề

  • Khái niệm cạnh, đỉnh

    🧠 Bài tập:

  • Mô phỏng mạng bạn bè

    🏠 Bài tập: Đếm số kết nối

🧑‍🏫 Buổi 16: Duyệt đồ thị

🎯 Mục tiêu: Làm quen BFS & DFS

📚 Nội dung:

  • Cách hoạt động BFS, DFS

    🧠 Bài tập:

  • Duyệt đồ thị bằng BFS

    🏠 Bài tập: Viết chương trình kiểm tra đồ thị có liên thông

🗓️ Tuần 9 – Sorting & Searching

🧑‍🏫 Buổi 17: Sắp xếp

🎯 Mục tiêu: Hiểu cách tổ chức dữ liệu

📚 Nội dung:

  • Bubble, Selection, Insertion

    🧠 Bài tập:

  • Cài đặt 3 thuật toán

    🏠 Bài tập: So sánh hiệu suất giữa Bubble và Insertion

🧑‍🏫 Buổi 18: Tìm kiếm

🎯 Mục tiêu: Tìm dữ liệu nhanh hơn

📚 Nội dung:

  • Linear Search

  • Binary Search

    🧠 Bài tập:

  • Tìm tên trong danh sách

    🏠 Bài tập: Ứng dụng tìm kiếm điểm học sinh

🗓️ Tuần 10 – Ôn tập & Dự án cuối khóa

🧑‍🏫 Buổi 19: Ôn tập tổng hợp

🎯 Mục tiêu: Hệ thống kiến thức

📚 Nội dung:

  • Ôn tập Array, Stack, Queue, Tree

  • Giải bài tập tổng hợp

    🧠 Bài tập:

  • Quản lý danh sách học sinh (thêm, xóa, sắp xếp)

🧑‍🏫 Buổi 20: Trình bày dự án

🎯 Mục tiêu: Ứng dụng toàn bộ kiến thức

📚 Dự án:

  1. Quản lý học sinh

  2. Ứng dụng Stack kiểm tra ngoặc

  3. Ứng dụng BFS tìm đường đi

    🎓 Đánh giá:

  • Logic code

  • Cách trình bày

  • Hiệu suất thuật toán