Skip to content

Part 7: Graph Algorithms Advanced

Graph là cấu trúc dữ liệu mạnh mẽ nhất để mô hình hóa mối quan hệ giữa các thực thể.

Tại sao Graph?

Rất nhiều bài toán thực tế có thể được mô hình hóa bằng đồ thị:

┌─────────────────────────────────────────────────────────────────┐
│                    GRAPHS IN REAL WORLD                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  🌐 SOCIAL NETWORKS            🗺️ MAPS & NAVIGATION             │
│  ─────────────────             ──────────────────               │
│  Users = Nodes                 Cities = Nodes                   │
│  Friendships = Edges           Roads = Edges                    │
│                                                                 │
│  📦 DEPENDENCY MANAGEMENT      🔌 COMPUTER NETWORKS             │
│  ─────────────────────────     ────────────────────             │
│  Packages = Nodes              Devices = Nodes                  │
│  Dependencies = Edges          Connections = Edges              │
│                                                                 │
│  🧬 MOLECULAR STRUCTURES       🎮 GAME AI (Pathfinding)         │
│  ───────────────────────       ─────────────────────            │
│  Atoms = Nodes                 Positions = Nodes                │
│  Bonds = Edges                 Moves = Edges                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Graph là gì?

Định nghĩa

Graph G = (V, E) gồm:

  • V (Vertices/Nodes): Tập các đỉnh
  • E (Edges): Tập các cạnh nối 2 đỉnh
       Undirected Graph              Directed Graph (Digraph)
       ─────────────────             ────────────────────────
       
           0 ─── 1                       0 ───► 1
           │     │                       │      │
           │     │                       ▼      ▼
           3 ─── 2                       3 ◄─── 2
           
       Edge (0,1) = Edge (1,0)       Edge (0,1) ≠ Edge (1,0)

Phân loại

LoạiMô tảVí dụ
UndirectedCạnh 2 chiềuBạn bè trên Facebook
DirectedCạnh 1 chiềuFollow trên Twitter
WeightedCạnh có trọng sốBản đồ với khoảng cách
UnweightedCạnh không có trọng sốMạng xã hội đơn giản
CyclicCó chu trìnhĐường đi vòng tròn
AcyclicKhông có chu trìnhDAG - Dependency graph

Analogy: Mạng xã hội

┌─────────────────────────────────────────────────────────────────┐
│                    SOCIAL NETWORK GRAPH                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│         FACEBOOK (Undirected)         TWITTER (Directed)        │
│         ─────────────────────         ──────────────────        │
│                                                                 │
│              👤 Alice                      👤 Alice             │
│             /   |   \                     ↗     ↘              │
│            /    |    \                   /       \              │
│        👤Bob  👤Carol 👤Dan          👤Bob      👤Carol         │
│            \    |                        ↖       ↗              │
│             \   |                         \     /               │
│              👤Eve                         👤Dan                │
│                                                                 │
│     Nếu Alice kết bạn Bob,          Alice follow Bob,           │
│     thì Bob cũng kết bạn Alice      nhưng Bob không follow Alice│
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Thuật ngữ quan trọng

Thuật ngữĐịnh nghĩa
Vertex/NodeĐỉnh của đồ thị
EdgeCạnh nối 2 đỉnh
Adjacent2 đỉnh kề nhau (có cạnh nối)
DegreeSố cạnh nối với 1 đỉnh
PathDãy các đỉnh liên tiếp nối với nhau
CyclePath bắt đầu và kết thúc tại cùng 1 đỉnh
ConnectedCó đường đi từ mọi đỉnh đến mọi đỉnh khác
ComponentNhóm các đỉnh connected với nhau

Module Structure

📘 Part 1: Representation & Traversal

TopicDescription
Biểu diễn đồ thịAdjacency Matrix vs List
BFSBreadth-First Search
DFSDepth-First Search

📙 Part 2: Shortest Paths

TopicDescription
Dijkstrapriority_queue, non-negative weights
Bellman-FordNegative weights, cycle detection

📕 Part 3: Advanced (Coming Soon)

  • Minimum Spanning Tree (Prim, Kruskal)
  • Topological Sort
  • Floyd-Warshall

Prerequisites

📋 YÊU CẦU


Learning Path

Part 1: Traversal

  1. 📊 Biểu diễn đồ thị — Matrix vs List
  2. 🌊 BFS — Level-by-level traversal
  3. 🔍 DFS — Deep exploration

Part 2: Shortest Paths 4. 🗺️ Dijkstra — Google Maps style 5. ⚖️ Bellman-Ford — Negative weights


"The shortest path between two nodes is not always the most important path." — Graph Theory Wisdom