You are on page 1of 155

TS. NGUYỄN TRUNG KIÊN – TS.

NGUYỄN THANH HÙNG

Giáo trình

LÝ THUYẾT ĐỒ THỊ VÀ ỨNG DỤNG


Dùng cho học viên cao học chuyên ngành
Lý luận và Phương pháp dạy học Bộ môn Toán

2021
LỜI NÓI ĐẦU

Kính chào các bạn học viên, quý vị đọc giả, quý đồng nghiệp,

Với sự phát triển của công nghệ thông tin như hiện nay, việc ứng dụng toán học vào
giải quyết các bài toán thực tế trở nên cấp thiết để đáp ứng được nhu cầu phát triển của
kinh tế xã hội. Trong các lĩnh vực toán học hiện đại, tầm quan trọng của toán rời rạc đối
với công nghệ thông tin là không thể phủ nhận. Trong đó, lý thuyết đồ thị, một lĩnh vực
nghiên cứu của toán rời rạc, đóng vai trò mô hình hóa cho các bài toán mạng lưới dữ liệu
hoặc sự liên hệ giữa các thực thể. Tuy lý thuyết đồ thị được ra đời khá muộn so với các chủ
đề toán học khác nhưng đây là một trong những lĩnh vực mang tính hiện đại với những ứng
dụng được quan tâm tại các nước phát triển về công nghệ thông tin. Hơn nữa, chương trình
giáo dục tổng thể 2018 có đưa vào các chủ đề về lý thuyết đồ thị để giảng dạy cho học sinh
với ý định giúp học sinh làm quen và phát triển tư duy thuật toán; giúp các em có thể tham
gia vào nền công nghệ 4.0 góp phần phát triển đất nước. Dựa trên sự quan trọng của môn
học và sự quan tâm của chủ đề này ở các trường phổ thông, chúng tôi biên soạn giáo trình
“Lý thuyết đồ thị và ứng dụng” để giảng dạy ở bậc cao học cho học viên chuyên ngành Lý
luận và phương pháp dạy học Bộ môn Toán.

Trên tinh thần kết hợp giữa lý thuyết và ứng dụng, ở mỗi chương chúng tôi giới
thiệu đến bạn đọc các kết quả lý thuyết đồng thời kết hợp với những thảo luận mang tính
ứng dụng kinh điển. Mỗi ứng dụng được xem làm một mô hình hóa cho bài toán thực tế
thông qua cấu trúc của đồ thị mà chúng ta sẽ giải quyết thông qua thuật toán. Các thuật
toán này đương nhiên có thể lập trình được bằng các ngôn ngữ thông dụng hiện nay như
Python/C++/Java. Trong khuôn khổ của giáo trình, chúng tôi chỉ có thể giới thiệu các kết
quả lý thuyết và ứng dụng cơ bản đặc trưng nhất của môn học, các kết quả hiện đại của thế
kỷ 21 có thể được phát triển dựa trên những kết quả này.

Trong quá trình biên soạn, chúng tôi khó tránh được các sai sót. Kính mong quý vị
có thể đóng góp để chúng tôi điều chỉnh, bổ sung trong những lần tái bản tiếp theo.

Nhóm tác giả


MỤC LỤC
CHƯƠNG 1. ĐỒ THỊ VÀ ĐỒ THỊ CON .................................................................................................. 1

1.1 ĐỒ THỊ VÀ SỰ ĐẲNG CẤU GIỮA CÁC ĐỒ THỊ. ..............................................................................................1

1.2 MA TRẬN LIÊN THUỘC VÀ MA TRẬN LIỀN KỀ ..............................................................................................3

1.3 ĐỒ THỊ CON ........................................................................................................................................4

1.4 BẬC CỦA ĐỈNH ....................................................................................................................................6

1.5 ĐƯỜNG ĐI, TÍNH LIÊN THÔNG VÀ CHU TRÌNH .............................................................................................8

1.6 ĐỘ PHỨC TẠP TÍNH TOÁN ....................................................................................................................11

1.7 TÌM ĐƯỜNG ĐI NGẮN NHẤT .................................................................................................................14

CHƯƠNG 2. ĐỒ THỊ CÂY ................................................................................................................... 30

2.1 ĐỒ THỊ CÂY.......................................................................................................................................30

2.2 CẠNH CẮT, ĐỈNH CẮT ..........................................................................................................................32

2.3 THUẬT TOÁN TÌM KIẾM CÂY .................................................................................................................35

2.4 CÔNG THỨC CAYLEY ...........................................................................................................................44

2.5 CÂY BAO TRÙM NHỎ NHẤT ..................................................................................................................48

2.6 BÀI TOÁN VỊ TRÍ TRÊN CÂY ...................................................................................................................55

CHƯƠNG 3. TÍNH LIÊN THÔNG ......................................................................................................... 67

3.1 LIÊN THÔNG......................................................................................................................................67

3.2 CÁC KHỐI CỦA ĐỒ THỊ .........................................................................................................................70

3.3 CÁC MỞ RỘNG CỦA ĐỒ THỊ CÂY ............................................................................................................79

3.4 XÂY DỰNG MẠNG TRUYỀN THÔNG TIN CẬY ..............................................................................................85

CHƯƠNG 4. ĐƯỜNG ĐI EULER VÀ CHU TRÌNH HAMILTON ............................................................... 91

4.1 ĐƯỜNG ĐI EULER ..............................................................................................................................91

4.2 CHU TRÌNH HAMILTON .......................................................................................................................92

4.3 BÀI TOÁN NGƯỜI ĐƯA THƯ TRUNG HOA ................................................................................................99

4.4 BÀI TOÁN NGƯỜI BÁN HÀNG ..............................................................................................................102

CHƯƠNG 5. ĐỒ THỊ CÓ HƯỚNG ..................................................................................................... 108


5.1 ĐỒ THỊ CÓ HƯỚNG...........................................................................................................................108

5.2 ĐƯỜNG ĐI CÓ HƯỚNG ......................................................................................................................110

5.3 CHU TRÌNH CÓ HƯỚNG .....................................................................................................................113

5.4 BÀI TOÁN THỨ TỰ CÔNG VIỆC .............................................................................................................117

CHƯƠNG 6. MỘT SỐ CHỦ ĐỀ VỀ LÝ THUYẾT ĐỒ THỊ VÀ ỨNG DỤNG .............................................. 123

6.1 BÀI TOÁN TÔ MÀU TRONG ĐỒ THỊ .......................................................................................................123

6.2 SO KHỚP LỚN NHẤT .........................................................................................................................132

6.3 SỐ RAMSEY ....................................................................................................................................136

TÀI LIỆU THAM KHẢO ........................................................................................................................... 145


DANH SÁCH HÌNH VẼ

Hình 1.1 Minh họa biểu diễn hình học của một đồ thị ............................................. 1

Hình 1.2 Minh họa sự đẳng cấu hai đồ thị ............................................................... 2

Hình 1.3 Một số đồ thị đặc biệt ................................................................................ 3

Hình 1.4 Ma trận liên thuộc (bên trái) và ma trận liền kề (bên phải) ....................... 4

Hình 1.5 Minh họa các loại đồ thị con. .................................................................... 5

Hình 1.6 Các phép toán trên đồ thị ........................................................................... 6

Hình 1.7 Minh họa bậc của đỉnh .............................................................................. 7

Hình 1.8 Các đồ thị đều ............................................................................................ 8

Hình 1.9 Minh họa các loại đường đi. ...................................................................... 9

Hình 1.10 Minh họa thành phần liên thông .............................................................. 9

Hình 1.11 Minh họa các loại chu trình ................................................................... 10

Hình 1.12 Minh họa Định lý 1.2 ............................................................................ 11

Hình 1.13 Minh họa đường đi ngắn nhất ............................................................... 15

Hình 1.14 Minh họa ý tưởng thuật toán Dijkstra ................................................... 17

Hình 1.15 Lưu đồ thuật toán Dijkstra ..................................................................... 19

Hình 1.16 Minh họa thuật toán tìm đường đi ngắn nhất ........................................ 20

Hình 1.17 Minh họa cập nhật khoảng cách dạng ma trận ...................................... 23

Hình 1.18 Minh họa thuật toán Floyd-Warshall..................................................... 24

Hình 2.1 Minh họa đồ thị cây ................................................................................. 30

Hình 2.2 Minh họa Định lý 2.1 .............................................................................. 31

Hình 2.3 Minh họa Định lý 2.2 .............................................................................. 31

Hình 2.4 Minh họa Định lý 2.3 .............................................................................. 32


Hình 2.5 Đồ thị minh họa các thuật toán tìm kiếm cây .......................................... 38

Hình 2.6 Một cây 𝐵𝐹𝑆 gốc tại 𝑣1. ......................................................................... 40

Hình 2.7 Một cây DFS gốc tại 𝑣1 .......................................................................... 44

Hình 2.8 Co cạnh 𝑒 trong 𝐺 .................................................................................... 44

Hình 2.9 Minh họa Định lý 2.7 .............................................................................. 45

Hình 2.10 Tính số cây bao trùm bằng đệ quy ........................................................ 45

Hình 2.11 Minh họa Định lý 2.8 ............................................................................ 47

Hình 2.12 Một cây tối ưu trong một đồ thị có trọng số. ......................................... 49

Hình 2.13 Minh họa xây dựng một cây tối ưu trong đồ thị .................................... 52

Hình 2.14 Lưu đồ thuật toán Kruskal ..................................................................... 54

Hình 2.15 Minh họa điểm trên một cạnh của đồ thị ............................................... 55

Hình 2.16 Minh họa khoảng cách từ đỉnh đến điểm .............................................. 56

Hình 2.17 Minh họa khoảng cách giữa hai điểm trên hai cạnh .............................. 56

Hình 2.18 Minh họa khoảng giữa hai điểm trên cùng một cạnh ............................ 57

Hình 2.19 Minh họa điểm 1-median ...................................................................... 58

Hình 2.20 Đạo hàm theo hướng của hàm 1-median trên cây ................................. 60

Hình 2.21 Minh họa thuật toán tìm điểm 1-median trên cây ................................. 62

Hình 3.1 Minh họa mức độ liên thông của các đồ thị ............................................ 67

Hình 3.2 Minh họa lát cắt đỉnh ............................................................................... 68

Hình 3.3 Minh họa lát cắt cạnh .............................................................................. 69

Hình 3.4 Minh họa các khối của đồ thị .................................................................. 71

Hình 3.5 Minh họa chứng minh Định lý 3.2 .......................................................... 72

Hình 3.6 Minh họa phép phân chia một cạnh......................................................... 73

Hình 3.7 Minh họa chứng minh Hệ quả 3.2 ........................................................... 73


Hình 3.8 Minh họa thuật toán tìm các khối của đồ thị ........................................... 78

Hình 3.9 Minh họa đồ thị xương rồng .................................................................... 79

Hình 3.10 Minh họa đồ thị xương rồng tam giác ................................................... 79

Hình 3.11 Minh họa đồ thị khối ............................................................................. 80

Hình 3.12 Đồ thị xương rồng và cây cảm sinh tương ứng ..................................... 83

Hình 3.13 Minh họa ba đồ thị Harary .................................................................... 87

Hình 4.1 Những cây cầu và đồ thị của thành phố Königsberg ............................... 91

Hình 4.2 (a) Khối mười hai mặt; (b) Đồ thị Herschel ............................................ 93

Hình 4.3 Minh họa Định lý 4.2 .............................................................................. 94

Hình 4.4 Đồ thị Petersen ........................................................................................ 94

Hình 4.5 Minh họa Định lý 4.3 .............................................................................. 95

Hình 4.6 Bao đóng của một đồ thị.......................................................................... 97

Hình 4.7 Một đồ thị Hamilton ................................................................................ 98

Hình 4.8 Minh họa Định lý 4.6 ............................................................................ 100

Hình 4.9 Minh họa chu trình tối ưu ...................................................................... 101

Hình 4.10 Minh họa thay đổi một cặp cạnh trong chu trình Hamilton ................ 103

Hình 4.11 Đồ thị thể hiện khoảng cách sáu thành phố ......................................... 104

Hình 4.12 Minh họa phương pháp cải tiến chu trình ........................................... 104

Hình 4.13 Đồ thị Grötzsch.................................................................................... 106

Hình 5.1(a) Đồ thị có hướng D; (b) Đồ thị vô hướng tương ứng ......................... 109

Hình 5.2 (a) Đồ thị có hướng D; (b) Ba thành phần có hướng của D .................. 110

Hình 5.3 Minh họa đường đi có hướng ................................................................ 110

Hình 5.4 Chu trình đơn có hướng trên 4 đỉnh ...................................................... 112

Hình 5.5 Minh họa chứng minh Định lý 5.3 ........................................................ 114
Hình 5.6 Minh họa chứng minh Định lý 5.3 ........................................................ 115

Hình 5.7 Minh họa chứng minh Định lý 5.4 ........................................................ 117

Hình 5.8 Đồ thị có hướng 𝐷 ................................................................................. 119

Hình 6.1 Một đồ thị có sắc số bằng 3 ................................................................... 123

Hình 6.2 Đồ thị Grötzsch, một đồ thị 4-tới hạn.................................................... 124

Hình 6.3 Minh họa thuật toán tô màu tham lam ................................................... 129

Hình 6.4 Minh họa các bước tô màu của thuật toán tham lam ............................. 129

Hình 6.5 a) So khớp cực đại b) So khớp hoàn hảo ............................................... 132

Hình 6.6 Hình minh họa cho Định lý 6.6 ............................................................. 134

Hình 6.7 Minh họa Định lý 6.7 ............................................................................ 136

Hình 6.8 a) Tập độc lập; b) Tập độc lập lớn nhất................................................. 137

Hình 6.9 Bốn đồ thị Ramsey ................................................................................ 141


CHƯƠNG 1. ĐỒ THỊ VÀ ĐỒ THỊ CON

1.1 Đồ thị và sự đẳng cấu giữa các đồ thị.


1.1.1 Khái niệm đồ thị
Một đồ thị (graph) 𝐺 là một bộ ba (𝑉 (𝐺 ), 𝐸 (𝐺 ) , 𝜓𝐺 ) bao gồm một tập khác rỗng
𝑉 (𝐺 ) các đỉnh (vertices) của 𝐺, một tập 𝐸 (𝐺 ) các cạnh (edges) của 𝐺, và một hàm liên
thuộc (incidence function) 𝜓𝐺 đặt tương ứng mỗi cạnh với một cặp đỉnh không theo thứ tự
(hai đỉnh không nhất thiết phải khác nhau). Nếu 𝑒 là một cạnh và 𝑢, 𝑣 là hai đỉnh sao cho
𝜓𝐺 (𝑒) = 𝑢𝑣, thì ta nói 𝑒 nối 𝑢 và 𝑣; các đỉnh 𝑢 và 𝑣 được gọi là các điểm đầu mút (ends)
của 𝑒.

Ví dụ, ta xét đồ thị 𝐺 = (𝑉 (𝐺 ), 𝐸 (𝐺 ) , 𝜓𝐺 ) với 𝑉 (𝐺 ) = {𝑣1 , 𝑣2 , 𝑣3 , 𝑣4 }, 𝐸 (𝐺 ) =


{𝑒1 , 𝑒2 , 𝑒3 , 𝑒4 , 𝑒5 } và ψG được xác định bởi 𝜓𝐺 (𝑒1 ) = 𝑣1 𝑣2 , 𝜓𝐺 (𝑒2 ) = 𝑣1 𝑣2 , 𝜓𝐺 (𝑒3 ) =
𝑣2 𝑣3 , 𝜓𝐺 (𝑒4 ) = 𝑣3 𝑣4 , 𝜓𝐺 (𝑒5 ) = 𝑣4 𝑣4 . Hình 1.1 là một biểu diễn hình học của đồ thị 𝐺.

Hình 1.1 Minh họa biểu diễn hình học của một đồ thị

1.1.2 Một số khái niệm liên quan


a) Nếu 𝑢 là một điểm đầu mút của cạnh 𝑒 thì ta nói 𝑢 và 𝑒 liên thuộc (incident) với
nhau.

b) Hai đỉnh liên thuộc với cùng một cạnh được gọi là hai đỉnh liền kề (adjacent).

c) Hai cạnh liên thuộc với cùng một đỉnh được gọi là hai cạnh liền kề.

d) Một cạnh có hai điểm đầu mút trùng nhau được gọi là một vòng (loop).

e) Hai hay nhiều cạnh mà có hai đầu mút giống nhau được gọi là các cạnh song song
(parallel edges) hay còn được gọi là các cạnh bội (multiple edges).

f) Đồ thị hữu hạn (finite graph) là đồ thị có cả tập hợp cạnh và tập hợp đỉnh đều hữu
hạn.

1
g) Đơn đồ thị (simple graph) là một đồ thị không có vòng và không có cạnh song song.

h) Đồ thị tầm thường (trivial graph) là đồ thị chỉ có một đỉnh và không có cạnh.

i) Đồ thị rỗng (empty graph) là đồ thị không có cạnh.

Ví dụ như trong đồ thị 𝐺 ở Hình 1.1, ta có cạnh 𝑒3 liên thuộc với hai đỉnh 𝑣2 và 𝑣3 .
Hai đỉnh 𝑣2 và 𝑣3 là hai đỉnh kề nhau. Đỉnh 𝑣3 liên thuộc với hai cạnh 𝑒3 và 𝑒4 . Hai cạnh
𝑒3 và 𝑒4 là hai cạnh kề nhau. Cạnh 𝑒5 là một vòng. Hai cạnh 𝑒1 và 𝑒2 là hai cạnh song song.
Đồ thị 𝐺 là một đồ thị hữu hạn nhưng nó không phải là một đơn đồ thị.

Trong giáo trình này, ta chỉ nghiên cứu các đồ thị hữu hạn, và do đó thuật ngữ “đồ
thị” luôn có nghĩa là “đồ thị hữu hạn”. Ta sử dụng các ký hiệu 𝑛(𝐺 ) và 𝜀 (𝐺 ) để biểu thị số
đỉnh và số cạnh trong đồ thị 𝐺.

1.1.3 Sự đẳng cấu giữa hai đồ thị


a) Hai đồ thị 𝐺 và 𝐻 là giống nhau (identical) (viết 𝐺 = 𝐻) nếu 𝑉 (𝐺 ) = 𝑉 (𝐻 ), 𝐸 (𝐺 ) =
𝐸 (𝐻 ) và 𝜓𝐺 = 𝜓𝐻 .

b) Hai đồ thị 𝐺 và 𝐻 được gọi là đẳng cấu (isomorphic) (viết 𝐺 ≅ 𝐻) nếu có hai song
ánh 𝜃: 𝑉 (𝐺 ) → 𝑉 (𝐻 ) và 𝜙: 𝐸 (𝐺 ) → 𝐸 (𝐻 ) sao cho 𝜓𝐺 (𝑒) = 𝑢𝑣 khi và chỉ khi
𝜓𝐻 (𝜙(𝑒)) = 𝜃(𝑢)𝜃 (𝑣 ); mỗi cặp ánh xạ (𝜃, 𝜙) như vậy được gọi là một đẳng cấu
(isomorphism) giữa 𝐺 và 𝐻.

Hình 1.2 Minh họa sự đẳng cấu hai đồ thị

Xét ba đồ thị trong Hình 1.2, đồ thị 𝐺 và đồ thị 𝐻 là giống nhau, nhưng hai đồ thị 𝐺
và 𝐾 là khác nhau. Hai đồ thị 𝐺 và 𝐾 là đẳng cấu với nhau nhờ hai song ánh bảo toàn quan
hệ liền kề là

2
𝜃: 𝑉 (𝐺 ) → 𝑉 (𝐾) với 𝜃(𝑎) = 𝑢1 , 𝜃(𝑏) = 𝑢2 , 𝜃(𝑐 ) = 𝑢3

𝜙: 𝐸 (𝐺 ) → 𝐸 (𝐾) với 𝜙(𝑒1 ) = 𝑒4 , 𝜙(𝑒2 ) = 𝑒5 , 𝜙(𝑒3 ) = 𝑒6

1.1.4 Một số đồ thị đặc biệt


a) Đồ thị đầy đủ (complete graph) là đơn đồ thị mà hai đỉnh khác nhau bất kì đều được
nối với nhau bằng một cạnh. Đồ thị đầy đủ với 𝑛 đỉnh được ký hiệu là 𝐾𝑛 .

b) Đồ thị lưỡng phân (bipartite graph) là một đồ thị có tập đỉnh có thể được phân thành
hai tập con 𝑋 và 𝑌, sao cho mỗi cạnh có một đầu mút trong 𝑋 và một đầu mút trong
𝑌. Đồ thị như vậy được gọi là đồ thị lưỡng phân với phân hoạch (𝑋, 𝑌).

c) Đồ thị lưỡng phân đầy đủ (complete bipartite graph) là một đơn đồ thị lưỡng phân
với phân hoạch (𝑋, 𝑌) trong đó mỗi đỉnh của 𝑋 được nối với mỗi đỉnh của 𝑌; nếu
|𝑋 | = 𝑚 và |𝑌| = 𝑛, mỗi đồ thị như vậy được ký hiệu bằng 𝐾𝑚,𝑛 .

Ba đồ thị trong Hình 1.3 là đồ thị đầy đủ trên 4 đỉnh (𝐾4 ), đồ thị lưỡng phân không
đầy đủ (𝐺) và đồ thị lưỡng phân đầy đủ (𝐾2,3 ).

Hình 1.3 Một số đồ thị đặc biệt

1.2 Ma trận liên thuộc và ma trận liền kề

a) Ma trận liên thuộc (incidence matrix) của một đồ thị 𝐺 là ma trận 𝑀(𝐺 ) = [𝑚ij ] cấp
𝑛 × 𝜀 trong đó 𝑚𝑖𝑗 là số lần mà đỉnh 𝑣𝑖 liên thuộc với cạnh 𝑒𝑗 .

b) Ma trận liền kề (adjacency matrix) của một đồ thị 𝐺 là ma trận 𝐴(𝐺 ) = [𝑎ij ] cấp
𝑛 × 𝑛, trong đó 𝑎𝑖𝑗 là số lần đỉnh 𝑣𝑖 liền kề với đỉnh 𝑣𝑗 . Nếu có 𝑘 cạnh nối đỉnh 𝑣𝑖
với đỉnh 𝑣𝑗 thì ta nói hai đỉnh 𝑣𝑖 và 𝑣𝑗 kề nhau 𝑘 lần.

3
Hai ma trận trong Hình 1.4 là ma trận liên thuộc và ma trận liền kề của đồ thị 𝐺
trong Hình 1.1.

Hình 1.4 Ma trận liên thuộc (bên trái) và ma trận liền kề (bên phải)

1.3 Đồ thị con


a) Đồ thị 𝐻 là một đồ thị con (subgraph) của 𝐺 (viết 𝐻 ⊆ 𝐺) nếu 𝑉 (𝐻 ) ⊆ 𝑉 (𝐺 ),
𝐸 (𝐻 ) ⊆ 𝐸 (𝐺 ) và 𝜓𝐻 là giới hạn của 𝜓𝐺 trên 𝐸 (𝐻 ).

b) Khi 𝐻 ⊆ 𝐺 nhưng 𝐻 ≠ 𝐺, ta viết 𝐻 ⊂ 𝐺 và gọi 𝐻 là một đồ thị con thực sự (proper


subgraph) của 𝐺.

c) Một đồ thị con bao trùm (spanning subgraph) của 𝐺 là một đồ thị con 𝐻 với 𝑉 (𝐻 ) =
𝑉 (𝐺 ).

d) Bằng cách xóa khỏi 𝐺 tất cả các vòng và nếu có các cạnh song song thì ta chỉ giữ
lại một cạnh, ta được một đồ thị con bao trùm của 𝐺, đồ thị này được gọi là đơn đồ
thị tương ứng (underlying simple graph) của 𝐺.

e) Giả sử rằng 𝑉 ′ là một tập con khác rỗng của 𝑉. Đồ thị con của 𝐺 có tập hợp đỉnh là
𝑉 ′ và tập hợp cạnh của nó là tập hợp các cạnh của 𝐺 có cả hai đầu mút trong 𝑉 ′
được gọi là đồ thị con của 𝐺 cảm sinh bởi 𝑉 ′ (induced subgraph) và được ký hiệu là
𝐺 [𝑉 ′ ]. Đồ thị con cảm sinh 𝐺 [𝑉\𝑉 ′ ] được ký hiệu là 𝐺 − 𝑉 ′ ; nó là đồ thị con thu
được từ 𝐺 bằng cách xóa các đỉnh trong 𝑉 ′ cùng với các cạnh liên thuộc của chúng.
Nếu 𝑉 ′ = {𝑣 } thì ta viết 𝐺 − 𝑣 thay cho 𝐺 − {𝑣}.

f) Giả sử rằng 𝐸 ′ là một tập con khác rỗng của 𝐸. Đồ thị con của 𝐺 có đỉnh là tập hợp
các điểm đầu mút của các cạnh trong 𝐸 ′ và tập cạnh của nó là 𝐸 ′ được gọi là đồ thị
con của 𝐺 cảm sinh bởi tập cạnh 𝐸 ′ (edge-induced subgraph) và được ký hiệu là

4
𝐺 [𝐸′]. Đồ thị con bao trùm của 𝐺 với tập hợp cạnh 𝐸\𝐸 ′ được viết đơn giản là 𝐺 −
𝐸 ′ ; nó là đồ thị con thu được từ 𝐺 bằng cách xóa các cạnh trong 𝐸 ′ . Tương tự, đồ
thị thu được từ 𝐺 bằng cách thêm một tập hợp các cạnh 𝐸 ′ được ký hiệu là 𝐺 + 𝐸 ′ .
Nếu 𝐸 ′ = {𝑒} ta viết 𝐺 − 𝑒 và 𝐺 + 𝑒 thay cho 𝐺 − {𝑒} và 𝐺 + {𝑒}.

Trong Hình 1.5, đồ thị 𝐻1 là một đồ thị con (thực sự) của 𝐺, còn 𝐻2 là một đồ thị
con bao trùm của 𝐺. Đồ thị 𝐻3 là một đơn đồ thị tương ứng của 𝐺. Hơn nữa, 𝐻4 =
𝐺 [𝑣1 , 𝑣3 ], 𝐻5 = 𝐺 − 𝑣2 , 𝐻6 = 𝐺 [𝑒1 , 𝑒3 ] và 𝐻7 = 𝐺 − {𝑒1 , 𝑒2 , 𝑒3 }.

Hình 1.5 Minh họa các loại đồ thị con.

Cho 𝐺1 và 𝐺2 là hai đồ thị con của 𝐺. Ta nói rằng 𝐺1 và 𝐺2 là rời nhau (disjoint)
nếu chúng không có đỉnh chung và không có cạnh chung. Phép hợp (union) 𝐺1 ∪ 𝐺2 của

5
𝐺1 và 𝐺2 là đồ thị với tập hợp đỉnh 𝑉 (𝐺1 ) ∪ 𝑉 (𝐺2 ) và tập hợp cạnh 𝐸(𝐺1 ) ∪ 𝐸 (𝐺2 ); nếu
𝐺1 và 𝐺2 rời nhau, đôi khi ta biểu thị hợp của chúng bằng 𝐺1 + 𝐺2 . Phép giao (intersection)
𝐺1 ∩ 𝐺2 của 𝐺1 và 𝐺2 được xác định tương tự, nhưng trong trường hợp này 𝐺1 và 𝐺2 phải
có ít nhất một đỉnh chung.

Hình 1.6 Các phép toán trên đồ thị

Trong Hình 1.6, đồ thị 𝐺1 và 𝐺3 rời nhau. Hơn nữa, 𝐺4 = 𝐺1 ∪ 𝐺2 , 𝐺5 = 𝐺1 ∩ 𝐺2 và


𝐺6 = 𝐺1 + 𝐺3 .

1.4 Bậc của đỉnh


Bậc (degree) 𝑑𝐺 (𝑣 ) của đỉnh 𝑣 trong 𝐺 là số cạnh của 𝐺 liên thuộc với 𝑣, mỗi vòng
tính là hai cạnh. Ta ký hiệu 𝛿 (𝐺 ) và 𝛥(𝐺 ) lần lượt là bậc nhỏ nhất và bậc lớn nhất của các
đỉnh trong 𝐺.

Xét đồ thị 𝐺 trong Hình 1.7, ta có 𝑑𝐺 (𝑣1 ) = 4, 𝑑𝐺 (𝑣2 ) = 3, 𝑑𝐺 (𝑣3 ) = 3 và


𝑑𝐺 (𝑣4 ) = 0. Từ đó, ta được 𝛿 (𝐺 ) = 0 và Δ(𝐺 ) = 4. Ta thấy tổng bậc của tất cả các đỉnh
của 𝐺 là 10 và bằng hai lần số cạnh của 𝐺. Điều này đúng với mọi đồ thị.

6
Hình 1.7 Minh họa bậc của đỉnh

Định lý 1.1 Tổng bậc của tất cả các đỉnh trong một đồ thị bằng hai lần số cạnh của đồ
thị đó, tức là:

∑ 𝑑 (𝑣 ) = 2𝜀
𝑣∈𝑉

Chứng minh

Xét ma trận liên thuộc 𝑀. Tổng các phần tử trong hàng tương ứng với đỉnh 𝑣 chính
là 𝑑 (𝑣), và do đó ∑𝑣∈𝑉 𝑑 (𝑣 )là tổng của tất cả phần tử trong 𝑀. Nhưng tổng này cũng là 2𝜀
vì 𝑀 có 𝜀 cột và tổng mỗi cột là 2. □

Hệ quả 1.1 Trong bất kỳ đồ thị nào, số đỉnh bậc lẻ là một số chẵn.

Chứng minh

Cho 𝑉1 và 𝑉2 lần lượt là tập hợp các đỉnh bậc lẻ và các đỉnh chẵn trong 𝐺. Theo
Định lý 1.1:

∑ 𝑑 (𝑣 ) + ∑ 𝑑 (𝑣 ) = ∑ 𝑑 (𝑣 ) = 2𝜀
𝑣∈𝑉1 𝑣∈𝑉2 𝑣∈𝑉

Vì ∑𝑣∈𝑉2 𝑑 (𝑣 ) là một số chẵn nên ∑𝑣∈𝑉1 𝑑 (𝑣 ) là một số chẵn. Như vậy |𝑉1 | là một
số chẵn. □

Một đồ thị 𝐺 là 𝑘–đều (k-regular) nếu 𝑑 (𝑣 ) = 𝑘 với mọi 𝑣 ∈ 𝑉; một đồ thị đều
(regular graph) là một đồ thị 𝑘–đều với một số tự nhiên 𝑘 nào đó. Đồ thị đầy đủ và đồ thị
lưỡng phân đầy đủ 𝐾𝑛.𝑛 là các đồ thị đều.

7
Các đồ thị trong Hình 1.8 từ trái sang phải lần lượt là các đồ thị 2-đều, 3-đều và 4-
đều trên 6 đỉnh.

Hình 1.8 Các đồ thị đều

1.5 Đường đi, tính liên thông và chu trình


Đường đi (walk) trong 𝐺 là một dãy khác rỗng hữu hạn 𝑊 = 𝑣0 𝑒1 𝑣1 𝑒2 𝑣2 … 𝑒𝑘 𝑣𝑘
gồm các đỉnh và các cạnh xen kẽ nhau, sao cho với mỗi 1 ≤ 𝑖 ≤ 𝑘, hai đầu mút của 𝑒𝑖 là
𝑣𝑖−1 và 𝑣𝑖 . Ta nói rằng W là đường đi từ 𝑣𝑜 đến 𝑣𝑘 . Các đỉnh 𝑣𝑜 và 𝑣𝑘 lần lượt được gọi là
đỉnh đầu (origin) và đỉnh cuối (terminus) của W và 𝑣1 , 𝑣2 , . . , 𝑣𝑘−1 được gọi là các đỉnh
trong (internal vertices). Độ dài (length) của một đường đi bằng với số cạnh trong đường
đi đó.

Nếu 𝑊 = 𝑣0 𝑒1 𝑣1 … 𝑒𝑘 𝑣𝑘 là một đường đi từ 𝑣0 đến 𝑣𝑘 thì 𝑊 −1 = 𝑣𝑘 𝑒𝑘 𝑣𝑘−1 … 𝑒1 𝑣0


là một đường đi từ 𝑣𝑘 đến 𝑣0 và được gọi là đường đi đảo ngược của 𝑊. Nếu 𝑊 ′ =
𝑣𝑘 𝑒𝑘 + 1 𝑣𝑘 + 1 … 𝑒𝑙 𝑣𝑙 là một đường đi từ 𝑣𝑘 đến 𝑣𝑙 thì 𝑊𝑊 ′ là một đường đi từ 𝑣0 đến 𝑣𝑙 .

Trong một đơn đồ thị, một đường đi hoàn toàn xác định khi ta biết dãy các đỉnh của
nó. Do đó, ta có thể ký hiệu 𝑊 = 𝑣0 𝑣1 . . . 𝑣𝑘 thay cho 𝑊 = 𝑣0 𝑒1 𝑣1 … 𝑒𝑘 𝑣𝑘 .

Nếu các cạnh 𝑒1 , 𝑒2 , . . . , 𝑒𝑘 của đường đi 𝑊 đôi một khác nhau thì 𝑊 được gọi là
một đường đi đơn (trail). Nếu các đỉnh 𝑣0 , 𝑣1 , … 𝑣𝑘 của đường đi 𝑊 đôi một khác nhau thì
W được gọi là một đường đi sơ cấp (path). Từ định nghĩa, ta thấy được mọi đường đi sơ
cấp đều là đường đi đơn.

Xét đồ thị 𝐺 như trong Hình 1.9. Đường đi 𝑊1 = 𝑣1 𝑒1 𝑣2 𝑒3 𝑣3 𝑒3 𝑣2 không phải là


đường đi đơn. Đường đi 𝑊2 = 𝑣1 𝑒1 𝑣2 𝑒2 𝑣1 𝑒6 𝑣4 là một đường đi đơn nhưng không phải là

8
đường đi sơ cấp. Đường đi 𝑊3 = 𝑣1 𝑒1 𝑣2 𝑒3 𝑣3 𝑒4 𝑣4 là một đường đi sơ cấp có độ dài bằng
3.

Hình 1.9 Minh họa các loại đường đi.

Hai đỉnh 𝑢 và 𝑣 của đồ thị 𝐺 được gọi là liên thông (connected) nếu trong 𝐺 có một
đường đi sơ cấp từ 𝑢 đến 𝑣. Liên thông là một quan hệ tương đương tập hợp đỉnh 𝑉. Vì
vậy, 𝑉 có thể được phân hoạch thành các tập con khác rỗng 𝑉1 , 𝑉2 , … , 𝑉𝜔 sao cho hai đỉnh
𝑢 và 𝑣 liên thông khi và chỉ khi cả hai đỉnh 𝑢 và 𝑣 thuộc cùng một 𝑉𝑖 . Các đồ thị con
𝐺 [𝑉1 ], 𝐺 [𝑉2 ], … , 𝐺[𝑉𝜔 ] được gọi là các thành phần liên thông (connected components) của
𝐺. Nếu 𝐺 có đúng một thành phần liên thông thì ta nói 𝐺 liên thông (connected); ngược lại
ta nói 𝐺 không liên thông (disconnected). Ta ký hiệu số thành phần liên thông của 𝐺 bằng
𝜔 (𝐺 ).

Đồ thị 𝐺 trong Hình 1.10 có ba thành phần liên thông. Tập đỉnh của các thành phần
liên thông lần lượt là 𝑉1 = {𝑣1 , 𝑣2 , 𝑣3 , 𝑣4 }, 𝑉2 = {𝑣5 , 𝑣6 , 𝑣7 , 𝑣8 } và 𝑉3 = {𝑣9 , 𝑣10 }.

Hình 1.10 Minh họa thành phần liên thông

9
Chu trình (closed walk) là một đường đi có chiều dài dương và có đỉnh đầu và đỉnh
cuối trùng nhau. Chu trình đơn (closed trail) là một chu trình có các cạnh đôi một khác
nhau. Chu trình sơ cấp (cycle) là một chu trình đơn có các đỉnh đôi một khác nhau ngoại
trừ đỉnh đầu và đỉnh cuối.

Hình 1.11 Minh họa các loại chu trình

Xét đồ thị 𝐺 trong Hình 1.11, chu trình 𝐶1 = 𝑣1 𝑒1 𝑣2 𝑒6 𝑣6 𝑒7 𝑣1 𝑒1 𝑣2 𝑒1 𝑣1 không phải


là chu trình đơn. Chu trình 𝐶2 = 𝑣1 𝑒1 𝑣2 𝑒2 𝑣3 𝑒3 𝑣4 𝑒4 𝑣5 𝑒5 𝑣2 𝑒6 𝑣6 𝑒7 𝑣1 là một chu trình đơn
nhưng không phải là chu trình sơ cấp. Chu trình 𝐶3 = 𝑣1 𝑒1 𝑣2 𝑒6 𝑣6 𝑒7 𝑣1 là một chu trình sơ
cấp.

Định lý 1.2 Một đồ thị là lưỡng phân khi và chỉ khi nó không chứa chu trình sơ cấp có
độ dài lẻ.

Chứng minh

Giả sử rằng 𝐺 là lưỡng phân với phân hoạch (𝑋, 𝑌) và cho 𝐶 = 𝑣0 𝑣1 … 𝑣𝑘 𝑣0 là một
chu trình sơ cấp của 𝐺. Không mất tổng quát ta có thể giả định 𝑣0 ∈ 𝑋. Bởi vì 𝑣0 𝑣1 ∈ 𝐸 và
𝐺 là lưỡng phân, nên 𝑣1 ∈ 𝑌. Tương tự 𝑣2 ∈ 𝑋, và 𝑣2𝑖 ∈ 𝑋 nên 𝑣2𝑖+1 ∈ 𝑌. Vì 𝑣0 ∈ 𝑋, nên
𝑣𝑘 ∈ 𝑌. Như vậy 𝑘 = 2𝑖 + 1, do đó 𝐶 là chu trình sơ cấp có độ dài chẵn.

Để chứng minh điều ngược lại, ta chỉ cần chứng minh nó đúng với đồ thị liên thông.
Gọi 𝐺 là đồ thị liên thông không có chu trình sơ cấp có độ dài lẻ. Ta chọn một đỉnh 𝑢 tùy
ý và xác định một phân hoạch (𝑋, 𝑌) của 𝑉 bằng cách đặt

𝑋 = {𝑥 ∈ 𝑉 |𝑑 (𝑢, 𝑣 ) là chẵn},
𝑌 = {𝑦 ∈ 𝑉 |𝑑 (𝑢, 𝑣 ) là lẻ}

10
Ta sẽ chứng minh rằng hai đỉnh bất kỳ trong tập 𝑋 là không kề nhau, và trong tập 𝑌
cũng vậy. Gọi 𝑣 và 𝑤 là hai đỉnh bất kỳ trong tập 𝑋. Gọi 𝑃 là đường đi ngắn nhất từ 𝑢 đến
𝑣 và 𝑄 là đường đi ngắn nhất từ 𝑢 đến 𝑤. Gọi 𝑧 là điểm chung cuối cùng của 𝑃 và 𝑄, xem
Hình 1.12. Vì cả 𝑃 và 𝑄 đều là đường đi ngắn nhất nên đoạn đường đi từ 𝑢 đến 𝑧 trong 𝑃
và 𝑄 có độ dài bằng nhau. Gọi 𝑃1 là đường đi từ 𝑧 đến 𝑣 trong 𝑃 và 𝑄1 là đường đi từ 𝑧
đến 𝑤 trong 𝑄. Vì cả 𝑃 và 𝑄 đều có độ dài chẵn nên độ dài của 𝑃1 và 𝑄1 có cùng tính chẵn
lẻ. Nếu 𝑣 và 𝑤 kề nhau thì 𝑃1 𝑄1 𝑤𝑣 là một chu trình có độ dài lẻ, trái với giả thiết. Vậy
không có hai đỉnh nào ở trong tập 𝑋 kề nhau; tương tự, cũng không có hai đỉnh nào trong
tập 𝑌 kề nhau. □

Hình 1.12 Minh họa Định lý 1.2

1.6 Độ phức tạp tính toán


Độ phức tạp tính toán của một thuật toán thường được mô tả thông qua khái niệm
𝑂 lớn (big 𝑂). Nhà toán học người Đức Paul Bachmann là người đầu tiên đưa ra khái niệm
𝑂 lớn.

Cho 𝑓 và 𝑔 là hai hàm từ các tập số nguyên hoặc tập số thực đến tập số thực. Ta nói
𝑓(𝑥) là 𝑂(𝑔(𝑥)) nếu tồn tại hai hằng số 𝐶 và 𝑘 sao cho

|𝑓(𝑥)| ≤ 𝐶 |𝑔(𝑥)|

với mọi 𝑥 > 𝑘.

Vậy để chứng minh 𝑓(𝑥) là 𝑂(𝑔(𝑥)), ta chỉ cần chỉ ra hằng số 𝐶 và 𝑘 sao cho
|𝑓(𝑥)| ≤ 𝐶 |𝑔(𝑥)| với mọi 𝑥 > 𝑘. Tuy nhiên cặp hằng số 𝐶 và 𝑘 thỏa mãn điều kiện đó
không bao giờ là duy nhất. Hơn thế nữa, nếu đã có một cặp như vậy tồn tại thì sẽ có vô số
các cặp như thế. Nếu cặp số 𝐶 và 𝑘 thỏa mãn điều kiện trên thì cặp số 𝐶′ và 𝑘′ với 𝐶 ′ > 𝐶
và 𝑘 ′ > 𝑘 cũng thỏa mãn điều kiện trên vì |𝑓(𝑥)| ≤ 𝐶 |𝑔(𝑥)| ≤ 𝐶 ′ |𝑔(𝑥)| với mọi 𝑥 > 𝑘 >
𝑘′.

11
Ví dụ như với 𝑓(𝑥) = 𝑥 2 + 2𝑥 + 1 thì 0 ≤ 𝑓(𝑥) ≤ 𝑥 2 + 2𝑥 2 + 𝑥 2 = 4𝑥 2 với mọi
𝑥 > 1. Vậy theo định nghĩa, ta có thể kết luận rằng 𝑓(𝑥) là 𝑂(𝑥 2 ) với 𝐶 = 4 và 𝑘 = 1. Ta
có thể chứng minh 𝑓(𝑥) là 𝑂(𝑥 2 ) bằng cách khác. Với 𝑥 > 2 thì

0 ≤ 𝑥 2 + 2𝑥 + 1 ≤ 𝑥 2 + 𝑥 2 + 𝑥 2 = 3𝑥 2 .

Từ đó suy ra 𝑓(𝑥) là 𝑂(𝑥 2 ) với 𝐶 = 3 và 𝑘 = 2. Mặt khác, 𝑥 2 cũng là 𝑂(𝑥 2 + 2𝑥 + 1) vì

0 ≤ 𝑥 2 ≤ 𝑥 2 + 2𝑥 + 1, ∀𝑥 > 0

Ta nói hai hàm số 𝑓(𝑥) và 𝑔(𝑥) có cùng bậc nếu 𝑓(𝑥) là 𝑂(𝑔(𝑥)) và 𝑔(𝑥) là
𝑂(𝑓(𝑥)). Trong ví dụ trên thì 𝑓 (𝑥) = 𝑥 2 + 2𝑥 + 1 và 𝑔(𝑥) = 𝑥 2 là hai hàm có cùng bậc.

Ta thấy rằng nếu 𝑓(𝑥) là 𝑂(𝑔(𝑥)) và ℎ(𝑥) là hàm có trị tuyệt đối lớn hơn 𝑔(𝑥) đối
với các giá trị đủ lớn của 𝑥 thì 𝑓(𝑥) là 𝑂(ℎ(𝑥)). Nói cách khác, hàm 𝑔(𝑥) trong quan hệ
𝑓(𝑥) là 𝑂(𝑔(𝑥)) có thể thay thế bằng một hàm có trị tuyệt đối lớn hơn. Ví dụ như 7𝑥 2 là
𝑂(𝑥 3 ) vì 7𝑥 2 < 𝑥 3 với mọi 𝑥 > 7 nhưng 𝑥 3 không phải là 𝑂(7𝑥 2 ) vì không tồn tại các số
𝐶 và 𝑘 để 𝑥 3 < 𝐶(7𝑥 2 ) với mọi 𝑥 > 𝑘.

Định lý 1.3 Cho 𝑓(𝑥) = 𝑎𝑛 𝑥 𝑛 + 𝑎𝑛−1 𝑥 𝑛−1 + ⋯ + 𝑎1 𝑥 + 𝑎0 với 𝑎0 , 𝑎1 , … , 𝑎𝑛 là các số


thực. Khi đó 𝑓(𝑥) là 𝑂(𝑥 𝑛 ).

Chứng minh

Ta dùng bất đẳng thức tam giác nếu 𝑥 > 1, ta có

|𝑓 (𝑥)| = |𝑎𝑛 𝑥 𝑛 + 𝑎𝑛−1 𝑥 𝑛−1 + ⋯ + 𝑎1 𝑥 + 𝑎0 |


≤ |𝑎𝑛 |𝑥 𝑛 + |𝑎𝑛−1 |𝑥 𝑛−1 + ⋯ + |𝑎1 |𝑥 + |𝑎0 |
|𝑎𝑛−1 | |𝑎1 | |𝑎0 |
= 𝑥 𝑛 (|𝑎𝑛 | + + ⋯ + 𝑛−1 + 𝑛 )
𝑥 𝑥 𝑥
≤ 𝑥 𝑛 (|𝑎𝑛 | + |𝑎𝑛−1 | + ⋯ + |𝑎1 | + |𝑎0 |)

Điều này chứng tỏ rằng

|𝑓(𝑥)| ≤ 𝐶𝑥 𝑛

ở đây 𝐶 = |𝑎𝑛 | + |𝑎𝑛−1 | + ⋯ + |𝑎1 | + |𝑎0 | với mọi 𝑥 > 1. Từ đó suy ra 𝑓(𝑥) là 𝑂(𝑥 𝑛 ).

12
Ta có thể dùng khái niệm 𝑂 lớn để đánh giá tổng của 𝑛 số nguyên dương đầu tiên
như sau

1 + 2 + 3 + ⋯ + 𝑛 ≤ 𝑛 + 𝑛 + 𝑛 + ⋯ + 𝑛 ≤ 𝑛. 𝑛 = 𝑛2

với mọi 𝑛 ≥ 1. Như vậy 1 + 2 + 3 + ⋯ + 𝑛 là 𝑂(𝑛2 ).

Ta cũng có thể dùng khái niệm 𝑂 lớn để đánh giá hàm giai thừa và hàm logarit của
hàm giai thừa như sau

𝑛! = 1.2.3 … 𝑛 ≤ 𝑛. 𝑛. 𝑛 … 𝑛 ≤ 𝑛𝑛

Điều này chứng tỏ 𝑛! là 𝑂(𝑛𝑛 ). Lấy logarit hai vế của bất đẳng thức vừa tìm được ở trên
ta được

log(𝑛!) ≤ log(𝑛𝑛 ) = 𝑛 log 𝑛

suy ra log(𝑛!) là 𝑂(𝑛 log 𝑛). Đánh giá này đóng vai trò quan trọng trong việc phân tích số
các bước được dùng trong các thủ tục sắp xếp.

Nhiều thuật toán được tạo bởi hai hay nhiều thủ tục con tách rời nhau. Ta cần có
đánh giá 𝑂 lớn cho số bước mà mỗi thủ tục con đã sử dụng, rồi sau đó tổ hợp các đánh giá
đó lại.

Định lý 1.4 Nếu 𝑓1 (𝑥) là 𝑂(𝑔1 (𝑥)) và 𝑓2 (𝑥) là 𝑂(𝑔2 (𝑥)) thì 𝑓1 (𝑥) + 𝑓2 (𝑥) là
𝑂(max(|𝑔1 (𝑥)|, |𝑔2 (𝑥)|)).

Chứng minh

Theo định nghĩa của khái niệm 𝑂 lớn thì tồn tại các hằng số 𝐶1 , 𝐶2 , 𝑘1 và 𝑘2 sao cho

|𝑓1 (𝑥)| ≤ 𝐶1 |𝑔1 (𝑥)| với mọi 𝑥 > 𝑘1

|𝑓2 (𝑥)| ≤ 𝐶2 |𝑔2 (𝑥)| với mọi 𝑥 > 𝑘2

Để đánh giá tổng của 𝑓1 (𝑥) và 𝑓2 (𝑥), ta chú ý rằng

|𝑓1 (𝑥) + 𝑓2 (𝑥)| ≤ |𝑓1 (𝑥)| + |𝑓2 (𝑥)|

Đặt 𝐶 = max(𝐶1 , 𝐶2 ), 𝑘 = max(𝑘1 , 𝑘2 ) và 𝑔(𝑥) = max(|𝑔1 (𝑥)|, 𝑔2 (𝑥)), khi đó

13
|𝑓1 (𝑥)| + |𝑓2 (𝑥)| ≤ 𝐶1 |𝑔1 (𝑥)| + 𝐶2 |𝑔2 (𝑥)|
≤ 𝐶 |𝑔(𝑥)| + 𝐶 |𝑔(𝑥)| = 2𝐶 |𝑔(𝑥)|

với mọi 𝑥 > 𝑘. Điều này chứng tỏ rằng 𝑓1 (𝑥) + 𝑓2 (𝑥) là 𝑂(max(|𝑔1 (𝑥)|, |𝑔2 (𝑥)|)). □

Định lý 1.5 Nếu 𝑓1 (𝑥) là 𝑂(𝑔1 (𝑥)) và 𝑓2 (𝑥) là 𝑂(𝑔2 (𝑥)) thì 𝑓1 (𝑥). 𝑓2 (𝑥) là
𝑂(𝑔1 (𝑥). 𝑔2 (𝑥)).

Chứng minh

Với các ký hiệu như trong chứng minh của Định lý 1.4 thì

|𝑓1 (𝑥). 𝑓2 (𝑥)| = |𝑓1 (𝑥)||𝑓2 (𝑥)| ≤ 𝐶1 |𝑔1 (𝑥)|. 𝐶2 |𝑔2 (𝑥)|=𝐶1 𝐶2 |𝑔1 (𝑥). 𝑔2 (𝑥)|

với mọi 𝑥 > 𝑘. Điều này chứng tỏ rằng 𝑓1 (𝑥). 𝑓2 (𝑥) là 𝑂(𝑔1 (𝑥). 𝑔2 (𝑥)). □

1.7 Tìm đường đi ngắn nhất


Ta gán mỗi cạnh 𝑒 của 𝐺 với một số thực w(e), được gọi là trọng số (weight) của 𝑒.
Đồ thị 𝐺 cùng với các trọng số trên các cạnh của nó được gọi là đồ thị có trọng số (weighted
graph). Đồ thị có trọng số thường xuất hiện trong các ứng dụng của lý thuyết đồ thị. Trong
đồ thị tình bạn, trọng số có thể dùng để biểu thị mức độ thân thiết của tình bạn; trong đồ
thị truyền thông, trọng số có thể đại diện cho chi phí xây dựng hoặc bảo trì của các liên kết.

Nếu 𝐻 là một đồ thị con của một đồ thị có trọng số, thì trọng số của 𝐻 là tổng trọng
số trên tất cả các cạnh của 𝐻. Có nhiều bài toán tối ưu liên quan đến việc tìm một đồ thị
con 𝐻 của một đồ thị có trọng số 𝐺 sao cho trọng số của 𝐻 nhỏ nhất (hoặc lớn nhất). Bài
toán đường đi ngắn nhất (shortest path problem) là một trong các bài toán như vậy: cho
một mạng lưới đường ray kết nối các tỉnh thành khác nhau, xác định đường đi ngắn nhất
giữa hai tỉnh thành cho trước trong mạng lưới này. Trong bài toán này, ta phải tìm trong
một đồ thị có trọng số một đường đi có trọng số nhỏ nhất kết nối hai đỉnh 𝑢0 và 𝑣0 cho
trước; trọng số đại diện cho khoảng cách đường sắt giữa các thị trấn được kết nối trực tiếp
với nhau và do đó không âm. Đường đi được chỉ ra trong đồ thị của Hình 1.13 là đường đi
có trọng số nhỏ nhất từ 𝑢0 đến 𝑣0 .

14
Hình 1.13 Minh họa đường đi ngắn nhất

Bây giờ ta trình bày một thuật toán để giải bài toán đường đi ngắn nhất. Ta sẽ gọi
trọng số của một đường đi trong đồ thị có trọng số là chiều dài của đường đi đó; tương tự
ta gọi trọng số nhỏ nhất của đường đi từ 𝑢 đến 𝑣 là khoảng cách giữa 𝑢 và 𝑣 và ký hiệu là
𝑑 (𝑢, 𝑣).

Bài toán đường đi ngắn nhất trong một đồ thị tổng quát có thể đưa về bài toán đường
đi ngắn nhất trong một đơn đồ thị. Thật vậy, trong đường đi ngắn nhất sẽ có vòng nên ta
có xóa tất cả các vòng khỏi đồ thị 𝐺. Hơn nữa, nếu trong 𝐺 có các cạnh bội thì ta chỉ cần
giữ lại cạnh có trọng số nhỏ nhất và bỏ các cạnh bội còn lại. Như vậy ta có thể giả định
rằng 𝐺 là một đơn đồ thị. Ta cũng giả định rằng tất cả các trọng số đều dương. Ta quy ước
rằng 𝑤(𝑢𝑣 ) = ∞ nếu 𝑢𝑣 ∉ 𝐸.

Dijkstra đã tìm ra thuật toán giải bài toán đường đi ngắn nhất vào năm 1959, Whiting
và Hillier cũng độc lập tìm ra thuật toán này vào năm 1960. Thuật toán này không chỉ tìm
được đường ngắn nhất từ 𝑢0 đến 𝑣0 mà còn có thể tìm ra đường đi ngắn nhất từ 𝑢0 đến tất
cả các đỉnh khác của 𝐺. Ý tưởng cơ bản như sau.

Giả sử 𝑆 là một tập hợp con thực sự của 𝑉 sao cho 𝑢0 ∈ 𝑆. Ta ký hiệu 𝑆̅ = 𝑉 ∖ 𝑆.
Nếu 𝑃 = 𝑢0 . . . 𝑢̅𝑣̅ là đường đi ngắn nhất từ 𝑢0 đến 𝑆̅ thì rõ ràng 𝑢̅ ∈ 𝑆 và đoạn đường từ
𝑢0 đến 𝑢̅ của 𝑃 phải là đường đi ngắn nhất từ 𝑢0 đến 𝑢̅ vì thế

𝑑 (𝑢0 , 𝑣̅ ) = 𝑑 (𝑢0 , 𝑢̅) + 𝑤(𝑢̅𝑣̅ )

và khoảng cách từ 𝑢0 đến 𝑆̅ được cho bởi công thức

15
𝑑 (𝑢0 , 𝑆0̅ ) = min{𝑑 (𝑢0 , 𝑢) + 𝑤(𝑢𝑣 )} (1.1)
𝑢∈𝑆
𝑣∈𝑆̅

Công thức này là cơ sở của thuật toán Dijkstra. Bắt đầu với tập hợp 𝑆0 = {𝑢0 }, ta
xây dựng một dãy 𝑆0 ⊂ 𝑆1 ⊂. . . ⊂ 𝑆𝑛−1 các tập hợp con của 𝑉 sao cho ở cuối giai đoạn 𝑖,
ta tìm được tất cả các đường đi ngắn nhất từ 𝑢0 đến tất cả các đỉnh trong 𝑆𝑖 .

Bước đầu tiên là xác định đỉnh gần với 𝑢0 nhất, giả sử đỉnh này là 𝑢1 . Khi đó,

𝑑 (𝑢0 , 𝑆0̅ ) = 𝑚𝑖𝑛{𝑑 (𝑢0 , 𝑢) + 𝑤 (𝑢𝑣 )} = 𝑚𝑖𝑛 {𝑤(𝑢0 𝑣 )} = 𝑤(𝑢0 𝑢1 )


𝑢∈𝑆0 𝑣∈𝑆0̅
𝑣∈𝑆0̅

Bây giờ ta đặt 𝑆1 = {𝑢0 , 𝑢1 } và 𝑃1 là đường đi 𝑢0 𝑢1 . Khi đó, 𝑃1 chính là đường ngắn
nhất từ 𝑢0 đến 𝑢1 . Tổng quát, nếu 𝑆𝑘 = {𝑢0 , 𝑢1 , . . . , 𝑢𝑘 } và các đường đi ngắn nhất từ 𝑢0
đến 𝑢1 , 𝑢2 , … , 𝑢𝑘 tương ứng là 𝑃1 , 𝑃2 , . . . , 𝑃𝑘 đã biết, ta có thể tính được 𝑑 (𝑢0 , 𝑆𝑘̅ ) bằng
công thức (1.1) và chọn một đỉnh 𝑢𝑘+1 ∈ 𝑆𝑘̅ sao cho 𝑑 (𝑢0 , 𝑢𝑘+1 ) = 𝑑 (𝑢0 , 𝑆𝑘̅ ). Theo công
thức (1.1), 𝑑(𝑢0 , 𝑢𝑘+1 ) = 𝑑(𝑢0 , 𝑢𝑗 ) + 𝑤(𝑢𝑗 𝑢𝑘+1 ) với 𝑗 ≤ 𝑘; ta tìm được đường đi ngắn
nhất 𝑢0 đến 𝑢𝑘+1 bằng cách thêm cạnh 𝑢𝑗 𝑢𝑘+1 vào đường đi 𝑃𝑗 .

Ta minh họa quy trình này bằng cách xét đồ thị có trọng số trong Hình 1.14. Đường
đi ngắn nhất từ 𝑢0 đến các đỉnh còn lại được xác định theo bảy giai đoạn. Ở mỗi giai đoạn,
các đỉnh 𝑢 được tô đen là các đỉnh đã tìm được đường đi ngắn nhất từ 𝑢0 và ta dùng khoảng
cách 𝑑 (𝑢0 , 𝑢) để gán nhãn cho các đỉnh này; ban đầu 𝑢0 được gắn nhãn 0. Các đường đi
ngắn nhất được biểu thị bằng các đường in đậm. Lưu ý rằng, ở mỗi giai đoạn, các đường
đi ngắn nhất này tạo thành một đồ thị liên thông không có chu trình; một đồ thị như vậy
được gọi là một cây, và ta có thể xem thuật toán như một quá trình “phát triển cây”. Cây
cuối cùng, trong Hình 1.14h, có tính chất là, với mỗi đỉnh 𝑣, đường đi từ 𝑢0 đến 𝑣 là một
đường đi ngắn nhất trong 𝐺.

16
Hình 1.14 Minh họa ý tưởng thuật toán Dijkstra

Trong thuật toán Dijkstra, mỗi đỉnh v mang nhãn 𝑙 (𝑣 ) là một cận trên của 𝑑(𝑢0 , 𝑣).
Ban đầu 𝑙(𝑢0 ) = 0 và 𝑙 (𝑣 ) = ∞ với 𝑣 ≠ 𝑢0 (Trong tính toán thực tế, ta có thể thay thế ∞
bằng một số đủ lớn). Khi tiến hành thuật toán, ta sửa đổi các nhãn này sao cho, ở cuối giai
đoạn i,

𝑙 (𝑢) = 𝑑(𝑢0 , 𝑢) với 𝑢 ∈ 𝑆𝑖

𝑙 (𝑣 ) = 𝑚𝑖𝑛 {𝑑(𝑢0 , 𝑢) + 𝑤(𝑢𝑣)} với 𝑣 ∈ 𝑆𝑖̅


𝑢∈𝑆𝑖−1

Thuật toán Dijkstra

17
ĐẦU VÀO: một đồ thị có trọng số 𝐺 và một đỉnh 𝑢0 .

ĐẦU RA: độ dài đường đi ngắn nhất từ 𝑢0 đến tất cả các đỉnh còn lại.

Đặt 𝑙(𝑢0 ) = 0, 𝑙(𝑣 ) = ∞ đối với 𝑣 ≠ 𝑢0 , 𝑆0 = {𝑢𝑜 } và 𝑖 = 0

While 𝑖 < 𝑛 − 1 do

Đặt 𝑖 ≔ 𝑖 + 1

For 𝑣 ∈ 𝑆𝑖̅ do

Đặt 𝑙(𝑣 ) ≔ min{𝑙 (𝑣 ), 𝑙(𝑢𝑖 ) + 𝑤(𝑢𝑖 𝑣)}

End for

Tìm đỉnh có nhãn bằng min {𝑙(𝑣 )} và đặt đỉnh này là 𝑢𝑖+1
𝑣∈𝑆𝑖̅

Đặt 𝑆𝑖+1 : = 𝑆𝑖 ∪ {𝑢𝑖 +1 }

End while

Trả về {𝑙(𝑣)|𝑣 ∈ 𝑉(𝐺)}

Khi thuật toán kết thúc, giá trị cuối cùng của nhãn 𝑙(𝑣) là khoảng cách từ 𝑢0 đến 𝑣.
(Nếu ta chỉ muốn xác định khoảng cách từ 𝑢0 đến một đỉnh 𝑣0 cho trước, ta sẽ dừng ngay
khi một 𝑢𝑖 nào đó bằng 𝑣0 ). Hình 1.15 thể hiện lưu đồ của thuật toán.

Như đã mô tả ở trên, thuật toán của Dijkstra chỉ tìm khoảng cách từ 𝑢0 đến tất cả
các đỉnh khác, và không phải tìm đường đi ngắn nhất. Tuy nhiên, ta có thể dễ dàng tìm
được các đường ngắn nhất này bằng cách lưu vết các đỉnh phía trước của các đỉnh trong
cây.

18
Hình 1.15 Lưu đồ thuật toán Dijkstra

19
Áp dụng thuật toán Dijkstra để tìm đường đi ngắn nhất từ đỉnh 𝑢0 đến đỉnh 𝑣0 trong
đồ thị 𝐺 ở Hình 1.16 như sau.

Hình 1.16 Minh họa thuật toán tìm đường đi ngắn nhất

Ban đầu, nhãn của các đỉnh như sau: 𝑙 (𝑢0 ) = 0, 𝑙 (𝑣1 ) = ∞, 𝑙(𝑣2 ) = ∞, 𝑙 (𝑣3 ) =
∞, 𝑙 (𝑣4 ) = ∞ và 𝑙 (𝑣0 ) = ∞, ngoài ra ta còn đặt 𝑆0 = {𝑢0 } và 𝑖 = 0.

Vì 𝑖 < 𝑛 − 1 nên ta đặt 𝑖 ≔ 𝑖 + 1 = 1.

Ta có 𝑆0̅ = {𝑣1 , 𝑣2 , 𝑣3 , 𝑣4 , 𝑣0 }, ta cập nhật nhãn của các đỉnh trong 𝑆0̅ như sau

𝑙 (𝑣1 ) ≔ min{𝑙 (𝑣1 ), 𝑙(𝑢0 ) + 𝑤 (𝑢0 𝑣1 )} = min{∞, 0 + 6} = 6


𝑙 (𝑣2 ) ≔ min{𝑙(𝑣2 ), 𝑙 (𝑢0 ) + 𝑤(𝑢0 𝑣2 )} = min{∞, 0 + ∞} = ∞
𝑙 (𝑣3 ) ≔ min{𝑙(𝑣3 ), 𝑙 (𝑢0 ) + 𝑤(𝑢0 𝑣3 )} = min{∞, 0 + 1} = 1
𝑙 (𝑣4 ) ≔ min{𝑙 (𝑣4 ), 𝑙(𝑢0 ) + 𝑤 (𝑢0 𝑣4 )} = min{∞, 0 + ∞} = ∞
𝑙 (𝑣0 ) ≔ min{𝑙(𝑣0 ), 𝑙 (𝑢0 ) + 𝑤(𝑢0 𝑣0 )} = min{∞, 0 + ∞} = ∞

Ta thấy trong 𝑆0̅ , đỉnh 𝑣3 là đỉnh có nhãn nhỏ nhất nên ta đặt 𝑆1 = 𝑆0 ∪ {𝑣3 } =
{𝑢0 , 𝑣3 }.

Vì 𝑖 < 𝑛 − 1 nên ta đặt 𝑖 ≔ 𝑖 + 1 = 2.

Ta có 𝑆1̅ = {𝑣1 , 𝑣2 , 𝑣4 , 𝑣0 }, ta cập nhật nhãn của các đỉnh trong 𝑆1̅ như sau

𝑙(𝑣1 ) ≔ min{𝑙(𝑣1 ), 𝑙 (𝑣3 ) + 𝑤 (𝑣3 𝑣1 )} = min{6,1 + 6} = 6


𝑙(𝑣2 ) ≔ min{𝑙 (𝑣2 ), 𝑙(𝑣3 ) + 𝑤(𝑣3 𝑣2 )} = min{∞, 1 + 8} = 9
𝑙(𝑣4 ) ≔ min{𝑙(𝑣4 ), 𝑙 (𝑣3 ) + 𝑤 (𝑣3 𝑣4 )} = min{∞, 1 + 7} = 8
𝑙(𝑣0 ) ≔ min{𝑙 (𝑣0 ), 𝑙(𝑣3 ) + 𝑤(𝑣3 𝑣0 )} = min{∞, 1 + ∞} = ∞

Ta thấy trong 𝑆1̅ , đỉnh 𝑣1 là đỉnh có nhãn nhỏ nhất nên ta đặt 𝑆2 = 𝑆1 ∪ {𝑣1 } =
{𝑢0 , 𝑣3 , 𝑣1 }.

20
Vì 𝑖 < 𝑛 − 1 nên ta đặt 𝑖 ≔ 𝑖 + 1 = 3.

Ta có 𝑆2̅ = {𝑣2 , 𝑣4 , 𝑣0 }, ta cập nhật nhãn của các đỉnh trong 𝑆2̅ như sau

𝑙 (𝑣2 ) ≔ min{𝑙(𝑣2 ), 𝑙 (𝑣1 ) + 𝑤(𝑣1 𝑣2 )} = min{9, 6 + 6} = 9


𝑙 (𝑣4 ) ≔ min{𝑙 (𝑣4 ), 𝑙 (𝑣1 ) + 𝑤 (𝑣1 𝑣4 )} = min{8, 6 + 3} = 8
𝑙 (𝑣0 ) ≔ min{𝑙(𝑣0 ), 𝑙 (𝑣1 ) + 𝑤(𝑣1 𝑣0 )} = min{∞, 6 + ∞} = ∞

Ta thấy trong 𝑆2̅ , đỉnh 𝑣4 là đỉnh có nhãn nhỏ nhất nên ta đặt 𝑆3 = 𝑆2 ∪ {𝑣4 } =
{𝑢0 , 𝑣3 , 𝑣1 , 𝑣4 }.

Vì 𝑖 < 𝑛 − 1 nên ta đặt 𝑖 ≔ 𝑖 + 1 = 4.

Ta có 𝑆3̅ = {𝑣2 , 𝑣0 }, ta cập nhật nhãn của các đỉnh trong 𝑆3̅ như sau

𝑙 (𝑣2 ) ≔ min{𝑙(𝑣2 ), 𝑙 (𝑣4 ) + 𝑤 (𝑣4 𝑣2 )} = min{9, 8 + 2} = 9


𝑙 (𝑣0 ) ≔ min{𝑙(𝑣0 ), 𝑙 (𝑣4 ) + 𝑤(𝑣4 𝑣0 )} = min{∞, 8 + 5} = 13

Ta thấy trong 𝑆3̅ , đỉnh 𝑣2 là đỉnh có nhãn nhỏ nhất nên ta đặt 𝑆4 = 𝑆3 ∪ {𝑣2 } =
{𝑢0 , 𝑣3 , 𝑣1 , 𝑣4 , 𝑣2 }.

Vì 𝑖 < 𝑛 − 1 nên ta đặt 𝑖 ≔ 𝑖 + 1 = 5.

Ta có 𝑆4̅ = {𝑣0 }, ta cập nhật nhãn của các đỉnh trong 𝑆4̅ như sau

𝑙 (𝑣0 ) ≔ min{𝑙 (𝑣0 ), 𝑙 (𝑣2 ) + 𝑤(𝑣2 𝑣0 )} = min{13,9 + 1} = 10

Ta thấy trong 𝑆4̅ , đỉnh 𝑣0 là đỉnh có nhãn nhỏ nhất nên ta đặt 𝑆5 = 𝑆4 ∪ {𝑣0 } =
{𝑢0 , 𝑣3 , 𝑣1 , 𝑣4 , 𝑣2 , 𝑣0 }.

Vì 𝑖 = 𝑛 − 1 nên thuật toán kết thúc.

Trả về hàm 𝑙 như trong Bảng 1.1.


Bảng 1.1 Bảng giá trị của hàm 𝑙

Đỉnh 𝑢0 𝑣1 𝑣2 𝑣3 𝑣4 𝑣0

𝑙 0 6 9 1 8 10

Để tìm được đường đi ngắn nhất từ 𝑢0 đến 𝑣0 trong đồ thị ở Hình 1.16, ta áp dụng
thuật toán Dijkstra kết hợp với lưu vết, xem Bảng 1.2. Trong bảng này ta dùng ký hiệu
21
(𝑎, 𝑏) ở dòng 𝑣 cột giai đoạn 𝑗 để chỉ 𝑙(𝑣 ) = 𝑎 và đỉnh liền trước của 𝑣 là 𝑏, nếu 𝑣 không
có đỉnh liền trước thì ta dùng ký hiệu ⊥ ở vị trí 𝑏. Dấu ∗ ở dòng 𝑣 để chỉ đỉnh 𝑣 được thêm
vào 𝑆.
Bảng 1.2 Minh họa thuật toán Dijkstra kết hợp lưu vết

Đỉnh Giai đoạn 0 Giai đoạn 1 Giai đoạn 2 Giai đoạn 3 Giai đoạn 4 Giai đoạn 5

𝑢0 (0, ⊥)∗

𝑣1 (∞, ⊥) (6, 𝑢0 ) (6, 𝑢0 )∗

𝑣2 (∞, ⊥) (∞, ⊥) (9, 𝑣3 ) (9, 𝑣3 ) (9, 𝑣3 )∗

𝑣3 (∞, ⊥) (1, 𝑢0 )∗

𝑣4 (∞, ⊥) (∞, ⊥) (8, 𝑣3 ) (8, 𝑣3 )∗

𝑣0 (∞, ⊥) (∞, ⊥) (∞, ⊥) (∞, ⊥) (13, 𝑣4 ) (10, 𝑣2 )∗

Ta ký hiệu 𝑃(𝑢, 𝑣 ) là đường đi ngắn nhất từ 𝑢 đến 𝑣. Phần tử (10, 𝑣2 )∗ ở dòng 𝑣0


trong Bảng 1.2 cho ta biết 𝑃(𝑢0 , 𝑣0 ) có độ dài bằng 10 và 𝑃(𝑢0 , 𝑣0 ) = 𝑃(𝑢0 , 𝑣2 ) ∪ 𝑣2 𝑣0 .
Phần tử (9, 𝑣3 )∗ ở dòng 𝑣2 cho ta biết 𝑃(𝑢0 , 𝑣2 ) = 𝑃(𝑢0 , 𝑣3 ) ∪ 𝑣3 𝑣2 . Phần tử (1, 𝑢0 )∗ ở
dòng 𝑣3 cho ta biết 𝑃 (𝑢0 , 𝑣3 ) = 𝑃(𝑢0 , 𝑢0 ) ∪ 𝑢0 𝑣3 . Vậy 𝑃(𝑢0 , 𝑣0 ) = 𝑢0 𝑣3 𝑣2 𝑣0 .

Thuật toán Dijkstra có độ phức tạp đa thức. Thật vậy, các tính toán trong các hộp 2
và 3 của lưu đồ trong tất cả các vòng lặp, ta cần tổng cộng 𝑛(𝑛 − 1)/2 phép cộng và
𝑛(𝑛 − 1) phép so sánh. Dreyfus (1969) đã đưa ra một kỹ thuật cần tổng cộng (𝑛 − 1)2
phép so sánh để xác định một đỉnh cho trước có thuộc vào 𝑆̅ hay không (hộp số 1). Do đó,
nếu ta xem một phép so sánh và một phép cộng là một đơn vị tính toán cơ bản, tổng số
phép tính cần thiết cho thuật toán này là khoảng (5𝑛2 )/2, và do đó có cùng bậc với 𝑛2 .
(Ta nói một hàm 𝑓(𝑛, 𝜀) có cùng bậc hàm 𝑔( 𝑛, 𝜀) nếu tồn tại một hằng số dương 𝑐 sao cho
𝑓(𝑛, 𝜀))/(𝑔 (𝑛, 𝜀) ≤ 𝑐 với mọi 𝑛 và 𝜀).

22
Thuật toán Dijkstra có thể tìm được độ dài đường đi ngắn nhất từ một đỉnh cho trước
đến tất cả các đỉnh còn lại của đồ thị. Nếu ta muốn tìm được độ dài đường đi ngắn nhất
giữa hai cặp đỉnh bất kỳ trong đồ thị thì ta có thể dùng thuật toán Floyd-Warshall.

Thuật toán Floyd-Warshall

ĐẦU VÀO: Một đơn đồ thị 𝐺 với hàm trọng số 𝑤

ĐẦU RA: Độ dài đường đi ngắn nhất giữa hai cặp đỉnh bất kỳ

Ta đặt 𝑑 (𝑖, 𝑖) ≔ 0 với mọi 1 ≤ 𝑖 ≤ 𝑛.

Với 𝑖 ≠ 𝑗, nếu 𝑣𝑖 𝑣𝑗 là một cạnh của 𝐺 thì ta đặt 𝑑 (𝑖, 𝑗) ≔ 𝑤(𝑣𝑖 𝑣𝑗 ), ngược 𝑣𝑖 𝑣𝑗 không
phải là một cạnh của 𝐺 thì ta đặt 𝑑 (𝑖, 𝑗): = ∞.

Cho 𝑘 nhận lần lượt nhận các giá trị từ 1 đến 𝑛

Cho 𝑖 nhận lần lượt các giá trị từ 1 đến 𝑛

Cho 𝑗 nhận lần lượt các giá trị từ 1 đến 𝑛

𝑑 (𝑖, 𝑗) = min{𝑑 (𝑖, 𝑗), 𝑑 (𝑖, 𝑘 ) + 𝑑 (𝑘, 𝑗)}

Trả về 𝑑(𝑖, 𝑗).

Sơ đồ trong Hình 1.17 cho ta cái nhìn trực quan về cách cập nhật 𝑑(𝑖, 𝑗) với mỗi giá
trị của 𝑘. Nếu 𝑑 (𝑖, 𝑘 ) + 𝑑 (𝑘, 𝑗) < 𝑑(𝑖, 𝑗) thì ta đặt 𝑑 (𝑖, 𝑗) = 𝑑 (𝑖, 𝑘 ) + 𝑑 (𝑘, 𝑗).

Hình 1.17 Minh họa cập nhật khoảng cách dạng ma trận

23
Ta áp dụng thuật toán Floyd-Warshall để tìm đường đi ngắn nhất giữa hai cặp đỉnh
bất kỳ trong đồ thị 𝐺 ở Hình 1.18. Các bước của thuật toán được mô tả thông qua ma trận.
Ma trận 𝐴0 thể hiện các giá trị 𝑑(𝑖, 𝑗) ban đầu. Ma trận 𝐴𝑘 với 1 ≤ 𝑘 ≤ 4 thể hiện các giá
trị 𝑑(𝑖, 𝑗) với mỗi giá trị của 𝑘.

Hình 1.18 Minh họa thuật toán Floyd-Warshall

0 4 2 ∞
4 0 7 9
𝐴0 = ( ),
2 7 0 2
∞ 9 2 0
0 4 2 ∞ 0 4 2 13
4 0 6 9 4 0 6 9
𝐴1 = ( ) , 𝐴2 = ( ),
2 6 0 2 2 6 0 2
∞ 9 2 0 13 9 2 0
0 4 2 4 0 4 2 4
4 0 6 8 4 0 6 8
𝐴3 = ( ) , 𝐴4 = ( ).
2 6 0 2 2 6 0 2
4 8 2 0 4 8 2 0
Từ ma mận 𝐴4 , ta có được độ dài đường đi ngắn nhất giữa các cặp đỉnh.

Dễ thấy độ phức tạp của thuật toán Floyd-Warshall là 𝑂(𝑛3 ). Đối với đồ thị dày đặc
(đồ thị mà hầu hết các đỉnh được nối với nhau) thì thuật toán Floyd-Warshall là một lựa
chọn tốt. Ngược lại, nếu đồ thị thưa (đồ thị có số cạnh nhỏ hơn rất nhiều so với bình phương
của số cạnh) thì thuật toán Dijsktra có ưu thế hơn.

24
BÀI TẬP CHƯƠNG 1

Bài 1. Liệt kê hai tình huống từ cuộc sống hàng ngày mà có thể mô hình bằng đồ thị.

Bài 2. Chứng minh rằng nếu 𝐺 là một đơn đồ thị có 𝑛 đỉnh và 𝜀 cạnh thì 𝜀 ≤ 𝐶𝑛2 .

Bài 3. Chứng minh rằng nếu 𝐺 là một đơn đồ thị có 𝑛 đỉnh và 𝜀 cạnh và 𝜀 = 𝐶𝑛2 thì 𝐺 là đồ
thị đầy đủ.

Bài 4. Hãy lập ma trận liền kề và ma trận liên thuộc cho các đồ thị sau

Bài 5. a) Mô tả cách tìm ma trận 𝑀(𝐺 − 𝐸′) và 𝑀(𝐺 − 𝑉 ′ ) từ ma trận của 𝑀(𝐺).

b) Mô tả cách tìm ma trận 𝐴(𝐺 − 𝑉 ′ ) từ ma trận của 𝐴(𝐺).

Bài 6. a) Chứng minh rằng nếu hai đồ thị 𝐺 và 𝐻 đẳng cấu với nhau thì số cạnh và số đỉnh
của chúng bằng nhau.

b) Cho một ví dụ để chỉ ra điều ngược lại không đúng.

Bài 7. Chứng minh rằng hai đồ thị sau đẳng cấu với nhau

25
Bài 8. Chứng minh rằng có 11 đơn đồ thị có 4 đỉnh mà không đẳng cấu với nhau.

Bài 9. Chứng minh rằng hai đồ thị sau không đẳng cấu với nhau

Bài 10. Xét xem các đồ thị sau có là đồ thị lưỡng phân không?

Bài 11. Chứng minh rằng số cạnh của một đồ thị lưỡng phân đầy đủ 𝐾𝑚,𝑛 là 𝑚𝑛.

Bài 12. Chứng minh rằng nếu 𝐺 là một đơn đồ thị lưỡng phân thì 𝜀 ≤ 𝑛2 /4.

Bài 13. Chứng minh rằng nếu một đồ thị lưỡng phân 𝑘-đều với tập đỉnh có phân hoạch là
(𝑋, 𝑌) thì số đỉnh trong hai tập 𝑋 và 𝑌 là bằng nhau.

26
Bài 14. Chứng minh rằng trong một nhóm gồm ít nhất hai người thì luôn có hai người có
cùng số bạn trong nhóm này.

Bài 15. Đồ thị cạnh của một đồ thị 𝐺 là một đồ thị với tập đỉnh là 𝐸(𝐺) và hai đỉnh trong
tập 𝐸(𝐺) kề nhau khi và chỉ khi chúng là cạnh kề nhau trong 𝐺. Chứng minh rằng nếu 𝐺
là một đơn đồ thị thì đồ thị cạnh của 𝐺 sẽ có 𝜀(𝐺) đỉnh và Σ𝑣∈𝑉(𝐺) 𝐶𝑑2𝐺(𝑣) cạnh.

Bài 16. Chứng minh rằng 𝐺 liên thông khi và chỉ khi mọi phân hoạch của 𝑉 thành hai tập
khác rỗng 𝑉1 và 𝑉2 thì luôn có một cạnh với một đầu mút nằm trong 𝑉1 và một đầu mút
nằm trong 𝑉2 .
2
Bài 17. Chứng minh rằng nếu 𝐺 là đơn đồ thị và 𝜀 > 𝐶𝑛−1 thì 𝐺 liên thông.

Bài 18. Chứng minh rằng nếu 𝐺 không liên thông thì đồ thị bù của 𝐺 sẽ liên thông.

Bài 19. Chứng minh rằng hai đường đi sơ cấp dài nhất bất kỳ trong một đồ thị liên thông
sẽ có một đỉnh chung.

Bài 20. Chứng minh rằng nếu mọi đỉnh của 𝐺 đều có bậc ít nhất bằng 2 thì 𝐺 sẽ có chứa
chu trình.

Bài 21. Chứng minh rằng nếu 𝐺 có số cạnh nhiều hơn số đỉnh thì 𝐺 sẽ chứa chu trình.

Bài 22. Tìm đường đi ngắn nhất từ 𝑣1 đến 𝑣10 trong đồ thị 𝐺 ở hình vẽ dưới đây bằng thuật
toán Dijkstra.

Bài 23. Cho đồ thị 𝐺 như hình vẽ bên dưới

27
a. Tìm đường đi ngắn nhất từ 𝑣1 đến 𝑣7 trong đồ thị 𝐺 bằng thuật toán Dijkstra.

b. Tìm độ dài đường đi ngắn nhất giữa tất cả các cặp đỉnh trong đồ thị 𝐺 bằng
thuật toán Floyd-Warshall.

Bài 24. Một công ty có chi nhánh ở 6 thành phố 𝐶1 , 𝐶2 , … , 𝐶6 . Chi phí để bay trực tiếp từ
thành phố 𝐶𝑖 đến thành 𝐶𝑗 là phần 𝑎𝑖,𝑗 của ma trận sau (∞ dùng để chỉ không có chuyến
bay trực tiếp giữa hai thành phố tương ứng).
0 50 ∞ 40 25 10
50 0 15 20 ∞ 25
∞ 15 0 10 20 ∞
𝐴=
40 20 10 0 10 25
25 ∞ 20 10 0 55
(10 25 ∞ 25 55 0)
Hãy lập bảng chi phí thấp nhất và lộ trình để di chuyển giữa hai thành phố bất kỳ
trong 6 thành phố này.

Bài 25. Từ bản đồ nơi bạn đang sống, mô hình hóa thành một đồ thị tương ứng có trọng số
độ dài cạnh. Tìm độ dài đường đi ngắn nhất từ nơi bạn sống đến cơn quan công tác.

Bài 26. Dùng gói lệnh NetworkX trong Python để khởi tạo một đồ thị. Sau đó dùng dùng
gói lệnh tìm đường đi ngắn nhất của hai đỉnh cho trước trong đồ thị vừa khởi tạo.

Bài 27. Một người muốn đưa mèo Tom, chuột Jerry và chó Spike qua bờ bên kia của một
dòng sông. Mỗi lần người này chỉ có thể chở được một trong ba con vật trên chiếc thuyền
nhỏ bé của mình. Hơn nữa, mèo Tom và chó Spike không thể ở cùng một bên bờ mà không
có người trông coi; chuột Jerry và mèo Tom cũng phải có người trông coi khi ở cùng một
bờ. Bằng hiểu biết về lý thuyết đồ thị, bạn hãy giải thích xem người này có thể dùng ít nhất

28
bao nhiêu lần để đưa mèo Tom, chuột Jerry và chó Spike qua bên kia sông mà các con vật
vẫn an toàn.

29
CHƯƠNG 2. ĐỒ THỊ CÂY

2.1 Đồ thị cây


Một cây (tree) là một đồ thị liên thông không có chu trình sơ cấp.

Cây một đỉnh là đồ thị 𝐾1 , cây hai đỉnh là đồ thị 𝐾2 , cây ba đỉnh là một đường đi sơ
cấp. Hai đồ thị trong Hình 2.1a,b là các cây bốn đỉnh. Có 3 cây năm đỉnh là các đồ thị trong
Hình 2.1c, Hình 2.1d và Hình 2.1e.

Hình 2.1 Minh họa đồ thị cây

Định lý 2.1 Trong một cây, hai đỉnh bất kỳ được nối với nhau bằng một đường đi sơ cấp
duy nhất.

Chứng minh

Ta sẽ chứng minh bằng phản chứng. Cho 𝐺 là một cây và giả sử rằng trong 𝐺 có hai
đường đi sơ cấp khác nhau từ 𝑢 đến 𝑣 là 𝑃1 và 𝑃2 . Vì 𝑃1 ≠ 𝑃2 nên tồn tại một cạnh 𝑒 = 𝑥𝑦
của 𝑃1 không phải là cạnh của 𝑃2 . Rõ ràng đồ thị (𝑃1 ∪ 𝑃2 ) − 𝑒 liên thông, xem Hình 2.2.
Do đó, nó chứa một đường đi sơ cấp 𝑃 đi từ 𝑥 đến 𝑦. Khi đó 𝑃 + 𝑒 là một chu trình sơ cấp
trong 𝐺, mâu thuẫn với giả thiết 𝐺 là một cây. □

30
Hình 2.2 Minh họa Định lý 2.1

Chiều ngược lại của định lý cũng đúng với đơn đồ thị.

Định lý 2.2 Nếu 𝐺 là một cây, thì 𝜀 = 𝑛 − 1.

Chứng minh

Ta chứng minh quy nạp trên số đỉnh 𝑛. Khi 𝑛 = 1 thì 𝐺 ≅ 𝐾1 , và 𝜀 = 0 = 𝑛 − 1.


Giả sử định lý đúng cho tất cả các cây ít hơn 𝑛 đỉnh và cho 𝐺 là một cây có số đỉnh 𝑛 ≥ 2.
Xét 𝑢𝑣 là một cạnh bất kỳ của 𝐺. Theo Định lý 2.1 thì 𝑢𝑣 là đường đi sơ cấp duy nhất từ
𝑢 đến 𝑣. Điều này dẫn đến không có đường đi sơ cấp nào từ 𝑢 đến 𝑣 trong 𝐺 − 𝑢𝑣. Do đó
𝐺 − 𝑢𝑣 không liên thông, suy ra 𝜔(𝐺 − 𝑢𝑣 ) = 2, xem Hình 2.3. Các thành phần liên thông
𝐺1 và 𝐺2 của 𝐺 − 𝑢𝑣 là các cây vì chúng không chứa chu trình sơ cấp. Hơn nữa, chúng có
ít hơn 𝑛 đỉnh. Do đó, theo giả thuyết quy nạp 𝜀 (𝐺𝑖 ) = 𝑛(𝐺𝑖 ) − 1 với 𝑖 = 1,2. Như vậy

𝜀 (𝐺 ) = 𝜀 (𝐺1 ) + 𝜀 (𝐺2 ) + 1 = 𝑛(𝐺1 ) + 𝑛(𝐺2 ) − 1 = 𝑛(𝐺 ) − 1. □

Hình 2.3 Minh họa Định lý 2.2

Hệ quả 2.1 Mỗi cây với số đỉnh 𝑛 ≥ 2 thì có ít nhất hai đỉnh bậc một.

Chứng minh

31
Cho 𝐺 là một cây với số đỉnh 𝑛 ≥ 2. Gọi 𝑃 là một đường đi dài nhất trong 𝐺. Khi
đó, hai đầu mút của 𝑃 là hai đỉnh bậc một. □

2.2 Cạnh cắt, đỉnh cắt


Một cạnh 𝑒 của 𝐺 được gọi là cạnh cắt (cut edge) nếu 𝜔(𝐺 − 𝑒) > 𝜔(𝐺 ).

Định lý 2.3 Một cạnh 𝑒 của 𝐺 là cạnh cắt khi và chỉ khi 𝑒 không thuộc vào bất cứ chu
trình sơ cấp nào của 𝐺.

Chứng minh

Gọi 𝑒 là cạnh cắt của 𝐺. Ta chứng minh 𝑒 không thuộc vào bất cứ chu trình sơ cấp
nào của 𝐺 bằng phản chứng. Giả sử 𝑒 thuộc vào một chu trình sơ cấp 𝐶 trong 𝐺. Gọi 𝑢 và
𝑣 là hai đỉnh liên thông bất kỳ trong 𝐺. Khi đó, tồn tại một đường đi sơ cấp 𝑃 từ 𝑢 đến 𝑣.
Nếu 𝑒 ∉ 𝑃 thì 𝑢 và 𝑣 sẽ liên thông trong 𝐺 − 𝑒. Nếu 𝑒 ∈ 𝑃 thì ta thay cạnh 𝑒 trong 𝑃 bằng
𝐶 − 𝑒, xem Hình 2.4a, khi đó ta có một đường đi mới 𝑃′ từ 𝑢 đến 𝑣 mà không qua 𝑒. Từ
đó, ta suy ra 𝑢 và 𝑣 vẫn liên thông trong 𝐺 − 𝑒. Như vậy, 𝜔(𝐺 − 𝑒) = 𝜔(𝐺), điều này mâu
thuẫn với giả thiết 𝑒 là cạnh cắt của 𝐺.

Hình 2.4 Minh họa Định lý 2.3

Ngược lại, giả sử rằng 𝑒 = 𝑥𝑦 không phải là cạnh cắt của 𝐺; do đó, 𝜔(𝐺 − 𝑒) =
𝜔(𝐺 ). Ta có 𝑥 và 𝑦 cùng thuộc một thành phần liên thông của 𝐺 vì có cạnh 𝑒 nối 𝑥 và 𝑦.
Điều đó cho thấy 𝑥 và 𝑦 cùng thuộc một thành phần liên thông của 𝐺 − 𝑒, và do đó trong
𝐺 − 𝑒 có một đường đi sơ cấp 𝑃 từ 𝑥 đến 𝑦. Như vậy 𝑒 thuộc vào chu trình sơ cấp 𝑃 + 𝑒
của 𝐺, xem Hình 2.4b. □

Định lý 2.4 Một đồ thị liên thông là một cây khi và chỉ khi mọi cạnh đều là cạnh cắt.

Chứng minh

32
Gọi 𝐺 là một cây và 𝑒 là một cạnh của 𝐺. Vì 𝐺 không chứa chu trình sơ cấp nên 𝑒
không thuộc vào bất kỳ chu trình sơ cấp nào của 𝐺 và do đó, theo Định lý 2.3, 𝑒 là một
cạnh cắt của 𝐺.

Ngược lại, giả sử rằng 𝐺 liên thông nhưng không phải là cây. Khi đó 𝐺 chứa một
chu trình sơ cấp 𝐶. Theo Định lý 2.3, không có cạnh nào của 𝐶 có thể là cạnh cắt của 𝐺. □

Nếu 𝑇 là một đồ thị con bao trùm của 𝐺 và 𝑇 là một cây thì 𝑇 được gọi là một cây
bao trùm (spanning tree) của 𝐺.

Hệ quả 2.2 Mỗi đồ thị liên thông đều có chứa một cây bao trùm.

Chứng minh

Cho 𝐺 là một đồ thị liên thông và 𝑇 là một đồ thị con bao trùm liên thông nhỏ nhất
của 𝐺. Theo định nghĩa 𝜔(𝑇) = 1 và 𝜔(𝑇 − 𝑒) > 1 với mỗi cạnh 𝑒 của 𝑇. Điều này dẫn
tới mỗi cạnh của 𝑇 đều là cạnh cắt và do đó, theo Định lý 2.4, 𝑇 là một cây. Vậy 𝑇 chính
là một cây bao trùm của 𝐺. □

Hệ quả 2.3 Nếu 𝐺 là liên thông, thì 𝜀 ≥ 𝑛 − 1.

Chứng minh

Vì 𝐺 là đồ thị liên thông nên, theo Hệ quả 2.2, 𝐺 chứa một cây bao trùm 𝑇. Do đó

𝜀 (𝐺 ) ≥ 𝜀 (𝑇) = 𝑛(𝑇) − 1 = 𝑛(𝐺 ) − 1.□

Định lý 2.5 Cho 𝑇 là một cây bao trùm của đồ thị liên thông 𝐺 và cho 𝑒 là cạnh của 𝐺
mà không nằm trong 𝑇. Khi đó 𝑇 + 𝑒 chứa một chu trình sơ cấp duy nhất.

Chứng minh

Vì 𝑇 không chứa chu trình sơ cấp nên mọi chu trình sơ cấp của 𝑇 + 𝑒 đều chứa 𝑒.
Hơn nữa, 𝐶 là một chu trình sơ cấp của 𝑇 + 𝑒 khi và chỉ khi 𝐶 − 𝑒 là một đường đi sơ cấp
trong 𝑇 kết nối hai đỉnh đầu mút của e. Theo Định lý 2.1, 𝑇 có một đường đi sơ cấp duy
nhất nối hai đầu mút của 𝑒; do đó 𝑇 + 𝑒 chứa một chu trình sơ cấp duy nhất. □

33
Một đỉnh 𝑣 của 𝐺 được gọi là một đỉnh cắt (cutting vertex) nếu 𝐸 có thể được chia
thành hai tập con khác rỗng 𝐸1 và 𝐸2 sao cho 𝐺 [𝐸1 ] và 𝐺 [𝐸2 ] có chung đỉnh 𝑣. Nếu 𝐺
không có khuyên và không tầm thường, thì 𝑣 là một đỉnh cắt của 𝐺 khi và chỉ khi
𝜔 (𝐺 − 𝑣 ) > 𝜔 (𝐺 ).

Định lý 2.6 Một đỉnh 𝑣 của cây 𝐺 là một đỉnh cắt của 𝐺 khi và chỉ khi 𝑑 (𝑣 ) > 1.

Chứng minh

Nếu 𝑑 (𝑣 ) = 0, rõ ràng 𝐺 ≅ 𝐾1 , 𝑣 không phải là một đỉnh cắt.

Nếu 𝑑 (𝑣 ) = 1, 𝐺 − 𝑣 là đồ thị không có chu trình sơ cấp với 𝑛(𝐺 − 𝑣 ) − 1 cạnh,


và do đó nó là một cây. Từ đó suy ra 𝜔(𝐺 − 𝑣 ) = 1 = 𝜔(𝐺 ) và 𝑣 không phải là đỉnh cắt
của 𝐺.

Nếu 𝑑 (𝑣 ) > 1, có các đỉnh 𝑢 và 𝑤 riêng biệt liền kề với 𝑣. Đường nối 𝑢𝑣𝑤 là một
đường đi sơ cấp từ 𝑢 đến 𝑤 trong 𝐺. Theo Định lý 2.1 thì 𝑢𝑣𝑤 là đường sơ cấp duy nhất
từ 𝑢 đến 𝑤 trong 𝐺. Do đó không có đường đi sơ cấp từ 𝑢 đến 𝑤 trong 𝐺 − 𝑣, nên
𝜔(𝐺 − 𝑣 ) > 1 = 𝜔(𝐺 ). Do đó 𝑣 là một đỉnh cắt của 𝐺. □

Hệ quả 2.4 Mọi đồ thị liên thông không tầm thường và không vòng đều có ít nhất hai
đỉnh không là đỉnh cắt.

Chứng minh

Cho 𝐺 là một đồ thị liên thông không tầm thường và không có vòng. Theo Hệ quả
2.2, 𝐺 chứa một cây bao trùm 𝑇. Theo Hệ quả 2.1 và Định lý 2.6, 𝑇 có ít nhất hai đỉnh
không là đỉnh cắt. Đặt v là một trong hai đỉnh này. Khi đó

𝜔 (𝑇 − 𝑣 ) = 1

Vì 𝑇 là một đồ thị con bao trùm của 𝐺, 𝑇 − 𝑣 là một đồ thị con bao trùm của 𝐺 − 𝑣
và do đó

𝜔 (𝐺 − 𝑣 ) ≤ 𝜔 (𝑇 − 𝑣 )

Điều đó cho thấy là 𝜔(𝐺 − 𝑣 ) = 1, nên 𝑣 không phải là đỉnh cắt của 𝐺. Vậy 𝐺 có ít
nhất hai đỉnh cắt. □

34
2.3 Thuật toán tìm kiếm cây
Ta thấy tình liên thông là một tính chất cơ bản của đồ thị. Nhưng làm sao chúng ta
có thể xác định được một đồ thị có liên thông hay không? Đối với các đồ thị nhỏ thì ta có
thể xác định được tính liên thông bằng cách tìm đường đi giữa hai đỉnh bất kỳ. Tuy nhiên,
trong một đồ thị lớn thì việc làm như vậy sẽ tốn rất nhiều thời gian. Do đó, chúng ta cần
một thuật toán hiệu quả có thể áp dụng được cho tất cả các đồ thị.

Ý tưởng cơ bản của thuật toán như sau. Cho 𝑇 là một cây trong đồ thị 𝐺. Nếu 𝑉 (𝑇) =
𝑉 (𝐺 ) thì 𝑇 là một cây bao trùm của 𝐺, do đó ta có thể kết luận được 𝐺 liên thông. Nếu
𝑉 (𝑇) ≠ 𝑉(𝐺) thì có hai khả năng có thể xảy ra. Khả năng thứ nhất, không có cạnh nào của
𝐺 nối một đỉnh trong 𝑇 với một đỉnh ngoài 𝑇, trong trường hợp này ta kết luận 𝐺 không
liên thông. Khả năng thứ hai, có một cạnh 𝑥𝑦 trong 𝐺 với 𝑥 ∈ 𝑉(𝑇) và 𝑦 ∈ 𝑉(𝐺)\𝑉(𝑇),
khi đó đồ thị con của 𝐺 có được bằng cách thêm đỉnh 𝑦 và cạnh 𝑥𝑦 vào 𝑇 lại là một cây
trong 𝐺.

Sử dụng ý tưởng trên ta có thể tạo ra một dãy các cây có gốc trong 𝐺, bắt đầu với
một cây tầm thường chỉ có một đỉnh duy nhất là gốc 𝑟. Thuật toán kết thúc khi ta được một
cây bao trùm của 𝐺 hoặc là một cây không bao trùm và không có cạnh nào của 𝐺 nối một
đỉnh trong 𝑇 với một đỉnh ngoài 𝑇. Trong thực hành, việc này liên quan đến việc dò danh
sách các đỉnh liền kề của các đỉnh đã ở trong 𝑇, từng đỉnh một. Ta gọi thuật toán này là
thuật toán tìm kiếm cây (tree-search) và cây kết quả được gọi là cây tìm kiếm (search tree).

Nếu chúng ta chỉ muốn kiểm tra xem một đồ thị có liên thông hay không thì mọi
thuật toán toán tìm kiếm cây đều có thể làm được. Nói cách khác, thứ tự xem xét các danh
sách liền kề là không quan trọng. Tuy nhiên, một số thứ tự đặc biệt có thể cung cấp thêm
các thông tin khác về cấu trúc của đồ thị. Ví dụ như thuật toán tìm kiếm theo chiều rộng có
thể được các khoảng trong đồ thị và một thuật toán khác là thuật toán tìm kiếm theo chiều
sâu (depth-first search) có thể tìm được các đỉnh cắt của đồ thị.

Để thuận lợi trong việc mô tả các tính chất của cây tìm kiếm, ta cần các thuật ngữ
sau. Cho 𝑇 là một cây có gốc là 𝑟. Mức (level) của một đỉnh 𝑣 trong 𝑇 là độ dài đường đi
từ 𝑟 đến 𝑣 trong 𝑇, ta ký hiệu đường đi này là 𝑟𝑇𝑣. Mỗi cạnh của 𝑇 nối hai đỉnh có hai mức
liên tiếp, để thuận tiện, ta định hướng mỗi cạnh của 𝑇 hướng từ đỉnh có mức thấp hơn đến

35
đỉnh có mức cao hơn. Một số khái niệm khác của cây có gốc được mượn từ cây phả hệ. Ví
dụ như, mỗi đỉnh trên đường đi 𝑟𝑇𝑣 (bao gồm cả 𝑣) được gọi là tổ tiên (ancestor) của 𝑣.
Nếu 𝑢 là tổ tiên của 𝑣 thì 𝑣 được gọi là con cháu (descendant) của 𝑢. Nếu 𝑢 là tổ tiên của
𝑣 và 𝑢 ≠ 𝑣 thì 𝑢 được gọi là tổ tiên thực sự (proper ancestor) của 𝑣. Nếu 𝑣 là con cháu
của 𝑢 và 𝑣 ≠ 𝑢 thì 𝑣 được gọi là con cháu thực sự (proper descendant) của 𝑢. Hai đỉnh
được gọi là họ hàng (related) nếu có một đỉnh là tổ tiên của đỉnh còn lại. Nếu trong 𝑇 có
một cạnh hướng từ đỉnh 𝑢 đến đỉnh 𝑣 thì 𝑢 được gọi là cha (parent) của 𝑣, ký hiệu là 𝑝(𝑣)
và 𝑣 được gọi là con (child) của 𝑢. Chú ý rằng tập cạnh có hướng của một cây 𝑇 gốc 𝑟
được xác định bởi hàm liền trước 𝑝 và ngược lại

𝐸 (𝑇) = {(𝑝(𝑣 ), 𝑣 )|𝑣 ∈ 𝑉 (𝑇) ∖ {𝑟}}

Trong phần còn lại của mục này, ta chỉ xét các đồ thị liên thông.

Trong hầu hết các thuật toán tìm kiếm cây thì điều kiện để chọn các đỉnh thêm vào
cây phụ thuộc vào thứ tự các đỉnh trước đó đã được thêm vào cây. Một thuật toán tìm kiếm
cây mà danh sách các đỉnh liền kề với các đỉnh ở trong 𝑇 được xem xét trên cơ sở đến trước
được phục vụ trước được gọi là thuật toán tìm kiếm theo chiều rộng (breadth-first search).
Để lập trình hiệu quả thuật toán này thì các đỉnh trong cây được lưu trong một hàng đợi
(queue). Hàng đợi là một danh sách 𝑄 mà các phần tử mới được thêm vào ở một đầu danh
sách (được gọi là đuôi của 𝑄) và các phần được lấy ra ở đầu còn lại của danh sách (được
gọi là đầu của 𝑄). Ở bất kỳ lúc nào, hàng đợi 𝑄 chứa tất cả các đỉnh mà từ đó cây hiện tại
có thể phát triển thêm.

Ban đầu, tại thời điểm 𝑡 = 0, hàng đợi 𝑄 bằng rỗng. Bất cứ khi nào một đỉnh mới
được thêm vào cây thì ta cũng thêm nó vào 𝑄. Ở mỗi giai đoạn, ta dò danh sách các đỉnh
liền kề của đỉnh 𝑢 ở đầu của 𝑄 để thêm chúng vào cây. Nếu tất cả các đỉnh liền kề với 𝑢
đã ở trong cây thì ta lấy 𝑢 ra khỏi 𝑄. Thuật toán kết thúc khi 𝑄 là tập rỗng. Kết quả trả về
của thuật toán không chỉ có cây mà còn có hàm ℓ: 𝑉 → ℕ ghi lại mức của các đỉnh trong
cây. Thuật toán cũng trả về một hàm 𝓉: 𝑉 → ℕ ghi lại thời gian các đỉnh được thêm vào 𝑇.
Ta đánh dấu các đỉnh thuộc 𝑇 bằng cách tô đen chúng.

Thuật toán tìm kiếm theo chiều rộng (BFS)

36
ĐẦU VÀO: Một đồ thị liên thông 𝐺 và một đỉnh 𝑟 ∈ 𝑉(𝐺).

ĐẦU RA: Một cây gốc 𝑟 trong 𝐺 với hàm liền trước 𝑝, một hàm mức ℓ sao cho
ℓ(𝑣 ) = 𝑑𝐺 (𝑟, 𝑣) với mọi 𝑣 ∈ 𝑉 (𝐺 ) và một hàm thời gian 𝓉.

Đặt 𝑖 ≔ 0 và 𝑄 ≔ ∅

Tăng 𝑖 một đơn vị

Tô đen đỉnh 𝑟

Đặt ℓ(𝑟) ≔ 0 và 𝓉 (𝑟) ≔ 𝑖

Thêm 𝑟 vào 𝑄

while 𝑄 khác rỗng do

Xem xét đỉnh 𝑥 ở đầu hàng đợi 𝑄

if 𝑥 có một đỉnh kề 𝑦 chưa tô đen do

Tăng 𝑖 một đơn vị

Tô đen 𝑦

Đặt 𝑝(𝑦) = 𝑥, ℓ(𝑦) = ℓ(𝑥) + 1 và 𝓉 (𝑦) = 𝑖.

Thêm 𝑦 vào 𝑄

else

Bỏ 𝑥 ra khỏi 𝑄.

end if

end while

Trả về (𝑝, ℓ, 𝓉 ).

Cây khung mà BFS trả về được gọi là một cây tìm kiếm theo chiều rộng (breadth-
first search tree) của 𝐺.

37
Hình 2.5 Đồ thị minh họa các thuật toán tìm kiếm cây

Để tìm một cây tìm kiếm theo chiều rộng gốc tại 𝑣1 của đồ thị 𝐺 trong Hình 2.5, ta
áp dụng BFS như sau.

• Đặt 𝑖 = 0 và 𝑄 = ∅

• 𝑖 ← 𝑖 + 1 = 1, tô đen 𝑣1 , 𝑙 (𝑣1 ) = 0, 𝓉 (𝑣1 ) = 1, 𝑄 = [𝑣1 ]

• Đỉnh 𝑣1 ở đầu hàng đợi 𝑄

o 𝑣1 có một đỉnh kề 𝑣2 chưa tô đen nên 𝑖 ← 𝑖 + 1 = 2, tô đen 𝑣2 , 𝑝(𝑣2 ) = 𝑣1 ,


ℓ(𝑣2 ) = ℓ(𝑣1 ) + 1 = 1, 𝓉 (𝑣2 ) = 𝑖 = 2 và 𝑄 = [𝑣1 , 𝑣2 ].

o 𝑣1 có một đỉnh kề 𝑣7 chưa tô đen nên 𝑖 ← 𝑖 + 1 = 3, tô đen 𝑣7 , 𝑝(𝑣7 ) = 𝑣1 ,


ℓ(𝑣7 ) = ℓ(𝑣1 ) + 1 = 1, 𝓉 (𝑣7 ) = 𝑖 = 3 và 𝑄 = [𝑣1 , 𝑣2 , 𝑣7 ].

o 𝑣1 không có đỉnh kề nào chưa tô đen nên 𝑄 = [𝑣2 , 𝑣7 ]

• Đỉnh 𝑣2 ở đầu hàng đợi 𝑄

o Đỉnh 𝑣2 kề với đỉnh 𝑣3 chưa tô đen nên 𝑖 ← 𝑖 + 1 = 4, tô đen 𝑣3 , 𝑝(𝑣3 ) =


𝑣2 , ℓ(𝑣3 ) = ℓ(𝑣2 ) + 1 = 2, 𝓉 (𝑣2 ) = 𝑖 = 4 và 𝑄 = [𝑣2 , 𝑣7 , 𝑣3 ].

o Đỉnh 𝑣2 kề với đỉnh 𝑣5 chưa tô đen nên 𝑖 ← 𝑖 + 1 = 5, tô đen 𝑣5 , 𝑝(𝑣5 ) =


𝑣2 , ℓ(𝑣5 ) = ℓ(𝑣2 ) + 1 = 2, 𝓉 (𝑣5 ) = 𝑖 = 5 và 𝑄 = [𝑣2 , 𝑣7 , 𝑣3 , 𝑣5 ].

o 𝑣2 không kề với đỉnh nào chưa tô đen nên 𝑄 = [𝑣7 , 𝑣3 , 𝑣5 ].

• Đỉnh 𝑣7 ở đầu hàng đợi 𝑄

38
o Đỉnh 𝑣7 kề với đỉnh 𝑣4 chưa tô đen nên 𝑖 ← 𝑖 + 1 = 6, tô đen 𝑣4 , 𝑝(𝑣4 ) =
𝑣7 , ℓ(𝑣4 ) = ℓ(𝑣7 ) + 1 = 2, 𝓉 (𝑣4 ) = 𝑖 = 6 và 𝑄 = [𝑣7 , 𝑣3 , 𝑣5 , 𝑣4 ].

o Đỉnh 𝑣7 kề với đỉnh 𝑣6 chưa tô đen nên 𝑖 ← 𝑖 + 1 = 7, tô đen 𝑣6 , 𝑝(𝑣6 ) =


𝑣7 , ℓ(𝑣6 ) = ℓ(𝑣7 ) + 1 = 2, 𝓉 (𝑣6 ) = 𝑖 = 7 và 𝑄 = [𝑣7 , 𝑣3 , 𝑣5 , 𝑣4 , 𝑣6 ].

o Đỉnh 𝑣7 kề với đỉnh 𝑣8 chưa tô đen nên 𝑖 ← 𝑖 + 1 = 8, tô đen 𝑣8 , 𝑝(𝑣8 ) =


𝑣7 , ℓ(𝑣8 ) = ℓ(𝑣7 ) + 1 = 2, 𝓉 (𝑣8 ) = 𝑖 = 8 và 𝑄 = [𝑣7 , 𝑣3 , 𝑣5 , 𝑣4 , 𝑣6 , 𝑣8 ].

o Đỉnh 𝑣7 không kề với đỉnh nào chưa tô đen nên 𝑄 = [𝑣3 , 𝑣5 , 𝑣4 , 𝑣6 , 𝑣8 ]

• Đỉnh 𝑣3 ở đầu hàng đợi 𝑄

o Đỉnh 𝑣3 không kề với đỉnh nào chưa tô đen nên 𝑄 = [𝑣5 , 𝑣4 , 𝑣6 , 𝑣8 ]

• Đỉnh 𝑣5 ở đầu hàng đợi 𝑄

o Đỉnh 𝑣5 không kề với đỉnh nào chưa tô đen nên 𝑄 = [𝑣4 , 𝑣6 , 𝑣8 ]

• Đỉnh 𝑣4 ở đầu hàng đợi 𝑄

o Đỉnh 𝑣4 không kề với đỉnh nào chưa tô đen nên 𝑄 = [𝑣6 , 𝑣8 ]

• Đỉnh 𝑣6 ở đầu hàng đợi 𝑄

o Đỉnh 𝑣6 không kề với đỉnh nào chưa tô đen nên 𝑄 = [𝑣8 ]

• Đỉnh 𝑣8 ở đầu hàng đợi 𝑄

o Đỉnh 𝑣8 không kề với đỉnh nào chưa tô đen nên 𝑄 = ∅

• Vì 𝑄 = ∅ nên thuật toán kết thúc

• Kết quả trả về là

𝑣1 𝑣2 𝑣3 𝑣4 𝑣5 𝑣6 𝑣7 𝑣8

𝑝 𝑣1 𝑣2 𝑣7 𝑣2 𝑣7 𝑣1 𝑣7

ℓ 0 1 2 2 2 2 1 2

𝓉 1 2 4 6 5 7 3 8

39
Dựa vào hàm liền trước 𝑝, ta dựng được một cây 𝐵𝐹𝑆 gốc tại 𝑣1 của đồ thị 𝐺, xem
Hình 2.6.

Hình 2.6 Một cây 𝐵𝐹𝑆 gốc tại 𝑣1 .

Thuật toán tìm kiếm theo chiều sâu (Depth-first search) là một thuật toán tìm kiếm
cây mà trong đó đỉnh mới được thêm vào cây 𝑇 là đỉnh kề với đỉnh gần nhất đã được thêm
vào 𝑇. Nói cách khác, đầu tiên ta dò danh sách các đỉnh kề với đỉnh gần nhất 𝑥 đã được
thêm 𝑇 để tìm một đỉnh chưa thuộc 𝑇. Nếu có một đỉnh như vậy thì ta thêm nó vào 𝑇. Nếu
không có đỉnh nào kề với 𝑥 mà chưa thuộc 𝑇 thì ta lùi về đỉnh được thêm vào 𝑇 ngay trước
𝑥 và dò danh sách đỉnh liền kề của nó, cứ tiếp tục như vậy. Thuật toán sẽ trả về một cây
khung, cây này được gọi là cây tìm kiếm theo chiều sâu (depth-first search tree) hay cây
DFS.

Ta có thể lập trình hiệu quả thuật toán này bằng cách lưu trữ các đỉnh của 𝑇 mà danh
sách các đỉnh liền kề của nó chưa dò hết. Ta không lưu trữ các đỉnh này trong một hàng
đợi như ta đã làm với 𝐵𝐹𝑆, mà ta lưu trữ chúng trong một ngăn xếp. Một ngăn xếp (stack)
là một danh sách mà một đầu của nó được gọi là mặt trên. Các phần tử mới sẽ được thêm
vào mặt trên và khi lấy một phần tử của ngăn xếp ra thì ta cũng lấy từ mặt trên. Trong thuật
toán tìm kiếm theo chiều sâu, ngăn xếp 𝑆 ban đầu bằng rỗng. Bất cứ khi nào một đỉnh được
thêm vào cây 𝑇 thì nó cũng được thêm vào 𝑆. Ở mỗi giai đoạn, ta dò danh sách các đỉnh
liền kề với đỉnh 𝑥 ở mặt trên của ngăn xếp để tìm một đỉnh thêm vào 𝑇. Nếu tất cả các đỉnh
kề với 𝑥 đều đã ở trong 𝑇 thì ta lấy 𝑥 ra khỏi 𝑆. Thuật toán kết thúc khi 𝑆 lại là tập rỗng.
Như thuật toán tìm kiếm theo chiều rộng, ta lưu vết các đỉnh trong 𝑇 bằng cách tô đen nó.

40
Với mỗi đỉnh 𝑣 của 𝐺 có hai mốc thời gian: mốc thời gian 𝑓(𝑣) khi 𝑣 được thêm
vào 𝑇, đây cũng là lúc 𝑣 được thêm vào ngăn xếp 𝑆 và mốc thời gian 𝑙 (𝑣 ) khi phát hiện tất
cả các đỉnh kề với 𝑣 đã ở trong 𝑇, đây cũng là lúc 𝑣 rời khỏi 𝑆. (Tránh nhầm hàm thời gian
𝑙 (𝑣 ) với hàm mức ℓ(𝑣 ) của BFS). Thời gian sẽ tăng một đơn vị với mỗi thay đổi trong
ngăn xếp 𝑆. Đặc biệt, nếu 𝑟 là gốc của cây 𝑇 thì 𝑓 (𝑟) = 1 và 𝑙 (𝑟) = 2𝑛, nếu 𝑣 là là của
cây 𝑇 thì 𝑙(𝑣 ) = 𝑓(𝑣 ) + 1.

Thuật toán tìm kiếm theo chiều sâu (DFS)

ĐẦU VÀO: một đồ thị liên thông 𝐺 và một đỉnh 𝑟 làm gốc

ĐẦU RA: một cây khung gốc 𝑟 của 𝐺 với hàm liền trước 𝑝, và hai hàm thời gian 𝑓
và 𝑙.

Đặt 𝑖: = 0 và 𝑆: = ∅

Tăng 𝑖 một đơn vị

Tô đen 𝑟

Đặt 𝑓(𝑟) ≔ 𝑖

Thêm 𝑟 vào 𝑆

While 𝑆 khác rỗng do

Xét đỉnh 𝑥 ở mặt trên của 𝑆

Tăng 𝑖 một đơn vị

If 𝑥 có một đỉnh liền kề 𝑦 chưa được tô đen then

Tô đen 𝑦

Đặt 𝑝(𝑦): = 𝑥 và 𝑓(𝑦): = 𝑖

Thêm 𝑦 vào mặt trên của 𝑆.

Else

Đặt 𝑙(𝑥) ≔ 𝑖.

Lấy 𝑥 ra khỏi 𝑆.

41
End if

End While

Trả về (𝑝, 𝑓, 𝑙).

Để tìm một cây tìm kiếm theo chiều rộng gốc tại 𝑣1 của đồ thị 𝐺 trong Hình 2.5, ta
áp dụng DFS như sau.

• 𝑖 = 0, 𝑆 = ∅

• 𝑖=1

• Tô đen 𝑣1 , 𝑓 (𝑣1 ) = 1, 𝑆 = [𝑣1 ]

• Xét đỉnh 𝑣1 , 𝑖 = 2, 𝑣1 có một đỉnh liền kề 𝑣2 chưa tô đen nên ta tô đen 𝑣2 ,


𝑝(𝑣2 ) = 𝑣1 , 𝑓 (𝑣2 ) = 2 và 𝑆 = [𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣2 , 𝑖 = 3, 𝑣2 có một đỉnh kề 𝑣3 chưa tô đen nên ta tô đen 𝑣3 , 𝑝(𝑣3 ) =


𝑣2 , 𝑓 (𝑣3 ) = 3 và 𝑆 = [𝑣3 , 𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣3 , 𝑖 = 4, 𝑣3 có một đỉnh kề 𝑣8 chưa tô đen nên ta tô đen 𝑣8 , 𝑝(𝑣8 ) =


𝑣3 , 𝑓 (𝑣8 ) = 4 và 𝑆 = [𝑣8 , 𝑣3 , 𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣8 , 𝑖 = 5, 𝑣8 có đỉnh kề 𝑣7 chưa tô đen nên ta tô đen 𝑣7 , 𝑝(𝑣7 ) =


𝑣8 , 𝑓 (𝑣7 ) = 5 và 𝑆 = [𝑣7 , 𝑣8 , 𝑣3 , 𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣7 , 𝑖 = 6, 𝑣7 kề với đỉnh 𝑣4 chưa tô đen nên ta tô đen 𝑣4 , 𝑝(𝑣4 ) =


𝑣7 , 𝑓 (𝑣4 ) = 6 và 𝑆 = [𝑣4 , 𝑣7 , 𝑣8 , 𝑣3 , 𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣4 , 𝑖 = 7, 𝑣4 kề với đỉnh 𝑣6 chưa tô đen nên ta tô đen 𝑣6 , 𝑝(𝑣6 ) =


𝑣4 , 𝑓(𝑣6 ) = 7 và 𝑆 = [𝑣6 , 𝑣4 , 𝑣7 , 𝑣8 , 𝑣3 , 𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣6 , 𝑖 = 8, 𝑣6 không kề với đỉnh nào chưa tô đen nên 𝑙(𝑣6 ) = 8 và 𝑆 =
[𝑣4 , 𝑣7 , 𝑣8 , 𝑣3 , 𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣4 , 𝑖 = 9, 𝑣4 không kề với đỉnh nào chưa tô đen nên 𝑙(𝑣4 ) = 9 và 𝑆 =
[𝑣7 , 𝑣8 , 𝑣3 , 𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣7 , 𝑖 = 10, 𝑣7 không kề với đỉnh nào chưa tô đen nên 𝑙(𝑣7 ) = 10 và
𝑆 = [𝑣8 , 𝑣3 , 𝑣2 , 𝑣1 ]
42
• Xét đỉnh 𝑣8 , 𝑖 = 11, 𝑣8 không kề với đỉnh nào chưa tô đen nên 𝑙(𝑣8 ) = 11 và
𝑆 = [𝑣3 , 𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣3 , 𝑖 = 12, 𝑣3 không kề với đỉnh nào chưa tô đen nên 𝑙(𝑣3 ) = 12 và
𝑆 = [𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣2 , 𝑖 = 13, 𝑣2 kề với 𝑣5 chưa tô đen nên ta tô đen 𝑣5 , 𝑝(𝑣5 ) =


𝑣2 , 𝑓 (𝑣5 ) = 13 và 𝑆 = [𝑣5 , 𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣5 , 𝑖 = 14, 𝑣5 không kề với đỉnh nào chưa tô đen nên 𝑙(𝑣5 ) = 14 và
𝑆 = [𝑣2 , 𝑣1 ]

• Xét đỉnh 𝑣2 , 𝑖 = 15, 𝑣2 không kề với đỉnh nào chưa tô đen nên 𝑙(𝑣2 ) = 15 và
𝑆 = [𝑣1 ]

• Xét đỉnh 𝑣1 , 𝑖 = 16, 𝑣1 không kề với đỉnh nào chưa tô đen nên 𝑙(𝑣1 ) = 16 và
𝑆=∅

• Vì 𝑆 = ∅ nên thuật toán kết thúc.

• Kết quả trả về là

𝑣1 𝑣2 𝑣3 𝑣4 𝑣5 𝑣6 𝑣7 𝑣8

𝑝 𝑣1 𝑣2 𝑣7 𝑣2 𝑣4 𝑣8 𝑣3

𝑓 1 2 3 6 13 7 5 4

𝑙 16 15 12 9 14 8 10 11

Dựa vào hàm liền trước 𝑝, ta dựng được một cây DFS gốc tại 𝑣1 của đồ thị 𝐺, xem
Hình 2.7 Một cây DFS gốc tại 𝑣1 Hình 2.7.

43
Hình 2.7 Một cây DFS gốc tại 𝑣1

2.4 Công thức Cayley


Có một công thức đệ quy đơn giản để tính số lượng cây bao trùm trong một đồ thị.
Nó liên quan đến sự co lại của một cạnh. Một cạnh 𝑒 của 𝐺 được gọi là co lại (contracted)
nếu nó bị xóa đi và hai đầu mút của nó nhập lại thành một; ký hiệu là 𝐺 ⋅ 𝑒. Hình 2.8 minh
họa cho sự co lại của một cạnh.

Hình 2.8 Co cạnh 𝑒 trong 𝐺

Nếu 𝑒 là một cạnh của 𝐺, thì

𝑛(𝐺 ⋅ 𝑒) = 𝑛(𝐺 ) − 1, 𝜀 (𝐺 ⋅ 𝑒) = 𝜀 (𝐺 ) − 1, 𝜔(𝐺 ⋅ 𝑒) = 𝜔(𝐺 )

Do đó, nếu 𝑇 là một cây thì 𝑇 · 𝑒 cũng là một cây.

Ta ký hiệu số lượng cây bao trùm của 𝐺 theo 𝜏(𝐺 ).

Định lý 2.7 Nếu 𝑒 là cạnh của 𝐺, thì 𝜏(𝐺 ) = 𝜏(𝐺 − 𝑒) + 𝜏(𝐺 ⋅ 𝑒).

44
Chứng minh

Vì mỗi cây bao trùm của 𝐺 không chứa 𝑒 cũng là cây bao trùm của 𝐺 − 𝑒 và ngược
lại. Do đó, 𝜏(𝐺 − 𝑒) là số cây bao trùm của 𝐺 không chứa e.

Hình 2.9 Minh họa Định lý 2.7

Với mỗi cây bao trùm 𝑇 của 𝐺 có chứa 𝑒, sẽ có tương ứng một cây bao trùm 𝑇 · 𝑒
của 𝐺 · 𝑒. Sự tương ứng này là một song ánh (xem Hình 2.9). Do đó 𝜏(𝐺 ⋅ 𝑒) chính là số
cây bao trùm của 𝐺 có chứa 𝑒. Từ đó suy ra 𝜏(𝐺 ) = 𝜏(𝐺 − 𝑒) + 𝜏(𝐺 ⋅ 𝑒). □

Hình 2.10 Tính số cây bao trùm bằng đệ quy

45
Hình 2.10 minh họa phép tính đệ quy của 𝜏(𝐺 ) bằng Định lý 2.7; số lượng cây bao
trùm trong đồ thị được biểu thị một cách tượng trưng bằng chính đồ thị.

Trong trường hợp đặc biệt khi 𝐺 đầy đủ, có một công thức đơn giản cho 𝜏(𝐺 ) đã
được phát hiện bởi Cayley (1889). Ở đây, ta trình bày chứng minh của công thức này theo
cách của Prüfer (1918).

Định lý 2.8 𝜏(𝐾𝑛 ) = 𝑛𝑛−2

Chứng minh

Đặt tập đỉnh của 𝐾𝑛 là 𝑁 = {1,2, . . . , 𝑛}. Lưu ý rằng 𝑛𝑛−2 là số dãy có độ dài 𝑛 − 2
có thể tạo được từ 𝑁. Do đó, để chứng minh Định lý, ta chỉ cần xây dựng một tương ứng
một - một giữa tập hợp các cây bao trùm của 𝐾𝑛 và tập hợp các dãy như trên.

46
Hình 2.11 Minh họa Định lý 2.8

Với mỗi cây bao trùm 𝑇 của 𝐾𝑛 , chúng ta đặt tương ứng với một chuỗi duy nhất
(𝑡1 , 𝑡2 , . . . , 𝑡𝑛− 2 ) như sau. Xem 𝑁 là một tập hợp có thứ tự, đặt 𝑠1 là đỉnh đầu tiên có bậc
một trong 𝑇; ta lấy 𝑡1 là đỉnh liền kề với 𝑠1 . Bây giờ chúng ta xóa 𝑠1 khỏi 𝑇, và đặt 𝑠2 là
đỉnh đầu tiên có bậc một trong 𝑇 − 𝑠1 và lấy 𝑡2 là đỉnh liền kề với 𝑠2 . Thao tác này được
lặp lại cho đến khi 𝑡𝑛−2 được xác định và một cây chỉ còn hai đỉnh. Ví dụ như cây trong
Hình 2.11 tạo ra chuỗi (4, 3, 5, 3, 4, 5). Có thể thấy rằng các cây bao trùm khác nhau của
𝐾𝑛 xác định các chuỗi khác nhau.

Ngược lại, với mỗi dãy (𝑡1 , 𝑡2 , . . . , 𝑡𝑛− 2 ), ta cần xây dựng lại cây bao trùm 𝑇 của 𝐺.
Ta thấy rằng mọi đỉnh 𝑣 của 𝑇 đều xuất hiện 𝑑 𝑇 (𝑣 ) − 1 lần trong dãy (𝑡1 , 𝑡2 , . . . , 𝑡𝑛− 2 ). Do

47
đó các đỉnh có bậc một trong 𝑇 chính là các đỉnh không xuất hiện trong dãy này. Do đó, để
dựng lại cây 𝑇 từ dãy (𝑡1 , 𝑡2 , . . . , 𝑡𝑛− 2 ), ta tiến hành như sau. Đặt 𝑠1 là đỉnh đầu tiên của 𝑁
không nằm trong dãy (𝑡1 , 𝑡2 , . . . , 𝑡𝑛− 2 ), nối 𝑠1 với 𝑡1 . Tiếp theo, đặt 𝑠2 là đỉnh đầu tiên của
𝑁\{𝑠1 } không nằm trong dãy (𝑡1 , 𝑡2 , . . . , 𝑡𝑛− 2 ) và nối 𝑠2 với 𝑡2 . Tiếp tục theo cách này cho
đến khi 𝑛 − 2 cạnh 𝑠1 𝑡1 , 𝑠2 𝑡2 , . . . , 𝑠𝑛−2 𝑡𝑛−2 đã được xác định. Việc dựng lại cây 𝑇 kết thúc
bằng việc thêm cạnh nối hai đỉnh còn lại của 𝑁\{𝑠1 , 𝑠2 , . . . , 𝑠𝑛−2 }. Ta có thể dễ dàng kiểm
chứng rằng các dãy khác nhau sẽ tương ứng với các cây bao trùm khác nhau của 𝐾𝑛 . Như
vậy, ta đã thiết lập được tương ứng một – một như mong muốn. □

Lưu ý rằng 𝑛𝑛−2 không phải là số cây bao trùm không đẳng cấu của 𝐾𝑛 , mà là số
cây bao trùm khác nhau của 𝐾𝑛 ; chỉ có sáu cây bao trùm không đẳng cấu của 𝐾6 (xem Hình
2.1), trong khi đó có 64 = 1296 cây bao trùm khác nhau của 𝐾6 .

2.5 Cây bao trùm nhỏ nhất


Giả sử ta cần xây dựng một mạng lưới đường sắt kết nối một số thị trấn. Gọi 𝑐𝑖𝑗 là
chi phí xây dựng một đường sắt trực tiếp nối hai thị trấn 𝑣𝑖 và 𝑣𝑗 , ta cần thiết kế một mạng
lưới đường sắt sao cho tổng chi phí xây dựng là nhỏ nhất. Đây được gọi là bài toán liên kết
(connector problem).

Bằng cách xem mỗi thị trấn là một đỉnh trong đồ thị có trọng số với 𝑤(𝑣𝑖 𝑣𝑗 ) = 𝑐ij .
Khi đó, bài toán liên kết được đưa về bài toán tìm một đồ thị con liên thông bao trùm có
trọng số nhỏ nhất trong một đồ thị có trọng số 𝐺. Hơn thế nữa, vì các trọng số thể hiện chi
phí nên chúng chắc chắn không âm và ta có thể giả sử rằng một đồ thị con bao trùm có
trọng số nhỏ nhất là một cây bao trùm 𝑇 của 𝐺. Một cây bao trùm trọng số nhỏ nhất của đồ
thị sẽ được gọi là một cây tối ưu (optimal tree); cây bao trùm được chỉ ra trong đồ thị có
trọng số trong Hình 2.10 là một cây tối ưu.

48
Hình 2.12 Một cây tối ưu trong một đồ thị có trọng số.

Bây giờ chúng ta sẽ trình bày một thuật toán tốt để tìm một cây tối ưu trong một đồ
thị không tầm thường liên thông có trọng số, từ đó có thể giải được bài toán liên kết.

Trước tiên, ta xét trường hợp tất cả các cạnh của 𝐺 đều có trọng số bằng 1. Một cây
tối ưu là một cây bao trùm với càng ít cạnh càng tốt. Vì mỗi cây bao trùm của một đồ thị
có cùng số cạnh (Định lý 2.2), trong trường hợp đặc biệt này chúng ta chỉ cần xây dựng
một cây bao trùm nào đó của đồ thị. Thuật toán quy nạp đơn giản sau sẽ giúp ta tìm được
một cây bao trùm của đồ thị 𝐺:

1. Chọn một cạnh 𝑒1 .

2. Nếu các cạnh 𝑒1 , 𝑒2 , . . . , 𝑒𝑖 đã được chọn, thì chọn 𝑒𝑖 + 1 từ 𝐸 ∖ {𝑒1 , 𝑒2 , . . . , 𝑒𝑖 } sao


cho 𝐺 [{𝑒1 , 𝑒2 , . . . , 𝑒𝑖+1 }] không chứa chu trình sơ cấp.

3. Dừng khi bước 2 không thể thực hiện thêm.

Thuật toán này sẽ tìm được bao cây bao trùm của 𝐺 vì một đồ thị con lớn nhất mà
không chứa chu trình sơ cấp chắc chắn là một cây bao trùm. Kruskal (1956) đã phát triển
thuật toán này để giải bài toán tổng quát; thuật toán của ông đúng với đồ thị có trọng số là
một số thực bất kỳ.

Thuật toán Kruskal

ĐẦU VÀO: một đồ thị liên thông 𝐺 có trọng số

ĐẦU RA: một cây bao trùm của 𝐺 có trọng số nhỏ nhất

1. Chọn cạnh có trọng số nhỏ nhất, giả sử là 𝑒1 .

49
2. Nếu các cạnh 𝑒1 , 𝑒2 , . . . , 𝑒𝑖 đã được chọn, thì ta chọn một cạnh 𝑒𝑖+1 từ
𝐸\{𝑒1 , 𝑒2 , . . . , 𝑒𝑖 } sao cho

(i) 𝐺 [{𝑒1 , 𝑒2 , . . . , 𝑒𝑖+1 }] là không chứa chu trình sơ cấp;

(ii) 𝑤(𝑒𝑖+1 ) nhỏ nhất trong số các cạnh 𝑒𝑖+1 thỏa mãn mục (i).

3. Dừng khi bước 2 không thể được thực hiện thêm.

Ví dụ, Bảng 2.1thể hiện khoảng theo đường quốc lộ (đơn vị km) giữa sáu trung tâm
của các thành phố ở đồng bằng sông cửu long gồm Cần Thơ, Long Xuyên, Rạch Giá, Vị
Thanh, Sóc trăng và Bạc Liêu.
Bảng 2.1 Khoảng cách giữa sáu trung tâm

𝐶𝑇 𝐿𝑋 𝑅𝐺 𝑉𝑇 𝑆𝑇 𝐵𝐿

𝐶𝑇 − 62 109 52 62 105

𝐿𝑋 62 − 80 90 121 162

𝑅𝐺 109 80 − 62 157 137

𝑉𝑇 52 90 62 − 78 75

𝑆𝑇 62 121 157 78 − 49

𝐵𝐿 105 162 137 75 49 −

Bảng này xác định một đồ thị đầy đủ có trọng số với các đỉnh là 𝐶𝑇, 𝐿𝑋, 𝑅𝐺, 𝑉𝑇, 𝑆𝑇
và 𝐵𝐿. Việc xây dựng cây tối ưu trong đồ thị này được thể hiện trong Hình 2.13. Thuật
toán của Kruskal rõ ràng tạo ra một cây bao trùm. Định lý sau đảm bảo rằng cây mà thuật
toán tìm được là cây tối ưu.

Định lý 2.9 Cây bao trùm 𝑇 ∗ = 𝐺 [{𝑒1 , 𝑒2 , . . . , 𝑒𝑛−1 }] được xây dựng bởi thuật toán của
Kruskal là một cây tối ưu.

Chứng minh

50
Ta chứng minh bằng phản chứng. Giả sử rằng 𝑇 ∗ không phải là cây tối ưu. Với mọi
cây bao trùm 𝑇 ≠ 𝑇 ∗ của 𝐺, ta đặt 𝑓 (𝑇) là giá trị nhỏ nhất của i sao cho 𝑒𝑖 không thuộc 𝑇.
Ta chọn cây tối ưu 𝑇 với giá trị 𝑓(𝑇) lớn nhất.

Giả sử 𝑓 (𝑇) = 𝑘; điều này có nghĩa là 𝑒1 , 𝑒2 , . . . , 𝑒𝑘−1 nằm trong cả 𝑇 và 𝑇 ∗ , nhưng


𝑒𝑘 không nằm trong 𝑇. Vì 𝑇 khác 𝑇 ∗ nên 𝑘 ≤ 𝑛 − 1. Theo Định lý 2.5, 𝑇 + 𝑒𝑘 chứa một
chu trình sơ cấp duy nhất 𝐶. Gọi 𝑒𝑘′ là một cạnh của 𝐶 thuộc 𝑇 nhưng không thuộc 𝑇 ∗ .
Cạnh 𝑒𝑘′ như vậy là tồn tại vì nếu tất cả các cạnh của 𝐶 − 𝑒𝑘 đều thuộc 𝑇 ∗ thì 𝐶 là đồ thị
con của 𝑇 ∗ , mâu thuẫn. Theo Định lý 2.3, 𝑒𝑘′ không phải là cạnh cắt của 𝑇 + 𝑒𝑘 .

Do đó 𝑇′ = (𝑇 + 𝑒𝑘 ) − 𝑒𝑘′ là đồ thị liên thông với 𝜈 − 1 cạnh và do đó 𝑇′ là một


cây bao trùm khác của 𝐺. Khi đó

𝑤(𝑇′) = 𝑤 (𝑇) + 𝑤(𝑒𝑘 ) − 𝑤 (𝑒𝑘′ ) (2.1)

Theo thuật toán Kruskal, cạnh 𝑒𝑘 đã được chọn là cạnh có trọng số nhỏ nhất sao cho
𝐺 [{𝑒1 , 𝑒2 , . . . , 𝑒𝑘 }] không chứa chu trình sơ cấp. Vì 𝐺[{𝑒1 , 𝑒2 , . . . , 𝑒𝑘−1 , 𝑒𝑘′ }] là đồ thị con
của 𝑇 nên nó cũng không chứa chu trình sơ cấp. Điều này cho phép chúng ta kết luận rằng

𝑤 (𝑒𝑘′ ) ≥ 𝑤(𝑒𝑘 ) (2.2)

Kết hợp (2.1) và (2.2), ta được

𝑤(𝑇′) ≤ 𝑤 (𝑇)

và vì vậy 𝑇′ cũng là một cây tối ưu. Tuy nhiên

𝑓 (𝑇′) > 𝑘 = 𝑓 (𝑇)

mâu thuẫn với lựa chọn của 𝑇. Do đó 𝑇 = 𝑇 ∗ và 𝑇 ∗ là một cây tối ưu. □

51
Hình 2.13 Minh họa xây dựng một cây tối ưu trong đồ thị

52
Lưu đồ thuật toán của Kruskal được thể hiện trong Hình 2.14. Đầu tiên, ta sắp xếp
các cạnh theo thứ tự trọng số tăng dần; việc này mất khoảng 𝜀 𝑙𝑜𝑔 𝜀 phép tính toán (xem
Knuth, 1973). Hộp tiếp theo chỉ kiểm tra xem có bao nhiêu cạnh đã được chọn. (𝑆 là tập
hợp các cạnh đã được chọn và i là chỉ số của chúng). Khi 𝑖 = 𝑛 − 1 thì 𝑆 =
{𝑒1 , 𝑒2 , . . . , 𝑒𝑛−1 } là tập hợp tất cả các cạnh của một cây tối ưu 𝑇 ∗ của 𝐺. Để kiểm tra xem
𝐺[𝑆 ∪ {𝑎𝑗 }] có chứa chu trình sơ cấp hay không, ta cần kiểm tra các đầu của 𝑎𝑗 có ở các
thành phần liên thông khác nhau của rừng 𝐺 [𝑆] hay không. Việc này có thể thực hiện như
sau. Các đỉnh được gán nhãn sao cho, ở bất kỳ giai đoạn nào, hai đỉnh thuộc cùng một
thành phần liên thông của 𝐺 [𝑆] khi và chỉ chúng có cùng nhãn; ban đầu đỉnh 𝑣𝑙 được gán
nhãn 𝑙 với 1 ≤ 𝑙 ≤ 𝑛. Với cách gán nhãn này, 𝐺[𝑆 ∪ {𝑎𝑗 }] không chứa chu trình sơ cấp khi
và chỉ khi hai đầu mút của 𝑎𝑗 có nhãn khác nhau. Nếu trường hợp này xảy ra thì ta chọn
𝑒𝑖+1 là 𝑎𝑗 ; ngược lại thì ta loại 𝑎𝑗 và xét 𝑎𝑗+1 , ứng cử viên tiếp theo cho 𝑒𝑖+1 . Khi 𝑒𝑖+1 đã
được thêm vào 𝑆 thì ta sẽ gán lại nhãn cho các đỉnh trong hai thành phần liên thông của
𝐺[𝑆] mà chứa hai đầu mút của 𝑒𝑖+1 , nhãn được gán là nhãn nhỏ nhất trong hai nhãn. Với
mỗi cạnh thì chỉ cần dùng một so sánh đủ để kiểm tra xem các đầu của chúng có nhãn
giống nhau hay không; Việc này cần 𝜀 phép tính. Sau khi cạnh 𝑒𝑖+1 đã được thêm vào 𝑆,
việc gán lại nhãn cho các đỉnh mất nhiều nhất 𝑛 phép so sánh; do đó, với tất cả 𝑛 − 1 cạnh
𝑒1 , 𝑒2 , . . . , 𝑒𝑛−1 chúng ta cần 𝑛(𝑛 − 1) phép toán. Như vậy, thuật toán Kruskal là một thuật
toán có độ phức tạp đa thức.

53
Hình 2.14 Lưu đồ thuật toán Kruskal

54
2.6 Bài toán vị trí trên cây
2.6.1 Điểm trên đồ thị
Một điểm trên đồ thị vô hướng 𝐺 có trọng số trên cạnh là một bộ ba 𝑥 = (𝑣𝑖 , 𝑣𝑗 , 𝑡)
trong đó 𝑒 = 𝑣𝑖 𝑣𝑗 ∈ 𝐸, 𝑡 ∈ [0,1]. Với ký hiệu 𝑙(𝑒) là độ dài của cạnh 𝑒, ta định nghĩa

𝑙(𝑥, 𝑣𝑗 ) ≔ 𝑙(𝑣𝑗 , 𝑥) ≔ (1 − 𝑡 ). 𝑙 (𝑒)


𝑙 (𝑣𝑖 , 𝑥) ≔ 𝑙 (𝑥, 𝑣𝑖 ) ≔ 𝑡. 𝑙 (𝑒).

Ta gọi tập tất cả các điểm trong 𝐺 là 𝑃(𝐺). Ta viết một điểm trên đồ thị là 𝑥 =
(𝑢, 𝑣, 𝑡 ) ∈ 𝑃(𝐺) hoặc đơn giản là 𝑥 ∈ 𝐺.
1
Hình 2.15 minh họa điểm 𝑥 = (𝑣𝑖 , 𝑣𝑗 , ) trên cạnh 𝑣𝑖 𝑣𝑗 có độ dài 8.
4

Hình 2.15 Minh họa điểm trên một cạnh của đồ thị

Khi đó,
1
𝑙 (𝑣𝑖 , 𝑥) = 𝑡. 𝑙 (𝑒) = .8 = 2
4
1
𝑙(𝑥, 𝑣𝑗 ) = (1 − 𝑡 ). 𝑙 (𝑒) = (1 − ) . 8 = 6
4
Cho 𝐺 là một đồ thị vô hướng và 𝑥 = (𝑣𝑖 , 𝑣𝑗 , 𝑡) ∈ 𝑃(𝐺 ). Khi đó, với mọi 𝑣𝑘 ∈ 𝑉, ta
định nghĩa

𝑑 (𝑥, 𝑣𝑘 ) ≔ 𝑑 (𝑣𝑘 , 𝑥) = min{𝑑 (𝑣𝑘 , 𝑣𝑖 ) + 𝑙(𝑣𝑖 , 𝑥), 𝑑(𝑣𝑘 , 𝑣𝑗 ) + 𝑙(𝑣𝑗 , 𝑥)}.


1
Hình 2.16 minh họa khoảng cách giữa đỉnh 𝑣𝑘 và điểm 𝑥 = (𝑣𝑖 , 𝑣𝑗 , ) trên cạnh
4

𝑣𝑖 𝑣𝑗 .

55
Hình 2.16 Minh họa khoảng cách từ đỉnh đến điểm

Giả sử 𝑑 (𝑣𝑘 , 𝑣𝑖 ) = 3 và 𝑑(𝑣𝑗 , 𝑣𝑘 ) = 6. Ta có 𝑙 (𝑣𝑖 , 𝑥) = 2 và 𝑙(𝑣𝑗 , 𝑥) = 6. Do đó,


theo định nghĩa thì 𝑑 (𝑥, 𝑣𝑘 ) = 𝑑 (𝑣𝑘 , 𝑥) = min{3 + 2; 6 + 6} = 5.

Cho 𝐺 là một đồ thị vô hướng và với mọi 𝑥, 𝑦 ∈ 𝑃(𝐺 ) nằm trên các cạnh khác nhau
với 𝑥 = (𝑣𝑖 , 𝑣𝑗 , 𝑡) và 𝑦 = (𝑣𝑘 , 𝑣𝑙 , 𝑡 ), ta định nghĩa

𝑑 (𝑥, 𝑦) ≔ min{𝑑 (𝑥, 𝑣𝑘 ) + 𝑑 (𝑣𝑘 , 𝑦), 𝑑 (𝑥, 𝑣𝑙 ) + 𝑑 (𝑣𝑙 , 𝑦)}.


1
Hình 2.17 minh họa khoảng cách giữa điểm 𝑥 = (𝑣𝑖 , 𝑣𝑗 , ) trên cạnh 𝑣𝑖 𝑣𝑗 và điểm
4
1
𝑦 = (𝑣𝑘 , 𝑣𝑙 , ) trên cạnh 𝑣𝑘 𝑣𝑙 .
4

Giả sử ta có 𝑙(𝑣𝑖 , 𝑣𝑗 ) = 8; 𝑑(𝑣𝑗 , 𝑣𝑘 ) = 3; 𝑙(𝑣𝑘 , 𝑣𝑙 ) = 4 và 𝑑 (𝑣𝑖 , 𝑣𝑙 ) = 3


Ta có, 𝑑 (𝑥, 𝑣𝑘 ) = 9, 𝑑 (𝑣𝑘 , 𝑦) = 1, 𝑑 (𝑥, 𝑣𝑙 ) = 5 và 𝑑 (𝑣𝑙 , 𝑦) = 3
Do đó, 𝑑 (𝑥, 𝑦) = 𝑚𝑖𝑛{9 + 1; 5 + 3} = 8.

Hình 2.17 Minh họa khoảng cách giữa hai điểm trên hai cạnh

Cho 𝐺 là một đồ thị vô hướng và với mọi 𝑥, 𝑦 ∈ 𝑃(𝐺 ) nằm trên cùng một cạnh với
𝑒 = 𝑣𝑖 𝑣𝑗 , 𝑥 = (𝑣𝑖 , 𝑣𝑗 , 𝑡1 ) và 𝑦 = (𝑣𝑖 , 𝑣𝑗 , 𝑡2 ), ta định nghĩa khoảng cách giữa 𝑥 và 𝑦 là

𝑑 (𝑥, 𝑦) ≔ |𝑡1 − 𝑡2 |. 𝑙 (𝑒) = 𝑑 (𝑦, 𝑥)


1 1
Hình 2.18 minh họa khoảng cách giữa hai điểm 𝑥 = (𝑣𝑖 , 𝑣𝑗 , ) và 𝑦 = (𝑣𝑖 , 𝑣𝑗 , ) trên
6 3

cạnh 𝑣𝑖 𝑣𝑗 . Theo định nghĩa, ta có

56
1 1
𝑑 (𝑥, 𝑦) = 𝑑 (𝑦, 𝑥) = |𝑡1 − 𝑡2 |. 𝑙 (𝑒) = | − | . 6 = 1
6 3

Hình 2.18 Minh họa khoảng giữa hai điểm trên cùng một cạnh

2.6.2 Giới thiệu bài toán 1-median trên đồ thị tổng quát và trên cây
Xuất phát từ yêu cầu phải đặt công trình công cộng ở một vị trí trong một phạm vi
địa lý nhất định để tối ưu hóa việc đi lại trong một tiêu chuẩn nào đó, ví dụ như chi phí
nhiên liệu cho các phương tiện giao thông. Vấn đề này được giải quyết bằng việc giải bài
toán 1-median trên đồ thị có trọng số. Bài toán này được dùng trong các ứng dụng thực tế
như xây dựng các công trình công cộng: trường học, bệnh viện,…

a) Bài toán 1-median trên đồ thị tổng quát.


Cho 𝐺 = (𝑉, 𝐸) là một đồ thị với hàm độ dài cạnh là 𝑙 và hàm trọng số trên đỉnh là
𝑤. Ta đặt 𝑤𝑖 là trọng số của đỉnh 𝑣𝑖 . Ta giả sử tất cả các đỉnh đều có trọng số dương. Xét
hàm số 𝑓: 𝑃(𝐺) → ℝ gán mỗi điểm 𝑥 ∈ 𝑃(𝐺) với một số thực được xác định như sau

𝑓 (𝑥) ≔ ∑ 𝑤𝑖 𝑑 (𝑣𝑖 , 𝑥)
𝑣𝑖 ∈𝑉

Ta cần tất cả các điểm 𝑠 ∈ 𝑃(𝐺) sao cho 𝑓(𝑠) nhỏ nhất. Bài toán này được gọi là
bài toán 1-median (1-median problem). Điểm 𝑠 được được gọi là điểm 1-median.

Thuật toán tìm điểm 1-median trên đồ thị tổng quát được trình bày bởi Nickel. Thuật
toán gồm các bước sau:

1. Xác định khoảng cách 𝑑𝑖𝑗 = 𝑑(𝑣𝑖 , 𝑣𝑗 ) giữa tất cả các cặp đỉnh của 𝐺.

2. Tính giá trị của 𝑓 (𝑣𝑖 ), ∀𝑣𝑖 ∈ 𝑉

3. Tìm 𝑜𝑝𝑡 = min{𝑓(𝑣𝑖 )|𝑣𝑖 ∈ 𝑉 }

4. Trả về (𝑋 ∗ ) = {𝑣𝑖 |𝑓 (𝑣𝑖 ) = 𝑜𝑝𝑡 } là các điểm 1-median của 𝐺.

57
Xét đồ thị 𝐺 như trong Hình 2.19, giả sử trọng số của các đỉnh là 𝑤1 = 1, 𝑤2 =
3, 𝑤3 = 2 và 𝑤4 = 2. Khi đó, ta xác định được khoảng cách giữa các cặp đỉnh là

𝑑21 = 2, 𝑑31 = 4, 𝑑41 = 3

𝑑12 = 2, 𝑑32 = 2, 𝑑42 = 5

𝑑13 = 4, 𝑑23 = 2, 𝑑43 = 4

𝑑14 = 3, 𝑑24 = 5, 𝑑34 = 4

Từ đó, tính được các 𝑓(𝑣𝑖 ) như sau:

𝑓(𝑣1 ) = 3.2 + 2.4 + 2.3 = 20


𝑓 (𝑣2 ) = 1.2 + 2.2 + 2.5 = 16
𝑓 (𝑣3 ) = 1.4 + 3.2 + 2.4 = 18
𝑓(𝑣4 ) = 1.3 + 3.5 + 2.4 = 26

Hình 2.19 Minh họa điểm 1-median

Từ đó suy ra 𝑓 (𝑣2 ) < 𝑓 (𝑣3 ) < 𝑓(𝑣1 ) < 𝑓 (𝑣4 ). Vậy tập hợp các điểm 1-median là
𝑋 ∗ = {𝑣2 }.

b) Bài toán 1-median trên cây


Cho 𝑇 là một cây. Ta ký hiệu 𝑇1 , … , 𝑇𝑘 là cây con của T được tạo nên bằng cách xóa
đỉnh v, trong đó k là bậc của 𝑣. Ta cũng ký hiệu 𝑤(𝑇) = ∑𝑣∈𝑇 𝑤𝑣 là tổng trọng số các đỉnh
của cây 𝑇.

58
Giả sử 𝑣1 là đỉnh của 𝑇1 kề với 𝑣 trong 𝑇. Với mọi 𝜀 > 0, ta lấy điểm 𝜌𝜀 trên cạnh
𝑣𝑣1 cách 𝑣 một khoảng 𝜀, xem Hình 2.20. Khi đó, đạo hàm của 𝑓 theo hướng cây con 𝑇1
được định nghĩa là

𝑓 (𝜌𝜀 ) − 𝑓(𝑣)
𝑓𝑇′1 (𝑣 ) ≔ lim
𝜀→0 𝜀
Mặt khác, ta có

𝑓 (𝑣 ) = ∑ 𝑤𝑣′ 𝑑(𝑣 ′ , 𝑣) + ∑ 𝑤𝑣′ 𝑑(𝑣 ′ , 𝑣)


𝑣 ′ ∈𝑉(𝑇1 ) 𝑣 ′ ∉𝑉(𝑇1 )


𝑓 (𝜌𝜀 ) = ∑ 𝑤𝑣′ 𝑑 (𝑣 ′ , 𝜌𝜀 ) + ∑ 𝑤𝑣′ 𝑑(𝑣 ′ , 𝜌𝜀 )
𝑣 ′ ∈𝑉(𝑇1 ) 𝑣 ′ ∉𝑉(𝑇1 )

= ∑ 𝑤𝑣 ′ [𝑑 (𝑣 ′ , 𝑣 ) − 𝜀 ] + ∑ 𝑤𝑣 ′ [𝑑 (𝑣 ′ , 𝑣 ) + 𝜀 ]
𝑣 ′ ∈𝑉(𝑇1 ) 𝑣 ′ ∉𝑉(𝑇1 )

= 𝑓 (𝑣 ) + ( ∑ 𝑤𝑣 ′ − ∑ 𝑤𝑣 ′ ) 𝜀
𝑣 ′ ∉𝑉(𝑇1 ) 𝑣 ′ ∈𝑉(𝑇1 )
= 𝑓 (𝑣 ) + [𝑤(𝑇\𝑇1 ) − 𝑤(𝑇1 )]𝜀
Do đó
𝑓𝑇′1 (𝑣 ) = 𝑤(𝑇\𝑇1 ) − 𝑤 (𝑇1 )
= 𝑤(𝑇) − 2. 𝑤(𝑇1 )

59
Hình 2.20 Đạo hàm theo hướng của hàm 1-median trên cây

Định lý 2.10 Một đỉnh 𝑣 là điểm 1-median của cây 𝑇 với trọng số đỉnh 𝑤 khi và chỉ khi
𝑤 (𝑇 )
𝑤(𝑇𝑖 ) ≤
2
với mọi thành phần liên thông 𝑇𝑖 của 𝑇 − 𝑣.

Chứng minh

Giả sử 𝑑 (𝑣 ) = 𝑘, khi đó 𝑇 − 𝑣 có 𝑘 thành phần liên thông là 𝑇1 , 𝑇2 , … , 𝑇𝑘 . Ta xét


đạo hàm theo hướng 𝑇𝑖 với mọi 𝑖 = 1, … , 𝑘. Bằng phân tích như trên, ta được:

𝑓𝑇′𝑖 (𝑣) = 𝑤(𝑇\𝑇𝑖 ) − 𝑤(𝑇𝑖 )


= 𝑤(𝑇) − 2𝑤(𝑇𝑖 ) ≥ 0
𝑤(𝑇)
Do đó, 𝑤(𝑇𝑖 ) ≤ .□
2

c) Giải thuật và ví dụ cho bài toán 1-median trên cây.


Thuật toán tuyến tính tìm 1-median trên một cây được độc lập đưa ra bởi Goldman
(1971). Ý tưởng cơ bản của thuật toán là “nuốt lá”, tức là xóa từng lá và cộng trọng số của
lá đó vào trọng số của đỉnh liền kề với nó. Quá trình tiếp diễn cho đến khi có một lá có
trọng số lớn hơn phân nửa trọng số của cây 𝑇, lá này chính là điểm 1-median của cây 𝑇.

Thuật toán tìm 1-median trên cây


ĐẦU VÀO: Cây 𝑇 = (𝑉, 𝐸), hàm chiều dài 𝑙, hàm trọng số 𝑤.

60
TRẢ VỀ: 𝑋 ∗ là tập hợp tất cả các điểm 1-median.
Bước 0. Tính 𝑊 = ∑𝑣𝑖 𝜖𝑉 𝑤𝑖 .
Bước 1. Chọn một lá 𝑣𝑘 của 𝑇 = (𝑉, 𝐸 ).
Bước 2. Nếu 𝑉 = {𝑣𝑘 } thì trả về: 𝑋 ∗ ≔ {𝑣𝑘 }.
Bước 3.
𝑊
1. Nếu 𝑤𝑘 = thì trả về
2

𝑋 ∗ = {𝑥 ∈ 𝑃(𝑇): 𝑥 ∈ 𝑣𝑘 𝑣𝑙 }, trong đó 𝑣𝑙 là đỉnh liền kề với 𝑣𝑘 .


𝑊
2. Nếu 𝑤𝑘 > thì trả về
2

𝑋 ∗ = {𝑣𝑘 }
𝑊
3. Nếu 𝑤𝑘 < thì sang Bước 4.
2

Bước 4. Đặt 𝑤𝑙 ≔ 𝑤𝑙 + 𝑤𝑘 với 𝑣𝑙 liền kề với 𝑣𝑘 và xét cây mới 𝑇 ≔ 𝑇\{𝑣𝑘 }. Trở về Bước
1.

61
Hình 2.21 Minh họa thuật toán tìm điểm 1-median trên cây

62
𝑤(𝑇) = 44, các lá 𝑠 =: {𝑣1 , 𝑣2 , 𝑣4 , 𝑣8 , 𝑣9 }

* Bắt đầu với 𝑣1 .


𝑤(𝑇)
𝑤1 = 5 < = 22.
2

⟹ 𝑇 ← 𝑇\{𝑣1 }, 𝑤3 = 9 + 5 = 14.

* Chọn 𝑣2 .
𝑤(𝑇)
𝑤2 = 4 < = 22.
2

⟹ 𝑇 ← 𝑇\{𝑣2 }, 𝑤3 = 14 + 4 = 18.

* Chọn 𝑣3 (Bây giờ là lá).


𝑤(𝑇)
𝑤3 = 18 < = 22.
2

⟹ 𝑇 ← 𝑇\{𝑣3 }, 𝑤5 = 18 + 2 = 20.

* Chọn 𝑣4 .
𝑤(𝑇)
𝑤4 = 1 < = 22.
2

⟹ 𝑇 ← 𝑇\{𝑣4 }, 𝑤5 = 20 + 1 = 21.

* Chọn 𝑣5 (bây giờ là lá).


𝑤(𝑇)
𝑤5 = 21 < = 22.
2

⟹ 𝑇 ← 𝑇\{𝑣5 }, 𝑤6 = 21 + 3 = 24.

* Chọn 𝑣6 .
𝑤(𝑇)
𝑤6 = 24 > = 22 ⇒ Bước 3.
2

Trả về X ∗ = {𝑣6 }.

63
BÀI TẬP CHƯƠNG 2

Bài 1. Với mỗi số tự nhiên 𝑘, hãy liệt kê tất cả các (lớp đẳng cấu) cây với bậc các đỉnh
không vượt quá 𝑘 và số đỉnh không vượt quá 6.

Bài 2. Chứng minh rằng đơn đồ thị 𝐺 là một cây khi và chỉ khi 𝐺 có đúng một cây bao
trùm.

Bài 3. Chứng minh rằng mọi đồ thị với 𝑛 đỉnh và 𝑚 cạnh có ít nhất 𝑚 − 𝑛 + 1 chu trình
sơ cấp.

Bài 4. Cho 𝐺 là một đồ thị liên thông với 𝑛 đỉnh. Chứng minh rằng 𝐺 có đúng một chu
trình sơ cấp khi và chỉ khi 𝐺 có đúng 𝑛 cạnh.

Bài 5. Cho 𝑢 là một đỉnh trong một đồ thị liên thông 𝐺. Chứng minh rằng có thể chọn các
đường đi ngắn nhất từ 𝑢 đến tất cả các đỉnh khác của 𝐺 sao cho hợp của tất cả các đường
đi này là một cây.

Bài 6. Đếm số cây bao trùm của đồ thị sau

Bài 7. Đếm số cây bao trùm của đồ thị lưỡng đầy đủ 𝐾2,𝑚 .

Bài 8. Có năm thành phố trong mạng lưới. Chi phí xây dựng con đường đi trực tiếp từ
thành phố 𝑖 đến thành phố 𝑗 là phần tử 𝑎𝑖𝑗 trong ma trận phía dưới. Phần tử ∞ để chỉ không
xây dựng được con đường vì có ngọn núi ở giữa. Xác định chi phí thấp nhất để làm các
con đường sao cho từ mỗi thành phố có thể đến được các thành phố còn lại.

0 3 5 11 9
3 0 3 9 8
5 3 0 ∞ 10
11 9 ∞ 0 7
(9 8 10 7 0)

64
Bài 9. Một xóm có 12 ngôi nhà đặt tại các đỉnh của đồ thị bên dưới, trọng số của mỗi đỉnh
là số người trong mỗi nhà. Nên điểm bầu cử ở nhà nào để tổng quãng đường mọi người
trong xóm đến điểm bầu cử là ngắn nhất.

Bài 10. Từ bản đồ nơi bạn đang sống, mô hình hóa thành một đồ thị. Tìm một giải pháp để
có thể kết nối đường dây điện qua tất cả các khu dân cư nơi bạn đang sống.

Bài 11. Mô hình hóa một phần thành phố bạn đang sống bằng một đồ thị với độ dài cạnh
và trọng số là dân số ở các khu dân cư. Tìm một địa điểm tối ưu để đặt một vị trí của một
tòa nhà hành chính để tổng khoảng cách di chuyển của mọi người đến đó là tốt nhất.

Bài 12. Dùng gói lệnh NetworkX trong Python để khởi tạo một đồ thị liên thông với độ dài
cạnh đồng thời tìm cây bao trùm nhỏ nhất của đồ thị thông qua gói lệnh.

Bài 13. Đường kính của cây là đường đi dài nhất qua hai đỉnh của cây. Hãy thiết kế thuật
toán tìm đường kính của cây và cho ví dụ.

Bài 14. Từ Bài 13, chúng ta có thể tìm đường đi dài thứ hai, thứ ba, … trong một cây được
không? Tại sao?

Bài 15. Chứng minh rằng tổng số cái bắt tay của mọi người trong một hội nghị luôn là số
chẵn.

65
Bài 16. Cho hàm số 𝑓 (𝑥) = 4|𝑥 − 1| + 3|𝑥 − 2| + |𝑥 − 3| + |𝑥 − 7|.

a. Vẽ đồ thị cũa hàm số f(x) và nhận xét về tính chất của hàm số này.

b. Bằng những hiểu biết về thuật toán, bạn hãy mô tả thuật toán tìm giá trị nhỏ
nhất của f(x).

Bài 17. Chứng minh rằng có thể có nhiều nhất 2 đỉnh là 1-median trên cây (với trọng số
đỉnh dương).

66
CHƯƠNG 3. TÍNH LIÊN THÔNG

3.1 Liên thông


Trong phần 1.5, ta đã làm quen với khái niệm liên thông trong đồ thị. Bây giờ, ta
xét bốn đồ thị liên thông trong Hình 3.1.

Hình 3.1 Minh họa mức độ liên thông của các đồ thị

Đồ thị 𝐺1 là một cây, một đồ thị liên thông tối thiểu; xóa bất kỳ cạnh nào cũng làm
mất tính liên thông của nó. Đối với đồ thị 𝐺2 , nếu ta xóa bất kỳ một cạnh nào của nó thì nó
vẫn liên thông, nhưng nó sẽ không còn liên thông nữa nếu ta xóa đi một đỉnh, đỉnh cắt của
đồ thị. Đồ thị 𝐺3 không có cạnh cắt và cũng không có đỉnh cắt, nhưng 𝐺3 cũng không liên
thông tốt bằng 𝐺4 , đồ thị đầy đủ trên năm đỉnh. Như vậy, đồ thị phía sau liên thông mạnh
hơn so với đồ thị trước. Bây giờ chúng ta sẽ xác định hai tham số của đồ thị để đo mức độ
liên thông và liên thông cạnh của nó.

Một lát cắt đỉnh (vertex cut) của 𝐺 là tập con 𝑉′ của 𝑉 sao cho 𝐺 − 𝑉′ không liên
thông. Một lát cắt 𝑘-đỉnh (𝑘-vertex cut) là lát cắt đỉnh có 𝑘 phần tử. Đồ thị đầy đủ không
có lát cắt đỉnh; và chỉ những đồ thị chứa đồ thị đầy đủ như một đồ thị con bao trùm mới
không có lát cắt đỉnh. Nếu 𝐺 có ít nhất hai đỉnh không liền kề thì chỉ số liên thông
(connectivity) 𝜅(𝐺 ) của 𝐺 là số 𝑘 nhỏ nhất sao cho 𝐺 có lát cắt 𝑘-đỉnh; ngược lại thì ta định
nghĩa 𝜅(𝐺 ) là 𝑛 − 1. Như vậy, 𝜅(𝐺 ) = 0 khi và chỉ khi 𝐺 là tầm thường hoặc không liên
thông. Đồ thị 𝐺 được gọi là 𝑘-liên thông (𝑘-connected) nếu 𝜅 (𝐺 ) ≥ 𝑘. Tất cả các đồ thị
liên thông không tầm thường đều là 1-liên thông.

Xét đồ thị 𝐺 trong Hình 3.2a. Tập hợp {𝑣4 } là một lát cắt 1-đỉnh của 𝐺, xem Hình
3.2b. Tập hợp {𝑣2 , 𝑣3 } là một lát cắt 2-đỉnh của 𝐺, xem Hình 3.2c. Tập hợp {𝑣3 , 𝑣4 , 𝑣5 } là

67
một lát cắt 3-đỉnh của 𝐺, xem Hình 3.2d. Vì 𝐺 liên thông nên 𝐺 không có lát cắt 0- đỉnh.
Do đó 𝜅(𝐺) = 1.

Hình 3.2 Minh họa lát cắt đỉnh

Một lát cắt cạnh (edge cut) của 𝐺 là một tập con của 𝐸 có dạng [𝑆, 𝑆], trong đó 𝑆 là
một tập hợp con thực sự và khác rỗng của 𝑉 và 𝑆̅ = 𝑉 ∖ 𝑆, lát cắt cạnh gồm tất cả các cạnh
có một đầu mút trong 𝑆 và một đầu mút trong 𝑆̅. Một lát cắt 𝑘-cạnh (𝑘-edge cut) là một lát
cắt cạnh có 𝑘 phần tử. Nếu 𝐺 là không tầm thường và 𝐸′ là một lát cắt cạnh của 𝐺, thì 𝐺 −
𝐸 ′ không liên thông; Ta định nghĩa chỉ số liên thông cạnh (edge connectivity) 𝜅′(𝐺 ) của 𝐺
là số 𝑘 nhỏ nhất sao cho 𝐺 có lát cắt 𝑘-cạnh. Nếu 𝐺 tầm thường thì ta định nghĩa 𝜅′(𝐺 ) là
0. Do đó 𝜅′(𝐺 ) = 0 khi và chỉ khi 𝐺 là tầm thường hoặc không liên thông, và 𝜅′(𝐺 ) = 1
khi và chỉ khi 𝐺 là đồ thị liên thông với ít nhất một cạnh là cạnh cắt. 𝐺 được gọi là 𝑘-cạnh
liên thông (𝑘-edge connected) nếu 𝜅′(𝐺 ) ≥ 𝑘. Tất cả đồ thị không tầm thường liên thông
là 1-cạnh liên thông.

Xét đồ thị 𝐺 trong Hình 3.3a. Lát cắt cạnh [{𝑣1 , 𝑣2 , 𝑣3 , 𝑣4 }, {𝑣5 , 𝑣6 , 𝑣7 }] là một cắt
1-cạnh, xem Hình 3.3b. Lát cắt cạnh [{𝑣1 , 𝑣2 , 𝑣3 }, {𝑣4 , 𝑣5 , 𝑣6 , 𝑣7 }] là một cắt 2-cạnh, xem

68
Hình 3.3c. Lát cắt cạnh [{𝑣2 , 𝑣6 }, {𝑣1 , 𝑣3 , 𝑣4 , 𝑣5 , 𝑣7 }] là một cắt 5-cạnh, xem Hình 3.3d. Vì
𝐺 liên thông nên 𝐺 không có lát cắt 0-cạnh. Vậy 𝜅′(𝐺) = 1.

Hình 3.3 Minh họa lát cắt cạnh

Định lý 3.1 𝜅 ≤ 𝜅′ ≤ 𝛿.

Chứng minh

Nếu 𝐺 là tầm thường thì 𝜅′ = 0 ≤ 𝛿. Nếu 𝐺 không tầm thường thì tập hợp của các
cạnh liên thuộc với một đỉnh bậc 𝛿 tạo thành một lát cắt 𝛿-cạnh của 𝐺. Do đó, 𝜅′ ≤ 𝛿.

Chúng ta chứng minh rằng 𝜅 ≤ 𝜅′ bằng quy nạp trên 𝜅′. Nếu 𝜅′ = 0 thì điều cần
chứng minh là đúng, vì khi đó 𝐺 phải tầm thường hoặc không liên thông. Giả sử rằng điều
cần chứng minh đúng cho tất cả đồ thị với chỉ số liên thông cạnh nhỏ hơn 𝑘, cho 𝐺 là đồ
thị với 𝜅′(𝐺 ) = 𝑘 > 0, và cho 𝑒 là một cạnh trong lát cắt 𝑘-cạnh của 𝐺. Đặt 𝐻 = 𝐺 − 𝑒, ta
có 𝜅′(𝐻 ) = 𝑘 − 1 và do đó, theo giả thuyết quy nạp, 𝜅 (𝐻 ) ≤ 𝜅′(𝐻 ) = 𝑘 − 1.

Nếu 𝐻 không có lát cắt đỉnh thì 𝐻 sẽ chứa một đồ thị đầy đủ như một đồ thị con bao
trùm, và 𝐺 cũng vậy, do đó

𝜅 (𝐺 ) = 𝜅 ( 𝐻 ) ≤ 𝑘 − 1

69
Ngược lại, nếu 𝐻 có lát cắt đỉnh thì ta gọi 𝑆 là một lát cắt đỉnh của 𝐻 với số phần tử
của 𝑆 là 𝜅 (𝐻 ). Do đó 𝐻 − 𝑆 là không liên thông.

Nếu 𝐺 − 𝑆 không liên thông thì

𝜅(𝐺 ) ≤ 𝜅 (𝐻 ) ≤ 𝑘 − 1.

Nếu 𝐺 − 𝑆 liên thông thì e là một cạnh cắt của 𝐺 − 𝑆. Trong trường hợp này, ta xét
hai khả năng. Khả năng thứ nhất là 𝑛(𝐺 − 𝑆) = 2, khi đó

𝜅 (𝐺 ) ≤ 𝑛(𝐺 ) − 1 = [𝑛(𝐺 − 𝑆) + 𝑛(𝑆)] − 1 = 𝜅 (𝐻 ) + 1 ≤ 𝑘

Khả năng thứ hai là 𝑛(𝐺 − 𝑆) > 2, khi đó 𝐺 − 𝑆 có một lát cắt 1–đỉnh là {𝑣 }, từ đó suy ra
𝑆 ∪ {𝑣} là một lát cắt đỉnh của 𝐺 và

𝜅 (𝐺 ) ≤ 𝜅 ( 𝐻 ) + 1 ≤ 𝑘

Như vậy trong mọi trường hợp, ta đều có 𝜅(𝐺 ) ≤ 𝑘 = 𝜅′(𝐺 ). Theo nguyên lý quy
nạp ta có điều phải chứng minh. □

3.2 Các khối của đồ thị


Một đồ thị liên thông mà không có đỉnh cắt thì được gọi là một khối (block). Mỗi
khối với ít nhất ba đỉnh là 2-liên thông. Đồ thị 𝐻 được gọi là một khối của đồ thị (block of
graph) 𝐺 nếu 𝐻 là một khối, 𝐻 là đồ thị con của 𝐺 và mọi đồ thị con của 𝐺 mà chứa 𝐻 đều
không phải là một khối. Mọi đồ thị là hợp của các khối của nó.

Xét đồ thị 𝐺 trong Hình 3.4a, các khối của 𝐺 là ba đồ thị con trong Hình 3.4b.

70
Hình 3.4 Minh họa các khối của đồ thị

Một họ các đường đi sơ cấp trong 𝐺 được gọi là tách rời bên trong (internally
disjoint) nếu không có đỉnh nào của 𝐺 là một đỉnh trong của nhiều hơn một đường đi sơ
cấp của họ này. Định lý sau được phát biểu và chứng minh bởi Whitney (1932).

Định lý 3.2 Một đồ thị 𝐺 có 𝑛 ≥ 3 là 2-liên thông khi và chỉ khi hai đỉnh bất kỳ của 𝐺
được nối với nhau bởi ít nhất hai đường đi sơ cấp tách rời bên trong.

Chứng minh

Nếu hai đỉnh bất kỳ của 𝐺 được nối với nhau bởi ít nhất hai đường đi sơ cấp tách
rời bên trong thì rõ ràng 𝐺 liên thông và không có lát cắt 1-đỉnh. Vì thế 𝐺 là 2-liên thông.

Ngược lại, cho 𝐺 là một đồ thị 2-liên thông. Chúng ta sẽ chứng minh, bằng quy nạp
trên khoảng cách 𝑑 (𝑢, 𝑣 ) giữa 𝑢 và 𝑣, rằng hai đỉnh 𝑢 và 𝑣 bất kỳ được nối với nhau bởi ít
nhất hai đường đi sơ cấp tách rời bên trong.

Giả sử rằng 𝑑 (𝑢, 𝑣 ) = 1. Khi đó, vì 𝐺 là 2-liên thông, nên cạnh uv không phải là
cạnh cắt và do đó, theo Định lý 2.3, nó được chứa trong một chu trình sơ cấp. Từ đó suy ra
u và v được nối với nhau bởi hai đường đi sơ cấp tách rời bên trong.

71
Bây giờ giả sử rằng Định lý đúng cho hai đỉnh bất kỳ ở khoảng cách nhỏ hơn 𝑘 và
đặt 𝑑 (𝑢, 𝑣 ) = 𝑘 ≥ 2. Xét một đường đi sơ cấp từ 𝑢 đến 𝑣 có độ dài 𝑘 và đặt 𝑤 là đỉnh liền
trước v trên đường đi này. Vì 𝑑 (𝑢, 𝑤) = 𝑘 − 1, nên theo giả thuyết quy nạp thì có hai
đường đi sơ cấp 𝑃 và 𝑄 tách rời bên trong đi từ 𝑢 đến 𝑤. Ngoài ra, vì 𝐺 là 2-liên thông nên
𝐺 − 𝑤 là liên thông, và do đó 𝐺 chứa một đường đi sơ cấp 𝑃′ đi từ 𝑢 đến 𝑣. Đặt 𝑥 là đỉnh
cuối cùng của 𝑃′ cũng nằm trong 𝑃 ∪ 𝑄 (xem Hình 3.5). Vì 𝑢 nằm trong 𝑃 ∪ 𝑄, nên sẽ có
một đỉnh 𝑥 như vậy; chúng ta không loại trừ khả năng 𝑥 = 𝑢.

Hình 3.5 Minh họa chứng minh Định lý 3.2

Không mất tính tổng quát, ta có thể giả sử rằng 𝑥 nằm trong 𝑃. Khi đó 𝐺 có hai
đường đi sơ cấp tách rời bên trong đi từ 𝑢 đến 𝑣, đường đi thứ nhất gồm đoạn từ 𝑢 đến 𝑥
của 𝑃 và đoạn từ 𝑥 đến 𝑣 của 𝑃′ và đường đi còn lại gồm 𝑄 và cạnh 𝑤𝑣. □

Hệ quả 3.1 Nếu 𝐺 là 2-liên thông thì hai đỉnh bất kỳ của 𝐺 đều thuộc cùng một chu trình
sơ cấp.

Chứng minh

Điều này được suy ra trực tiếp từ Định lý 3.2 vì hai đỉnh thuộc cùng một chu trình
sơ cấp khi và chỉ khi chúng được nối với nhau bởi hai đường đi sơ cấp tách rời bên trong.

Bây giờ, ta giới thiệu khái niệm sự phân chia một cạnh. Một cạnh e được gọi là bị
chia nhỏ nếu ta xóa cạnh này đi và thay thế bằng một đường đi có độ dài bằng 2, kết nối
hai đầu mút của nó, đỉnh bên trong của đường đi này là một đỉnh mới. Điều này được minh
họa trong Hình 3.6.

72
Hình 3.6 Minh họa phép phân chia một cạnh

Có thể thấy rằng lớp các khối có ít nhất ba đỉnh là đóng với phép toán chia nhỏ.
Điều này có nghĩa là nếu đồ thị 𝐺 là một khối với ít nhất ba đỉnh thì 𝐺′, là đồ thị có được
từ 𝐺 bằng một phép phân chia cạnh, cũng là một khối có ít nhất ba đỉnh.

Hệ quả 3.2 Nếu 𝐺 là một khối có 𝑛 ≥ 3 thì hai cạnh bất kỳ của 𝐺 sẽ thuộc cùng một chu
trình sơ cấp.

Chứng minh

Gọi 𝐺 là một khối có 𝑛 ≥ 3 và cho 𝑒1 và 𝑒2 là hai cạnh của 𝐺. Tạo đồ thị mới 𝐺′
bằng cách chia nhỏ 𝑒1 và 𝑒2 , và ký hiệu các đỉnh mới là 𝑣1 và 𝑣2 . Rõ ràng, 𝐺 ′ là một khối
có ít nhất năm đỉnh và do đó là 2-liên thông. Theo Hệ quả 3.1, 𝑣1 và 𝑣2 nằm trên cùng một
chu trình sơ cấp 𝐶′ của 𝐺 ′ . Do đó, 𝑒1 và 𝑒2 nằm trên một chu trình sơ cấp 𝐶 của 𝐺 (xem
Hình 3.7). □

Hình 3.7 Minh họa chứng minh Hệ quả 3.2

Thuật toán tìm các khối của một đồ thị

73
ĐẦU VÀO: Một đồ thị liên thông 𝐺.

ĐẦU RA: Các khối của 𝐺.

Chọn một đỉnh 𝑥 bất kỳ làm gốc, đặt 𝑇 = {𝑥}, đặt 𝑥 là đỉnh HOẠT ĐỘNG.

Đặt 𝑣 là đỉnh hoạt động hiện tại.

1) Nếu 𝑣 có một cạnh chưa thăm là 𝑣𝑤 thì

1A) Nếu 𝑤 ∉ 𝑉(𝑇) thì thêm 𝑣𝑤 vào 𝑇, đánh dấu 𝑣𝑤 đã thăm, đặt 𝑤 là đỉnh
HOẠT ĐỘNG.

1B) Nếu 𝑤 ∈ 𝑉(𝑇) thì 𝑤 là tổ tiên của 𝑣; đánh dấu 𝑣𝑤 là đã thăm

2) Nếu 𝑣 không có cạnh liên thuộc nào chưa thăm thì

2A) Nếu 𝑣 ≠ 𝑥 và 𝑤 là một cha của 𝑣 thì đặt 𝑤 là đỉnh HOẠT ĐỘNG. Nếu
không có đỉnh nào trong cây con 𝑇′ gốc tại 𝑣 của 𝑇 liên thuộc một cạnh đã
thăm đến một tổ tiên trên 𝑤 thì 𝑉 (𝑇 ′ ) ∪ {𝑤} là tập đỉnh của một khối; lưu lại
thông tin này và xóa 𝑉(𝑇 ′ ) khỏi 𝑇.

2B) Nếu 𝑣 = 𝑥 thì dừng.

Trả về các khối của đồ thị 𝐺.

Thuật trên tìm các khối của đồ thị 𝐺 trong Hình 3.8 hoạt động như sau:

Chọn đỉnh 𝑥 làm gốc, đặt 𝑇 = {𝑥}, đặt đỉnh 𝑥 là HOẠT ĐỘNG.

1. Đỉnh 𝑥 liên thuộc với cạnh 𝑥𝑎 chưa thăm.

1A. Vì 𝑎 ∉ 𝑉(𝑇) nên ta thêm cạnh 𝑥𝑎 vào 𝑇, đánh dấu cạnh 𝑥𝑎 đã thăm. Đặt
𝑎 là đỉnh HOẠT ĐỘNG.

1. Đỉnh 𝑎 liên thuộc với cạnh 𝑎𝑏 chưa thăm

1A. Vì 𝑏 ∉ 𝑉(𝑇) nên ta thêm cạnh 𝑎𝑏 vào 𝑇, đánh dấu 𝑎𝑏 đã thăm. Đặt 𝑏 là
đỉnh HOẠT ĐỘNG.

1. Đỉnh 𝑏 kề với cạnh 𝑏𝑐 chưa thăm

74
1A. Vì 𝑐 ∉ 𝑉(𝑇) nên ta thêm cạnh 𝑏𝑐 vào 𝑇, đánh dấu 𝑏𝑐 đã thăm. Đặt 𝑐 là
đỉnh HOẠT ĐỘNG.

1. Đỉnh 𝑐 liên thuộc với cạnh 𝑐𝑑 chưa thăm

1A. Vì 𝑑 ∉ 𝑉(𝑇) nên ta thêm cạnh 𝑐𝑑 vào 𝑇, đánh dấu 𝑐𝑑 đã thăm. Đặt 𝑑 là
đỉnh HOẠT ĐỘNG.

1. Đỉnh 𝑑 liên thuộc với cạnh 𝑑𝑎 chưa thăm

1B. Vì 𝑎 ∈ 𝑉(𝑇) nên ta đánh dấu 𝑑𝑎 đã thăm.

2. Đỉnh 𝑑 không có cạnh liên thuộc nào chưa thăm

2A. Ta có 𝑑 ≠ 𝑥 và 𝑐 là cha của 𝑑. Đặt 𝑐 là đỉnh HOẠT ĐỘNG.

2. Đỉnh 𝑐 không có cạnh liên thuộc nào chưa thăm

2A. Ta có 𝑐 ≠ 𝑥 và 𝑏 là cha của 𝑐. Đặt 𝑏 là đỉnh HOẠT ĐỘNG.

2. Đỉnh 𝑏 không có cạnh liên thuộc nào chưa thăm

2A. Ta có 𝑏 ≠ 𝑥 và 𝑎 là cha của 𝑏. Đặt 𝑎 là đỉnh HOẠT ĐỘNG. Không có


đỉnh nào trong cây con 𝑇′ gốc 𝑏 của 𝑇 kề với tổ tiên trên 𝑎 nên 𝑉 (𝑇 ′ ) ∪ {𝑎} =
{𝑎, 𝑏, 𝑐, 𝑑} là tập đỉnh của một khối. Ta xóa các đỉnh 𝑏, 𝑐 và 𝑑 ra khỏi 𝑇, lúc
này 𝑉 (𝑇) = {𝑥, 𝑎}.

1. Đỉnh 𝑎 liên thuộc với cạnh 𝑎𝑒 chưa thăm

1A. Vì 𝑒 ∉ 𝑉(𝑇) nên ta thêm cạnh 𝑎𝑒 vào 𝑇, đánh dấu 𝑎𝑒 đã thăm. Đặt 𝑒 là
đỉnh HOẠT ĐỘNG.

1. Đỉnh 𝑒 liên thuộc với cạnh 𝑒𝑥 chưa thăm

1B. Vì 𝑥 ∈ 𝑉(𝑇) nên ta đánh dấu 𝑒𝑥 đã thăm

2. Đỉnh 𝑒 không có cạnh liên thuộc nào chưa thăm

2A. Vì 𝑒 ≠ 𝑥 và 𝑎 là cha của 𝑒 nên ta đặt đỉnh 𝑎 là đỉnh HOẠT ĐỘNG.

1. Đỉnh 𝑎 liên thuộc với cạnh 𝑎𝑓 chưa thăm

75
1A. Vì 𝑓 ∉ 𝑉(𝑇) nên ta thêm cạnh 𝑎𝑓 vào 𝑇, đánh dấu 𝑎𝑓 đã thăm và đặt 𝑓
là đỉnh HOẠT ĐỘNG.

2. Đỉnh 𝑓 không có cạnh liên thuộc nào chưa thăm

2A. Vì 𝑓 ≠ 𝑥 và 𝑎 là cha của 𝑓 nên ta đặt 𝑎 là đỉnh HOẠT ĐỘNG. Không


có đỉnh nào của con 𝑇′ gốc 𝑓 của 𝑇 liên thuộc với cạnh đã thăm đến một tổ
tiên trên 𝑎 nên 𝑉 (𝑇 ′ ) ∪ {𝑎} = {𝑎, 𝑓} là tập đỉnh của một khối của 𝐺. Ta xóa
đỉnh 𝑓 khỏi cây 𝑇, lúc này 𝑉 (𝑇) = {𝑥, 𝑎, 𝑒}.

2. Đỉnh 𝑎 không có cạnh liên thuộc nào chưa thăm

2A. Vì 𝑎 ≠ 𝑥 và 𝑥 là cha của 𝑎 nên ta đặt 𝑥 là đỉnh HOẠT ĐỘNG. Không


có đỉnh nào trong cây con 𝑇′ gốc 𝑎 liên thuộc với cạnh đã thăm đến tổ tiên
trên 𝑥 nên 𝑉 (𝑇 ′ ) ∪ {𝑥} = {𝑥, 𝑎, 𝑒} là tập đỉnh của một khối của 𝐺. Ta xóa 𝑎
và 𝑒 khỏi cây 𝑇, lúc này 𝑇 = {𝑥}.

1. Đỉnh 𝑥 liên thuộc với cạnh 𝑥𝑔 chưa thăm

1A. Vì 𝑔 ∉ 𝑉(𝑇) nên ta thêm cạnh 𝑥𝑔 vào 𝑇, đánh dấu cạnh 𝑥𝑔 đã thăm và
đặt 𝑔 là đỉnh HOẠT ĐỘNG.

2. Đỉnh 𝑔 không có cạnh liên thuộc nào chưa thăm

2A. Vì 𝑔 ≠ 𝑥 và 𝑥 là cha của 𝑔 nên ta đặt 𝑥 là đỉnh HOẠT ĐỘNG. Không


có đỉnh nào trong cây con gốc 𝑔 liên thuộc với cạnh đã thăm đến tổ tiên trên
𝑥 nên 𝑉 (𝑇 ′ ) ∪ {𝑥} = {𝑥, 𝑔} là tập đỉnh của một khối của 𝐺. Ta xóa đỉnh 𝑔
khỏi 𝑇, lúc này 𝑉 (𝑇) = {𝑥}.

2. Đỉnh 𝑥 không có cạnh liên thuộc nào chưa thăm

2B. Kết thúc thuật toán.

Trong Hình 3.8, cạnh nét liền là cạnh chưa thăm, cạnh nét đứt là cạnh đã thăm, cạnh
in đậm là cạnh thuộc cây 𝑇 và đỉnh được tô đỉnh đang HOẠT ĐỘNG.

76
77
Hình 3.8 Minh họa thuật toán tìm các khối của đồ thị

78
3.3 Các mở rộng của đồ thị cây
Một đồ thị xương rồng (cactus graph) là một đồ thị liên thông mà mỗi khối của nó
là một cạnh hoặc là một chu trình sơ cấp. Đồ thị trong Hình 3.9 là một đồ thị xương rồng.
Từ định nghĩa, ta thấy được trong một đồ thị xương rồng mỗi cạnh thuộc vào tối đa một
chu trình sơ cấp.

Hình 3.9 Minh họa đồ thị xương rồng

Một đồ thị xương rồng tam giác (triangular cactus) là một đồ thị xương rồng mà
mỗi chu trình sơ cấp của nó đều có độ dài 3 và mỗi cạnh đều thuộc vào một chu trình sơ
cấp. Ba đồ thị trong Hình 3.10 là các đồ thị xương rồng tam giác.

Hình 3.10 Minh họa đồ thị xương rồng tam giác

Một đồ thị khối (block graph) là một đồ thị mà mỗi khối của nó là một đồ thị đầy
đủ. Đồ thị trong Hình 3.11 là một đồ thị khối với bảy khối, trong đó có một khối 𝐾5 , một
khối 𝐾4 , ba khối 𝐾3 và hai khối 𝐾2 .

79
Hình 3.11 Minh họa đồ thị khối

Đồ thị xương rồng có những ứng dụng quan trọng trong mô hình hóa mạng lưới vi
mạch. Trong đó, một số đỉnh của cây mở rộng thành một chu trình để biểu diễn mối quan
hệ tương hỗ giữa các thực thể trong chu trình đó. Đồ thị khối được dùng để mô hình hóa
các mối quan hệ giữa các nhóm, mỗi nhóm có một liện hệ dầy đặc tạo thành đồ thị đầy đủ.

Sau đây, chúng ta xem xét bài toán 1-median trên đồ thị xương rồng. Trước tiên, cần xác
định điểm 1-median hoặc chu trình chứa điểm 1-median của cây xương rồng. Để đạt được
mục tiêu đó, các khái niệm cơ bản về bài toán 1-median được nhắc lại.

Cho đồ thị 𝐺(𝑉, 𝐸) với tập đỉnh 𝑉 và tập cạnh 𝐸. Mỗi đỉnh 𝑣 ∈ 𝑉 được liên kết với
một trọng số dương 𝑤𝑣 và mỗi cạnh 𝑒 ∈ 𝐸 có một độ dài dương 𝑙𝑒 . Một điểm trên 𝐺 hoặc
là một đỉnh hoặc là nằm trên một cạnh nào đó của 𝐺. Khoảng cách 𝑑(𝑎, 𝑏) giữa hai đỉnh 𝑎
và 𝑏 trên 𝐺 là độ dài của đường đi ngắn nhất nối hai điểm đó. Bài toán 1-median trên 𝐺
nhằm tìm ra một điểm 𝑝 để làm tối thiểu hàm mục tiêu ∑𝑣∈𝑉 𝑤𝑣 𝑑(𝑝, 𝑣).

Nghiệm tối ưu của bài toán 1-median được gọi là điểm 1-median của 𝐺. Theo tập
p-median được đưa ra bởi Kariv và Hakimi (1979), tồn tại điểm 1-median của 𝐺 là một
đỉnh của đồ thị, tức là, nó không nằm ở phần trong của một cạnh. Do đó, từ đây ta chỉ tập
trung vào đỉnh của đồ thị để tìm điểm 1-median.

Bây giờ ta xét bài toán 1-median trên cây xương rồng G = (V, E). Ký hiệu W là tổng
trọng số của các đỉnh trên G, tức là 𝑊 = ∑𝑣∈𝑉 𝑤𝑣 . Gọi 𝐶 là một chu trình hoặc một cạnh
của 𝐺. Bằng cách xóa tất cả các cạnh của 𝐶 khỏi 𝐺, ta nhận được các thành phần liên thông
cũng là đồ thị xương rồng. Đối với một đỉnh, chúng ta biểu thị bằng thành phần liên thông

80
tương ứng chứa 𝑣. Hơn nữa, đối với một đồ thị con 𝑆 của 𝐺, 𝑊(𝑆) là viết tắt của tổng trọng
số của các đỉnh trong 𝑆, tức là, 𝑊(𝑆) = ∑𝑣∈𝑆 𝑤𝑣 . Chúng tôi khảo sát bổ đề sau.

Bổ đề 3.1 Gọi 𝐶 là một chu trình hoặc một cạnh trên 𝐺, nếu tồn tại một thành phần liên
𝑊
thông 𝐺𝐶𝑢 với đỉnh 𝑢 ∈ 𝐶 sao cho 𝑊(𝐺𝐶𝑢 ) ≥ , khi đó tồn tại một điểm 1-median của 𝐺
2

nằm trong 𝐺𝐶𝑢 .

Chứng minh

Gọi 𝑢′ là một đỉnh bất kỳ trong 𝐶 khác với đỉnh 𝑢. Đặt 𝐺(𝑢, 𝑢′): = 𝐺\(𝐺𝐶𝑢 ∪ 𝐺𝐶𝑢′ ),
ta có

𝑓(𝑢) − 𝑓(𝑢′) = ∑𝑣∈𝐺𝐶𝑢 𝑤𝑣 (𝑑(𝑢, 𝑣) − 𝑑(𝑢′, 𝑣)) + ∑𝑣∈𝐺𝑢′ 𝑤𝑣 (𝑑(𝑢, 𝑣) − 𝑑(𝑢′, 𝑣))
𝐶

+ ∑𝑣∈𝐺(𝑢,𝑢′) 𝑤𝑣 (𝑑(𝑢, 𝑣) − 𝑑(𝑢′, 𝑣)). (1)

Khi 𝑑(𝑢, 𝑣) − 𝑑(𝑢′, 𝑣) = −𝑑(𝑢, 𝑢′) với 𝑣 ∈ 𝐺𝐶𝑢 , 𝑑(𝑢, 𝑣) − 𝑑(𝑢′, 𝑣) = 𝑑(𝑢, 𝑢′) với
𝑣 ∈ 𝐺𝐶𝑢′ và 𝑑(𝑢, 𝑣) − 𝑑(𝑢′, 𝑣) ≤ 𝑑(𝑢, 𝑢′) với 𝑣 ∈ 𝐺(𝑢, 𝑢′) (bất đẳng thức tam giác), ta có
thể viết lại (1) như sau

𝑓(𝑢) − 𝑓(𝑢′) ≤ (∑𝑣∈𝐺𝑢′ 𝑤𝑣 + ∑𝑣∈𝐺(𝑢,𝑢′) 𝑤𝑣 − ∑𝑣∈𝐺𝐶𝑢 𝑤𝑣 )𝑑(𝑢, 𝑢′).


𝐶

𝑊
Bằng việc giả sử 𝑊(𝐺𝐶𝑢 ) ≥ , ta được
2

∑ 𝑤𝑣 + ∑ 𝑤𝑣 − ∑ 𝑤𝑣 = ∑ 𝑤𝑣 + ∑ 𝑤𝑣 + ∑ 𝑤𝑣 − 2 ∑ 𝑤𝑣
𝑣∈𝐺𝐶𝑢′ 𝑣∈𝐺(𝑢,𝑢′ ) 𝑣∈𝐺𝐶𝑢 𝑣∈𝐺𝐶𝑢′ 𝑣∈𝐺(𝑢,𝑢′ ) 𝑣∈𝐺𝐶𝑢 𝑣∈𝐺𝐶𝑢

= 𝑊 − 2 ∑𝑣∈𝐺𝐶𝑢 𝑤𝑣 ≤ 0. (2)

Theo (2), ta có𝑓(𝑢′) ≥ 𝑓(𝑢) với 𝑢′ ∈ 𝐶 và 𝑢′ ≠ 𝑢.

Cho 𝑢′′ ∈ 𝐺𝐶𝑢′ , ta có thể chứng minh rằng 𝑓(𝑢′′) ≥ 𝑓(𝑢′) bằng cách lập luận tương
tự. Mặt khác, bất kỳ đỉnh nào trong 𝐺\𝐺𝐶𝑢 cũng đều được chi phối bởi 𝑢. Do đó, tồn tại một
điểm 1-median của G được chứa trong 𝐺𝐶𝑢 . □

Đối với chu trình 𝐶 trong 𝐺, ta đặt 𝐵𝐶 (𝑣 ) ≔ (𝐺\𝐺𝐶𝑣 ) ∪ 𝑣. Dựa vào Bổ đề 1., ta cũng
có thể khảo sát điều kiện cho một chu trình chứa điểm 1-median.

Bổ đề 3.2 Cho chu trình 𝐶 trên 𝐺, nếu thỏa mãn điều kiện sau
81
𝑊
𝑊(𝐵𝐶 (𝑣 )) ≥ , ∀ 𝑣 ∈ 𝐶, (3)
2

thì 𝐶 chứa điểm 1-median của 𝐺.

Chứng minh

Theo Bổ đề 1, điểm 1-median của 𝐺 được chứa trong ∩𝑣∈𝐶 𝐵𝐶 (𝑣 ) = 𝐶. Phần chứng
minh sẽ được đưa ra theo sau. □

Để ý rằng nếu tồn tại hai chu trình cùng thỏa mãn điều kiện (3), khi đó đỉnh chung
của hai chu trình đó chính là điểm 1-median của 𝐺 như là một hệ quả của Bổ đề 2.

Trong phần kế tiếp, ta sẽ phát triển một thuật toán đơn chạy trong thời gian tuyến
tính để tìm một điểm 1-median của 𝐺 dựa vào điều kiện được cho bởi Bổ đề 2.

Có một thuật toán thời gian tuyến tính để giải bài toán này. Ý tưởng để tìm điểm 1-
media của cây xương rồng 𝐺 là hai pha. Trong pha đầu, ta cố gắng xác định chu trình hoặc
một cạnh có chứa điểm 1-median của cây xương rồng. Sau đó, ta tính toán và so sánh giá
trị trung vị tại mỗi đỉnh của chu trình hoặc cạnh đã xác định để thu được giá trị tối ưu.

a) Pha 1

Ta tính tổng trọng số của cây xương rồng và trọng số của mỗi chu trình trong 𝐺. Nó
có thể được thực hiện trong thời gian tuyến tính bằng cách tính tổng trọng số của tất cả các
đỉnh có liên quan. Sau đó, ta đại diện cho cây xương rồng 𝐺 là một cây gốc, hay còn được
gọi là cây cảm sinh. Một cách chính xác, ta coi mỗi chu trình của 𝐺 như là một đỉnh của
cây cảm sinh. Nếu hai chu trình trên 𝐺 có một đỉnh chung thì hai đỉnh tương ứng trên cây
cảm sinh là kề nhau.

Bây giờ ta xét những đỉnh nào được biểu diễn bởi một đỉnh ‘chu trình’ trong cây
cảm sinh. Nếu một chu trình không có đỉnh chung với bất kỳ chu trình nào khác, thì đỉnh
‘chu trình’ này đại diện cho tất cả các đỉnh trong chu trình. Nếu hai chu trình có một đỉnh
chung, thì đỉnh chung được biểu diễn trong ‘chu trình’ cha. Trong cây cảm sinh, trọng số
của một đỉnh là trọng số của chính nó trong cây xương rồng. Hơn nữa, trọng số của đỉnh
‘chu kỳ’ là tổng trọng số của các đỉnh mà nó biểu diễn. Cây cảm sinh và trọng số đỉnh của
nó rõ ràng có thể được tính theo thời gian tuyến tính.

82
Ví dụ, ta xét cây xương rồng và cây cảm sinh của nó trong Hình 3.12. Giả sử cây có
gốc tại 𝐶2 . Khi đó 𝐶1 đại diện cho 𝑣1 , 𝑣2 , 𝑣3 ; 𝐶2 đại diện cho 𝑣4 , 𝑣5 , 𝑣6 , 𝑣7 ; 𝐶3 đại diện cho
𝑣8 , 𝑣9 , 𝑣10 . Lưu ý rằng 𝐶2 là cha của 𝐶1 , đỉnh 𝑣4 được biểu diễn trong 𝐶2 .

Hình 3.12 Đồ thị xương rồng và cây cảm sinh tương ứng

Tiếp theo, chúng ta tìm điểm 1-median của cây xương rồng G hoặc chu trình chứa
điểm 1-median của G. Chúng ta có thể hoàn thành bằng hai bước sau.

Bước 1: Tìm điểm 1-median của cây cảm sinh trong thời gian tuyến tính, xem
Goldman (1971).

Bước 2: Nếu điểm 1-median của cây cảm sinh là một đỉnh duy nhất, thì đỉnh tương
ứng trong đồ thị cây xương rồng cũng là 1-median. Mặt khác, điểm 1-median của cây cảm
sinh là một 'chu trình', cụ thể là C. Vì C có thể chứa các đỉnh chung với các chu trình khác,
ta xem xét liệu điểm 1-median có thể chứa trong chu trình khác hay không bằng cách
83
chuyển các đỉnh chung sang các chu trình đó và kiểm tra lại tiêu chuẩn tối ưu. Điều này có
thể được thực hiện trong thời gian tuyến tính vì tổng trọng số yêu cầu của mỗi phần của
cây cảm sinh đã được biết trước.

Bổ đề 3.3 Có nhiều nhất hai chu trình trong cây xương rồng G có thể chứa một điểm 1-
median.

Chứng minh

Việc chứng minh là rõ ràng vì tồn tại nhiều nhất hai điểm 1-median trên một cây
cảm sinh; xem Goldman (1971). □

b) Pha 2

Gọi 𝑆 là tập hợp các đỉnh trong (các) chu trình 1-median của cây cảm sinh. Bằng
cách xóa tất cả các cạnh trong đồ thị con cảm sinh bởi 𝑆, ta nhận được các thành phần liên
thông của 𝐺. Đặt 𝐺(𝑣) là thành phần liên thông có chứa đỉnh 𝑣 trong 𝑆. Ta cần tính khoảng
cách từ 𝑣 đến đỉnh bất kỳ khác trong 𝐺(𝑣). Với mỗi chu kỳ 𝐶 trong 𝐺(𝑣), ta tính độ dài
của nó 𝑙(𝐶), tức là,

𝑙 (𝐶 ) ≔ ∑𝑒∈𝐶 𝑙(𝑒). Sau đó, ta áp dụng thuật toán tìm kiếm theo chiều rộng đầu tiên
để tính toán khoảng cách mong muốn. Về chi tiết, ta bắt đầu từ gốc 𝑣 và chuyển sang con
của nó. Sau đó, ta nhận được khoảng cách từ 𝑣 đến các đỉnh con của nó là các đỉnh hiện
tại. Tiếp theo, ta bắt đầu từ các đỉnh hiện tại và chuyển sang con của chúng. Đối với một
đỉnh con 𝑣’ không được chứa trong bất kỳ chu trình nào, việc tính toán là không đáng kể.
Mặt khác, ta có thể tính khoảng cách bên trái 𝑑 từ gốc đến 𝑣’ rồi so sánh 𝑑 với 𝑙(𝐶) − 𝑑
để thu được giá trị nhỏ nhất. Quá trình được lặp lại cho đến khi đỉnh cuối cùng được xét.

Sau khi tính toán tất cả các khoảng cách cần thiết, chúng ta có thể tính các hàm mục
tiêu trung bình tại mỗi đỉnh trong 𝑆. Do đó, độ phức tạp của phương pháp này là tuyến tính.

Trong thuật toán được đề xuất, trước tiên, ta tìm chu trình chứa điểm 1-median của
cây xương rồng và sau đó tính giá trị mục tiêu đối với mỗi đỉnh của chu trình cơ bản dựa
trên phương pháp đệ quy. Thuật toán này là rõ ràng và cần ít nỗ lực hơn so với thuật toán
của Burkard và Krarup (1998) tìm kiếm điểm 1-median của một cây xương rồng có trọng
số âm/dương dựa trên hướng giảm dần của hàm mục tiêu. Hơn nữa, thuật toán trong bài

84
báo này cũng đơn giản hơn so với thuật toán của Lan và Wang (2000). Tại đây, họ nghiên
cứu bài toán p-median trên đồ thị 4-cây xương rồng, tức là cây xương rồng với chính xác
các đỉnh trên mỗi chu trình. Họ giảm vấn đề xuống giống như một vấn đề trên đồ thị cây.
Tuy nhiên, trường hợp 𝑝 = 1 trên cây xương rồng tổng quát vẫn chưa được xác định cho
đến nay. Tóm lại, ta đạt được kết quả chính sau đây.

Định lý 3.3 Bài toán vị trí 1-median trên đồ thị xương rồng có thể được giải quyết một
cách đơn giản trong thời gian tuyến tính.

Với một cây xương rồng 𝐺 như Hình 3.12. Ta có thể tìm kiếm điểm 1-median của
𝐺 bằng cách áp dụng thuật toán hai giai đoạn.

Pha 1. Ta có thể xây dựng cây tương ứng 𝑇 có gốc tại 𝐶2 . Điểm 1-median của 𝑇
chính xác là 𝐶2 . Sau khi chuyển đỉnh 𝑣4 đến 𝐶1 , ‘chu trình’ 𝐶2 vẫn là điểm 1-median của
𝑇. Do đó, điểm 1-median của cây xương rồng được chứa trong 𝐶2 .

Pha 2. Ta có thể sử dụng thuật toán tìm kiếm thứ nhất theo chiều sâu để tính toán
khoảng cách từ 𝑣6 đến các đỉnh khác trong 𝐺 (𝑣6 ) như sau

• Độ dài của 𝐶3 là 𝑙(𝐶3 ) = 7.

• Khi 𝑣8 là đỉnh con của 𝑣6 , ta được 𝑑(𝑣6 , 𝑣8 ) = 2. Xét hai đỉnh con của 𝑣8 , gọi
là 𝑣9 và 𝑣10 . Khoảng cách trái 𝑑 𝐿 (𝑣8 , 𝑣10 ) = 4 > 𝑙(𝐶3 ) − 𝑑 𝐿 (𝑣8 , 𝑣10 ) = 3 và
𝑑 𝐿 (𝑣8 , 𝑣9 ) = 6 > 𝑙(𝐶3 ) − 𝑑 𝐿 (𝑣8 , 𝑣9 ) = 1. Do đó, 𝑑(𝑣8 , 𝑣10 ) = 3 và
𝑑(𝑣8 , 𝑣9 ) = 1. Ta thu được 𝑑(𝑣6 , 10) = 5 và 𝑑(𝑣6 , 𝑣9 ) = 3. Bằng cách lập luận
tương tự, ta được kết quả sau

𝑑(𝑣4 , 𝑣1 ) = 𝑑(𝑣4 , 𝑣3 ) = 1, 𝑑(𝑣4 , 𝑣2 ) = 2, 𝑑(𝑣7 , 𝑣11 ) = 4.

• Bằng cách tính toán sơ cấp, ta được giá trị trung bình tại mỗi đỉnh trong chu trình
𝐶2 . Cuối cùng, ta thu được 𝑣7 là đỉnh 1-median của 𝐺.

3.4 Xây dựng mạng truyền thông tin cậy


Nếu ta xem đồ thị như một mạng truyền thông, thì chỉ số liên thông (hoặc chỉ số
liên thông cạnh) trở thành số lượng trạm truyền thông (hoặc liên kết truyền thông) nhỏ nhất
mà khi chúng cùng gặp sự cố sẽ làm gián đoạn hoạt động giao tiếp trong hệ thống. Chỉ số

85
liên thông và chỉ số liên thông cạnh càng cao thì mạng càng đáng tin cậy. Từ đó có thể thấy
mạng truyền thông có đồ thị cây sẽ có độ tin cậy thấp. Điều này dẫn đến nhu cầu tổng quát
hóa bài toán liên kết.

Đặt 𝑘 là số nguyên dương và cho 𝐺 là đồ thị có trọng số. Xác định một đồ thị con
bao trùm 𝑘-liên thông có trọng số nhỏ nhất của 𝐺.

Với 𝑘 = 1, thì bài toán này trở thành bài toán liên kết, có thể giải bằng thuật toán
Kruskal. Với 𝑘 > 1 thì đây là bài toán khó và vẫn chưa có lời giải. Tuy nhiên, nếu 𝐺 là một
đồ thị đầy đủ trong đó mỗi cạnh được gán trọng số đơn vị thì bài toán trở nên đơn giản.

Với một đồ thị đầy đủ có trọng số trên 𝑛 đỉnh trong đó mỗi cạnh được gán trọng số
đơn vị thì một đồ thị con bao trùm 𝑚-liên thông có trọng số nhỏ nhất chính là một đồ thị
con 𝑚-liên thông trên 𝑛 đỉnh với số cạnh ít nhất có thể. Ta ký hiệu 𝑓(𝑚, 𝑛) là số cạnh ít
nhất mà một đồ thị 𝑚-liên thông trên 𝑛 đỉnh có thể có (với 𝑚 < 𝑛). Theo Định lý 3.1 và
1.1 thì 𝑚 ≤ 𝛿 và 2𝜀 = ∑𝑣∈𝑉 deg(𝑣 ) ≥ ∑𝑣∈𝑉 𝛿 = 𝑛𝛿, suy ra 2𝜀 ≥ 𝑛𝑚 hay 𝜀 ≥ 𝑚𝑛/2. Vậy

𝑚𝑛 (3.1)
𝑓 (𝑚, 𝑛) ≥ ⌈ ⌉
2

Ta chứng minh dấu đẳng thức trong (3.1) có thể xảy ra bằng cách xây dựng một đồ
thị 𝑚-liên thông 𝐻𝑚,𝑛 trên 𝑛 đỉnh có chính xác ⌈𝑚𝑛/2⌉ cạnh. Cấu trúc của 𝐻𝑚,𝑛 phụ thuộc
vào tính chẵn lẻ của 𝑚 và 𝑛; Có ba trường hợp:

Trường hợp 1: 𝑚 chẵn. Đặt 𝑚 = 2𝑟. Khi đó 𝐻2𝑟,𝑛 được xây dựng như sau. Nó có
các đỉnh 0,1, . . . , 𝑛 − 1 và hai đỉnh i và j được nối nếu |𝑖 − 𝑗| ≤ 𝑟 (trong đó phép cộng tính
theo modul 𝑛). Ví dụ 𝐻4,8 là đồ thị trong Hình 3.13a.

Trường hợp 2: 𝑚 lẻ, 𝑛 chẵn. Đặt 𝑚 = 2𝑟 + 1. Để xây dựng 𝐻2𝑟+1,𝑛 , đầu tiên ta xây
dựng 𝐻2𝑟,𝑛 rồi sau đó thêm các cạnh nối đỉnh 𝑖 với đỉnh 𝑖 + (𝑛/2) với 1 ≤ 𝑖 ≤ 𝑛/2. Ví dụ
𝐻5,8 là đồ thị trong Hình 3.13b.

Trường hợp 3: 𝑚 lẻ, 𝑛 lẻ. Đặt 𝑚 = 2𝑟 + 1. Để xây dựng 𝐻2𝑟+1,𝑛 , đầu tiên ta xây
dựng 𝐻2𝑟,𝑛 rồi sau đó thêm các cạnh nối đỉnh 0 với các đỉnh (𝑛 − 1)/2 và (𝑛 + 1)/2 và
đỉnh 𝑖 với đỉnh 𝑖 + (𝑛 + 1)/2 với 1 ≤ 𝑖 ≤ (𝑛 − 1)/2. Ví dụ 𝐻5,9 là đồ thị trong Hình
3.13c.
86
Hình 3.13 Minh họa ba đồ thị Harary

Định lý 3.4 (Harary, 1962) Đồ thị 𝐻𝑚,𝑛 là 𝑚-liên thông.

Chứng minh

Xét trường hợp 𝑚 = 2𝑟. Ta sẽ chứng minh bằng phản chứng rằng 𝐻2𝑟,𝑛 không có
lát cắt đỉnh ít hơn 2𝑟 đỉnh. Giả sử 𝑉 ′ là một đỉnh cắt với |𝑉′| < 2𝑟. Đặt 𝑖 và 𝑗 là các đỉnh
thuộc các thành phần liên thông khác nhau của 𝐻2𝑟,𝑛 − 𝑉 ′ .

Hãy xem xét hai tập đỉnh

𝑆 = {𝑖, 𝑖 + 1, . . . , 𝑗 − 1, 𝑗}

𝑇 = {𝑗, 𝑗 + 1, . . . , 𝑖 − 1, 𝑖}

trong đó phép cộng theo modulo 𝑛. Vì |𝑉 ′ | < 2𝑟 nên không mất tính tổng quát ta có thể
giả sử rằng |𝑉 ′ ∩ 𝑆| < 𝑟. Từ đó suy ra tồn tại một dãy các đỉnh khác nhau trong 𝑆\𝑉 ′ bắt
đầu bằng 𝑖, kết thúc bằng 𝑗 sao cho khoảng giữa hai đỉnh liên tiếp bất kỳ không lớn hơn 𝑟.
Nhưng dãy này chính là đường đi từ 𝑖 đến 𝑗 trong 𝐻2𝑟,𝑛 − 𝑉 ′ , mâu thuẫn. Vậy 𝐻2𝑟,𝑛 là 2𝑟-
liên thông.

Chứng minh cho trường hợp 𝑚 = 2𝑟 + 1 xem như bài tập. □

Dễ thấy số cạnh của đồ thị 𝐻𝑚,𝑛 là ⌈𝑚𝑛/2⌉. Do đó, theo Định lý 3.4,

87
𝑚𝑛 (3.2)
𝑓 (𝑚, 𝑛) ≤ ⌈ ⌉
2

𝑚𝑛
Từ (3.1) và (3.2) suy ra 𝑓 (𝑚, 𝑛) = ⌈ ⌉ và 𝐻𝑚,𝑛 là một đồ thị 𝑚-liên thông trên 𝑛
2

đỉnh có ít cạnh nhất.

Vì với một đồ thị 𝐺 bất kỳ thì 𝜅 ≤ 𝜅′ (Định lý 3.1) nên 𝐻𝑚,𝑛 cũng 𝑚-cạnh liên
thông. Do đó, nếu ta đặt 𝑔(𝑚, 𝑛) là số lượng cạnh ít nhất trong đồ thị 𝑚-cạnh liên thông
trên n đỉnh (với 1 < 𝑚 < 𝑛) thì ta cũng có
𝑚𝑛
𝑔(𝑚, 𝑛) = ⌈ ⌉
2

88
BÀI TẬP CHƯƠNG 3

Bài 1. Xác định 𝜅 (𝐺 ), 𝜅′(𝐺) và 𝛿(𝐺) cho mỗi đồ thị 𝐺 bên dưới

Bài 2. Tìm đồ thị 3-đều nhỏ nhất mà có chỉ số liên thông bằng 1.

Bài 3. Cho 𝐺 là một đồ thị liên thông với ít nhất 3 đỉnh. Đồ thị 𝐺′ có được từ 𝐺 bằng cách
thêm một cạnh nối hai đỉnh 𝑥, 𝑦 bất cứ khi nào 𝑑𝐺 (𝑥, 𝑦) = 2. Chứng minh rằng 𝐺′ là 2-liên
thông.

Bài 4. Xác định các khối của đồ thị được cho bởi danh sách các đỉnh liền kề như sau

Đỉnh Các đỉnh liền kề Đỉnh Các đỉnh liền kề Đỉnh Các đỉnh liền kề

𝑣1 𝑣2 , 𝑣6 𝑣7 𝑣2 , 𝑣6 𝑣13 𝑣10 , 𝑣11

𝑣2 𝑣1 , 𝑣7 𝑣8 𝑣3 , 𝑣7 , 𝑣11 𝑣14 𝑣11 , 𝑣13

𝑣3 𝑣8 , 𝑣17 , 𝑣18 𝑣9 𝑣4 , 𝑣5 𝑣15 𝑣13 , 𝑣16

𝑣4 𝑣5 , 𝑣9 𝑣10 𝑣7 , 𝑣13 𝑣16 𝑣13 , 𝑣15

𝑣5 𝑣4 , 𝑣9 𝑣11 𝑣8 , 𝑣13 𝑣17 𝑣3 , 𝑣18

𝑣6 𝑣1 , 𝑣7 𝑣12 𝑣11 , 𝑣14 𝑣18 𝑣3 , 𝑣17

Bài 5. Cho 𝐺 là một đồ thị với các khối 𝐵1 , 𝐵2 , … , 𝐵𝑘 . Chứng minh rằng

89
𝑘

𝑛(𝐺 ) = 1 − 𝑘 + ∑ 𝑛(𝐵𝑖 )
𝑖=1

Bài 6. Tìm công thức tính số cây bao trùm của một đồ thị liên thông 𝐺 theo số cây bao
trùm của các khối của 𝐺.

Bài 7. Cho 𝐺 là một đơn đồ thị với tập đỉnh là 𝑉 = {1,2,3, … ,11}. Hai đỉnh 𝑖 và 𝑗 kề nhau
khi và chỉ khi chúng không nguyên tố cùng nhau. Xác định các khối của 𝐺.

Bài 8. Chứng minh rằng 𝜅(𝐺 ) = 𝜅′(𝐺) khi 𝐺 là một đơn đồ thị có Δ(𝐺 ) ≤ 3.

Bài 9. Chứng minh rằng số cạnh tối đa của một đồ thị xương rồng đơn trên 𝑛 đỉnh là

3(𝑛 − 1)
⌊ ⌋
2

(Gợi ý: ⌊𝑥⌋ + ⌊𝑦⌋ ≤ ⌊𝑥 + 𝑦⌋)

Bài 10. Chứng minh rằng một đồ thị là 𝑘-cạnh liên thông khi và chỉ khi mỗi khối của nó
đều là 𝑘-cạnh liên thông.

Bài 11. Thiết kế thuật toán tìm đỉnh 1-median cho đồ thị đầy đủ với độ dài các cạnh bằng
1 và trọng số đỉnh tùy ý.

90
CHƯƠNG 4. ĐƯỜNG ĐI EULER VÀ CHU TRÌNH HAMILTON

4.1 Đường đi Euler


Một đường đi đơn qua mọi cạnh của 𝐺 được gọi là đường đi Euler (Euler trail) của
𝐺 vì Euler là người đầu tiên khảo sát sự tồn tại của đường đi như vậy trong đồ thị. Trong
bài báo đầu tiên về lý thuyết đồ thị (Euler, 1736), ông đã chỉ ra rằng khi đi dạo quanh thành
phố Königsberg không thể đi qua tất cả bảy cây cầu mỗi cây đúng một lần. Bản phác thảo
của thành phố Königsberg và dòng sông Pregel được thể hiện trong Hình 4.1a. Việc chứng
minh rằng một đường đi như thế là không tồn tại tương đương với việc chứng minh đồ thị
trong Hình 4.1b không chứa đường đi Euler.

Hình 4.1 Những cây cầu và đồ thị của thành phố Königsberg

Một chu trình Euler (Euler tour) là một chu trình đi qua tất cả các cạnh của 𝐺, mỗi
cạnh đúng một lần. Như vậy, một chu trình Euler là một đường đi Euler đóng. Một đồ thị
mà chứa một chu trình Euler thì được gọi là đồ thị Euler (eulerian graph).

Định lý 4.1 Một đồ thị liên thông khác rỗng là đồ thị Euler khi và chỉ khi nó không có
đỉnh bậc lẻ.

Chứng minh

91
Cho 𝐺 là một đồ thị Euler và cho 𝐶 là một chu trình Euler của 𝐺 có điểm đầu (và
điểm cuối) là 𝑢. Mỗi lần một đỉnh 𝑣 xuất hiện như một đỉnh trong của 𝐶 thì hai trong số
các cạnh liên thuộc với 𝑣 được tính vào bậc của 𝑣. Vì mọi chu trình Euler đều chứa tất cả
các cạnh của 𝐺 nên tất cả các đỉnh 𝑣 ≠ 𝑢 đều là đỉnh bậc chẵn. Tương tự, vì 𝐶 bắt đầu và
kết thúc tại 𝑢, nên bậc của 𝑢 cũng chẵn. Do đó 𝐺 không có đỉnh bậc lẻ.

Ngược lại, giả sử rằng 𝐺 là một đồ thị liên thông với ít nhất một cạnh và không có
đỉnh bậc lẻ nhưng lại không có chứa chu trình Euler. Chọn một đồ thị 𝐺 như thế và có số
cạnh ít nhất. Vì mỗi đỉnh của 𝐺 có bậc ít nhất là hai nên 𝐺 có chứa một một chu trình đơn.
Đặt 𝐶 là một chu trình đơn có số cạnh nhiều nhất trong 𝐺. Theo giả định, 𝐶 không phải là
một chu trình Euler của 𝐺 và do đó 𝐺 − 𝐸 (𝐶 ) có một thành phần liên thông 𝐺 ′ với ít nhất
một cạnh. Do 𝐶 là chu trình Euler của chính nó nên 𝐶 không có đỉnh bậc lẻ, do đó đồ thị
liên thông 𝐺 ′ cũng không có đỉnh bậc lẻ. Vì 𝜀 (𝐺′) < 𝜀(𝐺 ) nên theo sự lựa chọn của 𝐺 thì
𝐺 ′ có chu trình Euler 𝐶 ′ . Vì 𝐺 liên thông nên có một đỉnh 𝑣 là đỉnh chung của 𝐶 và 𝐶′. Khi
đó 𝐶𝐶 ′ là một chu trình của 𝐺 với 𝜀 (𝐶𝐶 ′ ) > 𝜀(𝐶 ), mâu thuẫn với cách chọn của 𝐶. □

Hệ quả 4.1 Một đồ thị liên thông có đường đi Euler khi và chỉ khi nó có nhiều nhất hai
đỉnh bậc lẻ.

Chứng minh

Nếu 𝐺 có đường đi Euler thì, như trong chứng minh Định lý 4.1, mỗi đỉnh khác với
điểm đầu và điểm cuối của đường đi này đều có có bậc chẵn.

Ngược lại, giả sử rằng 𝐺 là một đồ thị liên thông không tầm thường với nhiều nhất
hai đỉnh bậc lẻ. Nếu 𝐺 không có đỉnh bậc lẻ thì theo Định lý 4.1, 𝐺 có một chu trình Euler.
Nếu 𝐺 có đúng hai đỉnh bậc lẻ là 𝑢 và 𝑣 thì ta xét đồ thị 𝐺 + 𝑒, trong đó 𝑒 là cạnh mới nối
𝑢 và 𝑣. Mỗi đỉnh của 𝐺 + 𝑒 đều có bậc chẵn và do đó, theo Định lý 4.1, 𝐺 + 𝑒 có một chu
trình Euler 𝐶 = 𝑣0 𝑒1 𝑣1 . . . 𝑒𝜀+1 𝑣𝜀+1 , trong đó 𝑒1 = 𝑒. Đường đi 𝑣1 𝑒2 𝑣2 . . . 𝑒𝜀+1 𝑣𝜀+1 là một
đường đi Euler của 𝐺. □

4.2 Chu trình Hamilton


Đường đi sơ cấp đi qua mọi đỉnh của 𝐺 được gọi là đường đi Hamilton (Hamilton
path) của 𝐺; tương tự, một chu trình Hamilton (Hamilton cycle) của 𝐺 là một chu trình sơ

92
cấp chứa mọi đỉnh của 𝐺. Các đường đi và chu trình như vậy được đặt theo tên của
Hamilton (1856). Hamilton đã mô tả một trò chơi toán học trên khối mười hai mặt (Hình
4.2a) trong một lá thư gửi cho bạn của mình là Graves. Trò chơi như sau: một người ghim
vào năm đỉnh liên tiếp bất kỳ và người còn lại mở rộng đường đi này thành một chu trình
sơ cấp đi qua tất cả các đỉnh của đồ thị. Một đồ thị có chứa một chu trình Hamilton được
gọi là đồ thị Hamilton (hamiltonian graph). Khối mười hai mặt là đồ thị Hamilton (xem
Hình 4.2a); đồ thị Herschel (Hình 4.2b) không phải là đồ thị Hamilton, bởi vì nó lưỡng
phân và có số đỉnh lẻ.

Hình 4.2 (a) Khối mười hai mặt; (b) Đồ thị Herschel

Không như trường hợp đồ thị Euler, không có điều kiện cần và đủ cho một đồ thị
không tầm thường là một đồ thị Hamilton; việc tìm một điều kiện như vậy là một bài toán
chưa có lời giải trong lý thuyết đồ thị.

Định lý 4.2 Nếu 𝐺 là một đồ thị Hamilton thì với mọi tập con khác rỗng thực sự 𝑆 của 𝑉

𝜔(𝐺 − 𝑆) ≤ |𝑆| (4.1)

Chứng minh

Gọi 𝐶 là một chu trình Hamilton của 𝐺. Khi đó với mọi tập con khác rỗng thực sự
𝑆 của 𝑉, ta có

𝜔(𝐶 − 𝑆) ≤ |𝑆|
93
Ngoài ra, vì 𝐶 − 𝑆 là một đồ thị con bao trùm của 𝐺 − 𝑆 nên

𝜔 (𝐺 − 𝑆 ) ≤ 𝜔 (𝐶 − 𝑆 )

Từ hai bất đẳng thức trên ta suy ra (4.1). □

Xét đồ thị trong Hình 4.3. Đồ thị này có 9 đỉnh; khi xóa 3 đỉnh màu xám sẽ tạo ra
4 thành phần liên thông. Do đó, theo Định lý 4.2 thì đồ thị này không phải là đồ thị
Hamilton.

Hình 4.3 Minh họa Định lý 4.2

Trong một số trường hợp, ta có thể áp dụng Định lý 4.2 để chỉ ra một đồ thị không
phải là đồ thị Hamilton. Tuy nhiên, phương pháp này không phải lúc nào cũng dùng được;
chẳng hạn, đồ thị Petersen (Hình 4.4) không phải là đồ thị Hamilton, nhưng ta không thể
sử dụng Định lý 4.2 để chỉ ra điều này.

Hình 4.4 Đồ thị Petersen

94
Bây giờ chúng ta thảo luận một số điều kiện đủ để một đồ thị 𝐺 là đồ thị Hamilton;
vì một đồ thị là đồ thị Hamilton khi và chỉ khi đơn đồ thị tương ứng của nó là đồ thị
Hamilton nên ta chỉ cần xét đơn đồ thị. Chúng ta bắt đầu với một kết quả của Dirac (1952).

Định lý 4.3 Nếu 𝐺 là một đơn đồ thị với 𝑛 ≥ 3 và 𝛿 ≥ 𝑛/2, thì 𝐺 là Hamilton.

Chứng minh

Ta sẽ chứng minh bằng phản chứng. Giả sử rằng Định lý là sai và cho 𝐺 là một đơn
đồ thị có nhiều cạnh nhất mà không chứa chu trình Hamilton với 𝑛 ≥ 3 và 𝛿 ≥ 𝑛/2. Vì
𝑛 ≥ 3 nên 𝐺 không phải là đồ thị đầy đủ. Đặt 𝑢 và 𝑣 là hai đỉnh không kề nhau trong 𝐺.
Theo cách chọn 𝐺 thì 𝐺 + 𝑢𝑣 là một đồ thị Hamilton. Hơn nữa, vì 𝐺 là không phải là đồ
thị Hamilton nên mỗi chu trình Hamilton của 𝐺 + 𝑢𝑣 đều chứa cạnh 𝑢𝑣. Do đó, có một
đường đi Hamilton 𝑣1 𝑣2 . . . 𝑣𝑛 trong 𝐺 với điểm đầu 𝑢 = 𝑣1 và điểm cuối 𝑣 = 𝑣𝑛 . Đặt

𝑆 = {𝑣𝑖 |𝑢𝑣𝑖+1 ∈ 𝐸 } và 𝑇 = {𝑣𝑖 |𝑣𝑖 𝑣 ∈ 𝐸 }.

Vì 𝑣𝑛 ∉ 𝑆 ∪ 𝑇 nên

|𝑆 ∪ 𝑇| < 𝑛 (4.2)

Hơn nữa

|𝑆 ∩ 𝑇| = 0 (4.3)

vì nếu 𝑆 ∩ 𝑇 chứa một đỉnh 𝑣𝑖 thì 𝑣1 𝑣2 . . . 𝑣𝑖 𝑣𝑛 𝑣𝑛−1 . . . 𝑣𝑖+1 𝑣1 là một chu trình Hamilton
của 𝐺, trái với giả thuyết (xem Hình 4.5).

Hình 4.5 Minh họa Định lý 4.3

Từ (4.2) và (4.3), ta được

𝑑 (𝑢) + 𝑑 (𝑣 ) = |𝑆| + |𝑇| = |𝑆 ∪ 𝑇| + |𝑆 ∩ 𝑇| < 𝑛 (4.4)

Nhưng điều này mâu thuẫn với giả thuyết 𝛿 ≥ 𝑛/2. □

95
Từ chứng minh của Định lý 4.3, Bondy và Chvatal (1974) đã đưa ra một điều kiện
mạnh hơn so với của Dirac. Cơ sở của cách tiếp cận của họ là bổ đề sau.

Bổ đề 4.1 Cho 𝐺 là một đơn đồ thị và cho 𝑢 và 𝑣 là hai đỉnh không kề nhau trong 𝐺
sao cho

𝑑 (𝑢 ) + 𝑑 (𝑣 ) ≥ 𝑛 (4.5)

Khi đó 𝐺 là đồ thị Hamilton khi và chỉ khi 𝐺 + 𝑢𝑣 là đồ thị Hamilton.

Chứng minh

Nếu 𝐺 là một đồ thị Hamilton thì 𝐺 + 𝑢𝑣 cũng vậy. Ngược lại, giả sử rằng 𝐺 + 𝑢𝑣
là một đồ thị Hamilton nhưng 𝐺 không phải là đồ thị Hamilton. Khi đó, theo chứng minh
của Định lý 4.3, ta thu được (4.4). Nhưng điều này mâu thuẫn với giả thuyết (4.5). □

Ta định nghĩa bao đóng (closure) của 𝐺 là đồ thị có được từ 𝐺 bằng cách lần lượt
nối các cặp đỉnh không kề nhau mà có tổng bậc ít nhất là 𝑛 cho đến khi không còn cặp nào
như vậy. Ta ký hiệu bao đóng của 𝐺 là 𝑐 (𝐺 ).

Bổ đề 4.2 𝑐 (𝐺 ) được xác định tốt.

Chứng minh

Gọi 𝐺1 và 𝐺2 là hai đồ thị thu được từ 𝐺 bằng cách lần lượt nối các cặp đỉnh không
kề nhau mà có tổng bậc ít nhất là 𝑛 cho đến khi không còn cặp nào như vậy. Ký hiệu
𝑒1 , 𝑒2 , . . , 𝑒𝑚 và 𝑓1 , 𝑓2 , . . . , 𝑓𝑛 lần lượt là dãy các cạnh được thêm vào 𝐺, để thu được 𝐺1 và
𝐺2 . Chúng ta sẽ chứng minh rằng tất cả 𝑒𝑖 ∈ 𝐸 (𝐺2 ) và tất cả 𝑓𝑗 ∈ 𝐸(𝐺1 ).

Nếu có thể thì ta đặt 𝑒𝑘+1 = 𝑢𝑣 là cạnh đầu tiên trong chuỗi 𝑒𝑙 , 𝑒2 , . . . , 𝑒𝑛 không phải
là một cạnh của 𝐺2 . Đặt 𝐻 = 𝐺 + {𝑒1 , 𝑒2 , . . , 𝑒𝑘 }. Theo định nghĩa của 𝐺1 thì

𝑑 𝐻 (𝑢 ) + 𝑑 𝐻 (𝑣 ) ≥ 𝑛

Theo cách chọn 𝑒𝑘+1 thì 𝐻 là đồ thị con của 𝐺2 . Do đó

𝑑𝐺2 (𝑢) + 𝑑𝐺2 (𝑣 ) ≥ 𝑛

96
Điều này mâu thuẫn với cách xây dựng 𝐺2 vì 𝑢 và 𝑣 không kề nhau trong 𝐺2 . Do
đó, mỗi 𝑒𝑖 là một cạnh của 𝐺2 và tương tự, mỗi 𝑓𝑗 là một cạnh của 𝐺1 . Do đó 𝐺1 = 𝐺2 và
𝑐 (𝐺 ) được xác định tốt. □

Hình 4.6 minh họa việc xây dựng bao đóng cho đồ thị 𝐺 trên sáu đỉnh. Trong ví dụ
này thì 𝑐(𝐺) là một đồ thị đầy đủ, nhưng điều là không phải lúc nào cũng đúng.

Hình 4.6 Bao đóng của một đồ thị

Định lý 4.4 Một đơn đồ thị là đồ thị Hamilton khi và chỉ khi bao đóng của nó là đồ thị
Hamilton.

Chứng minh

Áp dụng Bổ đề 4.1 và định nghĩa của bao đóng. □

Hệ quả 4.2 Cho 𝐺 là một đồ thị đơn với 𝑛 ≥ 3. Nếu 𝑐 (𝐺 ) đầy đủ, thì 𝐺 là đồ thị Hamilton.

Chứng minh

Vì 𝑐(𝐺) là một đồ thị đầy đủ với ít nhất ba đỉnh nên 𝑐(𝐺) là đồ thị Hamilton. Theo
Định lý 4.4, ta suy ra 𝐺 cũng là đồ thị Hamilton. □

Ví dụ xét đồ thị trong Hình 4.7. Dễ thấy bao đóng của nó là một đồ thị đầy đủ. Do
đó, theo Hệ quả 4.2, nó là một đồ thị Hamilton. Đồ thị ở Hình 4.7 và đồ thị ở Hình 4.3 chỉ
khác nhau ở đầu múc của một cạnh nhưng đồ thị ở Hình 4.3 lại không phải là đồ thị
Hamilton.

97
Hình 4.7 Một đồ thị Hamilton

Định lý 4.5 Cho 𝐺 là một đơn đồ thị với dãy bậc (𝑑1 , 𝑑2 , . . . , 𝑑𝑛 ), trong đó 𝑑1 ≤ 𝑑2 ≤
. . . ≤ 𝑑𝑛 và 𝑛 ≥ 3. Nếu không có giá trị nào của 𝑚 nhỏ hơn 𝑛/2 mà 𝑑𝑚 ≤ 𝑚 và 𝑑𝑛−𝑚 <
𝑛 − 𝑚 thì 𝐺 là một đồ thị Hamilton.

Chứng minh

Cho 𝐺 là đồ thị thỏa mãn các giả thuyết của định lý. Ta sẽ chứng minh rằng bao
đóng 𝑐 (𝐺 ) của nó là một đồ thị đầy đủ, rồi áp dụng Hệ quả 4.2 để suy ra 𝐺 là đồ thị
Hamilton. Chúng ta ký hiệu bậc của đỉnh v trong 𝑐 (𝐺 ) là 𝑑′(𝑣 ).

Giả sử 𝑐 (𝐺 ) không phải là đồ thị đầy đủ và đặt u và v là hai đỉnh không kề nhau
trong 𝑐 (𝐺 ) với

𝑑′(𝑢) ≤ 𝑑′(𝑣 ) (4.6)

và 𝑑 ′ (𝑢) + 𝑑 ′ (𝑣 ) lớn nhất; vì trong 𝑐(𝐺) không có hai đỉnh liền kề có tổng bậc lớn hơn
hoặc bằng 𝑛, nên chúng ta có

𝑑′(𝑢) + 𝑑 ′ (𝑣 ) < 𝑛 (4.7)

Ta ký hiệu 𝑆 là tập hợp các đỉnh trong 𝑉\{𝑣 } mà không kề với 𝑣 trong 𝑐 (𝐺 ) và 𝑇 là
tập hợp các đỉnh trong 𝑉\{𝑢} mà không liền kề với 𝑢 trong 𝑐 (𝐺 ). Rõ ràng:

|𝑆| = 𝑛 − 1 − 𝑑 ′ (𝑣 ) và |𝑇| = 𝑛 − 1 − 𝑑′(𝑢) (4.8)

98
Hơn nữa, theo cách chọn của 𝑢 và 𝑣 thì mỗi đỉnh trong 𝑆 có bậc lớn nhất là 𝑑 ′ (𝑢)
và mỗi đỉnh trong 𝑇 ∪ {𝑢} có bậc lớn nhất là 𝑑 ′ (𝑣 ). Đặt 𝑑 ′ (𝑢) = 𝑚, từ (4.7) và (4.8) suy
ra 𝑐 (𝐺 ) có ít nhất m đỉnh có bậc tối đa là 𝑚 và ít nhất là 𝑛 − 𝑚 đỉnh có bậc nhỏ hơn 𝑛 − 𝑚.
Bởi vì 𝐺 là một đồ thị con bao trùm của 𝑐 (𝐺 ) nên điều này cũng đúng với 𝐺, do đó 𝑑𝑚 ≤
𝑚 và 𝑑𝑛−𝑚 < 𝑛 − 𝑚. Từ (4.6) và (4.7) suy ra 𝑚 < 𝑛/2. Vậy tồn tại 𝑚 < 𝑛/2 để 𝑑𝑚 ≤ 𝑚
và 𝑑𝑛−𝑚 < 𝑛 − 𝑚, mâu thuẫn giả thiết. Vậy 𝑐(𝐺) là một đồ thị đầy đủ và do đó theo Hệ
quả 4.2 thì 𝐺 là một đồ thị Hamilton. □

Ta có nhận xét sau: Định lý 4.5 mạnh hơn Định lý 4.3 nhưng không mạnh bằng Hệ
quả 4.2.

4.3 Bài toán người đưa thư Trung Hoa


Trong công việc của mình, một người đưa thư nhận thư tại bưu điện, chuyển nó và
sau đó quay lại bưu điện. Tất nhiên, anh ta phải qua mỗi con đường trong khu vực của mình
ít nhất một lần. Theo điều kiện này, anh ta muốn chọn tuyến đường sao cho anh ta đi bộ ít
nhất có thể. Bài toán này được gọi là bài toán người đưa thư Trung Hoa (Chinese postman
problem), vì nó lần đầu tiên được xem xét bởi một nhà toán học Trung Quốc, Kuan (1962).

Trong một đồ thị có trọng số, ta định nghĩa trọng số của một chu trình 𝑣0 𝑒1 𝑣1 … 𝑒𝑛 𝑣0
là ∑𝑛𝑖=1 𝑤(𝑒𝑖 ). Rõ ràng, bài toán người đưa thư Trung Hoa là tìm một chu trình có trọng số
nhỏ nhất trong một đồ thị liên thông với trọng số không âm. Ta sẽ gọi một chu trình như
vậy là một chu trình tối ưu (optimal tour).

Nếu 𝐺 là đồ thị Euler, thì bất kỳ chu trình Euler nào của 𝐺 cũng đều là chu trình tối
ưu vì chu trình Euler là chu trình đi qua mỗi cạnh đúng một lần. Trong trường hợp này, ta
có thể giải bài toán người đưa thư Trung Hoa khá dễ dàng vì có một thuật toán đa thức để
xác định chu trình Euler trong một đồ thị Euler. Thuật toán Fleury xây dựng một chu trình
Euler bằng cách đánh dấu một đường đi với một điều kiện là không đánh dấu cạnh cắt trong
phần đồ thị con chưa đánh dấu trừ khi không có cách nào khác.

Thuật toán Fleury

ĐẦU VÀO: Một đồ thị Euler 𝐺.

ĐẦU RA: Một chu trình Euler của 𝐺.

99
1. Chọn một đỉnh 𝑣0 tùy ý và đặt 𝑊0 = 𝑣0 .

2. Giả sử rằng đường đi 𝑊𝑖 = 𝑣0 𝑒1 𝑣1 … 𝑒𝑖 𝑣𝑖 đã được chọn.

Ta chọn một cạnh 𝑒𝑖+1 từ 𝐸\{𝑒1 , 𝑒2 , … , 𝑒𝑖 } sao cho

a. 𝑒𝑖+1 liên thuộc với 𝑣𝑖 ;

b. 𝑒𝑖+1 không phải là cạnh cắt của 𝐺𝑖 = 𝐺 − {𝑒1 , 𝑒2 , … , 𝑒𝑖 } trừ khi không có lựa
chọn nào khác.

3. Dừng khi bước 2 không thể thực hiện được nữa.

Theo định nghĩa thì thuật toán Fleury xây dựng một đường đi trong 𝐺.

Định lý 4.6 Nếu 𝐺 là một đồ thị Euler thì bất kỳ đường đi nào trong 𝐺 được xây dựng
bằng thuật toán Fleury đều là một chu trình Euler của 𝐺.

Chứng minh

Gọi 𝐺 là một đồ thị Euler và đặt 𝑊𝑘 = 𝑣0 𝑒1 𝑣1 … 𝑒𝑘 𝑣𝑘 là một đường đi trong 𝐺 được


xây dựng bằng thuật toán Fleury. Rõ ràng, điểm cuối 𝑣𝑘 phải có bậc 0 trong 𝐺𝑘 . Điều này
dẫn đến 𝑣𝑛 = 𝑣0 ; nói cách khác, 𝑊𝑘 là một chu trình.

Giả sử 𝑊𝑘 không phải là một chu trình Euler của 𝐺. Đặt 𝑆 là tập hợp các đỉnh có
bậc dương trong 𝐺𝑘 . Khi đó, 𝑆 khác rỗng và 𝑣𝑘 ∈ 𝑆̅, trong đó 𝑆̅ = 𝑉\𝑆. Đặt 𝑚 là số nguyên
lớn nhất sao cho 𝑣𝑚 ∈ 𝑆 và 𝑣𝑚+1 ∈ 𝑆̅. Vì 𝑊𝑘 kết thúc trong 𝑆̅ nên 𝑒𝑚+1 là cạnh duy nhất
của [𝑆, 𝑆̅] trong 𝐺𝑚 và do đó nó là cạnh cắt của 𝐺𝑚 (xem Hình 4.8).

Hình 4.8 Minh họa Định lý 4.6

100
Đặt 𝑒 là một cạnh khác của 𝐺𝑚 mà liên thuộc với 𝑣𝑚 . Theo bước 2 của thuật toán
thì 𝑒 cũng phải là một cạnh cắt của 𝐺𝑚 , và do đó là cạnh cắt của 𝐺𝑚 [𝑆]. Nhưng vì 𝐺𝑚 [𝑆] =
𝐺𝑘 [𝑆] nên mọi đỉnh trong 𝐺𝑚 [𝑆] đều có bậc chẵn. Tuy nhiên, điều này dẫn đến 𝐺𝑚 [𝑆]
không có cạnh cắt, mâu thuẫn. □

Nếu 𝐺 không phải là một đồ thị Euler thì bất kỳ chu trình nào đi qua tất cả các cạnh
trong 𝐺, kể cả chu trình tối ưu, đều đi qua một số cạnh nhiều hơn một lần. Ví dụ, trong đồ
thị ở Hình 4.9, chu trình 𝐶 = 𝑥𝑢𝑦𝑤𝑣𝑧𝑤𝑦𝑥𝑢𝑤𝑣𝑥𝑧𝑦𝑥 là một chu trình tối ưu. Lưu ý rằng
bốn cạnh ux, xy, yw và wv xuất hiện hai lần trong chu trình này.

Hình 4.9 Minh họa chu trình tối ưu

Hình 4.11

Thật thuận tiện, để giới thiệu phép toán nhân đôi một cạnh. Một cạnh e được gọi là
nhân đôi (duplicated) khi các đầu của nó được nối bởi một cạnh mới có trọng số w(e). Bằng
cách nhân đôi các cạnh ux, xy, yw và wv trong đồ thị ở Hình 4.9a, ta thu được đồ thị như ở
Hình 4.9b.

101
Bài toán người đưa thư Trung Hoa có thể phát biểu lại như sau: cho một đồ thị có
trọng số 𝐺 với trọng số không âm,

(i) Nhân đôi một số cạnh của 𝐺 để được đồ thị Euler có trọng số 𝐺 ∗ với
∑𝑒∈𝐸(𝐺 ∗)\𝐸(𝐺) 𝑤 (𝑒) nhỏ nhất;

(ii) Tìm một chu trình Euler trong 𝐺 ∗ .

Bài toán này tương đương với bài toán người đưa thư Trung Hoa vì một chu trình
đi qua tất cả các cạnh của 𝐺 trong đó cạnh 𝑒 được đi qua 𝑚(𝑒) lần tương ứng với một chu
trình Euler trong đồ thị thu được từ 𝐺 bằng cách nhân đôi 𝑚(𝑒) − 1 lần cạnh 𝑒 và ngược
lại.

Thuật toán Fleury giải được bài toán ở (ii). Edmonds và Johnson (1973) cũng đã tìm
ra một thuật toán đa thức để giải bài toán ở (i). Vì thuật toán này khá phức tạp nên chúng
tôi sẽ không trình bày trong giáo trình này. Tuy nhiên, nếu 𝐺 có đúng hai đỉnh bậc lẻ thì
bài toán khá đơn giản.

Giả sử 𝐺 có đúng hai đỉnh bậc lẻ là 𝑢 và 𝑣. Đặt 𝐺 ∗ là đồ thị Euler thu được từ 𝐺
bằng cách nhân đôi các cạnh và ta viết 𝐸 ∗ thay cho 𝐸 (𝐺 ∗ ). Rõ ràng đồ thị con 𝐺 ∗ [𝐸 ∗ \𝐸 ]
của 𝐺 ∗ (sinh bởi các cạnh của 𝐺 ∗ không nằm trong 𝐺) cũng chỉ có hai đỉnh bậc lẻ là 𝑢 và
𝑣. Theo Hệ quả 1.1 thì 𝑢 và 𝑣 cùng thuộc một thành phần liên thông của 𝐺 ∗ [𝐸 ∗ \𝐸 ] và do
đó có một đường đi 𝑃 ∗ nối 𝑢 và 𝑣. Dễ thấy

∑ 𝑤 (𝑒 ) ≥ 𝑤 (𝑃 ∗ ) ≥ 𝑤 (𝑃 )
𝑒∈𝐸 ∗ \𝐸

Trong đó 𝑃 là đường đi có trọng số nhỏ nhất trong 𝐺 nối 𝑢 và 𝑣. Do đó ∑𝑒∈𝐸∗\𝐸 𝑤(𝑒)


là nhỏ nhất khi 𝐺 ∗ thu được từ 𝐺 bằng cách nhân đôi các cạnh trên đường đi có trọng số
nhỏ nhất từ 𝑢 đến 𝑣. Thuật toán tìm đường đi ngắn nhất giữa hai đỉnh đã được trình bày ở
mục 1.6.

4.4 Bài toán người bán hàng


Một nhân viên bán hàng muốn đến một số thị trấn và sau đó quay trở lại điểm xuất
phát của mình. Biết trước thời gian di chuyển giữa các thị trấn, anh ta lên kế hoạch cho
hành trình của mình như thế nào để anh ta đến mỗi thị trấn đúng một lần và tổng thời gian
102
di chuyển là ngắn nhất? Bài toán này được gọi là bài toán người bán hàng (travelling
salesman problem). Theo ngôn ngữ của lý thuyết đồ thị, mục tiêu là tìm một chu trình
Hamilton có trọng số nhỏ nhất trong một đồ thị đầy đủ có trọng số. Ta sẽ gọi một chu trình
như vậy là một chu trình tối ưu. Khác với bài toán tìm đường đi ngắn nhất và bài toán liên
kết, hiện tại vẫn chưa có thuật toán đa thức nào có thể giải được bài toán người bán hàng.
Do đó, chúng ta sẽ chuyển sang nghiên cứu một phương pháp để có được một lời giải tương
đối tốt (nhưng không nhất thiết là tối ưu).

Một cách tiếp cận là trước tiên tìm một chu trình Hamilton 𝐶, sau đó ta sẽ chỉnh sửa
𝐶 để được một chu trình Hamilton mới có trọng số nhỏ hơn. Ta có thể chỉnh sửa như sau

Đặt 𝐶 = 𝑣1 𝑣2 … 𝑣𝑛 𝑣1 . Khi đó với mọi 𝑖 và 𝑗 thỏa mãn 1 < 𝑖 + 1 < 𝑗 < 𝑛, ta có thể
có được một chu trình Hamilton mới

𝐶𝑖𝑗 = 𝑣1 𝑣2 … 𝑣𝑖 𝑣𝑗 𝑣𝑗−1 … 𝑣𝑖+1 𝑣𝑗+2 … 𝑣𝑛 𝑣1

bằng cách xóa các cạnh 𝑣𝑖 𝑣𝑖+1 và 𝑣𝑗 𝑣𝑗+1 và thêm các cạnh 𝑣𝑖 𝑣𝑗 và 𝑣𝑖+1 𝑣𝑗+1 như trong Hình
4.10.

Hình 4.10 Minh họa thay đổi một cặp cạnh trong chu trình Hamilton

Nếu có hai số 𝑖 và 𝑗 thỏa mãn

𝑤(𝑣𝑖 𝑣𝑗 ) + 𝑤(𝑣𝑖+1 𝑣𝑗+1 ) < 𝑤 (𝑣𝑖 𝑣𝑖+1 ) + 𝑤(𝑣𝑗 𝑣𝑗+1 )

thì chu trình 𝐶𝑖𝑗 tốt hơn 𝐶, tức là 𝑤(𝐶𝑖𝑗 ) < 𝑤(𝐶).

Sau khi thực hiện một dãy các chỉnh sửa ở trên, ta được một chu trình mà không thể
tốt hơn nữa bằng các phương pháp này. Chu trình cuối cùng này không chắc là tối ưu,

103
nhưng nó là khá tốt; để có một chu trình tốt hơn ta có thể áp dụng thủ tục này nhiều lần và
mỗi lần xuất phát với một chu trình khác nhau.

Hình 4.11 Đồ thị thể hiện khoảng cách sáu thành phố

Ví dụ, xem xét đồ thị có trọng số trong Hình 4.11; đồ thị này đã được sử dụng để
minh họa cho thuật toán Kruskal trong phần 2.5. Bắt đầu với chu trình L MC NY Pa Pe T
L, ta có thể áp dụng một dãy gồm ba phép chỉnh sửa, như minh họa trong Hình 4.12, ta thu
được chu trình L NY MC T Pe Pa L có trọng số là 192.

Phương pháp chỉnh sửa trên đã được phát triển thêm bởi Lin (1965) và Held và Karp
(1970; 1971). Cụ thể, Lin đã phát hiện ra rằng quy trình chỉnh sửa chu trình sẽ hiệu quả
hơn nếu ta thay thế ba cạnh cùng một lúc thay vì chỉ hai; tuy nhiên, khi ta thay thế cùng
lúc nhiều cạnh hơn nữa thì thuật toán không hiệu quả hơn. Để biết rõ hơn và bài toán người
bán hàng, xem Bellmore và Nemhauser (1968).

Hình 4.12 Minh họa phương pháp cải tiến chu trình

104
BÀI TẬP CHƯƠNG 4

Bài 1. Hình nào trong các hình bên dưới có thể vẽ được bằng một nét (không nhất bút lên
và không đồ lại)?

Bài 2. Có tồn tại một đồ thị Euler với số đỉnh là số chẵn và số cạnh là số lẻ không? Nếu có
hãy cho một ví dụ, nếu không thì hãy giải thích tại sao.

Bài 3. Chứng minh rằng nếu 𝐺 là đồ thị Euler thì mọi khối của 𝐺 đều là đồ thị Euler.

Bài 4. Chứng minh rằng nếu 𝐺 không có đỉnh bậc lẻ thì sẽ có các chu trình sơ cấp không
có cạnh chung 𝐶1 , 𝐶2 , … , 𝐶𝑚 sao cho 𝐸 (𝐺 ) = 𝐸 (𝐶1 ) ∪ 𝐸 (𝐶2 ) ∪ … ∪ 𝐸 (𝐶𝑚 ).

Bài 5. Chứng minh rằng nếu đồ thị liên thông 𝐺 có 2𝑘 đỉnh bậc lẻ thì sẽ có 𝑘 đường đi sơ
cấp không có cạnh chung 𝑄1 , 𝑄2 , … , 𝑄𝑘 trong 𝐺 sao cho 𝐸 (𝐺 ) = 𝐸 (𝑄1 ) ∪ 𝐸 (𝑄2 ) ∪ … ∪
𝐸 (𝑄𝑘 ).

Bài 6. Tìm giá trị của 𝑟 để 𝐾𝑟,𝑟 là đồ thị Hamilton.

Bài 7. Đồ thị Grötzsch (xem Hình 4.13) có phải là đồ thị Hamilton không?

105
Hình 4.13 Đồ thị Grötzsch

Bài 8. Đồ thị trong hình dưới đây có phải là đồ thị Hamilton không?

Bài 9. Chứng minh rằng nếu 𝐺 không phải là đồ thị 2-liên thông thì 𝐺 không phải là đồ thị
Hamilton.

Bài 10. Chứng minh rằng nếu 𝐺 là đồ thị lưỡng phân với phân hoạch (𝑋, 𝑌) với |𝑋 | ≠ |𝑌|
thì 𝐺 không phải là đồ thị Hamilton.

Bài 11. Chứng minh rằng nếu 𝐺 có một đường đi Hamilton thì với mọi 𝑆 ⊆ 𝑉(𝐺) thì số
thành phần liên thông của 𝐺 − 𝑆 tối đa là |𝑆| + 1.

Bài 12. Tìm một chu trình có độ dài ngắn nhất đi qua tất cả các cạnh của mỗi đồ thị sau

106
Bài 13. Ứng dụng bài toán Người đưa thư Trung Hoa để tìm một phương án để người đưa
thư có thể giao được thư cho tất cả mọi người trong thành phố bạn đang sống.

107
CHƯƠNG 5. ĐỒ THỊ CÓ HƯỚNG

5.1 Đồ thị có hướng


Mặc dù nhiều bài toán thực tế được mô hình hóa theo ngôn ngữ lý thuyết đồ thị, tuy
nhiên một số khái niệm đã biết về đồ thị không thích hợp cho các bài toán này. Chẳng hạn,
khi giải quyết một vấn đề liên quan đến luồng giao thông, một số tuyến đường là đường
một chiều và do đó chỉ một hướng di chuyển của các phương tiện giao thông được cho
phép. Rõ ràng, trượng hợp này chúng ta không thể dùng các khái niệm độ thị thông thường
đã biết để mô hình hóa bài toán này. Chúng ta cần phải gán thêm vào đồ thị các định hướng.

Một đồ thị có hướng 𝐷 đươc xác định bởi một bộ ba (𝑉 (𝐷 ), 𝐴(𝐷 ), 𝜓𝐷 ) bao gồm tập
đỉnh 𝑉(𝐷) khác rỗng, tập cạnh A(D), và hàm liên thuộc 𝜓𝐷 biểu diễn sự liên hệ của một
cạnh trong 𝐴(𝐷) với hai đỉnh có thứ tự trong 𝐷. Nếu 𝑎 là một cạnh sao cho 𝜓𝐷 (𝑎) = (𝑢, 𝑣),
ta nói rằng cạnh a kết nối 𝑢 đến 𝑣; 𝑢 là điểm đầu và 𝑣 là điểm cuối của 𝑎.

Một đồ thị có hướng 𝐷′ là đồ thị con của D nếu 𝑉 (𝐷 ′ ) ⊂ 𝑉(𝑉), 𝐴(𝐷 ′ ) ⊂ 𝐴(𝐷) và
hàm liên thuộc 𝜓𝐷′ là hàm giới hạn của 𝜓𝐷 trên cập 𝐴(𝐷′). Các thuật ngữ và kí hiệu của
đồ thị con có hướng giống như đồ thị con đã trình bày ở các chương trước.

Với mỗi đồ thị có hướng 𝐷, chúng ta có thể liên hệ với một đồ thị (vô hướng) 𝐺 có
cùng tập đỉnh; hơn nữa mỗi cạnh trong 𝐷 luôn có một cạnh tương ứng trong 𝐺 có cùng
đỉnh đầu mút. Đồ thị này gọi là đồ thị vô hướng tương ứng của 𝐷. Ngược lại, với mọi đồ
thị vô hướng G cho trước, chúng ta luôn thu được một đồ thị có hướng từ 𝐺 bằng cách xác
định thứ tự cho mỗi cặp đỉnh kề nhau. Đồ thị này gọi là một đồ thị định hướng tương ứng
của G.

Đồ thị có hướng có biểu diễn thông qua hình ảnh một cách đơn giản với một biểu
diễn giống như đồ thị vô hướng và các mũi tên biểu diễn định hướng. Hầu hết các khái
niệm trong đồ thị vô hướng có thể áp dụng trong trường hợp có hướng.Chẳng hạn, một đồ
thị có hướng trong Hình 5.1 là một đồ thị liên thông và không có chu trình nào có độ dài
lớn hơn ba vì đồ thị vô hướng tương ứng có các tính chất này. Tuy nhiên, một số khái niệm
liên quan đến định hướng chỉ được áp dụng cho trường hợp có hướng.

108
Hình 5.1(a) Đồ thị có hướng D; (b) Đồ thị vô hướng tương ứng

Một đường đi có hướng trong 𝐷 là một dãy hữu hạn 𝑊 = (𝑣0 , 𝑎1 , 𝑣1 , … , 𝑎𝑘 , 𝑣𝑘 ) với
các đỉnh 𝑣0 , … , 𝑣𝑘 và cạnh 𝑎1 , … , 𝑎𝑘 . Trong đó, mỗi cạnh 𝑎𝑖 có đỉnh đầu 𝑣𝑖−1 và đỉnh cuối
𝑣𝑖 . Đường đi 𝑊 có thể được biểu diễn đơn giản bằng dãy các đỉnh 𝑊 = (𝑣0 , 𝑣1 , … , 𝑣𝑘 ).
Đường đi 𝑊 là đường đi đơn có hướng nếu đường đi vô hướng tương ứng của nó là đường
đi đơn; đường đi sơ cấp có hướng, chu trình có hướng được định nghĩa tương tự.

Nếu có một đường đi có hướng từ 𝑢 đến 𝑣, đỉnh 𝑣 được gọi là có thể tiếp cận được
từ định 𝑢. Hai đỉnh được gọi là liên thông có hướng trong 𝐷 nếu mỗi đỉnh có thể tiếp cận
từ đỉnh kia và ngược lại. Giống như trong trường hợp đồ thị vô hướng, liên thông trong đồ
thị có hướng là một quan hệ tương đương. Các đồ thị vô hướng con 𝐷 [𝑉1 ], 𝐷 [𝑉2 ], … , 𝐷[𝑉𝑚 ]
cảm sinh bởi một phân hoạch (𝑉1 , 𝑉2 , … , 𝑉𝑚 ) của V(D) được gọi là các thành phần có hướng
của 𝐷. Một đồ thị có hướng 𝐷 được gọi là liên thông (có hướng) nếu nó có đúng một thành
phần có hướng. Đồ thị có hướng 𝐷 trong Hình 5.2a không liên thông; nó có ba thành phần
có hướng như trong Hình 5.2b.

109
Hình 5.2 (a) Đồ thị có hướng D; (b) Ba thành phần có hướng của D

Bậc vào (indegree) 𝑑𝐷− (𝑣) của một đỉnh 𝑣 trong 𝐷 là số cạnh có đỉnh cuối là 𝑣; bậc
ra (outdegree) 𝑑𝐷− (𝑣) của một đỉnh 𝑣 trong 𝐷 là số cạnh có đỉnh đầu là 𝑣. Giá trị nhỏ nhất
và giá trị lớn nhất của bậc đỉnh vào và bậc đỉnh ra trong 𝐷 được kí hiệu tương ứng là
𝛿 − (𝐷), Δ− (𝐷 ) và 𝛿 + (𝐷), Δ+ (𝐷 ). Một đồ thị có hướng là chặt chẽ (strict) nếu nó không có
vành khuyên và không có cạnh nào cùng đỉnh với hướng giống nhau. Trong chương này,
𝐷 sẽ được kí hiệu là đồ thị có hướng và 𝐺 là đồ thị vô hướng tương ứng. Cho thuận tiện, ta
kí hiệu tập đỉnh của D là V (thay vì V(D)), và số đỉnh và số cạnh của 𝐷 là 𝜈 và 𝜀. Các kí
hiệu có liên quan đến 𝐷 cũng có thể được bỏ qua; chúng ta viết 𝐴 thay cho 𝐴(𝐷 ), 𝑑 + thay
cho 𝑑 + (𝐷), 𝛿 − thay cho 𝛿 − (𝐷) và vâng vâng.

5.2 Đường đi có hướng


Không có mối quan hệ chặt chẽ nào giữa độ dài của các đường đi và các đường đi
có hướng trong một đồ thị có hướng. Điều này là rõ ràng từ đồ thị có hướng Hình 5.3,
không có đường đi có hướng nào có độ dài lớn hơn 1.

Hình 5.3 Minh họa đường đi có hướng

Đáng ngạc nhiên là một số thông tin về độ dài của các đường đi có hướng trong một
đồ thị có hướng có thể thu được bằng cách nhìn vào số màu của nó. Định lý sau đây, do
Roy (1967) và Gallai (1968) đưa ra, làm cho điều này trở nên chính xác.

110
Định lý 5.1 Một đồ thị có hướng 𝐷 chứa một đường có hướng có độ dài 𝜒 − 1.

Chứng minh

Gọi 𝐴′ là tập hợp các cung nhỏ nhất của 𝐷 sao cho 𝐷’ = 𝐷 − 𝐴′ không chứa chu
trình có hướng, và cho độ dài của đường có hướng dài nhất bằng 𝐷′ là 𝑘. Bây giờ chỉ định
màu 1,2 , . . . , 𝑘 + 1 cho các đỉnh của 𝐷′ bằng cách gán màu 𝑖 cho đỉnh 𝑣 nếu độ dài của
một đường có hướng dài nhất trong 𝐷′ với gốc 𝑣 là 𝑖 − 1. Ký hiệu 𝑉, tập hợp các đỉnh có
màu 𝑖. Chúng ta sẽ chỉ ra rằng (𝑉1 , 𝑉2 , . . . , 𝑉𝑘 + 1 ) là màu (𝑘 + 1)–đỉnh thích hợp của 𝐷.

Đầu tiên, quan sát rằng điểm gốc và điểm cuối của bất kỳ đường đi có hướng nào
trong 𝐷′ đều có màu sắc khác nhau. Đối với 𝑃 là đường đi có hướng (𝑢, 𝑣) có độ dài dương
trong 𝐷′ và giả sử 𝑣 ∈ 𝑉𝑖 . Khi đó, có một đường đi có hướng 𝑄 = (𝑣1 , 𝑣2 , . . , 𝑣𝑖 ) trong 𝐷′,
trong đó 𝑣1 = 𝑣. Vì 𝐷′ không chứa chu trình có hướng nên 𝑃𝑄 là đường đi có hướng với
gốc là 𝑢 và độ dài ít nhất là 𝑖. Như vậy 𝑢 ∉ 𝑉𝑖 .

Bây giờ chúng ta có thể chứng minh rằng các đầu của bất kỳ cung nào của 𝐷 đều có
các màu khác nhau. Giả sử (𝑢, 𝑣 ) ∈ 𝐴(𝐷). Nếu (𝑢, 𝑣 ) ∈ 𝐴(𝐷′) thì (𝑢, 𝑣) là một đường có
hướng trong 𝐷′ và do đó 𝑢 và 𝑣 có màu khác nhau. Ngược lại, (𝑢, 𝑣 ) ∈ 𝐴′. Theo tính toán
nhỏ nhất của 𝐴′, 𝐷′ + (𝑢, 𝑣) chứa một chu trình có hướng 𝐶. 𝐶 − (𝑢, 𝑣) là một đường đi
có hướng (𝑢, 𝑣 ) trong 𝐷′ và do đó trong trường hợp này, 𝑢 và 𝑣 cũng có màu khác nhau.

Do đó (𝑉1 , 𝑉2 , … , 𝑉𝑘+1 ) là số màu đỉnh thích hợp của 𝐷. Điều này dẫn đến 𝜒 ≤ 𝑘 +
1, và do đó 𝐷 có một đường đi có hướng với độ dài 𝑘 ≥ 𝜒 − 1. □

Định lý 5.1 là tốt nhất có thể xảy ra khi mọi đồ thị 𝐺 đều có hướng trong đó đường
có hướng dài nhất có độ dài 𝜒 − 1. Cho màu đỉnh 𝜒 thích hợp (𝑉1 , 𝑉2 , . . , 𝑉𝜒 ) của 𝐺, chúng
ta định hướng 𝐺 bằng cách chuyển đổi cạnh 𝑢𝑣 thành cung (𝑢, 𝑣) nếu 𝑢 ∈ 𝑉𝑖 và 𝑣 ∈ 𝑉𝑗 với
𝑖 < 𝑗. Rõ ràng, không có đường đi có hướng nào trong định hướng này của 𝐺 có thể chứa
nhiều hơn 𝜒 đỉnh, vì không có hai đỉnh nào của đường đi có thể có cùng màu.

Một định hướng của một đồ thị đầy đủ được gọi là một đồ thị giải đấu. Các đồ thị
giải đấu trên bốn đỉnh được thể hiện trong Hình 5.4. Mỗi đồ thị có thể được coi là kết quả
của các trò chơi trong một giải đấu vòng tròn giữa bốn người chơi; ví dụ, đồ thị đầu tiên

111
trong hình 2 cho thấy một người chơi đã thắng cả ba trận và ba người còn lại mỗi người
thắng một trận.

Hình 5.4 Chu trình đơn có hướng trên 4 đỉnh

Một đường đi Hamilton có hướng của 𝐷 là đường đi có hướng bao gồm tất cả các
đỉnh của 𝐷. Một hệ quả tức thì của Định lý 5.1 là mọi đồ thị giải đấu đều có một đường đi
như vậy. Điều này lần đầu tiên được chứng minh bởi Rédei (1934).

Hệ quả 5.1 Mọi đồ thị giải đấu đều có một đường đi Hamilton có hướng.

Chứng minh

Nếu 𝐷 là một đồ thị giải đấu, thì 𝜒 = 𝑣. □

Một điều thú vị khác về các đồ thị giải đấu là luôn có một đỉnh mà từ đó mọi đỉnh
khác có thể tiếp cận được nhiều nhất qua hai bước. Chúng ta sẽ nhận được điều này như
một trường hợp đặc biệt của một định lý của Chvátal và Lovász (1974). Một lân cận trong
của đỉnh 𝑣 trong D là đỉnh 𝑢 sao cho (𝑢, 𝑣 ) ∈ 𝐴; một lân cận ngoài của 𝑣 là một đỉnh 𝑤
sao cho (𝑣, 𝑤) ∈ 𝐴. Chúng ta ký hiệu các tập hợp lân cận trong và lân cận ngoài của 𝑣
trong 𝐷 lần lượt là 𝑁𝐷− (𝑣 ) và 𝑁𝐷+ (𝑣 ).

Định lý 5.2 Một đồ thị có hướng không có vành khuyên D có tập độc lập S sao cho mỗi
đỉnh của D không thuộc S đều có thể tiếp cận được từ một đỉnh trong S bằng một đường đi
có độ dài tối đa là hai.

Chứng minh

Bằng quy nạp trên 𝑣. Định lý đúng với 𝑣 = 1. Giả sử rằng nó đúng với tất cả các đồ
thị có hướng có ít hơn 𝑣 đỉnh và cho 𝑣 là một đỉnh tùy ý của D. Theo giả thiết quy nạp, tồn

112
tại trong 𝐷 ′ = 𝐷 − ({𝑢} ∪ 𝑁 + (𝑣 )) một tập S’ độc lập sao cho mỗi đỉnh của D' không
thuộc S’ đều có thể tiếp cận được từ một đỉnh trong S’ bằng một đường đi có độ dài nhiều
nhất là hai. Nếu 𝑣 là lân cận ngoài của đỉnh 𝑢 nào đó của S’, thì mọi đỉnh của 𝑁 + (𝑣 ) đều
có thể tiếp cận được từ 𝑢 bằng một đường đi có hướng có độ dài hai. Do đó, trong trường
hợp này, 𝑆 = 𝑆’ thỏa mãn tính chất yêu cầu. Mặt khác, nếu 𝑣 không phải là lân cận ngoài
của bất kỳ đỉnh nào của S’, thì 𝑣 không được nối với đỉnh nào của S’ và tập độc lập 𝑆 =
𝑆 ′ ∪ {𝑣 } có tính chất yêu cầu. □

Hệ quả 5.2 Một đồ thị giải đấu chứa một đỉnh mà từ đó mọi đỉnh khác đều có thể tiếp cận
được bằng một đường đi có hướng có độ dài tối đa là hai.

Chứng minh

Nếu D là một đồ thị giải đấu thì 𝛼 = 1. □

5.3 Chu trình có hướng


Hệ quả 5.1 cho ta biết rằng mọi đồ giải đấu đều chứa một đường đi Hamilton có
hướng. Tuy nhiên, có thể rút ra nhiều kết luận mạnh mẽ hơn nếu đồ thị giải đấu được giả
định là liên kết với nhau. Định lý sau là do Moon (1966). Nếu S và T là các tập con của V,
chúng ta biểu thị bằng (𝑆, 𝑇) tập hợp các cung của D có đuôi ở S và đầu của chúng ở T.

Định lý 5.3 Mỗi đỉnh của một đồ thị giải đấu liên thông có hướng D với 𝑣 ≥ 3 được chứa
trong một k-chu trình có hướng, 3 ≤ 𝑘 ≤ 𝑣.

Chứng minh

Gọi D là một đồ thị giải đấu liên thông có hướng với 𝑣 ≥ 3, và gọi 𝑢 là đỉnh bất kỳ
của D. Đặt 𝑆 = 𝑁 + (𝑢) và 𝑇 = 𝑁 − (𝑢). Đầu tiên chúng ta chỉ ra rằng u nằm trong một chu
trình 3 có hướng. Vì D là liên thông có hướng nên cả S và T đều không rỗng; và, vì lý do
tương tự, (S,T) phải khác rỗng (xem Hình 5.5). Do đó, có một số cung (𝑣, 𝑤) trong D với
𝑣 ∈ 𝑆 và 𝑤 ∈ 𝑇, và u nằm trong chu trình 3 có hướng (𝑢, 𝑣, 𝑤, 𝑢).

113
Hình 5.5 Minh họa chứng minh Định lý 5.3

Định lý được chứng minh bằng quy nạp trên k. Giả sử rằng u nằm trong chu trình
có hướng có tất cả các độ dài từ 3 đến n, trong đó 𝑛 < 𝑣. Chúng ta sẽ chứng minh rằng u
nằm trong chu trình 𝑛 + 1 có hướng.

Gọi 𝐶 = (𝑣0 , 𝑣1 , . . , 𝑣𝑛 ) là một chu trình n có hướng trong đó 𝑣0 = 𝑣𝑛 = 𝑢. Nếu có


một đỉnh 𝑣 trong 𝑉(𝐷)\𝑉(𝐶) vừa là đầu của cung có đuôi ở C vừa là đuôi của cung có đầu
ở C, thì có các đỉnh liền kề là 𝑣𝑖 và 𝑣𝑖+1 trên C sao cho cả (𝑣𝑖 , 𝑣) và (𝑣, 𝑣𝑖+1 ) đều là cung
của D. Trong trường hợp này u nằm trong chu trình có hướng (𝑣0 , 𝑣1 , … , 𝑣𝑖 , 𝑣, 𝑣𝑖+1 , … , 𝑣𝑛 )
có độ dài 𝑛 + 1.

Mặt khác, ký hiệu S là tập các đỉnh trong 𝑉(𝐷)\𝑉(𝐶) là đầu của các cung nối với
C và T là tập các đỉnh trong 𝑉(𝐷)\𝑉(𝐶) là các đuôi của các cung nối với C (xem Hình
5.6).

Như trước đây, vì D là liên thông có hướng nên S, T và (S, T) đều khác rỗng, và có
một số cung (𝑣, 𝑤) trong D với 𝑣 ∈ 𝑆 và 𝑤 ∈ 𝑇. Do đó 𝑢 nằm trong chu trình có hướng
(𝑣0 , 𝑣, 𝑤, 𝑣2 , … , 𝑣𝑛 ) có độ dài 𝑛 + 1. □

114
Hình 5.6 Minh họa chứng minh Định lý 5.3

Chu trình Hamilton có hướng của D là chu trình có hướng bao gồm mọi đỉnh của
D. Theo Định lý 5.3 (và lần đầu tiên được chứng minh bởi Camion, 1959) rằng mọi đồ thị
giải đấu liên thông có hướng đều chứa một chu trình như vậy. Định lý tiếp theo sẽ mở rộng
định lý của Dirac (4.3) đến đồ thị có hướng. Nó là một trường hợp đặc biệt trong định lý
của Ghouila-Houri (1960).

Định lý 5.4 Nếu D nghiêm ngặt và min{𝛿 − , 𝛿 + } ≥ 𝑣/2 > 1, thì D chứa một chu trình
Hamilton có hướng.

Chứng minh

Giả sử rằng D thỏa mãn các giả thiết của định lý, nhưng không chứa một chu trình
Hamilton có hướng. Kí hiệu độ dài của chu trình có hướng dài nhất trong D bằng 𝑙, và gọi
𝐶 = (𝑣1 . 𝑣2 , … , 𝑣𝑙 . 𝑣1 ) là chu trình có hướng trong D có độ dài 𝑙. Chúng ta lưu ý rằng 𝑙 >
𝑣/2 (bài tập 10.1.7). Gọi P là đường đi có hướng dài nhất trong 𝐷 − 𝑉(𝐶) và giả sử P có
gốc 𝑢, đuôi là 𝑣 và độ dài m (xem Hình 5.7). Rõ ràng

𝑣 ≥𝑙+𝑚+1 (5.1)

và, do 𝑙 > 𝑣/2,

𝑚 < 𝑣/2 (5.2)

Đặt

𝑆 = {𝑖|(𝑣𝑖−1 , 𝑢) ∈ 𝐴} 𝑣à 𝑇 = {𝑖 |(𝑣, 𝑣𝑖 ) ∈ 𝐴}

115
Trước tiên, ta cho thấy rằng S và T là rời rạc. Gọi 𝐶𝑗,𝑘 là phần của C có gốc 𝑣𝑗 và
ngọn là 𝑣𝑘 . Nếu một số nguyên 𝑖 ở cả S và T, D sẽ chứa chu trình có hướng
𝐶𝑖,𝑖−1 (𝑣𝑣−1 , 𝑢)𝑃(𝑣, 𝑣𝑖 ) có độ dài 𝑙 + 𝑚 + 1, mâu thuẫn với lựa chọn của C. Do đó

𝑆∩𝑇 =∅ (5.3)

Bây giờ, vì P là đường đi có hướng lớn nhất trong 𝐷 − 𝑉(𝐶),𝑁 − (𝑢) ⊆ 𝑉 (𝑃) ∪
𝑉(𝐶). Nhưng số lân cận của u trong C chính xác là |𝑆| và do đó 𝑑𝐷− (𝑢) = 𝑑𝑃− (𝑢) + |𝑆|. Vì
𝑑𝐷− (𝑢) ≥ 𝛿 − ≥ 𝑣/2 và 𝑑𝑃− (𝑢) ≤ 𝑚,

𝑣 (5.4)
|𝑆| ≥ −𝑚
2

Lập luận tương tự ta được

𝑣 (5.5)
|𝑇| ≥ −𝑚
2

Chú ý rằng, theo (5.2), cả S và T đều khác rỗng. Cộng với (5.4) và (5.5) và sử dụng
(5.1), ta được

|𝑆| + |𝑇| ≥ 𝑙 − 𝑚 + 1

và do đó, theo (5.3),

|𝑆 ∪ 𝑇| ≥ 𝑙 − 𝑚 + 1 (5.6)

Vì S và T là rời nhau và khác rỗng, khi đó các số nguyên dương 𝑖 và 𝑘 sao cho 𝑖 ∈
𝑆, 𝑖 + 𝑘 ∈ 𝑇 và

𝑖 + 𝑗 ∉ 𝑆 ∪ 𝑇 for 1 ≤ 𝑗 < 𝑘 (5.7)

trong đó phép cộng được thực hiện theo modulo 𝑙.

Từ (5.6) và (5.7) ta thấy rằng 𝑘 ≤ 𝑚. Do đó, chu trình có hướng


𝐶𝑖+𝑘,𝑖−1 (𝑣𝑖−1 , 𝑢)𝑃(𝑣, 𝑣𝑖+𝑘 ) có độ dài 𝑙 + 𝑚 + 1 − 𝑘, dài hơn C. Điều mâu thuẫn này thiết
lập định lý. □

116
Hình 5.7 Minh họa chứng minh Định lý 5.4

5.4 Bài toán thứ tự công việc


Một số công việc 𝐽1 , 𝐽2 , … , 𝐽𝑛 phải được xử lý trên một máy; ví dụ, mỗi máy 𝐽𝑖 có
thể là một đơn đặt hàng chai hoặc lọ trong một nhà máy thủy tinh. Sau mỗi công việc, máy
móc phải được điều chỉnh để phù hợp với yêu cầu của công việc tiếp theo. Nếu thời gian
thích ứng từ công việc 𝐽𝑖 sang công việc 𝐽𝑗 , là 𝑡𝑖𝑗 , hãy tìm một trình tự công việc sao cho
tổng thời gian điều chỉnh máy là ngắn nhất.

Vấn đề này rõ ràng có liên quan đến bài toán người bán hàng, và hiện vẫn chưa có
chưa có phương pháp nào hiệu quả để giải bài toán. Do đó, mong muốn ở đây là xây dựng
một phương pháp để có được một lời giải hợp lý (nhưng không nhất thiết phải tối ưu). Bây
giờ, chúng ta sẽ sử dụng định lý Rédei (Hệ quả 5.1).

Bước 1. Dựng digraph D với các đỉnh 𝑣1 , 𝑣2 , … , 𝑣𝑛 sao cho (𝑣𝑖 , 𝑣𝑗 ) ∈ 𝐴 nếu và chỉ
nếu 𝑡𝑖𝑗 < 𝑡𝑗𝑖 . Theo định nghĩa, D chứa một đồ thị giải đấu bao trùm (spanning tournament).

Bước 2. Tìm đường đi Hamilton có hướng 𝑣𝑖1 , 𝑣𝑖2 , … , 𝑣𝑖𝑛 của 𝐷 (xem bài tập), và
trình tự các công việc cho phù hợp.

Vì bước 1 loại bỏ lượng lớn một nửa của ma trận điều chỉnh [tij], nó là một giả định
hợp lý rằng phương pháp này, nói chung, tạo ra một trình tự công việc tương đối tốt. Tuy

117
nhiên, lưu ý rằng khi ma trận điều chỉnh là đối xứng, phương pháp này không giúp ích
được gì.

Ví dụ, giả sử rằng có 6 công việc 𝐽1 , 𝐽2 , 𝐽3 , 𝐽4 . 𝐽5 và 𝐽6 và ma trận điều chỉnh như


Bảng 5.1.
Bảng 5.1 Ma trận điều chỉnh

𝐽1 𝐽2 𝐽3 𝐽4 𝐽5 𝐽6

𝐽1 0 5 3 4 2 1

𝐽2 1 0 1 2 3 2

𝐽3 2 5 0 1 2 3

𝐽4 1 4 4 0 1 2

𝐽5 1 3 4 5 0 5

𝐽6 4 4 2 3 1 0

Dãy 𝐽1 𝐽2 𝐽3 𝐽4 𝐽5 𝐽6 yêu cầu 13 đơn vị thời gian điều chỉnh. Để tìm một dãy tốt hơn,
xây dựng một đồ thị có hướng D như Bước 1 (Hình 5.8).

118
Hình 5.8 Đồ thị có hướng 𝐷

(𝑣1 , 𝑣6 , 𝑣3 , 𝑣4 , 𝑣5 , 𝑣2 ) là một đường đi Hamilton của D, và dẫn đến chuỗi 𝐽1 𝐽6 𝐽3 𝐽4 𝐽5 𝐽2


chỉ cần 8 đơn vị thời gian. Chú ý rằng chuỗi ngược 𝐽2 𝐽5 𝐽4 𝐽3 𝐽6 𝐽1 còn tệ hơn khi cần đến 19
đơn vị thời gian.

119
BÀI TẬP CHƯƠNG 5

Bài 1. Có bao nhiêu phép định hướng có thể có cho một đồ thị đơn G?

Bài 2. Chứng minh rằng ∑𝑣∈𝑉 𝑑 + (𝑣 ) = ∑𝑣∈𝑉 𝑑 − (𝑣 ) = 𝜀.

Bài 3. Cho đồ thị có hướng 𝐷 không có chu trình có hướng.

(a) Chứng minh rằng 𝛿 − = 0.

(b) Suy ra rằng tồn tại một thứ tự các đỉnh 𝑣1 , 𝑣2 , … , 𝑣𝜈 của V sao cho với mọi 𝑖 =
1, … , 𝜈 mỗi cạnh của 𝐷 với đỉnh cuối 𝑣𝑖 có một đỉnh đầu trong {𝑣1 , 𝑣2 , … , 𝑣𝑖−1 }.

Bài 4. Chứng minh rằng D là liên thông có hướng nếu và chỉ nếu đồ thị vô hướng tương
ứng là liên thông và mỗi khối của 𝐷 là liên thông có hướng.

Bài 5. Chứng minh rằng nếu 𝐷 là chặt chẽ nếu 𝐷 chứa một đường đi có hướng sơ cấp với
độ dài ít nhất là max{𝛿 − , 𝛿 + }.

Bài 6. Chứng minh rằng nếu 𝐷 là chặt chẽ và max{𝛿 − , 𝛿 + } = 𝑘 > 0 thì 𝐷 chứa một chu
trình với độ dài ít nhất 𝑘 + 1.

Bài 7. Cho 𝑣1 , 𝑣2 , … , 𝑣𝜈 là các đỉnh của đồ thị có hướng D. Ma trận kề của D là một ma
trận có cấp 𝜈 × 𝜈 với 𝐴 = [𝑎𝑖𝑗 ], trong đó 𝑎𝑖𝑗 là số cạnh trong D với đỉnh đầu 𝑣𝑖 và đỉnh
cuối 𝑣𝑗 . Chứng minh rằng phần tử thứ (𝑖, 𝑗) trong ma trận 𝐴𝑘 là số (𝑣𝑖 , 𝑣𝑗 )-đường đi có
hướng có độ dài 𝑘 trong 𝐷.

Bài 8. Chứng minh rằng 𝐺 có một định hướng là đồ thị có hướng 𝐷 sao cho
|𝑑 + (𝑣) − 𝑑 − (𝑣 )| ≤ 1 với mọi 𝑣 ∈ 𝑉.

Bài 9. Chỉ ra rằng mọi đồ thị giải đấu đều là liên thông có hướng hoặc có thể được chuyển
thành một đồ thị giải đấu liên thông có hướng bằng cách định hướng lại chỉ một cung.

Bài 10. *Một đồ thị có hướng D là một phía nếu đối với hai đỉnh 𝑢 và 𝑣 bất kỳ, 𝑣 có thể
tiếp cận được từ 𝑢 hoặc 𝑢 có thể đạt được từ 𝑣. Chứng tỏ rằng D là một phía khi và chỉ khi
D có một đường đi có hướng mở rộng.

120
Bài 11. (a) Gọi 𝑃 = (𝑣1 , 𝑣2 , … , 𝑣𝑘 ) là đường đi có hướng lớn nhất trong một đồ thị giải
đấu D. Giả sử P không phải là đường đi Hamilton có hướng và gọi 𝑣 là đỉnh bất kỳ không
nằm trên P. Chứng tỏ rằng, đối với 𝑖 nào đó, cả (𝑣𝑖 , 𝑣) và (𝑣, 𝑣𝑖+1 ) đều là cung của D.

(b) Suy ra định lý Redei.

Bài 12. Chứng minh hệ quả 10.2 bằng cách xem xét một đỉnh có bậc ngoài lớn nhất.

Bài 13. * (a) Gọi D là một đồ thị có hướng với 𝜒 > 𝑚𝑛 và đặt 𝑓 là một hàm có giá trị thực
được xác định trên V. Chứng tỏ rằng D có một đường đi có hướng (𝑢0 , 𝑢1 , . . , 𝑢𝑚 ) với
𝑓 (𝑢0 ) ≤ 𝑓 (𝑢1 ) ≤ ⋯ ≤ 𝑓 (𝑢𝑚 ) hoặc một đường đi có hướng (𝑣0 . 𝑣1 , … , 𝑣𝑛 ) với 𝑓 (𝑣0 ) >
𝑓 (𝑣1 ) > ⋯ > 𝑓(𝑣𝑛 ). (V. Chvátal và J. Komlós)

(b) Suy ra rằng bất kỳ dãy nào gồm 𝑚𝑛 + 1 số nguyên riêng biệt đều chứa dãy con
tăng dần của m số hạng hoặc dãy con giảm dần của n số hạng (P. Erdös và G. Szekeres)

Bài 14. (a) Sử dụng định lý 10.1 và hệ quả 8.1.2, hãy chứng tỏ rằng G có một định hướng
trong đó mỗi đường đi có hướng có độ dài tối đa là Δ.

(b) Đưa ra phần chứng minh mang tính xây dựng cho (a).

Bài 15. Chỉ ra định lý 4.3 có thể được suy ra như thế nào từ định lý 10.4.

Bài 16. Đường đi Euler có hướng của D là đường đi có hướng đi qua mỗi cung của D đúng
một lần. Chứng tỏ rằng D chứa một đường đi Euler có hướng nếu và chỉ khi D liên thông
và 𝑑 + (𝑣 ) = 𝑑 − (𝑣) với mọi 𝑣 ∈ 𝑉.

Bài 17. Cho D là một đồ thị có hướng sao cho

(i) 𝑑 + (𝑥) − 𝑑 − (𝑥) = 𝑙 = 𝑑 − (𝑦) − 𝑑 + (𝑦);

(ii) 𝑑 + (𝑣 ) = 𝑑 − (𝑣) với 𝑣 ∈ 𝑉{𝑥, 𝑦}.

Hãy chỉ ra rằng có tồn tại 𝑙 các đường cung có hướng (x, y)-rời nhau trong D.

Bài 18. * Chứng tỏ rằng một đồ thị liên thông có hướng chứa một chu trình lẻ, cũng chứa
một chu trình lẻ có hướng.

121
Bài 19. Một đồ thị không tầm thường có hướng D là liên thông k cung nếu, với mọi tập
hợp con phù hợp không rỗng S của V, |𝑆, 𝑆̅| ≥ 𝑘. Chứng tỏ rằng một đồ thị không tầm
thường có hướng là liên thông có hướng nếu và chỉ khi nó là liên thông 1 cung.

Bài 20. Đồ thị có hướng kết hợp D(G) của đồ thị G là đồ thị có hướng thu được khi mỗi
cạnh e của G được thay thế bằng hai cung hướng đối nhau có cùng các đầu là e. Chứng tỏ
rằng

(a) có sự tương ứng một-một giữa các đường đi trong G và các đường đi có hướng
trong D(G);

(b) D(G) là liên thông k cung nếu và chỉ khi G là liên thông k cạnh.

Bài 21. Mô tả một thuật toán tốt để tìm một đường đi Hamilton có hướng trong một đồ thị
giải đấu (tournament).

Bài 22. Chỉ ra, bằng một ví dụ, rằng một chuỗi các công việc thu được bằng phương pháp
trên có thể là chưa tối ưu (còn cách rất xa nghiệm tối ưu).

122
CHƯƠNG 6. MỘT SỐ CHỦ ĐỀ VỀ LÝ THUYẾT ĐỒ THỊ VÀ
ỨNG DỤNG

6.1 Bài toán tô màu trong đồ thị


Cho 𝐺 là một đồ thị không có vòng. Ta nói các đỉnh của đồ thị 𝐺 có thể tô bằng 𝑘
màu (k-colourable) nếu ta có thể gán 𝑘 màu cho các đỉnh của 𝐺, mỗi đỉnh một màu, sao
cho hai đỉnh kề nhau phải có màu khác nhau. Rõ ràng, đồ thị 𝐺 có thể tô bằng 𝑘 màu khi
và chỉ khi đơn đồ thị tương ứng của 𝐺 có thể tô bằng 𝑘 màu. Do đó, trong mục này ta chỉ
xét trường hợp 𝐺 là một đơn đồ thị. Một đơn đồ thị có thể tô bằng một màu khi và khi nó
là đồ thị rỗng. Một đơn đồ thị tô được bằng hai màu khi và chỉ khi nó là đồ thị lưỡng phân.
Số 𝑘 nhỏ nhất sao cho 𝐺 có thể tô được bằng 𝑘 màu được gọi sắc số (chromatic number)
của 𝐺, ký hiệu là 𝜒(𝐺). Đồ thị trong Hình 6.1 có sắc số bằng 3 vì nó có thể tô được bằng
3 màu nhưng không thể tô được bằng 2 màu.

Hình 6.1 Một đồ thị có sắc số bằng 3

Đồ thị 𝐺 được gọi là đồ thị tới hạn (critical) nếu với mọi đồ thị con thực sự 𝐻 của
𝐺 ta luôn có 𝜒(𝐻 ) < 𝜒(𝐺). Dirac (1952) là người đầu tiên khảo sát lớp đồ thị này. Một đồ
thị 𝑘-tới hạn (k-critical graph) là đồ thị tới hạn có sắc số bằng 𝑘. Mọi đồ thị có sắc số bằng
𝑘 đều có một đồ thị con 𝑘-tới hạn. Grötzsch (1958) đã chỉ ra một đồ thị 4-tới hạn như trong
Hình 6.2.

123
Hình 6.2 Đồ thị Grötzsch, một đồ thị 4-tới hạn.

Từ định nghĩa, ta có thể suy ra mọi đồ thị tới hạn đều liên thông. Những định lý sau
đây nêu ra một số tính chất cơ bản của đồ thị tới hạn.

Định lý 6.1 Nếu 𝐺 là một đồ thị 𝑘-tới hạn thì 𝛿 ≥ 𝑘 − 1.

Chứng minh

Ta chứng minh bằng phản chứng. Nếu tồn tại một đồ thị 𝑘-tới hạn 𝐺 với 𝛿 < 𝑘 − 1.
Đặt 𝑣 là đỉnh có bậc bằng 𝛿 trong 𝐺. Vì 𝐺 là đồ thị tới hạn nên 𝐺 − 𝑣 là có thể tô bằng
𝑘 − 1 màu. Đặt 𝑉𝑖 là tập các đỉnh của 𝐺 − 𝑣 tô bằng màu 𝑖 với 1 ≤ 𝑖 ≤ 𝑘 − 1. Theo định
nghĩa thì ở trong 𝐺 đỉnh 𝑣 kề với 𝛿 < 𝑘 − 1 đỉnh. Do đó, tồn tại 𝑗 để 𝑣 không kề với bất kì
đỉnh nào trong 𝑉𝑗 . Như vậy bằng cách tô đỉnh 𝑣 bằng màu 𝑗 thì ta có thể tô 𝐺 bằng 𝑘 − 1
màu, mâu thuẫn giả thiết. Vậy 𝛿 ≥ 𝑘 − 1. □

Hệ quả 6.1 Mọi đồ thị có sắc số bằng 𝑘 đều có ít nhất 𝑘 đỉnh có bậc ít nhất là 𝑘 − 1.

Chứng minh

Cho 𝐺 là một đồ thị có sắc số bằng 𝑘 và cho 𝐻 là một đồ thị con 𝑘-tới hạn của 𝐺.
Theo Định lý 6.1 thì 𝑑𝐻 (𝑣 ) ≥ 𝛿 (𝐻 ) ≥ 𝑘 − 1 với mọi 𝑣 ∈ 𝑉(𝐻), do đó 𝑑𝐺 (𝑣 ) ≥ 𝑘 − 1 với
mọi 𝑣 ∈ 𝑉(𝐻). Vì sắc số của 𝐻 bằng 𝑘 nên 𝐻 có ít nhất 𝑘 đỉnh. Hệ quả đã được chứng
minh. □

Hệ quả 6.2 Mọi đồ thị đều có sắc số nhỏ hơn hoặc bằng 𝛥 + 1.

Chứng minh

124
Cho 𝐺 là một đồ thị có sắc số bằng 𝑘. Theo Hệ quả 6.1 thì trong 𝐺 sẽ có đỉnh có bậc
lớn lớn hơn hoặc bằng 𝑘 − 1, suy ra Δ ≥ 𝑘 − 1, hay 𝑘 ≤ Δ + 1. □

Cho 𝑆 là một lát cắt đỉnh trong một đồ thị liên thông 𝐺. Gọi 𝑉1 , 𝑉2 , … , 𝑉𝑚 là các
thành phần liên thông của 𝐺 − 𝑆. Khi đó các đồ thị con 𝐺𝑖 = 𝐺 [𝑉𝑖 ∪ 𝑆] được gọi là các
thành phần liên thông theo 𝑆 (𝑆-components) của 𝐺. Ta nói các cách tô màu của các đồ thị
𝐺1 , 𝐺2 , … , 𝐺𝑚 là thống nhất (agree) trên 𝑆 nếu mỗi 𝑣 ∈ 𝑆 thì màu của 𝑣 trong các 𝐺𝑖 đều
giống nhau. Tập hợp các đỉnh của 𝐺 mà đôi một kề nhau thì ta gọi nói là một clique của 𝐺.

Định lý 6.2 Trong một đồ thị tới hạn thì không có lát cắt đỉnh nào là một clique.

Chứng minh

Ta chứng minh bằng phản chứng. Cho 𝐺 là một đồ thị 𝑘-tới hạn và giả sử 𝐺 có một
lát cắt đỉnh 𝑆 là một clique. Ký hiệu các thành phần liên thông theo 𝑆 theo của 𝐺 là
𝑉1 , 𝑉2 , … , 𝑉𝑚 . Vì 𝐺 là 𝑘-tới hạn nên các 𝐺𝑖 có thể tô bằng 𝑘 − 1 màu. Hơn nữa, vì 𝑆 là một
clique nên các đỉnh trong 𝑆 phải có màu khác nhau trong 𝑘 − 1 màu của 𝐺𝑖 . Từ đó suy ra
có thể dùng 𝑘 − 1 màu để tô các 𝐺𝑖 thống nhất trên 𝑆. Như vậy, ta thể tô 𝐺 bằng 𝑘 − 1
màu, mâu thuẫn giả thiết. □

Hệ quả 6.3 Mọi đồ thị tới hạn đều là một khối.

Chứng minh

Giả sử 𝐺 là một đồ thị tới hạn nhưng không phải là một khối, do đó 𝐺 sẽ có một
đỉnh cắt 𝑣. Vì 𝑣 là một đỉnh cắt nên {𝑣 } là một lát cắt đỉnh, và nó cũng là một clique. Điều
này mâu thuẫn với Định lý 6.2. □

Một hệ quả khác của Định lý 6.2 là nếu 𝐺 là một đồ thị 𝑘-tới hạn có một lát cắt 2
đỉnh là {𝑢, 𝑣 } thì 𝑢 và 𝑣 không thể kề nhau. Ta nói rằng các thành phần liên thông theo
{𝑢, 𝑣 } có loại 1 nếu mọi cách tô 𝑘 − 1 màu cho các 𝐺𝑖 đều gán màu giống nhau cho 𝑢 và
𝑣, có loại 2 nếu mọi cách tô 𝑘 − 1 màu cho các 𝐺𝑖 đều gán màu khác nhau cho 𝑢 và 𝑣.

Định lý 6.3 (Dirac, 1953) Cho 𝐺 là một đồ thị 𝑘-tới hạn với lát cắt 2 đỉnh {𝑢, 𝑣 }. Khi đó
a) 𝐺 = 𝐺1 ∪ 𝐺2 , trong đó 𝐺𝑖 là các thành phần liên thông theo {𝑢, 𝑣 } thuộc loại 𝑖 (𝑖 =
1; 2).
125
b) Cả 𝐺1 + 𝑢𝑣 và 𝐺2 ⋅ 𝑢𝑣 đều là đồ thị 𝑘-tới hạn (trong đó 𝐺2 ⋅ 𝑢𝑣 là đồ thị có được
từ 𝐺2 bằng cách đồng nhất 𝑢 và 𝑣).

Chứng minh

a) Vì 𝐺 là đồ thị tới hạn nên mỗi thành phần liên thông theo {𝑢, 𝑣 } có thể tô bằng
𝑘 − 1 màu. Vì sắc số của 𝐺 bằng 𝑘 nên không thể dùng 𝑘 − 1 màu để tô tất các thành phần
liên thông theo {𝑢, 𝑣 } mà thống nhất trên {𝑢, 𝑣 }. Do đó, sẽ có hai thành phần liên thông
theo {𝑢, 𝑣 } là 𝐺1 và 𝐺2 sao cho không có cách tô 𝑘 − 1 màu nào của 𝐺1 thống nhất với bất
kỳ cách tô 𝑘 − 1 màu nào của 𝐺2 . Do đó một trong hai, 𝐺1 hoặc 𝐺2 phải thuộc loại 1 và
thành phần còn lại thuộc loại 2. Không mất tính tổng quát, ta có thể nói 𝐺1 thuộc loại 1 và
𝐺2 thuộc loại 2. Vì 𝐺1 và 𝐺2 thuộc loại khác nhau nên 𝐺1 ∪ 𝐺2 không thể tô bằng 𝑘 − 1
màu. Hơn nữa, vì 𝐺 là đồ thị tới hạn nên 𝐺 = 𝐺1 ∪ 𝐺2 .

b) Đặt 𝐻1 = 𝐺1 + 𝑢𝑣. Vì 𝐺1 thuộc loại 1 nên 𝐻1 có sắc số bằng 𝑘. Ta chứng minh


𝐻1 là đồ thị tới hạn bằng cách chỉ ra rằng với một cạnh 𝑒 bất kỳ của 𝐻1 thì 𝐻1 − 𝑒 có thể
tô bằng 𝑘 − 1 màu. Nếu 𝑒 = 𝑢𝑣 thì chứng minh xong vì 𝐻1 − 𝑒 = 𝐺1 . Bây giờ, ta xét
trường hợp 𝑒 khác 𝑢𝑣. Vì 𝐺2 là một đồ thị con của 𝐺 − 𝑒 nên trong mọi cách tô 𝐺 − 𝑒 bằng
𝑘 − 1 màu thì 𝑢 và 𝑣 luôn có màu khác nhau. Bằng cách giới hạn cách tô này trên các đỉnh
của 𝐺1 thì ta được một cách tô 𝐻 − 𝑒 bằng 𝑘 − 1 màu. Do đó, 𝐺1 + 𝑢𝑣 là 𝑘-tới hạn. Tương
tự, ta có thể chứng minh rằng 𝐺2 ⋅ 𝑢𝑣 là 𝑘-tới hạn. □

Hệ quả 6.4 Cho 𝐺 là một đồ thị 𝑘-tới hạn với lát cắt 2 đỉnh {𝑢, 𝑣 }. Khi đó

𝑑 (𝑢) + 𝑑 (𝑣 ) ≥ 3𝑘 − 5 (6.1)

Chứng minh

Gọi 𝐺1 là thành phần liên thông theo {𝑢, 𝑣 } thuộc loại 1 và 𝐺2 là thành phần liên
thông theo {𝑢, 𝑣 } thuộc loại 2. Đặt 𝐻1 = 𝐺1 + 𝑢𝑣 và 𝐻2 = 𝐺2 ⋅ 𝑢𝑣. Theo Định lý 6.3 và
Định lý 6.1 thì

𝑑𝐻1 (𝑢) + 𝑑𝐻1 (𝑣 ) ≥ 2𝑘 − 2

126
𝑑𝐻2 (𝑤) ≥ 𝑘 − 1

trong đó 𝑤 là đỉnh mới có được bằng cách đồng nhất 𝑢 và 𝑣. Từ đó suy ra

𝑑𝐺1 (𝑢) + 𝑑𝐺1 (𝑣 ) ≥ 2𝑘 − 4

𝑑𝐺2 (𝑢) + 𝑑𝐺2 (𝑣 ) ≥ 𝑘 − 1

Cộng hai bất đẳng thức trên ta được bất đẳng thức (6.1). □

Hệ quả 6.2 thì sắc số của một đồ thị có một cận trên là Δ + 1. Brooks (1941) đã chỉ
ra rằng chỉ hai loại đồ thị có sắc số bằng Δ + 1. Chứng minh định lý Brooks được trình bày
ở đây là của Lovász (1973).

Định lý 6.4 Nếu 𝐺 là đơn đồ thị liên thông mà không phải chu trình lẻ và cũng không
phải đồ thị đầy thì 𝜒(𝐺) ≤ 𝛥.

Chứng minh

Cho 𝐺 là một đồ thị có sắc số bằng 𝑘 và thỏa mãn các điều kiện của định lý. Không
mất tính tổng quát, ta có thể giả sử 𝐺 là một đồ thị 𝑘-tới hạn. Theo Hệ quả 6.3 thì 𝐺 là một
khối. Vì đồ thị 1-tới hạn và 2-tới hạn là các đồ thị đầy đủ và đồ thị 3-tới hạn là các chu
trình lẻ nên ta có 𝑘 ≥ 4.

Nếu 𝐺 có một lát cắt 2 đỉnh {𝑢, 𝑣 } thì theo Hệ quả 6.4 ta được

2Δ ≥ 𝑑 (𝑢) + 𝑑 (𝑣 ) ≥ 3𝑘 − 5 = (2𝑘 − 1) + (𝑘 − 4) ≥ 2𝑘 − 1

Từ đó suy ra 2𝑘 − 1 ≤ 2Δ, nhưng dấu đẳng không thể xảy ra do một vế là số chẵn
và một vế là số lẻ, do đó 2𝑘 − 1 ≤ 2Δ − 1, suy ra 𝜒 = 𝑘 ≤ Δ.

Bây giờ ta xét trường hợp 𝐺 là đồ thị 3-liên thông. Vì 𝐺 không phải là đồ thị đầy đủ
nên tồn tại ba đỉnh 𝑢, 𝑣 và 𝑤 trong 𝐺 sao cho 𝑢𝑣, 𝑣𝑤 ∈ 𝐸 và 𝑣𝑤 ∉ 𝐸. Đặt 𝑢 = 𝑣1 , 𝑤 = 𝑣2
và đặt 𝑣3 , 𝑣4 , … , 𝑣𝑛 = 𝑣 là một dãy có thứ tự các đỉnh của 𝐺 − {𝑢, 𝑤} sao cho mỗi đỉnh 𝑣𝑖
kề với một đỉnh 𝑣𝑗 nào đó với 𝑗 > 𝑖. (Ta có thể làm được điều này bằng cách sắp xếp các
đỉnh của 𝐺 − {𝑢, 𝑤} theo thứ tự không tăng theo khoảng cách từ 𝑣). Bây giờ ta sẽ trình bày
cách tô 𝐺 bằng Δ màu. Đầu tiên, ta gán màu 1 cho đỉnh 𝑣1 và 𝑣2 . Sau đó, ta lần lượt tô màu

127
cho các đỉnh 𝑣3 , 𝑣4 , … , 𝑣𝑛 bằng màu đầu tiên có thể trong danh sách màu 1,2, … , Δ. Theo
cách xây dựng dãy 𝑣1 , 𝑣2 , … , 𝑣𝑛 thì mỗi đỉnh 𝑣𝑖 với 1 ≤ 𝑖 ≤ 𝑛 − 1 sẽ kề với ít nhất một
đỉnh 𝑣𝑗 với 𝑗 > 𝑖, và do đó nó sẽ kề với tối đa Δ − 1 đỉnh 𝑣𝑗 với 𝑗 < 𝑖. Do đó, khi tới lượt
tô thì 𝑣𝑖 kề với với tối đa Δ − 1 đỉnh đã được tô màu, vì vậy vẫn còn màu trong danh sách
Δ màu để tô cho 𝑣𝑖 . Cuối cùng, vì 𝑣𝑛 kề với hai đỉnh hai đỉnh tô màu 1 là 𝑣1 và 𝑣2 nên 𝑣𝑛
sẽ kề với tối đa Δ − 2 đỉnh khác đã được tô màu, như vậy vẫn còn màu trong danh sách Δ
màu để tô cho 𝑣𝑛 . □

Thuật toán tô màu tham lam

ĐẦU VÀO: một đồ thị 𝐺.

ĐẦU RA: Một cách tô màu đồ thị 𝐺

Sắp xếp các đỉnh của 𝐺 theo một thứ tự tuyến tính: 𝑣1 , 𝑣2 , … , 𝑣𝑛 .

Tô màu từng đỉnh một theo thứ tự trên. Khi tô màu đỉnh 𝑣𝑖 thì ta chọn màu có số
nhỏ nhất trong các màu {1,2, … , 𝑛} mà chưa dùng cho các đỉnh kề đã tô màu của 𝑣𝑖 .

Trả về màu của tất cả các đỉnh

Chú ý rằng số màu mà thuật toán tô màu tham lam dùng không phải sắc số của đồ
thị 𝐺 nhưng nó sẽ nhỏ hơn hoặc bằng Δ(𝐺 ) + 1. Thứ tự của các đỉnh sẽ ảnh hưởng đến số
màu mà thuật toán sử dụng. Luôn tồn tại một thứ tự các đỉnh mà thuật toán tô màu tham
lam sẽ trả về sắc số của đồ thị. Việc tìm thứ tự như vậy cũng là một bài toán khó.

Hình 6.4 thể hiện các bước của thuật toán tô màu tham lam khi tô màu đồ thị 𝐺 trong
Hình 6.3 với thứ tự các đỉnh: 𝑣1 , 𝑣2 , 𝑣3 , 𝑣4 , 𝑣5 , 𝑣6 , 𝑣7 , 𝑣8 , 𝑣9 . Theo thứ tự này thì thuật toán
tô màu tham lam cần bốn màu. Nhưng nếu ta thay đổi thứ tự các đỉnh thành
𝑣9 , 𝑣8 , 𝑣7 , 𝑣6 , 𝑣5 , 𝑣4 , 𝑣3 , 𝑣2 , 𝑣1 thì thuật toán tô màu tham lam chỉ dùng ba màu. Vì có thể tô
𝐺 bằng ba màu nên 𝜒(𝐺) ≤ 3. Mặt khác, 𝐺 có đồ thị con đẳng cấu 𝐾3 nên 𝜒(𝐺 ) ≥ 3. Như
vậy, 𝜒(𝐺 ) = 3.

128
Hình 6.3 Minh họa thuật toán tô màu tham lam

Hình 6.4 Minh họa các bước tô màu của thuật toán tham lam

Welsh và Powell đã đề xuất dùng thuật toán tô màu tham lam với cách sắp xếp các
đỉnh theo thứ tự bậc không tăng 𝑑 (𝑣1 ) ≥ 𝑑 (𝑣2 ) ≥ ⋯ ≥ 𝑑 (𝑣𝑛 ), có nghĩa là đỉnh có bậc cao
nhất sẽ được tô màu đầu tiên và đỉnh có bậc thấp nhất sẽ được tô màu cuối cùng. Thuật
toán tô màu tham lam với cách xếp thứ tự của đỉnh Welsh và Powell thỉnh thoảng được gọi

129
là thuật toán Welsh-Powell. Trong trường hợp xấu nhất thì số màu được sử dụng trong
thuật toán Welsh-Powell là 𝑘 = max min{𝑑 (𝑣𝑖 ) + 1, 𝑖}. Dễ thấy 𝑘 ≤ Δ(𝐺 ) + 1.
𝑖

Bảng 6.1 minh họa việc tô màu đồ thị 𝐺 trong Hình 6.3 bằng thuật toán Welsh-
Powell.
Bảng 6.1 Minh họa thuật toán Welsh-Powell

Đỉnh 𝑣4 𝑣9 𝑣6 𝑣2 𝑣7 𝑣1 𝑣3 𝑣5 𝑣8

Bậc 5 5 4 3 3 2 2 2 2

Màu 1 2 3 1 1 3 2 2 3

Có rất nhiều bài toán thực tế liên quan đến bài toán tô màu đồ thị như bài toán lưu
trữ, bài toán xếp lịch thi. Trong bài toán lưu trữ (storage problem), một công ty sản xuất
𝑛 hóa chất 𝐶1 , 𝐶2 , … , 𝐶𝑛 . Có những cặp hóa chất kỵ nhau, chúng sẽ phát nổ khi tiếp xúc
nhau. Để an toàn thì công ty phải chứa các hóa chất kỵ nhau ở các ngăn chứa khác nhau.
Như vậy cần ít nhất bao nhiêu ngăn để chứa hết tất cả các hóa chất này và những hóa chất
nào sẽ ở chung ngăn với nhau.

Để giải bài toán lưu trữ, ta xây dựng một đồ thị 𝐺 trên tập hợp đỉnh {𝑣1 , 𝑣2 , . . , 𝑣𝑛 }.
Ta nối hai đỉnh 𝑣𝑖 và 𝑣𝑗 khi và chỉ khi hai hóa chất 𝐶𝑖 và 𝐶𝑗 kỵ nhau. Ta tô màu các đỉnh
của đồ thị 𝐺. Sắc số của đồ thị 𝐺 chính là số ngăn tối thiểu cần tìm và các hóa chất được
xếp chúng ngăn với nhau nếu các đỉnh tương ứng có cùng màu.

Ví dụ như công ty có 9 hóa chất 𝐶1 , 𝐶2 , … , 𝐶9 . Các cặp hóa chất kỵ nhau được thể
hiện bằng dấu × trong Bảng 6.2. Đồ thị 𝐺 của bài toán này chính là đồ thị trong Hình 6.3.
Ta đã biết đồ thị 𝐺 có sắc số bằng 3 nên ta cần 3 ngăn để chứa 9 hóa chất này. Theo kết
quả tô màu của thuật toán Welsh-Powell trong Bảng 6.1 thì các tập đỉnh {𝑣2 , 𝑣4 , 𝑣7 },
{𝑣3 , 𝑣5 , 𝑣9 } và {𝐶1 , 𝐶6 , 𝐶8 } có cùng màu nên mỗi bộ hóa chất {𝐶2 , 𝐶4 , 𝐶7 }, {𝐶3 , 𝐶5 , 𝐶9 } và
{𝐶1 , 𝐶6 , 𝐶8 } sẽ được chứa trong một ngăn riêng.

130
Bảng 6.2 Minh họa bài toán lưu trữ

𝐶1 𝐶2 𝐶3 𝐶4 𝐶5 𝐶6 𝐶7 𝐶8 𝐶9

𝐶1 × ×

𝐶2 × × ×

𝐶3 × ×

𝐶4 × × × × ×

𝐶5 × ×

𝐶6 × × × ×

𝐶7 × × ×

𝐶8 × ×

𝐶9 × × × × ×

Trong bài toán xếp lịch thi, một trường học tổ chức thi 𝑛 môn học 𝐶1 , 𝐶2 , … , 𝐶𝑛 . Có
những học viên tham gia thi nhiều môn học. Để các học viên có thể dự thi tất cả các môn
thì trường cần xếp lịch thi các môn học sao cho bất kỳ hai môn học nào có cùng học viên
dự thi thì phải được xếp vào hai buổi thi khác nhau. Vậy nhà trường cần tối thiểu bao nhiêu
buổi thi để có thể tổ chức thi tất cả 𝑛 môn học và những môn học nào sẽ thi chung buổi thi
với nhau

Để giải bài toán xếp lịch thi, ta xây dựng đồ thị 𝐺 trên 𝑛 đỉnh 𝑣1 , 𝑣2 , … , 𝑣𝑛 . Ta nối
hai đỉnh 𝑣𝑖 và 𝑣𝑗 khi và chỉ khi hai môn học 𝐶𝑖 và 𝐶𝑗 có chung học viên dự thi. Ta tô màu
các đỉnh của đồ thị 𝐺. Sắc số của đồ thị 𝐺 chính là số buổi thi tối thiểu cần tìm và các môn
học được tổ thức chung buổi thi với nhau nếu các đỉnh tương ứng có cùng màu.

131
6.2 So khớp lớn nhất
Một tập con 𝑀 của 𝐸 được gọi là một so khớp (matching) trong 𝐺 nếu không có hai
cạnh nào trong 𝑀 kề nhau. Hai đầu mút của một cạnh trong 𝑀 được gọi là khớp nhau theo
𝑀 (matched under M). Ta nói so khớp 𝑀 là hoàn hảo (perfect) nếu 𝑀 phủ hết tất cả các
đỉnh của 𝐺. So khớp 𝑀 được gọi là so khớp lớn nhất (maximum matching) nếu nó là so
khớp có nhiều cạnh nhất trong các so khớp của 𝐺. Số cạnh của so khớp lớn nhất được gọi
chỉ số so khớp (matching number). Một so khớp cực đại (maximal matching) là một so
khớp không thể mở rộng thành so khớp lớn hơn. Rõ ràng, một so khớp hoàn hảo là so khớp
lớn nhất, và so khớp lớn nhất là một so khớp cực đại. So khớp cực đại và so khớp hoàn hảo
được minh họa trong Hình 6.5.

Hình 6.5 a) So khớp cực đại b) So khớp hoàn hảo

Cho 𝑀 là một so khớp trong 𝐺. Một đường đi 𝑀-luân phiên (𝑀-alternating path)
trong 𝐺 là một đường đi sơ cấp mà các cạnh của đường đi này luân phiên thuộc vào 𝐸 ∖ 𝑀
và 𝑀. Ví dụ, đường đi 𝑣5 𝑣8 𝑣1 𝑣7 𝑣6 trong đồ thị ở Hình 6.5a là một đường đi 𝑀-luân phiên.
Đường đi 𝑀-bổ sung (𝑀-augmenting path) là đường đi 𝑀-luân phiên mà cả điểm đầu của
điểm cuối của đường đi đều không phủ bởi 𝑀.

Định lý sau đây, theo Berge (1957), chỉ ra mối liên hệ giữa đường đi bổ sung và so
khớp lớn nhất

Định lý 6.5 (Định lý Berge) Một so khớp 𝑀 trong đồ thị 𝐺 là so khớp lớn nhất khi và chỉ
khi trong 𝐺 không có đường đi 𝑀-bổ sung.

Chứng minh

132
Cho 𝑀 là một so khớp trong 𝐺. Giả sử trong 𝐺 chứa một đường đi 𝑀-bổ sung 𝑃.
Đặt 𝑀′ = 𝑀 △ 𝐸(𝑃), khi đó 𝑀′ là một so khớp trong 𝐺 và |𝑀′| = |𝑀| + 1. Do đó, 𝑀
không phải là so khớp lớn nhất.

Ngược lại, giả sử 𝑀 không phải là so khớp lớn nhất. Đặt 𝑀∗ là một so khớp lớn nhất
trong 𝐺. Khi đó, ta có |𝑀∗ | > |𝑀|. Đặt 𝐻 = 𝐺 [𝑀 △ 𝑀∗ ]. Mỗi đỉnh của 𝐻 có bậc một hoặc
hai trong 𝐻 vì nó chỉ có thể liên thuộc với tối đa một cạnh của 𝑀 và một cạnh của 𝑀∗ . Do
đó, mỗi thành phần liên thông của 𝐻 hoặc là chu trình sơ cấp có độ dài chẵn với các cạnh
luân phiên trong 𝑀và 𝑀∗ , hoặc một đường đi sơ cấp với các cạnh luân phiên trong 𝑀 và
𝑀∗ . Vì |𝑀∗ | > |𝑀| nên đồ thị 𝐻 có chứa nhiều cạnh của 𝑀∗ hơn của 𝑀. Điều này dẫn đến
trong 𝐻 có một thành phần liên thông 𝑃 là một đường đi sơ cấp với số cạnh trong 𝑀∗ nhiều
hơn trong 𝑀. Điều này có nghĩa là điểm đầu và điểm cuối của 𝑃 đều không thuộc 𝑀. Như
𝑃 là một đường đi tăng cường trong 𝑃. □

Trong nhiều ứng dụng, người ta muốn tìm một so khớp trong một đồ thị lưỡng phân
𝐺 với phân hoạch (𝑋, 𝑌) sao cho nó phủ tất cả các đỉnh trong 𝑋. Hall (1935) đã chỉ ra điều
kiện cần và đủ để tồn tại một so khớp như vậy. Với 𝑆 là tập con của 𝐸, ta ký hiệu 𝑁(𝑆) là
tập hợp tất cả đỉnh kề với ít nhất một đỉnh của 𝑆.

Định lý 6.6 (Định lý Hall) Đồ thị lưỡng phân 𝐺 với phân hoạch (𝑋, 𝑌) có một so khớp
phủ tất cả các đỉnh của 𝑋 khi và chỉ khi
|𝑁(𝑆)| ≥ |𝑆| với mọi 𝑆 ⊂ 𝑋

Chứng minh

Cho đồ thị lưỡng phân 𝐺 với phân hoạch (𝑋, 𝑌) có một so khớp phủ tất cả các đỉnh
của 𝑋. Xét 𝑆 là một tập con của 𝑋. Các đỉnh trong 𝑆 khớp theo 𝑀 với các đỉnh trong 𝑁(𝑆).
Do đó, |𝑁(𝑆)| ≥ |𝑆|.

Ngược lại, cho 𝐺 là một đồ thị lưỡng phân với phân hoạch (𝑋, 𝑌) và trong 𝐺 không
có so khớp nào phủ hết tất cả các đỉnh của 𝑋. Gọi 𝑀∗ là so khớp lớn nhất trong 𝐺 và 𝑢 là
một đỉnh thuộc 𝑋 không được phủ bởi 𝑀∗ . Ký hiệu 𝑍 là tập hợp các đỉnh có thể đến được
từ 𝑢 bằng các đường đi 𝑀∗ -luân phiên. Vì 𝑀 ∗ là so khớp lớn nhất nên theo Định lý 6.5 thì

133
𝑢 là đỉnh duy nhất trong 𝑍 không được phủ bởi 𝑀∗ . Đặt 𝑅 = 𝑋 ∩ 𝑍 và 𝐵 = 𝑌 ∩ 𝑍, xem
Hình 6.6.

Hình 6.6 Hình minh họa cho Định lý 6.6

Rõ ràng các đỉnh trong 𝑅\{𝑢} là khớp theo 𝑀∗ với các đỉnh của 𝐵. Do đó, |𝐵| =
|𝑅| − 1 và 𝑁(𝑅) ⊇ 𝐵. Vì mỗi đỉnh trong 𝑁(𝑅) đều liên thông với 𝑢 bằng các đường đi
𝑀∗ -luân phiên nên 𝑁(𝑅) = 𝐵. Từ đó suy ra

|𝑁(𝑅)| = |𝑅 | − 1 < |𝑅|

Mâu thuẫn với giả thiết của định lý Hall. □

Định lý Hall còn có tên là Định lý Hôn nhân (Marriage Theorem) vì định lý có thể
phát biểu lại như sau: Nếu mỗi nhóm các cô gái trong làng đều yêu thích một nhóm các
chàng trai có số lượng ít nhất bằng số lượng các cô gái trong nhóm thì mỗi cô gái trong
làng đều có thể kết hôn với chàng trai mà mình yêu thích.

Từ Định lý Hall, ta được một tiêu chuẩn để một đồ thị lưỡng phân có một so khớp
hoàn hảo.

Hệ quả 6.5 Đồ thị lưỡng phân 𝐺 với phân hoạch (𝑋, 𝑌) có một so khớp hoàn hảo khi và
chỉ khi |𝑋 | = |𝑌| và |𝑁(𝑆)| ≥ |𝑆| với mọi 𝑆 ⊆ 𝑋.

Chứng minh

Đồ thị lưỡng phân 𝐺 với phân hoạch (𝑋, 𝑌) có một so khớp hoàn hảo khi và chỉ khi
|𝑋 | = |𝑌| và 𝐺 có một so khớp phủ hết tất cả các đỉnh của 𝑋. Phần còn lại của hệ quả được
suy ra từ Định lý 6.6. □
134
Hệ quả 6.6 Mọi đồ thị 𝑘-đều lưỡng phân khác rỗng đều có một so khớp hoàn hảo.

Chứng minh

Cho 𝐺 là một đồ thị lưỡng phân 𝑘-đều với phân hoạch (𝑋, 𝑌), trong đó 𝑘 ≥ 1. Khi
đó, |𝑋 | = |𝑌|.

Cho 𝑆 là một tập con của 𝑋 và cho 𝐸1 và 𝐸2 lần lượt là tập hợp các cạnh liên thuộc
với 𝑆 và 𝑁(𝑆). Theo định nghĩa của 𝑁(𝑆) thì 𝐸1 ⊆ 𝐸2 . Do đó,

𝑘 |𝑁(𝑆)| = |𝐸2 | ≥ |𝐸1 | = 𝑘 |𝑆|

Vì 𝑘 ≥ 1 nên ta được |𝑁(𝑆)| ≥ |𝑆|, do đó theo Hệ quả 6.5 thì 𝐺 có một so khớp
hoàn hảo. □

Hệ quả 6.6 thỉnh thoảng được gọi định lý hôn nhân (marriage theorem) vì nó có thể
phát biểu lại như sau: Nếu trong làng, mỗi cô gái quen biết đúng 𝑘 chàng trai và mỗi chàng
trai quen biết đúng 𝑘 cô gái thì mỗi cô gái có thể kết hôn với chàng trai mà mình quen biết
và mỗi chàng trai cũng có thể kết hôn với cô gái mà mình quen biết.

Một tập con 𝐾 của 𝑉 được gọi là một cái phủ (covering) của 𝐺 nếu mỗi cạnh của 𝐺
đều có ít nhất một đầu mút trong 𝐾. Cái phủ 𝐾 được gọi là cái phủ nhỏ nhất nếu 𝐺 không
có cái phủ 𝐾′ với |𝐾′| < |𝐾|. Số các đỉnh trong cái phủ nhỏ nhất của 𝐺 được gọi là chỉ số
phủ (covering number) của 𝐺, được ký hiệu là 𝛽(𝐺).

Nếu 𝐾 là một cái phủ của 𝐺 và 𝑀 là một so khớp trong 𝐺 thì 𝐾 sẽ chứa ít nhất một
đầu mút của mỗi cạnh trong 𝑀. Do đó, |𝑀| ≤ |𝐾|. Nếu 𝑀∗ là một so khớp lớn nhất và 𝐾 ∗
là một cái phủ nhỏ nhất của 𝐺 thì

|𝑀∗ | ≤ |𝐾 ∗ |

König (1931) đã chỉ ra rằng nếu 𝐺 là đồ thị lưỡng phân thì |𝑀 ∗ | = |𝐾 ∗ |. Để chứng
minh được định lý König, ta cần bổ đề quan trọng sau

Bổ đề 6.1 Nếu 𝑀 là một so khớp và 𝐾 là cái phủ sao cho |𝑀| = |𝐾 | thì 𝑀 là so khớp
lớn nhất và 𝐾 là cái phủ nhỏ nhất.

Chứng minh

135
Nếu 𝑀∗ là một so khớp lớn nhất và 𝐾 ∗ là cái phủ nhỏ nhất thì

|𝑀| ≤ |𝑀∗ | ≤ |𝐾 ∗ | ≤ |𝐾|

Mà theo giả thiết thì |𝑀| = |𝐾| nên |𝑀 | = |𝑀∗ | và |𝐾| = |𝐾 ∗ |. □

Định lý 6.7 (Định lý König) Trong một đồ thị lưỡng phân, số cạnh của một so khớp lớn
nhất bằng với số đỉnh của một cái phủ nhỏ nhất.

Chứng minh

Cho 𝐺 là một đồ thị lưỡng phân với phân hoạch (𝑋, 𝑌). Cho 𝑀 ∗ là một so khớp lớn
nhất trong 𝐺. Đặt 𝑈 là tập hợp các đỉnh của 𝐺 chưa được phủ bởi 𝑀∗ . Đặt 𝑍 là tập hợp các
đỉnh liên thông với 𝑈 bằng các đường đi 𝑀∗ luân phiên. Đặt 𝑆 = 𝑍 ∩ 𝑋 và 𝑇 = 𝑍 ∩ 𝑌. Khi
đó, như trong chứng minh của Định lý 6.6, các đỉnh trong 𝑇 được phủ bởi 𝑀∗ và 𝑁(𝑆) =
𝑇. Đặt 𝐾 ∗ = (𝑋 ∖ 𝑆) ∪ 𝑇 (xem Hình 6.7). Mỗi cạnh của 𝐺 phải có ít nhất một đầu mút
trong 𝐾 ∗ .Vì nếu ngược lại thì sẽ một cạnh có một đầu mút trong 𝑆 và một đầu mút trong
𝑌 ∖ 𝑇, trái với giả thiết 𝑁(𝑆) = 𝑇. Như vậy 𝐾 ∗ là một cái phủ của 𝐺 và |𝐾 ∗ | = |𝑀∗ |. Theo
Bổ đề 6.1 thì 𝐾 ∗ là cái phủ nhỏ nhất. □

Hình 6.7 Minh họa Định lý 6.7

6.3 Số Ramsey
Một tập con 𝑆 của 𝑉 được gọi là tập độc lập (independent set) nếu không có hai
đỉnh nào trong 𝑆 kề với nhau. Ta gọi 𝑆 là tập độc lập lớn nhất (maximum) nếu 𝐺 không có
tập độc lập 𝑆′ với |𝑆′| > |𝑆|. Số các đỉnh trong tập độc lập lớn nhất của 𝐺 được gọi là chỉ
136
số độc lập (independent number) của 𝐺, được ký hiệu là 𝛼(𝐺). Hình 6.8 minh họa cho tập
độc lập và tập độc lập lớn nhất.

Hình 6.8 a) Tập độc lập; b) Tập độc lập lớn nhất

Định lý 6.8 Một tập 𝑆 ⊆ 𝑉 là một tập độc lập của 𝐺 khi và chỉ khi 𝑉 ∖ 𝑆 là cái phủ của
𝐺.

Chứng minh

Theo định nghĩa, 𝑆 là một tập độc lập khi và chỉ khi không có cạnh nào của 𝐺 có cả
hai đầu mút nằm trong 𝑆, có nghĩa là, mọi cạnh của 𝐺 đều có ít nhất một đầu mút trong
𝑉 ∖ 𝑆. Điều này tương đương với 𝑉 ∖ 𝑆 là cái phủ của 𝐺. □

Hệ quả 6.7 𝛼 + 𝛽 = 𝑛

Chứng minh

Cho 𝑆 là một tập độc lập lớn nhất của 𝐺 và 𝐾 là một cái phủ nhỏ nhất của 𝐺. Khi
đó, theo Định lý 6.8 thì 𝑉 ∖ 𝐾 là một tập độc lập và 𝑉 ∖ 𝑆 là một cái phủ của 𝐺. Vì vậy

𝑛 − 𝛽 = |𝑉 ∖ 𝐾| ≤ 𝛼

𝑛 − 𝛼 = |𝑉 ∖ 𝑆 | ≥ 𝛽

Kết hợp hai bất phương trình trên ta được 𝛼 + 𝛽 = 𝑛. □

137
Tập hợp các cạnh mà trong đó không có hai cạnh nào kề nhau chính là một so khớp.
Số cạnh của một so khớp lớn nhất của 𝐺 được gọi là chỉ số so khớp (matching number) của
𝐺, và được ký hiệu là 𝛼′(𝐺).

Một cái phủ cạnh (edge covering) của 𝐺 là một tập con 𝐿 của 𝐸 sao cho mỗi đỉnh
của 𝐺 là đầu mút của một cạnh nào đó trong 𝐿. Chú ý rằng cái phủ cạnh không phải luôn
tồn tại. Một đồ thị 𝐺 có một cái phủ cạnh khi và chỉ khi 𝛿 > 0. Cái phủ cạnh 𝐿 được gọi là
cái phủ cạnh nhỏ nhất (minimum edge covering) nếu 𝐺 không có cái phủ cạnh 𝐿′ với |𝐿′| <
|𝐿|. Số cạnh của cái phủ cạnh lớn nhất được gọi chỉ số phủ cạnh (edge covering number),
được ký hiệu là 𝛽′(𝐺).

Định lý 6.9 (Gallai, 1959) Nếu 𝛿 > 0 thì 𝛼 ′ + 𝛽′ = 𝑛.

Chứng minh

Cho 𝑀 là một so khớp lớn nhất trong 𝐺 và đặt 𝑈 là tập hợp các đỉnh không được
phủ bởi 𝑀. Vì 𝛿 > 0 và 𝑀 là so khớp lớn nhất nên tồn tại một tập 𝐸′ gồm |𝑈| cạnh mà mỗi
cạnh liên thuộc với một đỉnh trong 𝑈. Rõ ràng, 𝑀 ∪ 𝐸′ là một cái phủ cạnh của 𝐺 nên

𝛽′ ≤ |𝑀 ∪ 𝐸 ′ | = 𝛼 ′ + (𝑛 − 2𝛼 ′ ) = 𝑛 − 𝛼′

Hay

𝛼 ′ + 𝛽′ ≤ 𝑛

Cho 𝐿 là cái phủ cạnh nhỏ nhất của 𝐺. Đặt 𝐻 = 𝐺 [𝐿] và cho 𝑀 là một so khớp lớn
nhất trong 𝐻. Đặt 𝑈 là tập hợp các đỉnh phủ bởi 𝑀 trong 𝐻. Vì 𝑀 là so khớp lớn nhất nên
𝐻[𝑈] không có cạnh nào cả và do đó

|𝐿| − |𝑀| = |𝐿 ∖ 𝑀 | ≥ |𝑈| = 𝑛 − 2|𝑀|

Vì 𝐻 là một đồ thị con của 𝐺 nên 𝑀 là một so khớp trong 𝐺 và do đó

𝛼 ′ + 𝛽′ ≥ |𝑀 | + |𝐿| ≥ 𝑛

Vậy 𝛼 ′ + 𝛽′ = 𝑛. □

Định lý 6.10 Trong một đồ thị lưỡng phân 𝐺 với 𝛿 > 0, số đỉnh trong một tập độc lập lớn
nhất bằng với số cạnh trong một cái phủ cạnh nhỏ nhất.

138
Chứng minh

Cho 𝐺 là một đồ thị lưỡng phân với 𝛿 > 0. Theo Hệ quả 6.7 và Định lý 6.9 thì

𝛼 + 𝛽 = 𝛼 ′ + 𝛽′

Vì 𝐺 là đồ thị lưỡng phân nên theo Định lý 6.7 thì 𝛼 ′ = 𝛽. Kết hợp với đẳng thức
trên ta được 𝛼 = 𝛽′. □

Đồ thị bù (complement graph) 𝐺 𝑐 của một đơn đồ thị 𝐺 là một đơn đồ thị với tập
đỉnh 𝑉 và hai đỉnh kề nhau trong 𝐺 𝑐 khi và chỉ khi chúng không kề nhau trong 𝐺.

Nhắc lại, tập con 𝑆 của 𝑉 được gọi là một clique của 𝐺 nếu 𝐺 [𝑆] là một đồ thị đầy
đủ. Như vậy, 𝑆 là một clique của 𝐺 khi và chỉ khi 𝑆 là một tập độc lập trong 𝐺 𝑐 .

Ramsey (1930) đã chỉ ra rằng với mỗi cặp số nguyên dương 𝑘 và 𝑙 đều tồn tại số
nguyên nhỏ nhất, ký hiệu là 𝑟(𝑘, 𝑙), sao cho mọi đồ thị trên 𝑟(𝑘, 𝑙) đỉnh đều có một clique
gồm 𝑘 đỉnh hoặc một tập độc lập gồm 𝑙 đỉnh. Số 𝑟(𝑘, 𝑙) được gọi là số Ramsey (Ramsey
number). Dễ thấy là

𝑟(1, 𝑙) = 𝑟(𝑘, 1) = 1

𝑟(2, 𝑙) = 𝑙, 𝑟(𝑘, 2) = 𝑘

Định lý 6.11 Với hai số nguyên bất kỳ 𝑘 ≥ 2 và 𝑙 ≥ 2 thì


𝑟(𝑘, 𝑙) ≤ 𝑟(𝑘, 𝑙 − 1) + 𝑟(𝑘 − 1, 𝑙)
Hơn nữa, nếu cả 𝑟(𝑘, 𝑙 − 1) và 𝑟(𝑘 − 1, 𝑙) đều chẵn thì dấu đẳng thức không xảy ra.

Chứng minh

Cho 𝐺 là một đồ thị trên 𝑟(𝑘, 𝑙 − 1) + 𝑟(𝑘 − 1, 𝑙) đỉnh và 𝑣 là một đỉnh của 𝐺. Ta
xét hai trường hợp

(a) 𝑣 không kề với một tập 𝑆 gồm ít nhất 𝑟(𝑘, 𝑙 − 1) đỉnh,

(b) 𝑣 kề với một tập 𝑇 gồm ít nhất 𝑟(𝑘 − 1, 𝑙) đỉnh.

Một trong hai trường hợp trên sẽ xảy ra vì số đỉnh 𝑣 kề cộng số đỉnh 𝑣 không kề là
𝑟(𝑘, 𝑙 − 1) + 𝑟(𝑘 − 1, 𝑙) − 1.
139
Trong trường hợp (a) thì 𝐺 [𝑆] hoặc chứa một clique gồm 𝑘 đỉnh hoặc chứa một tập
độc lập gồm 𝑙 − 1 đỉnh, và do đó 𝐺[𝑆 ∪ {𝑣}] chứa một clique gồm 𝑘 đỉnh hoặc chứa một
tập độc lập gồm 𝑙 đỉnh. Từ đó suy ra 𝑟(𝑘, 𝑙) ≤ 𝑟(𝑘, 𝑙 − 1) + 𝑟(𝑘 − 1, 𝑙).

Trong trường hợp (b) thì 𝐺 [𝑇] hoặc chứa một clique gồm 𝑘 − 1 đỉnh hoặc chứa một
tập độc lập gồm 𝑙 đỉnh, và do đó 𝐺[𝑇 ∪ {𝑣}] chứa một clique gồm 𝑘 đỉnh hoặc chứa một
tập độc lập gồm 𝑙 đỉnh. Từ đó suy ra 𝑟(𝑘, 𝑙) ≤ 𝑟(𝑘, 𝑙 − 1) + 𝑟(𝑘 − 1, 𝑙).

Bây giờ giả sử rằng cả 𝑟(𝑘, 𝑙 − 1) và 𝑟(𝑘 − 1, 𝑙) đều chẵn. Cho 𝐺 là một đồ thị trên
𝑟(𝑘, 𝑙 − 1) + 𝑟(𝑘 − 1, 𝑙) − 1 đỉnh. Vì số đỉnh của 𝐺 là một số lẻ nên theo Hệ quả 1.1 thì
𝐺 có một đỉnh 𝑣 bậc chẵn. Từ đó suy ra 𝑣 không thể kề với đúng 𝑟(𝑘 − 1, 𝑙) − 1 đỉnh. Điều
này dẫn đến trường hợp (a) hoặc trường hợp (b) sẽ xảy ra. Theo chứng minh trên thì 𝐺 sẽ
chứa một clique gồm 𝑘 đỉnh hoặc một tập độc lập gồm 𝑙 đỉnh. Do đó

𝑟(𝑘, 𝑙) ≤ 𝑟(𝑘, 𝑙 − 1) + 𝑟(𝑘 − 1, 𝑙) − 1

Định lý đã được chứng minh. □

Việc xác định số Ramsey trong trường hợp tổng quát là một bài toán rất khó và chưa
có lời giải. Xét bốn đồ thị trong Hình 6.9.

Đồ thị trong Hình 6.9a không chứa bất kỳ clique nào gồm 3 đỉnh và cũng không
chứa tập độc lập nào gồm 3 đỉnh. Điều này chứng tỏ rằng 𝑟(3,3) ≥ 6. Mà theo Định lý
6.11 thì 𝑟(3,3) ≤ 𝑟(3,2) + 𝑟(2,3) = 3 + 3 = 6. Do đó, 𝑟(3,3) = 6.

Đồ thị trong Hình 6.9b không chứa bất kỳ clique nào gồm 3 đỉnh và cũng không
chứa tập độc lập nào gồm 4 đỉnh. Điều này chứng tỏ rằng 𝑟(3,4) ≥ 9. Mà theo Định lý
6.11 thì 𝑟(3,4) < 𝑟(3,3) + 𝑟(2,4) = 6 + 4 = 10 vì cả 𝑟(3,3) và 𝑟(2,4) đều là số chẵn.
Do đó, 𝑟(3,4) = 9.

Đồ thị trong Hình 6.9c không chứa bất kỳ clique nào gồm 3 đỉnh và cũng không
chứa tập độc lập nào gồm 5 đỉnh. Điều này chứng tỏ rằng 𝑟(3,5) ≥ 14. Mà theo Định lý
6.11 thì 𝑟(3,5) ≤ 𝑟(3,4) + 𝑟(2,5) = 9 + 5 = 14. Do đó, 𝑟(3,5) = 14.

Đồ thị trong Hình 6.9d không chứa bất kỳ clique nào gồm 4 đỉnh và cũng không
chứa tập độc lập nào gồm 4 đỉnh. Điều này chứng tỏ rằng 𝑟(4,4) ≥ 18. Mà theo Định lý
6.11 thì 𝑟(4,4) ≤ 𝑟(4,3) + 𝑟(3,4) = 9 + 9 = 18. Do đó, 𝑟(4,4) = 18.
140
Đồ thị Ramsey (𝑘, 𝑙) ((𝑘, 𝑙)-Ramsey graph) là một đồ thị trên 𝑟(𝑘, 𝑙) − 1 đỉnh mà
không chứa clique nào gồm 𝑘 đỉnh cũng không chứa tập độc lập nào gồm 𝑙 đỉnh. Tất cả
các đồ thị trong Hình 6.9 là các đồ thị Ramsey.

Từ Định lý 6.11, ta được một cận trên của số Ramsey 𝑟(𝑘, 𝑙).

Hình 6.9 Bốn đồ thị Ramsey

𝑘−1
Định lý 6.12 𝑟(𝑘, 𝑙) ≤ 𝐶𝑘+𝑙−2

Chứng minh

Ta chứng minh bằng quy nạp trên 𝑘 + 𝑙. Từ các giá trị đặc biệt của 𝑟(𝑘, 𝑙), ta thấy
định lý đúng với 𝑘 + 𝑙 ≤ 5. Cho 𝑚 và 𝑛 là hai số nguyên dương, giả sử định lý đúng với
mọi số nguyên 𝑘 và 𝑙 thỏa mãn 5 ≤ 𝑘 + 𝑙 < 𝑚 + 𝑛. Theo Định lý 6.11 và giả thiết quy
nạp ta được

𝑟(𝑚, 𝑛) ≤ 𝑟(𝑚, 𝑛 − 1) + 𝑟(𝑚 − 1, 𝑛)

141
𝑚−1 𝑚−2 𝑚−1
≤ 𝐶𝑚+𝑛−3 + 𝐶𝑚+𝑛−3 = 𝐶𝑚+𝑛−2

Do đó, theo nguyên lý quy nạp định lý đúng với tất cả các giá trị của 𝑘 và 𝑙.□

142
BÀI TẬP CHƯƠNG 6

Bài 1. Xác định sắc số của đồ thị bên dưới. Đồ thị này có phải là đồ thị tới hạn không?

Bài 2. Xác định sắc số của đồ thị 𝐺 bên dưới và tìm đồ thị con 𝜒(𝐺)-tới hạn của 𝐺.

Bài 3. Cho 𝐺1 , 𝐺2 , … , 𝐺𝑘 là các thành phần liên thông của đồ thị 𝐺. Chứng minh rằng
𝜒(𝐺 ) = max 𝜒(𝐺𝑖 ).
i

Bài 4. Cho 𝐺1 , 𝐺2 , … , 𝐺𝑘 là các khối của đồ thị 𝐺. Chứng minh rằng 𝜒(𝐺 ) = max 𝜒(𝐺𝑖 ).
i

Bài 5. Tìm một so khớp lớn nhất trong mỗi đồ thị bên dưới và chứng minh nó là so khớp
lớn nhất.

143
Bài 6. Xác định số cạnh của so khớp cực đại nhỏ nhất của đồ thị chu trình 𝐶𝑛 .

Bài 7. Cho 𝑆 là tập hợp các hợp tất cả các đỉnh được phủ bởi một so khớp 𝑀. Chứng minh
rằng tồn tại một so khớp lớn nhất phủ hết tất cả các đỉnh của 𝑆. Có thể kết luận rằng mọi
so khớp lớn nhất đều phủ hết tất cả các đỉnh của 𝑆 không? Tại sao?

Bài 8. Cho 𝑇 là một cây với 𝑛 đỉnh và 𝑘 là chỉ số độc lập của 𝑇. Hãy xác định 𝛼′(𝑇) theo
𝑛 và 𝑘.

Bài 9. Chứng minh rằng 𝐺 là đồ thị lưỡng phân khi và chỉ khi 𝛼(𝐻 ) = 𝛽′(𝐻) với mọi đồ
thị con 𝐻 không có đỉnh cô lập của 𝐺.

Bài 10. Chứng minh rằng 𝑟(2, 𝑙) = 𝑙, 𝑟(𝑘, 2) = 𝑘.

Bài 11. Chứng minh rằng 𝑟(𝑘, 𝑙) = 𝑟(𝑙, 𝑘 ) với mọi số nguyên dương 𝑘 và 𝑙.

144
TÀI LIỆU THAM KHẢO

Anh, N. T. (2012). Lý thuyết đồ thị và ứng dụng. NXB Giáo dục.

Bondy, J. A., & Murty, U. S. (1976). Graph theory with applications. Macmillan London.

Bondy, J. A., & Murty, U. S. (2008). Graph Theory. Graduate texts in Mathematics.

Cayley, A. (1889). A theorem on trees. Quart. J. Math., 376-378.

Dijkstra, E. W. (1959). A note on two problems in connexion with graphs. Numerische


mathematik, 269-271.

Dirac, G. (1953). The structure of k-chromatic graphs. Fundamenta Mathematicae, 42-55.

Dirac, G. A. (1952). Some theorems on abstract graphs. Proceedings of the London


Mathematical Society, 69-81.

Edmonds, J., & Johnson, E. L. (1973). Matching, Euler tours and the Chinese postman.
Mathematical programming, 88-124.

Euler, L. (1741). Solutio problematis ad geometriam situs pertinentis. Commentarii


academiae scientiarum Petropolitanae, 128-140.

Gallai, T. (1959). Über extreme Punkt-und Kantenmengen. Sectio Mathematica, 133-138.

Grötzsch, H. (1959). Ein Dreifarbensatz für dreikreisfreie Netze auf der Kugel. Wiss. Z.
Martin Luther Univ. Halle-Wittenberg, Math. Nat. Reihe, 109--120.

Hall, P. (1987). On representatives of subsets. Classic Papers in Combinatorics, 58--62.

Harary, F. (1962). The maximun connectivity of a graph. Proc. Nat. Acad. Sci., 1142-46.

Khánh, N. H., & Như, P. B. (2014). Giáo trình toán rời rạc, toán ứng dụng. Đại học Cần
Thơ.

Kiệt, B. A., & Bảo, T. Q. (2004). Giáo trình toán rời rạc. Tủ sách Đại học Cần Thơ.

Kruskal, J. B. (1956). On tree shortest spanning subtree of a graph and the traveling
salesman problem. Proc. Amer. Math. Soc., 48-50.

145
Lovász, L. (1975). Three short proofs in graph theory. Journal of Combinatorial Theory,
Series B, 269-271.

Nghĩa, N. Đ. (2009). Toán rời rạc. NXB ĐHQG Hà Nội.

Prüfer, H. (1918). Neuer Beweis eines Satzes über Permutationen. Arch. Math. Phys., 742-
44.

Ramsey, F. P. (1930). On a problem of formal logic. Proceedings of the London


Mathematical Society, 264-286.

Ruận, Đ. H. (2000). Lý thuyết đồ thị và ứng dụng. NXB Hà Nội: Khoa học và Kỹ thuật.

West, D. B. (2001). Introduction to graph theory, second edition. Prentice hall Upper
Saddle River.

Whiting, P., & Hillier, J. (1960). A method for finding the shortest route through a road
network. Journal of the Operational Research Society, 37-40.

146

You might also like