Professional Documents
Culture Documents
1. Thuật toán quay lui (Backtracking) và bài 12. Thuật toán Balan ngược (Reserve 18. Tìm hiểu về thư viện Standard
toán 8 hậu, mã đi tuần Polish Notation) và ứng dụng Template Library (containers,
2. Thuật toán nhánh cận và ứng dụng (ít nhất 3 13. Thuật toán Dynamic Time Warping iterators, algorithms) trong C++ và
ví dụ) (dựa trên quy hoạch động) các ví dụ
3. Thuật toán tham lam và ứng dụng (ít nhất 3
ví dụ)
14. Thuật toán gradient descent và ứng 19. Tìm hiểu về C++ Exception
4. Thuật toán leo đồi (Hill Climbing) và ứng dụng Handling, C++ Standard
dụng 15. Ma trận thưa và Thuật toán nhân Exceptions, và các ví dụ.
5. Thuật toán luyện kim (Simulated (nhanh) hai ma trận thưa 20. Tìm hiểu về C++ Namespaces,
Annealing) và ứng dụng 16. Sum-area Table (Integral Image) và C++ Template và C++ Preprocessor,
6. Tabu Search và ứng dụng ứng dụng. và các ví dụ.
7. Tối ưu bầy đàn (Particle 17. Các thuật toán nhân ma trận
Swarm Optimization) và ứng dụng
8. Giải thuật đàn kiến (Ant colony
optimization) và ứng dụng
9. Giải thuật di truyền (Genetic Algorithm) và
ứng dụng và ứng dụng
10. Thuật toán tối ưu sói xám (Grey Wolf
Optimizer) và ứng dụng
11. Thuật toán tối ưu cá voi (Whale
Optimization Algorithm) và ứng dụng
Từ bài toán đến chương trình
▪ Các bài toán thực tế thường rất phức tạp
Phải xác định được
o Các dữ liệu liên quan đến bài toán
o Các thao tác cần thiết để giải quyết bài toán
▪ Ví dụ
Bài toán quản lý sinh viên đăng ký học phần
Cần quản lý những thông tin nào?
• Thông tin về sinh viên: tên, ngày sinh, MSSV, Khoa, …
- Mô hình toán Phân tích, đánh giá Ngôn ngữ lập trình
- Chọn kiểu dữ liệu, thuật toán C/C++
cấu trúc dữ liệu -Độ phức tạp Java
- Thiết kế giải thuật - Cải tiến thuật toán Python
…
Khái niệm Kỹ thuật lập trình
▪ Kỹ thuật lập trình: là kỹ thuật giải quyết một bài toán trên máy tính dựa trên nền
tảng một phương pháp luận và một hoặc nhiều ngôn ngữ lập trình phù hợp với yêu
cầu.
Tư tưởng thiết kế + Cấu trúc dữ liệu + Giải thuật + Ngôn ngữ lập trình
Khái niệm Kỹ thuật lập trình
▪ Thế nào là lập trình
#include "Hash.h” // Initialize a empty dictionary with size void initDict(Dict &d, int size) { int i; d.size=size; d.n=0;
d.table = new Node[d.size]; assert(d.table != NULL); for(i = 0; i < d.size; i++) d.table[i] = NULL; } // Create a
new empty dictionary with INITIAL_SIZE void createDict(Dict &d) { return initDict(d,INITIAL_SIZE); } // Delete a
dictionary void deleteDict(Dict &d) { int i; Node e; Node q; for (i=0; i<d.size; i++) { for
(e=d.table[i];e!=NULL;e=q) { q=e->next; delete(e->word); delete(e->mean); delete e; }
} delete (d.table);}
Phong cách lập trình
▪ Tại sao cần phong cách lập trình tốt?
o Lỗi thường xảy ra do sự nhầm lẫn của lập trình viên.
• Biến i được dùng làm gì?
• Hàm f được gọi như thếnào?
o Mã nguồn tốt thường là mã nguồn dễ đọc.
Phong cách lập trình
▪ Làm thế nào để mã nguồn dễ đọc?
o Cấu trúc chương trình rõ ràng, dễ hiểu
o Chọn tên phù hợp, gợi nhớ
o Viết chú thích rõ ràng
o Sử dụng module (thiết kế chương trình con/hàm)
Phong cách lập trình
▪ Một số quy tắc
tong = 0;
for(i = 0; i<=n; i++)
{
if (i % 2 != 0) //neu i la so le
tong = tong + i; //hoac tong += i;
}
return 0;
}
Phong cách lập trình
❖ Cấu trúc viết mã nguồn:
▪ Viết biểu thức ở dạng đơn giản nhất, dễ đọc, dễ hiểu.
▪ Dùng cặp dâu ngoặc đơn ‘(’ , ‘)’ để tránh nhầm lẫn.
▪ Đơn giản hóa các biểu thức phức tạp.
▪ Ví dụ: