Tư duy Giải thuật với C#
Khóa học "Giải thuật căn bản với C#" giúp bạn chuyển từ viết code chạy được sang viết code chạy tốt. Bạn sẽ học cách phân tích bài toán, chọn thuật toán phù hợp và đánh giá hiệu suất bằng Big O. Mọi thứ đều được thực hành trực tiếp bằng ngôn ngữ C#.
Bạn sẽ học được gì?
Tư duy giải thuật và phân tích hiệu suất: cách phân tích một bài toán theo từng bước, đo thời gian chạy bằng
Stopwatch, phân tích độ phức tạp thời gian và không gian bằng Big O, và hiểu sự đánh đổi giữa hai loại này.Thuật toán sắp xếp cơ bản: Bubble Sort, Selection Sort, Insertion Sort. Với mỗi thuật toán, bạn xem minh họa trực quan, tự cài đặt, phân tích độ phức tạp và so sánh tốc độ chạy thực tế.
Thuật toán tìm kiếm: tìm kiếm tuần tự và tìm kiếm nhị phân, viết theo cả hai cách lặp và đệ quy, rồi đo hiệu suất trên nhiều cỡ dữ liệu.
Tư duy đệ quy: cơ chế Call Stack, các bài toán kinh điển (giai thừa, Fibonacci, lũy thừa nhanh), và cách tối ưu bằng Memoization.
Ngăn xếp và hàng đợi: dùng Stack và Queue trong C# qua các bài như kiểm tra dấu ngoặc, đổi số sang hệ nhị phân, mô phỏng hàng đợi máy in.
Thuật toán số học và xử lý chuỗi: số nguyên tố, UCLN/BCNN theo thuật toán Euclid, phân tích thừa số nguyên tố, đếm ký tự, đảo chuỗi, kiểm tra chuỗi đối xứng.
Dự án cuối khóa: bạn tự xây dựng một Hệ thống quản lý. Bạn sẽ áp dụng các thuật toán sắp xếp và tìm kiếm đã học, sau đó tối ưu hiệu suất, viết kiểm thử đơn vị và trình bày lại giải pháp của mình.
Khóa học phù hợp với ai?
Khóa học dành cho những bạn đã nắm cú pháp C# cơ bản (biến, vòng lặp, hàm, mảng). Nếu bạn muốn nâng kỹ năng giải quyết vấn đề, chuẩn bị cho phỏng vấn lập trình hoặc học tiếp lên các cấu trúc dữ liệu và giải thuật nâng cao, khóa học này dành cho bạn.
Khóa học gồm 7 module với hơn 230 hoạt động, kết hợp lý thuyết, minh họa trực quan, bài thực hành viết code và bài kiểm tra sau từng phần.
Nội dung khóa học
Giới thiệu về Tư duy Giải thuật và C#
1 bài học · 6 hoạt động-
Giải thuật là gì và vì sao cần học?
-
Ứng dụng của Giải thuật trong thực tế
-
Các bước phân tích và giải quyết bài toán
-
Thực hành phân tích bài toán đơn giản
-
Thiết kế giải thuật cho bài toán tìm số lớn nhất
-
Kiểm tra kiến thức cơ bản về Giải thuật
Phân tích Hiệu suất Thuật toán
6 bài học · 35 hoạt động-
Tại sao hiệu suất thuật toán lại quan trọng?
-
Ví dụ minh họa thuật toán nhanh và chậm
-
Các khái niệm cơ bản về hiệu suất
-
Phân tích hai đoạn mã C# giải cùng bài toán
-
Kiểm tra kiến thức cơ bản về hiệu suất
-
Kích thước đầu vào và các trường hợp phân tích
-
Giới thiệu về đếm số phép toán
-
Đo thời gian chạy bằng Stopwatch trong C#
-
Thực hành đo thời gian chạy của thuật toán
-
Đánh giá hiểu biết về đo lường hiệu suất
-
Báo cáo hiệu suất của một hàm
-
Ký hiệu Big O là gì và tại sao cần nó?
-
Các độ phức tạp Big O cơ bản (O(1), O(n), O(n^2))
-
Các độ phức tạp Big O nâng cao (O(log n), O(n log n), O(2^n), O(n!))
-
Phân tích Big O cho vòng lặp và điều kiện trong C#
-
Xác định Big O cho các đoạn mã C#
-
Kiểm tra khả năng nhận diện Big O
-
Phân tích độ phức tạp thời gian của hàm
-
Khái niệm độ phức tạp không gian
-
Ví dụ về độ phức tạp không gian O(1) và O(N)
-
Phân tích không gian cho biến, mảng và cấu trúc dữ liệu
-
Xác định độ phức tạp không gian cho đoạn mã
-
Kiểm tra kiến thức về độ phức tạp không gian
-
So sánh các độ phức tạp Big O khác nhau
-
Đánh đổi giữa thời gian và không gian (Time-Space Trade-off)
-
Thảo luận lựa chọn thuật toán trong tình huống thực tế
-
Cải thiện hiệu suất của một thuật toán có sẵn
-
Đánh giá khả năng so sánh và lựa chọn thuật toán
-
Đề xuất và phân tích giải pháp tối ưu
-
Kiểm tra và tìm điểm nghẽn hiệu suất trong code C#
-
Thực hành tối ưu hóa một đoạn code cụ thể
-
Các mẹo tối ưu hóa hiệu suất cơ bản trong C#
-
Phân tích hiệu suất của một thuật toán phức tạp
-
Tổng hợp kiến thức phân tích hiệu suất
-
Phân tích và tối ưu hóa bài toán thực tế
Thuật toán Sắp xếp Cơ bản
5 bài học · 33 hoạt động-
Khái niệm và vai trò của Sắp xếp
-
Tại sao cần sắp xếp dữ liệu?
-
Các tiêu chí đánh giá Thuật toán Sắp xếp
-
Ví dụ về mảng dữ liệu chưa sắp xếp
-
Thảo luận về ứng dụng thực tế của Sắp xếp
-
Kiểm tra kiến thức tổng quan về Sắp xếp
-
Nguyên lý hoạt động của Bubble Sort
-
Minh họa trực quan Bubble Sort
-
Triển khai Bubble Sort tăng dần
-
Triển khai Bubble Sort giảm dần
-
Bước từng bước Bubble Sort với C#
-
Phân tích độ phức tạp thời gian và không gian của Bubble Sort
-
Kiểm tra về Thuật toán Sắp xếp Nổi bọt
-
Nguyên lý hoạt động của Selection Sort
-
Minh họa trực quan Selection Sort
-
Triển khai Selection Sort tăng dần trong C#
-
Triển khai Selection Sort giảm dần trong C#
-
Bước từng bước Selection Sort với C#
-
Phân tích độ phức tạp thời gian và không gian của Selection Sort
-
Kiểm tra về Thuật toán Sắp xếp Chọn
-
Nguyên lý hoạt động của Insertion Sort
-
Minh họa trực quan Insertion Sort
-
Triển khai Insertion Sort tăng dần trong C#
-
Triển khai Insertion Sort giảm dần trong C#
-
Bước từng bước Insertion Sort với C#
-
Phân tích độ phức tạp thời gian và không gian của Insertion Sort
-
Kiểm tra về Thuật toán Sắp xếp Chèn
-
So sánh Bubble Sort, Selection Sort, Insertion Sort
-
Minh họa so sánh hiệu suất trực quan
-
Viết chương trình so sánh thời gian chạy của 3 thuật toán
-
Chọn thuật toán phù hợp cho các kịch bản khác nhau
-
Thảo luận về các trường hợp sử dụng tối ưu
-
Tổng hợp kiến thức về các thuật toán sắp xếp cơ bản
Thuật toán Tìm kiếm
5 bài học · 33 hoạt động-
Khái niệm về Tìm kiếm trong Khoa học Máy tính
-
Giới thiệu về Thuật toán Tìm kiếm Tuần tự (Linear Search)
-
Các bước triển khai và phân tích thuật toán Tìm kiếm Tuần tự
-
Viết hàm Tìm kiếm Tuần tự cơ bản trong C#
-
Phân tích mã nguồn và tối ưu hóa (nếu có) cho Tìm kiếm Tuần tự
-
Kiểm tra kiến thức về Tìm kiếm Tuần tự
-
Thực hành Tìm kiếm Tuần tự với các tập dữ liệu khác nhau
-
Các trường hợp đặc biệt và biến thể của Tìm kiếm Tuần tự
-
Cải tiến hàm Tìm kiếm Tuần tự để trả về tất cả các vị trí
-
Trực quan hóa quá trình Tìm kiếm Tuần tự
-
Giới hạn của Tìm kiếm Tuần tự và sự cần thiết của dữ liệu đã sắp xếp
-
Đánh giá hiểu biết về Tìm kiếm Tuần tự và giới hạn của nó
-
Bài tập ứng dụng Tìm kiếm Tuần tự trong C#
-
Giới thiệu về Tìm kiếm Nhị phân và điều kiện tiên quyết
-
Minh họa cách hoạt động của Tìm kiếm Nhị phân
-
Các bước chi tiết của thuật toán Tìm kiếm Nhị phân
-
Đọc hiểu mã giả (pseudocode) của Tìm kiếm Nhị phân
-
Tương tác với Tìm kiếm Nhị phân từng bước
-
Kiểm tra lý thuyết về Tìm kiếm Nhị phân
-
Viết hàm Tìm kiếm Nhị phân phiên bản lặp trong C#
-
Viết hàm Tìm kiếm Nhị phân phiên bản đệ quy trong C#
-
So sánh triển khai lặp và đệ quy của Tìm kiếm Nhị phân
-
Phân tích độ phức tạp thời gian và không gian của Tìm kiếm Nhị phân
-
[Bài tập] Đo hiệu suất Tuần tự và Nhị phân trên nhiều quy mô dữ liệu
-
Đánh giá khả năng triển khai và phân tích Tìm kiếm Nhị phân
-
Bài tập thực hành Tìm kiếm Nhị phân trên tập dữ liệu lớn
-
So sánh Tìm kiếm Tuần tự và Tìm kiếm Nhị phân
-
Thảo luận về ưu nhược điểm của từng thuật toán trong các tình huống cụ thể
-
Tiêu chí lựa chọn thuật toán tìm kiếm phù hợp
-
Phát hiện lựa chọn thuật toán sai trong mã nguồn
-
Xây dựng một ứng dụng tìm kiếm đơn giản với khả năng chọn thuật toán
-
Tổng kết kiến thức về các thuật toán tìm kiếm
-
Ứng dụng thực tế của thuật toán tìm kiếm trong đời sống và lập trình
Tư duy Đệ quy
5 bài học · 31 hoạt động-
Khái niệm Đệ quy là gì?
-
Đệ quy hoạt động như thế nào: Cơ chế Call Stack
-
Cấu trúc của một Hàm Đệ quy
-
Ví dụ Đệ quy đơn giản: Đếm ngược
-
Viết hàm đệ quy đầu tiên: Tính tổng các số
-
Kiểm tra kiến thức cơ bản về Đệ quy
-
So sánh Đệ quy và Vòng lặp: Cú pháp và Cách thức hoạt động
-
Ưu và Nhược điểm của Đệ quy so với Vòng lặp
-
Chuyển đổi từ vòng lặp sang đệ quy và ngược lại
-
Thực hành chuyển đổi hai chiều: Giai thừa và Fibonacci
-
Phát hiện lựa chọn sai giữa đệ quy và vòng lặp
-
Phân biệt Đệ quy và Vòng lặp trong các tình huống cụ thể
-
Bài toán Giai thừa và Giải pháp Đệ quy
-
Cài đặt hàm Giai thừa Đệ quy
-
Bài toán Dãy Fibonacci và Giải pháp Đệ quy
-
Cài đặt hàm Fibonacci Đệ quy
-
Tối ưu Fibonacci bằng kỹ thuật Memoization
-
Phân tích các lỗi phổ biến khi viết Đệ quy
-
Giải các bài toán đệ quy cơ bản
-
Bài toán Tổng các số từ 1 đến N bằng Đệ quy
-
Tổng các số: so sánh ba cách viết đệ quy
-
Bài toán Lũy thừa bằng Đệ quy
-
Lũy thừa nhanh bằng kỹ thuật chia để trị
-
Đảo ngược tại chỗ bằng đệ quy hai con trỏ
-
Ứng dụng Đệ quy vào các bài toán khác
-
Các vấn đề về Hiệu suất của Đệ quy: Stack Overflow và Tính toán trùng lặp
-
Đo giới hạn Stack Overflow trên các loại hàm đệ quy khác nhau
-
Giới thiệu về Ghi nhớ (Memoization) để tối ưu hóa Đệ quy
-
Memoization với Dictionary cho bài toán nhiều tham số
-
Phát hiện lỗi khi cài đặt Memoization
-
Đánh giá sự hiểu biết về hiệu suất Đệ quy và Tối ưu hóa
Cấu trúc dữ liệu Ngăn xếp và Hàng đợi trong C#
5 bài học · 17 hoạt động-
Giới thiệu ngăn xếp
-
Đọc hiểu ví dụ ứng dụng Stack
-
Bài tập đảo ngược chuỗi với Stack
-
Bài tập kiểm tra dấu ngoặc cân bằng
-
Ứng dụng Stack: Chuyển đổi hệ thập phân sang nhị phân
-
Ứng dụng và vận dụng Ngăn xếp
-
Giới thiệu hàng đợi
-
Đọc hiểu ví dụ ứng dụng Queue
-
Bài tập mô phỏng hàng đợi khách hàng
-
Bài tập quản lý tác vụ đơn giản
-
Ứng dụng Queue: Mô phỏng hàng đợi máy in
-
Ứng dụng và vận dụng Hàng đợi
-
So sánh Ngăn xếp và Hàng đợi
-
Các tình huống lựa chọn Stack hay Queue
-
Lựa chọn cấu trúc dữ liệu phù hợp
-
Thiết kế ứng dụng đơn giản sử dụng cả Stack và Queue
-
Tổng kết module: Ngăn xếp, Hàng đợi và Ứng dụng
Thuật toán Số học và Xử lý Chuỗi
8 bài học · 42 hoạt động-
Các Khái Niệm Số Học Cơ Bản
-
Giới Thiệu về Các Kiểu Dữ Liệu Số trong C#
-
Thực hành phép toán số học và các cạm bẫy thường gặp
-
Kiểm Tra Kiến Thức Số Học và Kiểu Dữ Liệu
-
Số Nguyên Tố: Định Nghĩa và Tầm Quan Trọng
-
Thuật Toán Kiểm Tra Số Nguyên Tố Cơ Bản
-
Viết Hàm Kiểm Tra Số Nguyên Tố Cơ Bản
-
Tối Ưu Thuật Toán Kiểm Tra Số Nguyên Tố (Phần 1)
-
Viết Hàm Kiểm Tra Số Nguyên Tố Tối Ưu
-
Kiểm Tra Khả Năng Vận Dụng Thuật Toán Số Nguyên Tố
-
Định Nghĩa UCLN và BCNN
-
Thuật Toán Euclid Tìm UCLN
-
Triển Khai Thuật Toán Euclid (Đệ Quy và Lặp)
-
Tìm BCNN Từ UCLN
-
Kiểm Tra Kiến Thức UCLN và BCNN
-
Khái Niệm Phân Tích Thừa Số Nguyên Tố
-
Thuật Toán Phân Tích Thừa Số Nguyên Tố Cơ Bản
-
Triển Khai Hàm Phân Tích Thừa Số Nguyên Tố
-
Phân Tích Thừa Số Nguyên Tố của Các Số Lớn
-
Kiểm Tra Khả Năng Phân Tích Thừa Số Nguyên Tố
-
Chuỗi Là Gì và Cách Biểu Diễn trong C#
-
Các Thuộc Tính và Phương Thức Chuỗi Cơ Bản
-
Thực Hành Thao Tác Chuỗi Cơ Bản
-
Nối Chuỗi và So Sánh Chuỗi
-
Phân tích lỗi khi nối và so sánh chuỗi
-
Kiểm Tra Kiến Thức Cơ Bản về Chuỗi trong C#
-
Các Phương Pháp Đếm Ký Tự trong Chuỗi
-
Triển Khai Hàm Đếm Ký Tự và Từ
-
Thuật Toán Đảo Chuỗi
-
So sánh các phương pháp đảo chuỗi
-
Kiểm Tra Kỹ Năng Đếm và Đảo Chuỗi
-
Chuỗi Đối Xứng: Định Nghĩa và Ví Dụ
-
Thuật Toán Kiểm Tra Chuỗi Đối Xứng Cơ Bản
-
Triển Khai Hàm Kiểm Tra Chuỗi Đối Xứng
-
Phân tích lỗi thường gặp khi kiểm tra chuỗi đối xứng
-
Kiểm Tra Khả Năng Vận Dụng Thuật Toán Chuỗi Đối Xứng
-
Tổng Kết Các Thuật Toán Số Học Quan Trọng
-
Tổng Kết Các Kỹ Thuật Xử Lý Chuỗi
-
Bài Tập Tổng Hợp: Tìm Số Hoàn Hảo và Chuỗi Con Đối Xứng
-
Thực hành giải các bài toán nhỏ kết hợp số học và chuỗi
-
Thảo Luận: Ứng Dụng Thực Tế của Thuật Toán Số Học và Chuỗi
-
Kiểm Tra Tổng Hợp Kiến Thức Module
Tổng hợp và Dự án Ứng dụng
6 bài học · 34 hoạt động-
Tóm tắt các Thuật toán Sắp xếp và Tìm kiếm
-
Tóm tắt các Thuật toán Đệ quy, Số học và Xử lý Chuỗi
-
Khung tư duy Phân tích bài toán và Lựa chọn thuật toán
-
So sánh Hiệu suất thực tế của các Thuật toán
-
Kiểm tra Tổng hợp kiến thức và Khung tư duy
-
Thảo luận: Khi nào nên chọn thuật toán nào?
-
Phân rã bài toán lớn thành các bài toán nhỏ hơn
-
Kết hợp các thuật toán để giải quyết bài toán lớn
-
Bài tập: Sắp xếp và tìm kiếm trong danh sách đối tượng
-
Bài tập: Xử lý chuỗi và dữ liệu số
-
Kiểm tra: Chiến lược giải quyết bài toán tổng hợp
-
Bài tập lớn: Phân tích và đề xuất giải pháp cho một kịch bản
-
Giới thiệu Dự án: Hệ thống Quản lý Thư viện Đơn giản
-
Hướng dẫn Phân tích Yêu cầu Dự án
-
Thiết kế Cấu trúc Dữ liệu cho Dự án Thư viện
-
Bài tập: Phân tích yêu cầu và thiết kế sơ bộ dự án
-
Kiểm tra: Hiểu biết về Dự án và Thiết kế
-
Xây dựng chức năng Thêm, Sửa, Xóa Sách
-
Xây dựng chức năng Tìm kiếm Sách
-
Xây dựng chức năng Sắp xếp Sách
-
Xây dựng chức năng Quản lý Người dùng và Mượn/Trả Sách
-
Đánh giá Mã nguồn các Chức năng cốt lõi
-
Thử thách Mã hóa các Chức năng Dự án
-
Các Kỹ thuật Tối ưu hóa Thuật toán trong C#
-
Phân tích Hiệu suất Thời gian chạy
-
Giới thiệu về Kiểm thử Đơn vị và Kiểm thử Tích hợp
-
Viết Kiểm thử Đơn vị cho các Chức năng Dự án
-
Bài tập: Tối ưu hóa và Kiểm thử toàn diện
-
Kiểm tra: Kiến thức về Tối ưu hóa và Kiểm thử
-
Viết Tài liệu Hướng dẫn Sử dụng và Báo cáo Dự án
-
Kỹ năng Trình bày Dự án và Giải thích Giải thuật
-
Nộp Báo cáo và Mã nguồn Dự án Hoàn chỉnh
-
Phản hồi và Đánh giá Dự án
-
Tổng kết: Kiến thức Dự án và Kỹ năng Mềm