Cấu trúc dữ liệu và giải thuật với C++
11 học viên đã ghi danh
Khóa học Cấu trúc dữ liệu và Giải thuật (DSA) toàn diện được thiết kế gồm 3 module với 22 bài học, dẫn dắt người học từ các khái niệm quản lý bộ nhớ nền tảng đến các giải thuật tối ưu nâng cao trong lập trình C++.
Module 1: Cấu trúc dữ liệu (6 bài)
Nội dung: Giới thiệu về DSA, Danh sách liên kết (Singly Linked List), Danh sách liên kết đôi (Doubly Linked List), Hàng đợi (Queue), Ngăn xếp (Stack), và Hash Map.
Trọng tâm:Xây dựng tư duy quản lý bộ nhớ động và con trỏ. Học viên nắm vững cơ chế lưu trữ tuyến tính, các nguyên lý truy xuất dữ liệu FIFO/LIFO, và phương pháp tối ưu hóa tốc độ tìm kiếm bằng kỹ thuật băm (hashing).
Module 2: Giải thuật (7 bài)
Nội dung: Thuật toán Đệ quy (Recursion), Thời gian chạy của thuật toán (Big O), Tìm kiếm (Naive Pattern Search), Sắp xếp nổi bọt (Bubble Sort), Sắp xếp Trộn (Merge Sort), Sắp xếp nhanh (Quick Sort), và Thuật toán vét cạn (Brute Force / Linear Search).
Trọng tâm: Phát triển tư duy phân tích và đánh giá độ phức tạp thuật toán. Học viên làm chủ kỹ thuật chia để trị, cơ chế Call Stack trong đệ quy, cũng như so sánh hiệu năng thực thi giữa các thuật toán sắp xếp và tìm kiếm cơ bản.
Module 3: Cấu trúc dữ liệu và Giải thuật nâng cao (9 bài)
Nội dung: Cấu trúc Cây (Tree), Tìm kiếm theo chiều rộng (BFS), Tìm kiếm theo chiều sâu (DFS), Thuật toán Chia để trị (Binary Search, BST), Heap và Heapsort, Cấu trúc Đồ thị (Graph), Tìm kiếm Đồ thị (Graph Search), Thuật toán Tham lam (Greedy / Dijkstra), và Thuật toán tìm đường đi (A*).
Trọng tâm: Giải quyết các bài toán phức tạp trên dữ liệu phi tuyến tính. Học viên được trang bị kỹ năng thiết kế mô hình phân cấp và mạng lưới, triển khai các giải thuật duyệt đồ thị, định tuyến đường đi ngắn nhất và tối ưu hóa chi phí thực tế.
Khóa học kết hợp chặt chẽ giữa lý thuyết nền tảng, bài tập thực hành triển khai mã nguồn C++ chi tiết, cùng hệ thống bài kiểm tra (Quiz) và không gian thảo luận giúp củng cố kiến thức bền vững.
Nội dung khóa học
Cấu trúc dữ liệu
-
Tại sao DSA lại quan trọng ?Xem trước
-
Tìm hiểu về Node trong Cấu trúc dữ liệuXem trước
-
Các bước để định nghĩa lớp Node trong C++Xem trước
-
Quiz Giới thiệu về DSAXem trước
-
Thực hành: Tạo và duyệt Danh sách liên kết đơn (Singly Linked List)Xem trước
-
Thực hành: So sánh hiệu năng thuật toán
-
Thực hành: Tìm hiểu về cấu trúc cơ bản của Node trong Cấu trúc dữ liệu
-
Thực hành: Các bước định nghĩa lớp Node (Node Class) chuẩn OOP
-
Thảo luận về Node trong Cấu trúc dữ liệuXem trước
-
Ý tưởng của Danh sách liên kết (LinkedList)Xem trước
-
Các bước để định nghĩa lớp LinkedListXem trước
-
Thực hành: Tự triển khai lớp LinkedListXem trước
-
Thực hành: Định nghĩa lớp LinkedList và Thêm phần tử vào cuối
-
Quiz LinkedListXem trước
-
Hoán đổi các phần tử trong Danh sách liên kếtXem trước
-
Kỹ thuật sử dụng 2 con trỏ để duyệt qua danh sách liên kếtXem trước
-
Thực hành: Hoán đổi các phần tử trong Danh sách liên kết đơn (Swap Nodes)
-
Thực hành: Kỹ thuật hai con trỏ (Fast & Slow Pointer) - Tìm phần tử giữa Danh sách liên kết
-
Thảo luận về Danh sách liên kết (LinkedList)Xem trước
-
Danh sách liên kết đôi (Doubly Linked Lists)
-
Triển khai Danh sách liên kết đôi (Doubly Linked List)
-
Thực hành: Tự triển khai lớp DoublyLinkedList
-
Thực hành: Danh sách liên kết đôi - Cấu trúc Node hai chiều
-
Thực hành: Triển khai lớp DoublyLinkedList và Chèn phần tử vào cuối
-
Thực hành: Triển khai thao tác Xóa Node và Duyệt hai chiều trong DoublyLinkedList
-
Quiz DoubleLinkedList
-
Thảo luận về Danh sách liên kết đôi (Doubly Linked Lists)
-
Ý tưởng của cấu trúc Hàng đợi (Queue)
-
Hướng dẫn triển khai Queue (Hàng đợi)
-
Thực hành: Tự triển khai Queue
-
Thực hành: Mô phỏng hoạt động phục vụ khách hàng theo nguyên lý FIFO
-
Thực hành: Triển khai lớp Queue bằng Danh sách liên kết đơn
-
Thực hành: Sinh dãy số nhị phân bằng std::queue
-
Quiz Queue
-
Thảo luận về Cấu trúc dữ liệu Hàng đợi (Queue)
-
Ý tưởng của Ngăn xếp (Stack)
-
Hướng dẫn triển khai cấu trúc dữ liệu Ngăn xếp (Stack)
-
Thực hành: Tự triển khai Stack
-
Thực hành: Mô phỏng hoạt động đẩy các phần tử vào Ngăn xếp
-
Thực hành: Triển khai cấu trúc dữ liệu Ngăn xếp (Stack) bằng Danh sách liên kết
-
Thực hành: Kiểm tra tính hợp lệ của chuỗi dấu ngoặc (Valid Parentheses)
-
Quiz Stack
-
Hướng dẫn triển khai Game Tháp Hà Nội bằng Stack
-
Thảo luận về Cấu trúc dữ liệu Ngăn xếp (Stack)
-
Hash Map - Lưu trữ và Truy xuất dữ liệu siêu tốc
-
Ý tưởng để triển khai một Hash Map
-
Ứng dụng Hash Map để đếm tần suất xuất hiện của các từ trong một tệp văn bản lớn
-
Hướng dẫn tự triển khai Hash Map
-
Thực hành: Tự triển khai Hash Map
-
Thực hành: Lưu trữ và Truy xuất dữ liệu với std::unordered_map
-
Thực hành: Tự triển khai Hash Map - Hàm Hash và Bảng băm cơ bản
-
Thực hành: Tự triển khai Hash Map - Xử lý va chạm bằng Separate Chaining
-
Quiz Hash Map
-
Thảo luận về Bảng băm (Hash Map)
Thuật toán
-
Ý tưởng của thuật toán đệ quy (Recursion)
-
Call Stacks và Execution Frames: Cách Máy tính Xử lý Đệ quy
-
Trường hợp cơ sở (Base Case) và Bước đệ quy (Recursive Step)
-
Quiz Thuật toán đệ quy
-
Thực hành: Dãy Fibonacci
-
Thực hành: Làm phẳng mảng nhiều chiều
-
Thực hành: Tính Giai thừa của một số
-
Thực hành: Mô phỏng Call Stack và Execution Frames trong Đệ quy
-
Thực hành: Phân định Trường hợp cơ sở (Base Case) và Bước đệ quy (Recursive Step) với Dãy Fibonacci
-
Thảo luận về Thuật toán Đệ quy (Recursion)
-
Ký hiệu tiệm cận (Asymptotic Notation)
-
Ký hiệu Big Theta (Θ)
-
Các trường hợp phổ biến của thời gian chạy
-
Big Omega (Ω) và Big O (O)
-
Độ phức tạp không gian (Space Complexity)
-
Quiz Thời gian chạy của thuật toán
-
Thực hành: Phân tích Thời gian chạy với Ký hiệu Big O ($O$) và Big Omega ($\Omega$)
-
Thực hành: Độ phức tạp Cận chặt - Ký hiệu Big Theta ($\Theta$) và Các trường hợp Thời gian chạy phổ biến
-
Thực hành: Đánh giá Độ phức tạp Không gian (Space Complexity) và Bộ nhớ phụ trợ
-
Thảo luận về Độ phức tạp không gian (Space Complexity)
-
Giải thuật Naive Pattern Search
-
Hướng dẫn triển khai Pattern Search (Pattern Matching)
-
Quiz Naive Pattern Search
-
Thực hành: Tìm vị trí xuất hiện của chuỗi mẫu
-
Thực hành: Đếm số lần xuất hiện của chuỗi mẫu
-
Thực hành: Triển khai Pattern Matching với Ký tự đại diện Wildcard
-
Thảo luận về Giải thuật Naive Pattern Search
-
Ý tưởng của thuật toán Sắp xếp nổi bọt (Bubble Sort)
-
Hướng dẫn triển khai Bubble Sort
-
Quiz Bubble Sort
-
Thực hành: Mô phỏng lượt nổi bọt đầu tiên (Single Pass)
-
Thực hành: Hướng dẫn triển khai thuật toán Sắp xếp nổi bọt (Bubble Sort) hoàn chỉnh
-
Thực hành: Tối ưu hóa thuật toán Bubble Sort với cờ kiểm tra (Swapped Flag)
-
Thảo luận về Thuật toán Sắp xếp nổi bọt (Bubble Sort)
-
Ý tưởng của Thuật toán Sắp xếp Trộn (Merge Sort)
-
Hướng dẫn triển khai thuật toán Sắp xếp Trộn (Merge Sort)
-
Quiz Sắp xếp Trộn (Merge Sort)
-
Thực hành: Trộn hai mảng con đã sắp xếp
-
Thực hành: Triển khai hoàn chỉnh Thuật toán Sắp xếp Trộn (Merge Sort)
-
Thực hành: Đếm số cặp nghịch thế (Inversion Count)
-
Thảo luận về Thuật toán Sắp xếp Trộn (Merge Sort)
-
Ý tưởng của Quick Sort
-
Hướng dẫn triển khai Quick Sort
-
Thời gian chạy của các thuật toán sắp xếp (Sort Runtimes)
-
Quiz Sắp xếp nhanh (Quick Sort)
-
Thảo luận về Thuật toán Sắp xếp nhanh (Quick Sort)
-
Giới thiệu về thuật toán vét cạn (Brute Force)
-
Thuật toán tìm kiếm tuyến tính (Linear Search)
-
Hướng dẫn triển khai Linear Search
-
Đếm số lần xuất hiện của phần tử áp dụng Linear Search
-
Quiz Thuật toán vét cạn
-
Thảo luận về Thuật toán tìm kiếm tuyến tính (Linear Search)
Cấu trúc dữ liệu và thuật toán nâng cao
-
Ý tưởng của cấu trúc cây (Tree)
-
Cây (Tree): Tổ chức dữ liệu theo cấu trúc phân cấp
-
Hướng dẫn từng bước triển khai Tree
-
Quiz Cấu trúc Tree
-
Thảo luận về Cấu trúc Cây (Tree)
-
Ý tưởng thuật toán Tìm kiếm theo chiều rộng (BFS - Breadth-First Search)
-
Hướng dẫn triển khai thuật toán tìm kiếm theo chiều rộng - BFS
-
Quiz Tìm kiếm theo chiều rộng
-
Thực hành: In ra thứ tự duyệt các đỉnh bằng thuật toán BFS
-
Thực hành: Tìm khoảng cách ngắn nhất
-
Thực hành: Triển khai BFS tìm đường đi ngắn nhất trên Lưới 2D (2D Grid BFS)
-
Thảo luận về Thuật toán Tìm kiếm theo chiều rộng (BFS - Breadth-First Search)
-
Ý tưởng thuật toán Tìm kiếm theo chiều sâu (DFS - Depth-First Search)
-
Hướng dẫn triển khai Thuật toán Tìm kiếm theo chiều sâu (DFS)
-
Quiz Tìm kiếm theo chiều sâu (DFS)
-
Thực hành: Viết hàm đệ quy DFS để in ra thứ tự duyệt các đỉnh
-
Thực hành: Triển khai Thuật toán Tìm kiếm theo chiều sâu (DFS) dùng Ngăn xếp (Stack)
-
Thực hành: Đếm số thành phần liên thông trong Đồ thị
-
Thảo luận về Thuật toán Tìm kiếm theo chiều sâu (DFS - Depth-First Search)
-
Thuật toán Chia để trị (Divide and Conquer Algorithms)
-
Giới thiệu thuật toán tìm kiếm nhị phân (Binary Search)
-
Hướng dẫn triển khai thuật toán Tìm kiếm nhị phân
-
Hướng dẫn triển khai Cây tìm kiếm nhị phân (Binary Search Tree - BST)
-
Quiz Thuật toán Chia để trị
-
Thực hành: Tìm kiếm Nhị phân đệ quy
-
Thực hành: Tìm vị trí xuất hiện đầu tiên
-
Thực hành: Hướng dẫn triển khai Cây Tìm kiếm Nhị phân (Binary Search Tree - BST)
-
Thảo luận về Thuật toán tìm kiếm nhị phân (Binary Search)
-
Giới thiệu cấu trúc dữ liệu Max-Heaps
-
Hướng dẫn triển khai cấu trúc dữ liệu Max-Heaps
-
Quiz Cấu trúc MaxHeap
-
Thuật toán Heapsort
-
Hướng dẫn triển khai thuật toán Heapsort
-
Quiz Thuật toán Heapsort
-
Thực hành: Thao tác Heapify
-
Thực hành: Xây dựng Max-Heap từ mảng (Build Heap)
-
Thực hành: Thuật toán Sắp xếp Heap (Heapsort Algorithm)
-
Thảo luận về Cấu trúc dữ liệu Max-Heap
-
Ý tưởng của cấu trúc Đồ thị (Graph)
-
Hướng dẫn triển khai Graph
-
Quiz Cấu trúc Đồ thị (Graph)
-
Thực hành: Khởi tạo Ma trận kề (Adjacency Matrix)
-
Thực hành: Biểu diễn bằng Danh sách kề (Adjacency List)
-
Thực hành: Triển khai Đồ thị có trọng số (Weighted Graph) và Tính bậc của đỉnh
-
Thảo luận về Cấu trúc Đồ thị (Graph)
-
Giới thiệu về Tìm kiếm đồ thị (Graph Search)
-
Hướng dẫn triển khai Graph Search
-
Quiz Tìm kiếm Đồ thị (Graph Search)
-
Thực hành: Kiểm tra kết nối giữa hai đỉnh
-
Thực hành: Truy vết đường đi từ S đến T
-
Thực hành: Phát hiện chu trình trong Đồ thị có hướng (Cycle Detection)
-
Thảo luận về Tìm kiếm đồ thị (Graph Search)
-
Giới thiệu Thuật toán Tham lam (Greedy)
-
Giới thiệu về Thuật toán Dijkstra
-
Hướng dẫn triển khai thuật toán Dijkstra
-
Quiz Thuật toán Tham lam (Greedy Algorithms)
-
Thực hành: Bài toán Đổi tiền (Coin Change)
-
Thực hành: Nguyên lý Cập nhật Khoảng cách (Relaxation)
-
Thực hành: Hướng dẫn triển khai thuật toán Dijkstra tối ưu với Priority Queue (Min-Heap)
-
Thảo luận về Thuật toán Dijkstra
-
Giới thiệu về thuật toán tìm đường
-
Giới thiệu Thuật toán A*
-
Hướng dẫn triển khai thuật toán A*
-
Quiz Thuật toán tìm đường đi
-
Thực hành: Giới thiệu Thuật toán A*: Tính Hàm đánh giá $f(n) = g(n) + h(n)$
-
Thực hành: Tìm chi phí đường đi ngắn nhất trên Lưới 2D
-
Thực hành: Tái tạo Đường đi (Path Reconstruction)
-
Thảo luận về Thuật toán A*
Xem trước
Đang tải...