Algorithm

Algorithm

1. Học thuật toán để làm gì? 
- Học thuật toán để có tư duy lập trình tốt, đặt biệt với các em học sinh muốn học lập trình sớm thì càng nên học thuật toán, học tốt thuật toán sẽ trang bị cho các em một nền tảng vững chắc để theo ngành CNTT. 
- Xét về cọ sát thi cử thì khi đi thi học sinh giỏi cấp tỉnh, quốc gia, Olympic quốc tê môn tin học thì cũng chính là thi môn thuật toán này nhé. Sinh viên ngành CNTT thì cũng có môn cấu trúc dữ liệu và giải thuật.
- Học thuật toán giúp lập trình viên phân tích dự án, yêu cầu khách hàng, đáp ứng yêu cầu khách hàng hiệu quả hơn.
- Tóm lại học môn này là môn nền tảng, bạn có nền tảng tốt thì sau này học môn nào cũng tốt.

2.  Điều kiện để học thuật toán lập trình:
- Bạn phải nắm cơ bản một ngôn ngữ lập trình nào đó Như Pascal, C, C++, C#, Java, Python, PHP ngôn ngữ nào cũng được nhé. Thường người ta sẽ học bằng C, C++, hoặc python.
- Thường học thuật toán người ta hay học bằng C++ , nhưng Trong bài này mình sẽ sử dụng python nhé. Vì:
+ Thứ nhất chủ đề mình trao đổi là thuật toán các bạn hiểu thuật toán rồi thì code bằng ngôn ngữ lập trình nào cũng được.
+ Thứ hai là python có nhiều thư viện phục vụ việc học tập, nghiên cứu, viết bài tốt hơn, và sau này các bạn có thể dùng python để học tiếp về Machine learning (học máy), Machine learning nó là một nhánh chon của AI (trí tuệ nhân tạo ah).
+ Thứ ba là bạn hoàn toàn có thể chuyển code python sang C++, hoặc bạn đã học C++ rồi thì học python cũng đơn giản hơn rất nhiều.

3. Các thuật toán

PHẦN 1. BÀI TOÁN LIỆT KÊ
§1. NHẮC LẠI MỘT SỐ KIẾN THỨC ĐẠI SỐ TỔ HỢP 
1.1. CHỈNH HỢP LẶP 
1.2. CHỈNH HỢP KHÔNG LẶP 
1.3. HOÁN VỊ
1.4. TỔ HỢP 
§2. PHƯƠNG PHÁP SINH (GENERATION)
2.1. SINH CÁC DÃY NHỊ PHÂN ĐỘ DÀI N
2.2. LIỆT KÊ CÁC TẬP CON K PHẦN TỬ 
2.3. LIỆT KÊ CÁC HOÁN VỊ 
§3. ThUẬT TOÁN QUAY LUI 
3.1. LIỆT KÊ CÁC DÃY NHỊ PHÂN ĐỘ DÀI N
3.2. LIỆT KÊ CÁC TẬP CON K PHẦN TỬ
3.3. LIỆT KÊ CÁC CHỈNH HỢP KHÔNG LẶP CHẬP K
3.4. BÀI TOÁN PHÂN TÍCH SỐ
3.5. BÀI TOÁN XẾP HẬU
§4. KỸ THUẬT NHÁNH CẬN
4.1. BÀI TOÁN TỐI ƯU
4.2. SỰ BÙNG NỔ TỔ HỢP
4.3. MÔ HÌNH KỸ THUẬT NHÁNH CẬN
4.4. BÀI TOÁN NGƯỜI DU LỊCH
4.5. DÃY ABC

PHẦN 2. CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
§1. CÁC BƯỚC CƠ BẢN KHI TIẾN HÀNH GIẢI CÁC BÀI TOÁN TIN HỌC
1.1. XÁC ĐỊNH BÀI TOÁN
1.2. TÌM CẤU TRÚC DỮ LIỆU BIỂU DIỄN BÀI TOÁN
1.3. TÌM THUẬT TOÁN
1.4. LẬP TRÌNH
1.5. KIỂM THỬ
1.6. TỐI ƯU CHƯƠNG TRÌNH
§2. PHÂN TÍCH TH ỜI GIAN THỰC HIỆN GIẢI THUẬT 
2.1. ĐỘ PHỨC TẠP TÍNH TOÁN CỦA GIẢI THUẬT
2.2. XÁC ĐỊNH ĐỘ PHỨC TẠP TÍNH TOÁN CỦA GIẢI THUẬT
2.3. ĐỘ PHỨC TẠP TÍNH TOÁN VỚI TÌNH TRẠNG DỮ LIỆU VÀO
2.4. CHI PHÍ THỰC HIỆN THUẬT TOÁN 
§3. ĐỆ QUY VÀ GIẢI THUẬT ĐỆ QUY
3.1. KHÁI NIỆM V Ề ĐỆ QUY
3.2. GIẢI THUẬT ĐỆ QUY
3.3. VÍ DỤ VỀ GIẢI THUẬT ĐỆ QUY
3.4. HIỆU LỰC CỦA ĐỆ QUY
§4. CẤU TRÚC DỮ LIỆU BIỂU DIỄN DANH SÁCH
4.1. KHÁI NIỆM DANH SÁCH
4.2. BIỂU DIỄN DANH SÁCH TRONG MÁY TÍNH
§5. NGĂN XẾP VÀ HÀNG ĐỢI
5.1. NGĂN XẾP (STACK)
5.2. HÀNG ĐỢI (QUEUE)
§6. CÂY (TREE)
6.1. ĐỊNH NGHĨA
+ Lý thuyết về cây & các thuật toán trên cấu trúc cây
Tìm hiểu lý thuyết Binary Tree (bản dịch)
6.2. CÂY NHỊ PHÂN (BINARY TREE)
6.3. BIỂU DIỄN CÂY NHỊ PHÂN
6.4. PHÉP DUYỆT CÂY NHỊ PHÂN
6.5. CÁC THUẬT TOÁN VỀ CÂY NHỊ PHÂN
Các thuật toán về Binary Tree
Binary Tree - Binary Search Tree
Binary Tree - AVL Tree
Binary Tree - Huffman tree
6.6. CÂY K_PHÂN
6.7. CÂY TỔNG QUÁT 
§7. KÝ PHÁP TIỀN TỐ, TRUNG TỐ VÀ HẬU TỐ
7.1. BIỂU THỨC DƯỚI D ẠNG CÂY NHỊ PHÂN
7.2. CÁC KÝ PHÁP CHO CÙNG MỘT BIỂU THỨC
7.3. CÁCH TÍNH GIÁ TRỊ BIỂU THỨC.
7.4. CHUYỂN TỪ DẠNG TRUNG TỐ SANG DẠNG HẬU T Ố
7.5. XÂY DỰNG CÂY NHỊ PHÂN BIỂU DIỄN BIỂU THỨC
§8. SẮP XẾP (SORTING) 
8.1. BÀI TOÁN SẮP XẾP
8.2. THUẬT TOÁN SẮP XẾP KIỂU CHỌN (SELECTIONSORT)
8.3. THUẬT TOÁN SẮP XẾP N ỔI BỌT (BUBBLESORT)
8.4. THUẬT TOÁN SẮP XẾP KIỂU CHÈN
8.5. SHELLSORT
8.6. THUẬT TOÁN SẮP XẾP KIỂU PHÂN ĐO ẠN (QUICKSORT)
8.7. THUẬT TOÁN SẮP XẾP KIỂU VUN ĐỐNG (HEAPSORT)
8.8. SẮP XẾP B ẰNG PHÉP ĐẾM PHÂN PH ỐI (DISTRIBUTION COUNTING)
8.9. TÍNH ỔN ĐỊNH CỦA THUẬT TOÁN SẮP XẾP (STABILITY)
8.10. THUẬT TOÁN SẮP XẾP BẰNG C Ơ số (RADIXSORT)
8.11. THUẬT TOÁN SẮP XẾP TRỘN (MERGESORT)
8.12. CÀI ĐẶT
8.13. ĐÁNH GIÁ, NHẬN XÉT
§9. TÌM KIẾM (SEARCHING)
9.1. BÀI TOÁN TÌM KIẾM
9.2. TÌM KIẾM TUẦN T Ự (SEQUENTIAL SEARCH)
9.3. TÌM KIẾM NHỊ PHÂN (BINARY SEARCH)
9.4. CÂY NHỊ PHÂN TÌM KIẾM (BINARY SEARCH TREE - BST)
9.5. PHÉP BĂM (HASH)
9.6. KHOÁ SỐ V ỚI BÀI TOÁN TÌM KIẾM
9.7. CÂY TÌM KIẾM SỐ HỌC (DIGITAL SEARCH TREE - DST)
9.8. CÂY TÌM KIẾM CƠ SỐ (RADIX SEARCH TREE - RST)
9.9. NHỮNG NH ẬN XÉT CU ỐI CÙNG
§10. CON TRỎ (POINTER)
10.1. CON TRỎ
10.2. DANH SÁCH LIÊN KẾT (Linked Lists)

PHẦN 3. QUY HOẠCH ĐỘNG
§1. CÔNG THỨC TRUY HỒI
1.1. VÍ DỤ
1.2. CẢI TIẾN THỨ NHẤT
1.3. CẢI TIẾN THỨ HAI
1.4. CÀI ĐẶT ĐỆ QUY
§2. PHƯƠNG PHÁP QUY HOẠCH ĐỘNG
2.1. BÀI TOÁN QUY HO ẠCH
2.2. PHƯƠNG PHÁP QUY HO ẠCH ĐỘNG
§3. MỘT số BÀI TOÁN QUY HOẠCH ĐỘNG
3.1. DÃY CON ĐƠN ĐI ỆU TĂNG DÀI NHẤT
3.2. BÀI TOÁN CÁI TÚI
3.3. BI ẾN ĐỔI XÂU
3.4. DÃY CON CÓ TỔNG CHIA hết CHO K
3.5. PHÉP NHÂN TỔ HỢP DÃY MA TR ẬN
3.6. BÀI TẬP LUY ỆN TẬP

PHẦN 4. CÁC THUẬT TOÁN TRÊN ĐỒ THỊ 
§1. CÁC KHÁI NI ỆM CƠ BẢN
1.1. ĐỊNH NGH ĨA ĐỒ THỊ (GRAPH)
1.2. CÁC KHÁI NI ỆM
§2. BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
2.1. MA TR ẬN LI ỀN K Ề (MA TR ẬN K Ề)
2.2. DANH SÁCH CẠNH
2.3. DANH SÁCH KỀ
2.4. NH ẬN XÉT
§3. CÁC THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ
3.1. BÀI TOÁN
3.2. THUẬT TOÁN TÌM KIẾM THEO CHIỀU SÂU (DEPTH FIRST SEARCH)
3.3. THUẬT TOÁN TÌM KIẾM THEO CHIỀU RỘNG (BREADTH FIRST SEARCH)
3.4. ĐỘ PHỨC TẠP TÍNH TOÁN CỦA BFS VÀ DFS
§4. TÍNH LIÊN THÔNG CỦA ĐỒ THỊ
4.1. ĐỊNH NGH ĨA
4.2. TÍNH LIÊN THÔNG TRONG ĐỒ THỊ VÔ HƯỚNG
4.3. ĐỒ THỊ ĐẦY ĐỦ VÀ THUẬT TOÁN WARSHALL 
4.4. CÁC THÀNH PHẦN LIÊN THÔNG M ẠNH  
§5. VÀI ỨNG D ỤNG CỦA CÁC THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ  
5.1. XÂY D ỰNG CÂY KHUNG CỦA ĐỒ THỊ 
5.2. TẬP CÁC CHU TRÌNH CƠ BẢN CỦA ĐỒ THỊ  
5.3. ĐỊNH CHIỀU ĐỒ THỊ VÀ BÀI TOÁN LIỆT KÊ CẦU
5.4. LIỆT KÊ KH ỚP
§6. CHU TRÌNH EULER, ĐƯỜNG ĐI EULER, ĐỒ THỊ EULER
6.1. BÀI TOÁN 7 CÁI CẦU
6.2. ĐỊNH NGHĨA
6.3. ĐỊNH LÝ
6.4. THUẬT TOÁN FLEURY TÌM CHU TRÌNH EULER
6.5. CÀI ĐẶT  
6.6. THUẬT TOÁN T ỐT HƠN 
§7. CHU TRÌNH HAMILTON, ĐƯỜNG ĐI HAMILTON, ĐỒ THỊ HAMILTON
7.1. ĐỊNH NGH ĨA
7.2. ĐỊNH LÝ
7.3. CÀI ĐẶT 
§8. BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT
8.1. ĐỒ THỊ CÓ TR ỌNG SỐ
8.2. BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT
8.3. TR ƯỜNG HỢP ĐỒ THỊ KHÔNG CÓ CHU TRÌNH ÂM - THUẬT TOÁN FORD BELLMAN. 232 
8.4. TR ƯỜNG HỢP TR ỌNG số TRÊN CÁC CUNG KHÔNG ÂM - THUẬT TOÁN DIJKSTRA.. 234 
8.5. THUẬT TOÁN DIJKSTRA VÀ CẤU TRÚC HEAP
8.6. TR ƯỜNG HỢP ĐỒ THỊ KHÔNG CÓ CHU TRÌNH - THỨ T Ự TÔ PÔ
8.7. ĐƯỜNG ĐI NGẮN NHẤT GI ỮA M ỌI C ẶP ĐỈNH - THUẬT TOÁN FLOYD
8.8. NH ẬN XÉT
§9. BÀI TOÁN CÂY KHUNG NHỎ NHẤT
9.1. BÀI TOÁN CÂY KHUNG NHỎ NHẤT
9.2. THUẬT TOÁN KRUSKAL (JOSEPH KRUSKAL - 1956)
9.3. THUẬT TOÁN PRIM (ROBERT PRIM - 1957)
§10. BÀI TOÁN LUỒNG CỰC ĐẠI TRÊN MẠNG
10.1. BÀI TOÁN 
10.2. LÁT CẮT, ĐƯỜNG tăng LUỒNG, ĐỊNH LÝ FORD - FULKERSON
10.3. CÀI ĐẶT 
10.4. THUẬT TOÁN FORD - FULKERSON (L.R.FORD & D.R.FULKERSON - 1962)
§11. BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ HAI PHÍA 
11.1. ĐỒ THỊ HAI PHÍA (BIPARTITE GRAPH)
11.2. BÀI TOÁN GHÉP ĐÔI KHÔNG TRỌNG VÀ CÁC KHÁI NI ỆM
Algo - Thuật toán cặp ghép cực đại không trọng số
11.3. THUẬT TOÁN ĐƯỜNG MỞ
11.4. CÀI ĐẶT
§12. BÀI TOÁN TÌM B Ộ GHÉP C ỰC ĐẠI V ỚI TR ỌNG số C ỰC TI ỂU TRÊN ĐỒ THỊ HAI  PHÍA - THUẬT TOÁN HUNGARI
12.1. BÀI TOÁN PHÂN CÔNG 
12.2. PHÂN TÍCH
12.3. THUẬT TOÁN 
12.4. CÀI ĐẶT
12.5. BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI VỚI TR ỌNG số CỰC ĐẠI TRÊN ĐỒ THỊ HAI PHÍA 
12.6. NÂNG CẤP
§13. BÀI TOÁN TÌM BỘ GHÉP CỰC ĐẠI TRÊN ĐỒ THỊ 
13.1. CÁC KHÁI NIỆM
13.2. THUẬT TOÁN EDMONDS (1965) 
13.3. PH ƯƠNG PHÁP LAWLER (1973)
13.4. CÀI ĐẶT 

Tham khảo: https://www.geeksforgeeks.org/fundamentals-of-algorithms/?ref=shm