Lý thuyết đồ thị

Đồ thị là gì?

Đồ thị (graph) là một cấu trúc toán học gồm:

  • Tập đỉnh V (vertex / node) — đại diện cho các thực thể.
  • Tập cạnh E (edge) — đại diện cho quan hệ giữa các đỉnh.

Đồ thị có mặt ở khắp nơi: mạng lưới giao thông, mạng xã hội, sơ đồ phụ thuộc, mạch điện tử, lịch trình công việc…

Phân loại đồ thị

graph LR; subgraph Vô_hướng A1((A)) --- B1((B)); B1 --- C1((C)); A1 --- C1; end subgraph Có_hướng A2((A)) --> B2((B)); B2 --> C2((C)); C2 --> A2; end
Loại Mô tả Ký hiệu cạnh
Vô hướng Cạnh không phân biệt chiều (u, v)
Có hướng Cạnh có hướng từ u đến v (u → v)
Có trọng số Mỗi cạnh mang một giá trị (u, v, w)
DAG Đồ thị có hướng không có chu trình —
Cây Đồ thị liên thông không có chu trình —

Thuật ngữ cơ bản

  • Bậc đỉnh (degree): Số cạnh nối vào đỉnh. Đồ thị có hướng: bậc vào (in-degree) và bậc ra (out-degree).
  • Đường đi (path): Dãy đỉnh nối nhau không lặp đỉnh.
  • Chu trình (cycle): Đường đi bắt đầu và kết thúc ở cùng một đỉnh.
  • Liên thông (connected): Có đường đi giữa mọi cặp đỉnh.
  • Thành phần liên thông: Tập con lớn nhất của đỉnh tạo thành đồ thị liên thông.
  • Cây khung (spanning tree): Cây liên thông qua tất cả đỉnh với số cạnh tối thiểu.

Ví dụ nhanh bằng code

# Đồ thị vô hướng — danh sách kề (cách biểu diễn thường dùng nhất)
do_thi = {
    'A': ['B', 'C'],
    'B': ['A', 'D'],
    'C': ['A', 'D'],
    'D': ['B', 'C']
}

# Đồ thị có hướng có trọng số — danh sách kề với trọng số
do_thi_co_trong_so = {
    0: [(1, 4), (2, 1)],    # (đỉnh_kề, trọng_số)
    1: [(3, 1)],
    2: [(1, 2), (3, 5)],
    3: []
}

print("Hàng xóm của A:", do_thi['A'])       # ['B', 'C']
print("Bậc của A:", len(do_thi['A']))        # 2

Lộ trình học lý thuyết đồ thị

Nền tảng

Kỹ thuật quan trọng

Đường đi ngắn nhất

Chủ đề nâng cao

Kiến thức liên quan

  • DFS và BFS trong mục Thuật toán — Cài đặt đa ngôn ngữ, là nền tảng trước khi học các ứng dụng đồ thị.
  • Cấu trúc dữ liệu — Ma trận kề dùng mảng 2D; danh sách kề dùng từ điển và danh sách — các cấu trúc mục kia đã giới thiệu kỹ.
  • Hàm — Đệ quy — DFS đệ quy và nhiều thuật toán đồ thị sử dụng nguyên lý đệ quy trực tiếp.

Bình luận