You are on page 1of 47

Trường Đại học Công nghệ Thông tin, ĐHQG HCM

Môn học
LÝ THUYẾT ĐỒ THỊ

Giảng viên: ThS. Trịnh Quốc Sơn

TỔNG QUAN
- Lý thuyết đồ thị là một lĩnh vực đã có từ lâu và có nhiều
ứng dụng.
- Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất
vào những năm đầu của thế kỷ 18 bởi nhà toán học lỗi lạc
người Thụy Sỹ Lenhard Eurler.
- Lý thuyết đồ thị đồ thị được sử dụng để giải các bài toán
trong nhiều lĩnh vực khác nhau.
- Lý thuyết đồ thị đã gắn kết nhiều ngành khoa học với
nhau.

TỔNG QUAN (tiếp)
- Chúng ta có thể phân biệt các hợp chất hóa học hữu cơ
khác nhau với cùng công thức phân tử nhưng khác nhau về
cấu trúc phân tử nhờ đồ thị.
- Chúng ta có thể xác định hai máy tính trong mạng có thể
trao đổi thông tin được với nhau hay không nhờ mô hình đồ
thị của mạng máy tính.
- Đồ thị có trọng số trên các cạnh có thể sử dụng để giải các
bài toán như: Tìm đường đi ngắn nhất giữa hai thành phố
trong mạng giao thông.
- Chúng ta cũng còn sử dụng đồ thị để giải các bài toán về
lập lịch, thời khóa biểu, và phân bố tần số cho các trạm phát
thanh và truyền hình…

NỘI DUNG MÔN HỌC
1. Đại cương về đồ thị.
2. Các thuật toán tìm kiếm trên đồ thị và ứng dụng.
3. Đồ thị Euler & Đồ thị Hamilton.
4. Cây và cây khung của đồ thị.
5. Bài toán đường đi ngắn nhất.
6. Bài toán luồng cực đại trên mạng.

TÀI LIỆU THAM KHẢO
1. Sách lý thuyết đồ thị - TS. Nguyễn Thanh Hùng, NXB
Đại học Quốc gia Tp.HCM.
2. Sách lý thuyết đồ thị - TS. Nguyễn Cam, TS. Chu Đức
Khánh, NXB Trẻ.
3. Sách Lý thuyết đồ thị - PGS.TS Hoàng Chí Thành, Đại
học Khoa học Tự Nhiên, ĐHQG HN.

CHƯƠNG 1

ĐẠI CƯƠNG VỀ ĐỒ THỊ

NỘI DUNG
• Các khái niệm về đồ thị
• Biểu diễn đồ thị trong máy tính
• Một số tính chất về đường đi trên đồ thị
• Bậc của đỉnh và tính liên thông
• Thuật toán tìm kiếm trên đồ thị

1.1. CÁC KHÁI NIỆM VỀ ĐỒ THỊ
• Định nghĩa 1.1
Đồ thị là một cặp G = (V, E), trong đó:
- V là tập hợp các đỉnh (vertex),
- E ⊆ V × V là tập hợp các cạnh (edge).

VÍ DỤ 1.1
Đồ thị G cho như hình vẽ.
- Tập đỉnh V = {a, b , c, d, e},
- Tập các cạnh E = {(a, b), (a, c), (b, c), (d, b),
(d, c), (e, a), (e, b), (e, d)}.
b

c

a
e

d

TÍNH KỀ TRONG ĐỒ THỊ
Đỉnh kề:
Nếu (a,b) là một cạnh của đồ thị G thì:
- Đỉnh b kề với đỉnh a
- Hai đỉnh a và b cùng kề với cạnh (a,b).
Hai cạnh kề nhau: là hai cạnh có ít nhất một đỉnh
chung.

ĐỒ THỊ VÔ HƯỚNG VÀ CÓ HƯỚNG
• Cạnh vô hướng: cặp đỉnh (x, y) ∈ E không sắp thứ
tự.
• Cạnh có hướng: cặp đỉnh (x, y) ∈ E có sắp thứ tự.

ĐỒ THỊ VÔ HƯỚNG VÀ CÓ HƯỚNG
(tiếp)

Định nghĩa 1.3
- Đồ thị chỉ chứa các cạnh vô hướng được gọi là đồ
thị vô hướng
- Đồ thị chỉ chứa các cạnh có hướng được gọi là đồ
thị có hướng.
Mỗi đồ thị vô hướng có thể biểu diễn bằng một đồ thị có
hướng bằng cách thay mỗi cạnh vô hướng bằng hai cạnh
có hướng tương ứng.

ĐỒ THỊ ĐỐI XỨNG
• Định nghĩa 1.4
Đồ thị G = (V, E) được gọi là đối xứng nếu:
∀ x, y ∈ V : (x, y) ∈ E

⇔ (y, x) ∈ E.

- Các đồ thị vô hướng là đối xứng.

ĐƠN VÀ ĐA ĐỒ THỊ
• Định nghĩa 1.5
- Đồ thị G = (V, E) mà mỗi cặp đỉnh được nối với
nhau không quá một cạnh được gọi là đơn đồ thị (gọi
tắt là đồ thị).
- Đồ thị có những cặp đỉnh được nối với nhau nhiều
hơn một cạnh thì được gọi là đa đồ thị.

1.2. ĐƯỜNG ĐI VÀ CHU TRÌNH
Định nghĩa 1.6: Cho G = (V, E) là một đồ thị.
Đường đi trong đồ thị là một dãy các đỉnh:
<x1, x2,…, xi, xi+1,…, xk-1, xk>
sao cho mỗi đỉnh trong dãy (không kể đỉnh đầu tiên)
kề với đỉnh trước nó bằng một cạnh nào đó, nghĩa là:
∀ i = 2, 3, ... , k-1, k : (xi-1, xi) ∈ E.
Ta nói rằng đường đi này đi từ đỉnh đầu x1 đến đỉnh
cuối xk.

ĐƯỜNG ĐI
• Độ dài của đường đi: là số cạnh của đường đi đó.
• Đường đi đơn: Các đỉnh trên nó khác nhau từng
đôi một.

CHU TRÌNH
• Định nghĩa 1.7
Chu trình là một đường đi khép kín (đỉnh cuối trùng
với đỉnh đầu của đường).
[x1, x2,…, xi, xi+1,…, xk-1, xk]
trong đó x1 = xk.
- Để cho gọn, trong ký hiệu của chu trình thường
không viết đỉnh cuối:
[x1, x2,…, xi, xi+1,…, xk-1]
Ký hiệu: n là số đỉnh, m là số cạnh của một đồ thị.

CHU TRÌNH (tiếp)
• Chu trình đơn: là chu trình mà các đỉnh trên nó
khác nhau từng đôi.
• Đỉnh nút: là đỉnh kề với chính nó.

1.5. BIỂU DIỄN ĐỒ THỊ
TRONG MÁY TÍNH

Biểu diễn bằng ma trận kề
Biểu diễn bằng danh sách kề

BIỂU DIỄN BẰNG MA TRẬN KỀ

Định nghĩa 1.10
Cho G = (V, E) là một đồ thị có các đỉnh được đánh
số là các số tự nhiên: 1, 2, ... , n.
Ma trận vuông A cấp n được gọi là ma trận kề của
đồ thị G nếu: ∀ i, j ∈ V, A[i,j] = số cạnh nối đỉnh
i với đỉnh j trong G.

• Đồ thị G là đối xứng khi và chỉ khi ma trận kề A là
đối xứng

VÍ DỤ 1.4
Ma trận kề của đa đồ thị có hướng:

2
3

1
4

A=

0
0
0
0

Đồ thị có hướng và ma trận kề

1
0
0
1

1
1
1
1

2
0
0
0

BIỂU DIỄN BẰNG DANH SÁCH KỀ

• Với mỗi đỉnh của đồ thị ta xây dựng một danh sách
liên kết chứa các đỉnh kề với đỉnh này: Danh sách
này được gọi là danh sách kề.

• Một đồ thị được biểu diễn bằng một mảng các danh
sách kề.

VÍ DỤ 1.5
Đồ thị và danh sách kề biểu diễn đồ thị tương ứng:

b

c

a
e

d

Mảng các danh sách kề biểu diễn đồ thị

1.6. MỘT SỐ TÍNH CHẤT VỀ
ĐƯỜNG ĐI TRÊN ĐỒ THỊ

• Định lý 1.2: Giả sử đồ thị G có n đỉnh. Tồn tại
đường đi từ đỉnh a đến đỉnh b trên đồ thị G khi
và chỉ khi tồn tại đường đi từ a đến b trên đồ
thị này với độ dài không quá n-1.

1.7. BẬC CỦA ĐỈNH VÀ
TÍNH LIÊN THÔNG CỦA ĐỒ THỊ

• Bậc của đỉnh
• Tính liên thông của đồ thị
• Đồ thị đầy đủ
• Một số tính chất

BẬC CỦA ĐỈNH
• Định nghĩa 1.11:
Giả sử G = (V, E) là một đồ thị, ta gọi bậc của
một đỉnh là số cạnh kề với đỉnh đó.
Ký hiệu: r(a) là bậc của đỉnh a trong đồ thị G.

TÍNH LIÊN THÔNG CỦA ĐỒ THỊ

Định nghĩa 1.12
Hai đỉnh của đồ thị G được gọi là liên thông, nếu
trên đồ thị có đường đi vô hướng nối chúng với
nhau.
Đồ thị được gọi là liên thông nếu mọi cặp đỉnh của
đồ thị đều liên thông với nhau.

VÍ DỤ 1.6

b

a

c
d

e

Một đồ thị liên thông

TÍNH LIÊN THÔNG CỦA ĐỒ THỊ (tiếp)

b

a

c
d

e

Một đồ thị không liên thông

TÍNH LIÊN THÔNG CỦA ĐỒ THỊ (tiếp)
1. Một thành phần liên thông trên đồ thị là một đồ thị
con không rỗng liên thông.
2. Hai thành phần liên thông khác nhau thì không giao
nhau.
3. Hai đỉnh ở hai thành phần liên thông khác nhau thì
không liên thông với nhau.
4. Hợp các thành phần liên thông cho ta đồ thị ban đầu.
Ký hiệu: p là số thành phần liên thông của một đồ
thị.

BẬC VÀ TÍNH LIÊN THÔNG
• Định lý 1.3
Tổng tất cả các bậc của các đỉnh trong một đồ thị
bằng hai lần số cạnh của đồ thị đó.
Chứng minh:
Ta tính bậc của các đỉnh. Mỗi đỉnh thuộc một cạnh
nào đó thì bậc của nó tăng thêm một.
Mà mỗi cạnh thì có hai đỉnh.

BẬC VÀ TÍNH LIÊN THÔNG (tiếp)
• Hệ quả 1.1: Số đỉnh có bậc lẻ trong một đồ thị phải
là một số chẵn.
• Hệ quả 1.2: Nếu đồ thị G có đúng hai đỉnh bậc lẻ thì
hai đỉnh đó phải liên thông với nhau.

BẬC VÀ TÍNH LIÊN THÔNG (tiếp)
• Định lý 1.4
Đồ thị G có n đỉnh. Nếu bậc của mỗi đỉnh
trong G không nhỏ hơn n/2 thì đồ thị G liên
thông.

BẬC VÀ TÍNH LIÊN THÔNG (tiếp)
• Chứng minh:
Phản chứng: Giả sử đồ thị G không liên thông.
Khi đó, có ít nhất hai đỉnh a và b nằm trong hai
mảng liên thông khác nhau.
Vậy thì, n ≤ r(a) + r(b) ≤ n-2.
Suy ra điều mâu thuẫn.

BẬC VÀ TÍNH LIÊN THÔNG (tiếp)
•Định lý 1.5
Giả sử đồ thị G có n đỉnh, m cạnh, p thành
phần liên thông và không có đỉnh nút. Khi đó:
(n − p)(n − p + 1)
m≤
2

• Chứng minh:
Giả sử mảng Gi có ni đỉnh. Thế thì ni ≥ 1.
Không mất tính tổng quát có thể xem G1 là mảng
có nhiều đỉnh nhất.
Ta "dồn" các đỉnh cho mảng G1 mà không làm thay
đổi số đỉnh, số cạnh và số thành phần liên thông
của đồ thị cho đến khi n2 = n3 = . . . = np = 1.

Chứng minh:
Cách “dồn” các đỉnh vào mảng G1:
Giả sử còn mảng Gi mà n1 ≥ ni ≥ 2.
Chọn a là một đỉnh của Gi sao cho nếu ta bỏ a và
các cạnh kề với nó thì phần còn lại vẫn liên thông.
Giả sử a được nối với k đỉnh trong Gi.

Chứng minh:
Hiển nhiên 1 ≤ k ≤ ni -1 < n1.
Ta chọn k đỉnh bất kỳ trong mảng G1 và:
- Thêm k cạnh mới nối a với các đỉnh đã chọn trong
G1.
- Xoá bỏ k cạnh nối a với các đỉnh trong Gi.
Đỉnh a liên thông với đỉnh trong G1 nên thuộc vào
mảng G1.

Chứng minh:
Ta được một đồ thị mới với số đỉnh, số cạnh, số
thành phần liên thông không thay đổi vì mảng Gi
bớt a và k cạnh vẫn còn ít nhất một đỉnh, G1 thêm
đỉnh a và k cạnh mới.

• Hệ quả 1.3

( n −2)( − 1)
Đồ thị G có n đỉnh và số cạnh m >
n
thì G liên thông.
2

Chứng minh:
Theo Định lý 1.9. thì:
Suy ra:

(n − p)(n − p + 1)
m≤
2

(n − 2)(n − 1)
(n − p)(n − p + 1)
<m≤
2
2

Bất đẳng thức trên chỉ thỏa mãn khi p = 1, vậy G là

liên thông.

ĐỒ THỊ ĐẦY ĐỦ
• Đồ thị được gọi là đầy đủ nếu hai đỉnh bất kỳ đều có
cạnh nối.
Ký hiệu Kn là đồ thị vô hướng đầy đủ n đỉnh.
- Đồ thị đầy đủ Kn là đồ thị liên thông.
- Mỗi đỉnh của Kn đều có bậc n-1.
- Hai đỉnh bất kỳ được nối với nhau bằng một đường
đi ngắn nhất có độ dài bằng 1, đó chính là cạnh nối hai
đỉnh ấy.

MỘT SỐ TÍNH CHẤT
1. Đồ thị vô hướng n đỉnh (n ≥ 3), không có đỉnh nút
và bậc của mỗi đỉnh đều không nhỏ hơn 2, luôn có chu
trình đơn.
2. Đồ thị n đỉnh (n ≥ 4) và bậc của mỗi đỉnh đều
không nhỏ hơn 3 luôn có chu trình đơn độ dài chẵn

MỘT SỐ TÍNH CHẤT (tiếp)
3. Đồ thị n đỉnh (n ≥ 2) không có đỉnh nút luôn có
ít nhất hai đỉnh cùng bậc.
4. Nếu đồ thị n đỉnh (n ≥ 4) có đúng hai đỉnh cùng
bậc thì hai đỉnh này không thể đồng thời có bậc 0
hoặc bậc n-1.
5. Trong đồ thị n đỉnh (n ≥ 4) mà cứ bốn đỉnh tuỳ
ý thì có ít nhất một đỉnh kề với ba đỉnh còn lại, thì
số đỉnh bậc n-1 của đồ thị này không ít hơn n-3.

TÌM KIẾM TRÊN ĐỒ THỊ
(THEO CHIỀU SÂU)
Ý tưởng chính của thuật toán có thể trình bày như sau:
- Ta sẽ bắt đầu tìm kiếm từ một đỉnh v0 nào đó của đồ thị.
- Sau đó chọn u là một đỉnh tuỳ ý kề với v0 và lặp lại quá trình đối
với u.
- Ở bước tổng quát, giả sử ta đang xét đỉnh v. Nếu như trong số các
đỉnh kề với v tìm được đỉnh w là chưa được xét thì ta sẽ xét đỉnh
này (nó sẽ trở thành đã xét) và bắt đầu từ nó ta sẽ bắt đầu quá trình
tìm kiếm còn nếu như không còn đỉnh nào kề với v là chưa xét thì
ta nói rằng đỉnh này đã duyệt xong và quay trở lại tiếp tục tìm kiếm
từ đỉnh mà trước đó ta đến được đỉnh v (nếu v=v0, thì kết thúc tìm
kiếm).

TÌM KIẾM TRÊN ĐỒ THỊ
(THEO CHIỀU RỘNG)
- Để ý rằng trong thuật toán tìm kiếm theo chiều sâu đỉnh được thăm
càng muộn sẽ càng sớm trở thành đã duyệt xong.
- Điều đó là hệ quả tất yếu của việc các đỉnh được thăm sẽ được kết
nạp vào trong ngăn xếp (STACK).
- Tìm kiếm theo chiều rộng trên đồ thị, nếu nói một cách ngắn gọn,
được xây dựng trên cơ sở thay thế ngăn xếp (STACK) bởi hàng đợi
(QUEUE).

BÀI TẬP
Hãy viết chương trình thực hiện các yêu cầu sau :
1. Biểu diễn đồ thị trong máy tính theo 2 cách dùng ma trận
kề và danh sách kề
2. Xác định bậc của tất cả các đỉnh và kiểm tra tính liên
thông của đồ thị.
3. Duyệt đồ thị theo các thuật toán duyệt theo chiều rộng và
chiều sâu.