Chương 4
MÔ HÌNH DỮ LIỆU ĐỒ THỊ
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 1/17
MỤC TIÊU
-
Nắm vững lý thuyết đồ thị
-
Ứng dụng đồ thị để giải các bài toán thực tế
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 2/17
NỘI DUNG CHÍNH
1. Định nghĩa đồ thị
2. Một số khái niệm cơ bản trên đồ thị
3. Biểu diễn đồ thị trong máy tính
4. Cách duyệt (thăm) đồ thị
5. Một số bài toán ứng dụng đồ thị
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 3/17
1. ĐỊNH NGHĨA ĐỒ THỊ
- Đồ thị là một cấu trúc rời rạc, ký hiệu G = <V, E>
V là tập các đỉnh ( vertices) , mỗi đỉnh tương đương 1 phần tử
dữ liệu
E là tập các cạnh/cung (Edges) - tập các cặp (u,v) mà u,v là
hai đỉnh thuộc V. Biểu diễn mối quan hệ giữa các phần tử.
Ví dụ:
1
2
1
2
5
3
4
4
G2 = <V2, E2>
G1=<V1, E1>
V1 ={1, 2, 3, 4}
E1 ={Tập cung}
={12, 13, 24, 32, 43}
© nuinvtnu-2017
3
V2 = {1, 2, 3, 4,5}
E2 = {Tập cạnh}
={12, 13, 23, 24, 25, 34, 45}
Data structures and Algorithms
Chapter 3 - 4/17
PHÂN LOẠI ĐỒ THỊ
Dựa vào đặc tính của tập E, ta có:
G là đơn đồ thị nếu giữa hai đỉnh u và v bất kì có nhiều nhất
một cạnh
G là đa đồ thị nếu giữa hai đỉnh u và v bất kì có thể có nhiều
hơn một cạnh
G là đồ thị vô hướng nếu E gồm các cặp (u,v)=(v,u), gọi là
các cạnh
G là đồ thị có hướng nếu E gồm các cặp (u,v)<>(v,u), gọi là
các cung.
G là đồ thị có trọng số nếu các cạnh/cung của nó giá trị
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 5/17
Một số ví dụ
Hình 1
–
–
–
–
Hình 2
Hình 3
Hình 4
Hình 1: Đơn đồ thị, vô hướng
Hình 2: Đơn đồ thị, có hướng
Hình 3: Đa đồ thị, vô hướng
Hình 4: Đa đồ thị, có hướng
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 6/17
2. MỘT SỐ KHÁI NIỆM CƠ BẢN TRÊN ĐỒ THỊ
a) Cạnh liên thuộc, đỉnh kề, bậc
Nếu e=(u,v) là 1 cạnh E thì ta nói u,v kề nhau (adjacent)
và e là liên thuộc với u và v
Nếu e = (u,v) là một cung thì ta nói u nối tới v và v nối từ u.
Cung e đi ra khỏi đỉnh u ( đỉnh đầu) và đi vào đỉnh v ( đỉnh
cuối), ta cũng nói u kề v
Bậc (degree) của v ( deg(v)) là số cạnh liên thuộc với v.
2
1
4
6
© nuinvtnu-2017
2
3
5
3
1
4
6
Data structures and Algorithms
5
Chapter 3 - 7/17
2. MỘT SỐ KHÁI NIỆM CƠ BẢN TRÊN ĐỒ THỊ
b) Đường đi và chu trình
Một đường đi P=(v1…vp) mà cạnh (vi-1vi) E với i=2…p
P gọi là đường đi đơn nếu tất cả các đỉnh trên đường đi không
trùng nhau
Đường đi con của P là một đoạn liên tục dọc theo P.
P gọi là chu trình nếu v1=vp
Một đồ thị là liên thông nếu với mọi cặp đỉnh (u,v) đều có
đường đi từ u đến v.
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 8/17
3. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH
a) Ma trận kề
b) Danh sách kề
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 9/17
a) Ma trận kề
•
•
Đánh số thứ tự các đỉnh của đồ thị từ 1 đến n
Biểu diễn đồ thị bằng một ma trận vuông cấp n gọi là
ma trận kề:
a[i,j]=1 nếu i kề j (tức (i,j) là cạnh/cung thuộc E.
a[i,j]=0 nếu i không kề j (tức (i,j) là cạnh/cung không thuộc E.)
* Ví dụ:
1 2 3 4 5
1
0
2 0
2
1
3
A=
1
4
0
1
5
0
0
0
1
1
1
0
0
0
1
1
1
0
0
0
0
1
1
0
0
1 2 3 4 5
1
1 0
2
5
5
4
3
© nuinvtnu-2017
2 0
0
A=
1
4 0
3
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
5
4
Data structures and Algorithms
3
Chapter 3 - 10/17
Nhận xét
- G là đồ thị vô hướng thì ma trận kề là đối xứng (a[i,j]=a[j,i]).
Trực quan, dễ cài đặt
Kích thước luôn là N2 dẫn đến lãng phí đặc biệt lãng phí với
ma trận thưa nhiều đỉnh, ít cạnh/cung
G là đồ thị có trọng số, thay giá trị 1 của ma trận kề bởi giá trị
trọng số tương ứng => gọi là ma trận trọng số
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 11/17
b) Danh sách kề
-
Với mỗi đỉnh u V ta cho tương ứng một danh sách các đỉnh kề với u.
Ví dụ:
1
2
1
3
2
2
3
4
5
© nuinvtnu-2017
3
4
4
5
5
2
Data structures and Algorithms
1
Chapter 3 - 12/17
4. Các phép duyệt đồ thị
Duyệt đồ thị? Mỗi đỉnh chỉ được thăm duy nhất 1 lần
Các phương pháp duyệt đồ thị
a) Duyệt theo chiều rộng (BFS – Breath First Search): Vết dầu
loang
b) Duyệt theo chiều sâu (DFS – Deep First Search)
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 13/17
a) Duyệt theo chiều rộng chiều rộng
(BFS - Breath first search)
Giả sử u là đỉnh xuất phát. Nguyên tắc duyệt:
Thăm u, rồi thăm đến các đỉnh kề u, rồi đến các đỉnh chưa được
thăm kề với các đỉnh này và tiếp tục lặp lại với các đỉnh mới.
Phép duyệt kết thúc khi mọi đỉnh liên thông với u đều được thăm
Tên gọi khác: Duyệt theo vết dầu loang
1
Ví dụ: Xét đồ thị như hình bên
Giả sử đỉnh u đỉnh 1,
=> Kết quả duyệt BFS là:
2
3
4
9
1 2 3 4 5 6 7 8
5
6
7
8
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 14/17
b) Duyệt theo chiều sâu (DFS - Depth first search)
Giả sử u là đỉnh xuất phát.
=> Nguyên tắc duyệt như sau:
Ví dụ: Xét đồ
thị như hình
1
Thăm u, rồi thăm đến các đỉnh u1, u2,
…., uk kề u với điều kiện khi thăm đến
đỉnh ui (i = 1..k) thì một phép duyệt theo
2
3
4
chiều sâu xuất phát từ ui lại được thực
9
hiện.
6
7
5
Khi thăm đến đỉnh v mà mọi đỉnh kề v
đều đã được thăm thì quay lui đến đỉnh
8
v’ còn có đỉnh w chưa được thăm, một
phép duyệt theo chiều sâu xuất phát từ w
lại được thực hiện.
Giả sử đỉnh u đỉnh 1,
Phép duyệt kết thúc khi mọi đỉnh liên => Kết quả duyệt là:
thông với u đều được thăm
1 2 5 8 6 3 7 4
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 15/17
5. Bài toán cây khung
Định nghĩa:
Cho đồ thị G=<V,E> là đồ thị vô hướng; cây T=<V,F> trong
đó F là tập con của E,
T được gọi là cây khung của G nếu T liên thông và phi
chu trình
Nếu G là đồ thị vô hướng có trọng số: Giá của cây khung
là tổng trọng số của các cạnh trong nó
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 16/17
Ví dụ
G
T1
T2
T3
Nhận xét:
G là đồ thị vô hướng liên thông có thể có nhiều cây khung. Nếu
G là đồ thị trọng số => tìm cây khung nhỏ nhất có ý nghĩa thực tiễn?
Tìm như thế nào?
© nuinvtnu-2017
Data structures and Algorithms
Chapter 3 - 17/17