Giao diện
Đồ Thị (Graph): Tổng Quan
Đồ thị là cấu trúc dữ liệu mô phỏng các mối quan hệ đôi một giữa các đối tượng.
- V (Vertex): Đỉnh (còn gọi là Node).
- E (Edge): Cạnh (đường nối giữa 2 đỉnh).
Biểu Diễn Đồ Thị
Có 2 cách phổ biến nhất để lưu trữ đồ thị trong máy tính.
| Đặc Điểm | Adjacency Matrix (Ma Trận Kề) | Adjacency List (Danh Sách Kề) |
|---|---|---|
| Cấu Trúc | Mảng 2 chiều A[V][V]. A[i][j] = 1 nếu có cạnh nối i-j. | Mảng các Vector List<int> adj[V]. adj[i] chứa các đỉnh kề với i. |
| Bộ Nhớ | ||
| Kiểm tra i-j? | ||
| Duyệt kề i | ||
| Khi nào dùng? | Đồ thị dày (Dense Graph), | Đồ thị thưa (Sparse Graph), |
Ứng Dụng Thực Tế: Network Routing
Mạng Internet, Hệ thống đường bộ, và cả Penrift Tunnel đều hoạt động dựa trên lý thuyết đồ thị. Mỗi thiết bị là một Node, mỗi kết nối P2P là một Edge. Việc tìm đường đi nhanh nhất cho gói tin chính là bài toán Shortest Path!
📚 Các Thuật Toán
Duyệt Đồ Thị
- BFS & DFS - Hai kỹ thuật duyệt cơ bản nhất
Đường Đi Ngắn Nhất (Shortest Path)
- Dijkstra - Single-source, non-negative weights.
- Bellman-Ford - Single-source, negative weights OK. Forex arbitrage detection.
- Floyd-Warshall - All-pairs shortest path. Connectivity matrix.
💡 Chọn thuật toán nào?
| Scenario | Algorithm |
|---|---|
| Non-negative, single source | Dijkstra |
| Negative weights possible | Bellman-Ford |
| Need all pairs distances | Floyd-Warshall |
| Detect negative cycle | Bellman-Ford hoặc Floyd-Warshall |
Cây Khung Nhỏ Nhất (Minimum Spanning Tree)
- MST - Prim & Kruskal - Kết nối tất cả đỉnh với chi phí tối thiểu. Network infrastructure, clustering.
Structural Algorithms
- Topological Sort - Task scheduling, build dependencies (Kahn's Algorithm).
- Disjoint Set Union (DSU) - Connected components, Kruskal's MST.
Tree Queries
- LCA - Binary Lifting - Lowest Common Ancestor với kỹ thuật "Nhảy cóc theo lũy thừa 2".
query sau tiền xử lý.
Network Flow (Luồng Mạng)
- Max Flow & Edmonds-Karp - Maximum throughput, Bipartite Matching, Min-Cut.
💡 Khi nào nghĩ đến Max Flow?
| Scenario | Ứng dụng |
|---|---|
| Tối ưu throughput qua mạng lưới | Logistics, Network bandwidth |
| Ghép đôi 2 tập hợp (Bipartite Matching) | Job assignment, Dating apps |
| Tìm điểm nghẽn (Bottleneck) | Min-Cut = điểm yếu nhất của hệ thống |