Tải bản đầy đủ (.doc) (22 trang)

cây phủ nhỏ nhất và ứng dụng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (199.65 KB, 22 trang )

BẢNG PHÂN CÔNG CÔNG VIỆC
Stt Họ và Tên Công việc
Chữ

Nhận xét của GV
1 Trần Bá Định Chương III
2 Trương Thị Kim Ngọc Chương I
3 Huỳnh Thị Phấn Chương II
4 Phạm Thị Quý Chương II
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
MỤC LỤC
Trang
Đồ thị có hướng gọi là liên thông mạnh, nếu mọi cặp đỉnh của nó đều có đường đi có
hướng nối chúng với nhau 4
a b 7
II. Cây và cây phủ 8
1. Cây 8
Chứng minh 8
2. Cây phủ 9
MỞ ĐẦU
Lý thuyết đồ thị là ngành khoa học được phát triển từ lâu nhưng lại có nhiều
ứng dụng hiện đại. Đồ thị là một cấu trúc rời rạc gồm các đỉnh và các cạnh nối
các đỉnh đó. Đây là công cụ hữu hiệu để mô hình hoá và giải quyết các bài toán
trong nhiều lĩnh vực khoa học, kỹ thuật, kinh tế, xã hội
Khi nghiên cứu bộ môn lý thuyết đồ thị, chúng ta được tiếp cận với nhiều
khái niệm, tri thức mới. Trong đó, một khái niệm mà chúng ta không thể không
nhắc tới đó là khái niệm về CÂY. Cây là một cấu trúc dữ liệu được sử dụng rộng
rãi gồm một tập hợp các đỉnh (nút). Một trong số những bài toán liên quan đến
cây mà chúng ta được tìm hiểu đó là bài toán tìm cây phủ (cây bao trùm). Đồ thị
có cây phủ là đồ thị khi ta chọn một đỉnh làm đỉnh gốc thì qua đỉnh đó luôn có
một đường đi đi qua tất cả các đỉnh còn lại của đồ thị. Cây phủ thì có nhiều ứng


dụng trong các bài toán điều khiển giao thông, nối các mạng điện…Ngoài ra,
chúng ta còn sử dụng khái niệm cây phủ để kiểm tra tính liên thông của một đồ
thị.
Trong thực tế có một vấn đề đặt ra là: Khi ta xây dựng các con đường thông
thương giữa các thành phố, làm thế nào để chi phí bỏ ra là thấp nhất nếu ta biết
trước được chi phí của con đường giữa 2 thành phố bất kỳ. Từ yêu cầu thực tế
này dẫn đến bài toán “Tìm cây phủ nhỏ nhất”.
Bài toán tìm cây phủ nhỏ nhất (hay cây khung tối tiểu- Minimmum
Spanning Tree - MST) của một đồ thị vô hướng là một bài toán rất nổi tiếng và
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
2
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
có ứng dụng rất lớn. Hiện nay đã có rất nhiều thuật toán giải quyết bài toán MST
trong các trường hợp cụ thể để giải quyết các bài toán thực tế. Tuy nhiên hai giải
thuật kinh điển để tìm cây phủ nhỏ nhất là thuật toán Prim và thuật toán Kruskal.
CHƯƠNG I. ĐẠI CƯƠNG VỀ ĐỒ THỊ
I. Một số khái niệm
1. Đồ thị có hướng và đồ thị vô hướng
Định nghĩa 1.1: Đồ thị vô hướng G = (V, E) gồm một tập V các đỉnh và
tập E các cạnh. Mỗi cạnh e

E đựoc liên kết với một cặp đỉnh v, w (không kể
thứ tự) như hình sau:
v e w

Định nghĩa 1.2: Đồ thị có hướng G = (V, E) gồm một tập V các đỉnh và
tập E các cạnh có hướng gọi là cung.
Mỗi cung e

E được liên kết với một cặp đỉnh (v, w) có thứ tự như hình

sau:
v e w
Cho đồ thị (có hướng hoặc vô hướng) G = (V, E).
Nếu cạnh e liên kết đỉnh v, w thì ta nói cạnh e liên thuộc đỉnh v, w, các
đỉnh v, w liên thuộc cạnh e, các đỉnh v, w là các đỉnh biên của cạnh e và đỉnh v
kề đỉnh w.
Nếu chỉ có duy nhất một cạnh e liên kết với cặp đỉnh v, w, ta viết e=(v,w). Nếu
e là cung thì v gọi là đỉnh đầu và w gọi là đỉnh cuối của cung e.
2. Đường đi, chu trình, tính liên thông
Cho đồ thị G=(V, E).
Dây
µ
từ đỉnh v đến đỉnh w là tập hợp các đỉnh và cạnh nối tiếp nhau bắt
đầu từ đỉnh v và kết thúc tại đỉnh w. Số cạnh trên dây
µ
goi là độ dài của dây
µ
.
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
3
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
Dây
µ
từ đỉnh v đến đỉnh w độ dài k được biểu diễn như sau:
µ
=(v, e
1
, v
1
, e

2
, v
2
, , v
k-1
, e
k
, w).
Trong đó v
i
(i = 1, , k - 1) là các đỉnh trên dây e
i
(i = 1, , k – 1) là các cạnh
trên dây liên thuộc đỉnh kề trước và sau nó. Các đỉnh và cạnh trên dây có thể lặp
lại.
a. Đường đi
Đường đi từ đỉnh v đến đỉnh w là dây từ đỉnh v đến đỉnh w, trong đó các
cạnh không lặp lại.
Đường đi sơ cấp là đường đi không đi qua một đỉnh quá một lần.
Đường đi có hướng trong đồ thị có hướng là dây có hướng, trong đó các
cung không lặp lại.
Đường đi có hướng sơ cấp là đường đi có hướng không đi qua một đỉnh
quá một lần.
Dây có hướng trong đồ thị có hướng là dãy các đỉnh và cung nối tiếp nhau
(e
1
, e
2
, …, e
k

) thoả mãn đỉnh cuối của cung e
i
là đỉnh đầu của cung e
i+1
, i=1, k-1
Vòng là dây có đỉnh đầu và đỉnh cuối trùng nhau.
Vòng có hướng là dây có hướng có đỉnh đầu và đỉnh cuối trùng nhau.
b. Chu trình
Chu trình là đường đi có đỉnh đầu và đỉnh cuối trùng nhau.
Chu trình có hướng là đường đi có hướng có đỉnh đầu và đỉnh cuối trùng
nhau.
Chu trình sơ cấp là chu trình không đi qua một đỉnh quá 1 lần.
Chu trình có hướng sơ cấp là chu trình có hướng không đi qua một đỉnh
quá một lần.
c. Tính liên thông
Đồ thị vô hướng gọi là liên thông, nếu mọi cặp đỉnh của nó đều có đường
đi nối chúng với nhau.
Đồ thị có hướng gọi là liên thông mạnh, nếu mọi cặp đỉnh của nó đều có
đường đi có hướng nối chúng với nhau.
Đồ thị có hướng gọi là liên thông yếu, nếu đồ thị lót (vô hướng) của nó
liên thông.
Đồ thị có hướng gọi là bán liên thông, nếu với mọi cặp đỉnh (u,v) bao giờ
cũng tồn tại đường đi có hướng từ u đến v hoặc từ v đến u.
Đồ thị liên thông mạnh => Đồ thị bán liên thông => Đồ thị liên thông yếu.
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
4
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
3. Trọng đồ
Định nghĩa: Trọng đồ (có hướng) là đồ thị (có hướng) mà mỗi cạnh
(cung) của nó được gán một số.

Trọng đồ được biểu diễn bởi G = (V, E, w), trong đó V là tập các đỉnh, E là
tập các cạnh (cung) và w: E -> R là hàm số trên E. w(e) là trọng số của cạnh
(cung) e với mọi e

E.
Trong trọng đồ độ dài trọng số của đường đi
µ
là tổng các trọng số trên
đường đi đó.
4. Đồ thị con
Cho đồ thị G = (V, E). Đồ thị G’ = (V’, E’) gọi là đồ thị con của G nếu:
V’

V và E’

E
Nếu V’ = V, thì G’ gọi là đồ thị con phủ của G
5. Biểu diễn đồ thị
Để lưu trữ đồ thị và thực hiện các thuật toán khác nhau với đồ thị trên máy
tính cần phải tìm những cấu trúc dữ liệu thích hợp để mô tả đồ thị. Việc chọn cấu
trúc dữ liệu nào để biểu diễn đồ thị có tác động rất lớn đến hiệu quả của thuật
toán. Vì vậy, việc chọn lựa cấu trúc dữ liệu để biểu diễn đồ thị phụ thuộc vào
từng tình huống cụ thể (bài toán và thuật toán cụ thể).
Đối với bài toán “Cây phủ nhỏ nhất” thì bài toán biểu diễn đồ thị dưới dạng:
Ma trận kề, ma trận trọng số, danh sách cạnh(cung) và danh sách kề.
a. Ma trận kề, ma trận trọng số của đồ thị vô hướng
Ma trận kề :
Cho đồ thị G=(V,E) có n đỉnh theo thứ tự là v
1,
v

2,
…v
n
. Ma trân kề của đồ thị G
là ma trận vuông A=(a
ij)nxm
trong đó a
ij
là số cạnh (khuyên) nối v
i
với v
j
. Lưu ý khi
tính bậc của đỉnh mỗi khuyên được tính hai bậc
Ma trận kề của đồ thị vô hướng luôn đối xứng nhau qua đường chéo chính

Ví dụ: cho đồ thị sau

a b
c d
e f
có ma trận kề là:
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
5
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
Ma trận trọng số
Cho đồ thị vô hướng G = (V,E) có n đỉnh theo thứ tự là v
1,
v
2,

…v
n
. Ma trận
khoảng cách của G là ma trận D = (d
ij
) xác định như sau
d
ij
= 0 nếu i=j
hoặc w(v
i,
v
j
) nếu (v
i,
v
j)

E
hoặc

nếu (v
i
,v
j
)

E
Ma trận khoảng cách của đồ thị sau là: (các ô trống là


)
4
a b
2 2 5
c 1 d
3 3 6
6 f
2
e
Đỉnh a b c d e f
a 0 4 2 3
b 4 0 5
c 2 0 1 6 3
d 5 1 0 6
e 3 6 0 2
f 3 6 2 0

Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
Đỉnh a b c d e f
a 0 1 1 0 1 0
b 1 0 0 1 0 0
c 1 0 0 1 1 1
d 0 1 1 0 0 1
e 1 0 1 0 0 1
f 0 0 1 1 1 0
6
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
b. Danh sách cạnh (cung)
Trong trường hợp đồ thị thưa (đồ thị có số cạnh m thoả mãn bất đẳng thức m
< 6n) người ta thường dùng cách biểu diễn đồ thị dưới dạng danh sách cạnh.

Trong cách biểu diễn đồ thị bởi danh sách cạnh (cung) chúng ta sẽ lưu trữ
danh sách tất cả các cạnh (cung) của đồ thị vô hướng (có hướng). Một cạnh
(cung) e=(x,y) của đồ thị sẽ tương ứng với hai biến Dau[e], Cuoi[e]. Như vậy , để
lưu trữ đồ thị ta cần sử dụng 2m đơn vị bộ nhớ. Nhược điểm của cách biểu diễn
này là để xác định những đỉnh nào của đồ thị là kề với một đỉnh cho trước chúng
ta phải làm cỡ m phép so sánh (khi duyệt qua danh sách tất cả các cạnh của đồ
thị).
Ví dụ: Đồ thị sau
a b
c d
f
e
có danh sách cạnh là:
(a,b),(a,c),(a,e),(b,d),(c,d),(c,e),(c,f),(d,f),(f,e) được lưu trữ bởi các mảng
Đầu[e], Cuối[e], e=1, 9 như sau:
Cạnh 1 2 3 4 5 6 7 8 9
Đầu a a a b c c c d f
Cuối b c e d d e f f e
c. Danh sách kề
Trong rất nhiều vấn đề ứng dụng của lý thuyết đồ thị, cách biểu diễn đồ
thị dưới dạng danh sách kề là cách biểu diễn thích hợp nhất được sử dụng.
Trong cách biểu diễn này, với mỗi đỉnh v của đồ thị chúng ta lưu trữ danh
sách các đỉnh kề với nó, mà ta sẽ ký hiệu là
Ke(v) = { u

V | (v,u)

E}
Khi đó vòng lặp thực hiện với mỗi một phần tử trong danh sách này theo thứ
tự các phần tử được sắp xếp trong nó sẽ được viết như sau:

Với mọi u

Ke(v) do <công việc>.
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
7
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
II. Cây và cây phủ
1. Cây
Cây là đồ thị liên thông không chứa chu trình.
Ví dụ: Đồ thị sau là cây
v
1
v
2
v
3
v
4
v
5
v
6
v
7
Gốc của cây là một đỉnh đặc biệt, thông thường là đỉnh trên cùng.
Mức của đỉnh là độ dài đường đi từ gốc đến đỉnh đó.
Độ cao của cây là mức lớn nhất của cây (tức mức của đỉnh cách xa cây
nhất).
Trong ví dụ trên nếu ta chọn v
1

là gốc thì v
2
, v
3
là những đỉnh mức 1, các
đỉnh v
4
, v
5
, v
6
, v
7
có mức 2, và độ cao của cây là 2.
Định lý
Cho T là đồ thị n đỉnh. Các mệnh đề sau tương đương
(i) T là cây
(ii) T không chứa chu trình và có n-1 cạnh
(iii) T liên thông và có n-1 cạnh
(iv) T liên thông và mỗi cạnh là cầu
(v) Hai đỉnh bất kỳ được nối với nhau bởi một đường đi duy nhất
(vi) T không chứa chu trình và nếu thêm một cạnh nối hai đỉnh thì ta thu được
đúng 1 chu trình
(vii) T liên thông và nếu thêm một cạnh nối hai đỉnh thì ta thu được đúng 1 chu
trình
Chứng minh
Các mệnh đề trên hiển nhiên tương đương với n=1.
(i)⇒(ii): Quy nạp theo số đỉnh n. Giả sử đúng với mọi n ≤ k. Cho n=k+1.
Giả sử e là cạnh của T. Loại e khỏi T ta có đồ thị T’ gồm 2 thành phần liên
thông T

1
và T
2
. Gọi n
i
, m
i
là số đỉnh và số cạnh tương ứng với T
i,
i=1,2. Theo
giả thiết quy nạp m
i
= n
i
– 1 , i =1,2
Vậy số cạnh của T là
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
8
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
1+ m
1
+ m
2
= n
1
+ n
2
– 1 = n – 1
(ii)⇒(iii): Bằng phản chứng. Giả sử T không liên thông và có k thành
phần liên thông (k ≥ 2) T

1
, T
2
, , T
k
. Vì T không chứa chu trình nên các thành
phần liên thông cũng không chứa chu trình. Theo định nghĩa T
1
, T
2
, , T
k
cũng
là cây. Gọi n
i
, m
i
là số đỉnh và số cạnh tương ứng với T
i
, i=1, ,k. Theo (ii) ta
có:
m
i
= n
i
– 1, i =1, ,k
Suy ra số cạnh m của T là :
m = ∑ m
i
= ∑ (n

i
– 1) = n - k
mâu thuẫn với (ii) (m=n-1).
(iii)⇒(iv): Việc loại bỏ cạnh bất kỳ của T dẫn đến một đồ thị n đỉnh và n-
2 cạnh. Đồ thị này không thể liên thông được. Vậy mỗi cạnh của T là cầu.
(iv)⇒(v): Do T liên thông nên hai đỉnh bất kỳ của nó được nối với nhau
bằng một dây đường đi. Nếu có cặp đỉnh được nối với nhau bằng 2 đường đi thì
suy ra đồ thị chứa chu trình và các cạnh trên chu trình đó không thể là cầu được,
mâu thuẫn.
(v)⇒(vi): Hiển nhiên T không chứa chu trình. Bây giờ ta thêm cạnh
e=(u,v). Khi đó cạnh e cùng đường đi nối u và v tạo nên chu trình duy nhất của
T.
(vi)⇒(vii): Hiển nhiên.
(vii)⇒(i): T liên thông. Nếu T có chu trình thì khi thêm cạnh nối hai đỉnh trên
chu trình ta sẽ nhận được 2 chu trình, vậy T là cây.
2. Cây phủ
Định nghĩa: Cho đồ thị G=(V,E). Cây T gọi là cây phủ hay cây bao trùm
của G, nếu T là đồ thị con phủ của G.
Định lý : Đồ thị G = (V, E) có cây phủ khi và chỉ khi G liên thông.
Chứng minh
(=>): Nếu G có cây phủ thì hiển nhiên G liên thông.
(<=): Giả sử G là đồ thị liên thông. Nếu G không có chu trình thì theo định nghĩa
G là cây phủ của chính nó. Nếu G có chu trình thì ta bỏ bớt 1 cạnh (không bỏ
đỉnh) trên chu trình đó. Đồ thị con thu được vẫn liên thông. Nếu vẫn còn chu
trình ta lại bỏ bớt 1 cạnh, cứ tiếp tục quá trình trên cho đến khi không còn chu
trình thì ta thu được cây phủ của đồ thị G.
Ví dụ : Các cây T
1
và T
2

là cây phủ của đồ thị G
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
9
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
a b
c d
e f
g h
G T
1
T
2
3. Khái niệm cây phủ nhỏ nhất
Cho G=(V,E, (c
ij
)) là trọng đồ liên thông có trọng số (c
ij
). Cây phủ T của
G được gọi là cây phủ nhỏ nhất của G nếu trong số tất cả các cây phủ của G, tổng
trọng số của cây T là nhỏ nhất.
CHƯƠNG II. CÂY PHỦ NHỎ NHẤT
I. Bài toán cây phủ nhỏ nhất
1. Bài toán thực tế
Giả sử ta muốn xây dựng một hệ thống đường sắt nối n thành phố sao cho
giữa hai thành phố bất kỳ đều có thể thông thương với nhau. Nếu biết trước chi
phí xây dựng các tuyến đường thì bài toán đặt ra là phải xây dựng những tuyến
đường nào để tổng chi phí xây dựng là ít nhất.
Nếu ta coi các thành phố là đỉnh và các tuyến đường nối các thành phố là
cạnh kèm theo chi phí xây dựng thì ta có trọng đồ, ví dụ như trọng đồ ở hình sau:
4

a b
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
10
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
2 2 5
c 1 d
3 3 6
6 f
2
e
Khi đó bài toán quy về tìm cây phủ bé nhất của đồ thị.
2. Bài toán tổng quát
Cho G(V, E, (c
i j
)) là trọng đồ liên thông có trọng số (c
i j
). Tìm cây phủ T
của G có trọng số:
d(T) =
,
ij
i j E
c


là nhỏ nhất.
3. Định lý ( Điều kiện cần và đủ)
a. Phát biểu: Cho G=(V,E, (c
ij
)) là đồ thị liên thông có trọng số (c

ij
). Khi
đó T là cây phủ nhỏ nhất của G khi và chỉ khi mỗi cạnh e ∉ T có
trọng số lớn nhất trên chu trình tạo bởi e và các cạnh của T.
b. Chứng minh: Điều kiện cần là hiển nhiên. Ta chứng minh điều kiện đủ.
Giả sử S là cây bất kỳ có k cạnh không thuộc T. Ta chứng minh
d(S) ≥ d(T)
qui nạp theo k.
Gọi e
1
, e
2
, ,e
n-1
là các cạnh của T sắp theo thứ tự trọng số tăng dần
c(e
1
) ≤ c(e
2
) ≤ ≤ c(e
n-1
)
+ Bước cơ sở: k=0. Hiển nhiên là d(S) = d(T) vì S=T.
+ Bước qui nạp: Giả sử mọi cây với số cạnh không thuộc T ít hơn k đều có trọng
số không nhỏ hơn d(T).
Gọi e
i
là cạnh đầu tiên trong dãy các cạnh của T không thuộc S. Cạnh e
i
và các cạnh của S tạo thành chu trình duy nhất C

S
. Chu trình C
S
bắt buộc phải
chứa cạnh e ∈ S \ T .
Cạnh e cùng với các cạnh của T tạo thành chu trình duy nhất C
T
. Vì S
chứa các cạnh e
1
, ,e
i-1
và e, nên C
T
phải có cạnh e
j
với j ≥ i và e
j

S (nếu
không, C
T
⊂ S, vô lý). Thay cạnh e bằng cạnh e
i
, ta thu được cây phủ S’ có d(S’)
≤ d(S), vì c(e) ≥ c(e
j
) ≥ c(e
i
). Do S’ chỉ có k-1 cạnh không thuộc T nên theo giả

thiết qui nạp
d(S) ≥ d(S’) ≥ d(T).
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
11
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
II. Các thuật toán tìm cây phủ nhỏ nhất
1. Thuật toán Prim
a. Thuật toán.
+ Đầu vào: Đồ thị G=(V,E) có trọng số
Các đỉnh kí hiệu là 1,2,…,n.
Trọng số của cạnh (i, j), (i ,j) ∈ E, kí hiệu c
ij
+ Đầu ra: Cây phủ nhỏ nhất T hoặc kết luận đồ thị không liên thông.
+ Các bước:
(1) Khởi tạo: T là đồ thị gồm một đỉnh 1 và không có cạnh.
(2) Kiểm tra điều kiện kết thúc :
Nếu T có n - 1 cạnh , kết thúc. Kết luận T là cây phủ nhỏ nhất.
Ngược lại sang bước 3.
(3) Thêm cạnh :
Kí hiệu M là tập : M = { (i, j) ∈ E  i ∈ T & j ∉ T }
Tìm cạnh (k,h) ∈ M sao cho : c
kh
= min { c
ij
 (i, j) ∈ M }
Nếu c
kh
< ∞ , thêm cạnh (k, h) và đỉnh h vào T, sang bước 2.
Ngược lại, tức M =


, kết thúc. Kết luận đồ thị G không liên thông.
b. Định lý. Thuật toán Prim là đúng.
Chứng minh
Cho cây phủ S bất kỳ của đồ thị G, ta phải chứng minh
d(S) ≥ d(T)
Ký hiệu các đỉnh và các cạnh lần lượt được thêm vào T là
v
1
, v
2
, ,vn và e
1
, e
2
, ,en
-1
trong đó e
k
=(v
k
,v
k+1
), k=1,2, ,n-1.
Nếu các cạnh của T cũng là cạnh của S thì hiển nhiên d(S) = d(T).
Ngược lại gọi e
m
là cạnh đầu tiên trong dãy các cạnh của T xây dựng theo
thuật toán không thuộc S. Cạnh e
m
và các cạnh của S tạo thành chu trình duy

nhất C.
Chu trình C chứa đỉnh v
m
∈T
m
, trong đó T
m
= {v
1
, ,v
m
} là số đỉnh có được
ở bước thêm cạnh e
m
. Chu trình C bắt buộc phải chứa cạnh e nối đỉnh của T
m
với
đỉnh không thuộc T
m
(nếu không C⊂T). Theo thuật toán thì cạnh e có trọng số
không nhỏ hơn trọng số của e
m
. Vì vậy thay cạnh e bằng cạnh e
m
, ta thu được cây
phủ S’ có d(S’) ≤ d(S). Lặp lại quá trình trên ta biến đổi cây S thành cây phủ T
và suy ra
d(S) ≥ d(S’) ≥ ≥ d(T).
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
12

Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
Ví dụ 1. Áp dụng thuật toán Prim tìm cây phủ nhỏ nhất của đồ thị sau
4
a b
2 2 5
c 1 d
3 3 6
6 f
2
e
(1) Khởi tạo: T chỉ có 1 đỉnh a, không có cạnh.
T = ( {a},∅ ), d(T) :=0.
(2) Kiểm tra : Số cạnh của T là 0, sang bước 3.
(3) Thêm cạnh : Tập M là : M = { (a,b) , (a,c) , (a,e) }
Ta có : c
ac
= 2 = min { c
ij
 (i,j) ∈ M }
Thêm đỉnh c và cạnh (a,c) vào T.
T := ( {a,c}, {(a,c)})
d(T) := d(T) + c
ac
= 2
(2) Kiểm tra : Số cạnh của T là 1, sang bước (3).
(3) Thêm cạnh :
Tập M là : M = { (a,b) , (a,e) , (c,d) , (c,e) , (c,f)}
Ta có : c
cd
= 1 = min { c

ij
 (i,j) ∈ M }
Thêm đỉnh d và cạnh (c,d) vào T.
T := ( {a,c,d}, {(a,c) , (c,d)})
d(T) := d(T) + c
cd
= 2 + 1 = 3
(2) Kiểm tra : Số cạnh của T là 2, sang bước 3.
(3) Thêm cạnh :
Tập M là : M = { (a,b) , (a,e) , (c,d) , (c,e) , (c,f) , (d,b) , (d,f) }
Ta có c
ae
= c
ef
= 3 = min { c
ij
 (i,j) ∈ M }
Thêm đỉnh e và cạnh (a,e) vào T.
T := ( {a,c,d,e}, {(a,c) , (c,d) , (a,e) })
d(T) := d(T) + c
ae
= 3 + 3 = 6
(2) Kiểm tra : Số cạnh của T là 3, sang bước 3.
(3) Thêm cạnh : Tập M là : M = { (a,b) , (c,f) , (d,b) , (d,f) , (e,f)}
Ta có : c
ef
= 2 = min { c
ij
 (i,j) ∈ M }
Thêm đỉnh f và cạnh (e,f) vào T.

Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
13
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
T := ( {a,c,d,e,f}, {(a,c) , (c,d) , (a,e) , (e,f) })
d(T) := d(T) + a
ef
= 6 + 2 =8
(2) Kiểm tra : Số cạnh của T là 4, sang bước 3.
(3) Thêm cạnh : Tập M là : M = { (a,b) , (d,b) }
Ta có : c
ab
= 4 = min { c
ij
 (i,j) ∈ M }
Thêm đỉnh b và cạnh (a,b) vào T.
T := ( {a,c,d,e,f,b}, {(a,c) , (c,d) , (a,e) , (e,f) , (a,b) })
d(T) := d(T) + c
ab
= 8 + 4 = 12
(2) Kiểm tra : Số cạnh của T là 5, kết thúc.
Kết luận : Ta có cây phủ nhỏ nhất gồm các cạnh:
(a,c) , (c,d) , (a,e) , (e,f) , (a,b).
4
a b
2 5
c 1 d
3 3 6
6 f
2
e

với tổng trọng số là: d(T) = 2 + 1 + 3 + 2 + 4 = 12.
Ví dụ 2. Tìm cây phủ nhỏ nhất của đồ thị sau biết ma trận trọng số của đồ thị như
sau
Đỉnh a b c d e f
a 4 2 3
b 4 5
c 2 1 6 3
d 5 1 6
e 3 6 2
f 3 6 2
*Những ô trống ta quy ước là không có đường đi nối giữa chúng.
Giải:
Bảng dưới đây ghi nhãn của các đỉnh trong bước lặp của thuật toán đỉnh
đánh dấu * là đỉnh được bổ sung vào cây phủ T (khi đó nhãn của chúng không bị
biến dạng trong các bước lặp tiếp theo, vì vây ta đánh dấu – để ghi nhận điều đó)
Khởi tạo cây phủ T chỉ có đỉnh a, không có cạnh
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
14
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
Lặp a b c d e f Cây phủ T d(T)
1 - [4,a] [2,a]
*
[3,a] {a,c},{(a,c)} 2
2 - [4,a] - [1,c]
*
[3,a] [3,c] {a,c,d},{(a,c),(c,d)} 3
3 - [4,a] - - [3,a]
*
[3,c] {a,c,d,e},{(a,c),(c,d),(a,e)} 6
4 - [4,a] - - - [2,e]

*
{a,c,d,e,f},{(a,c),(c,d),(a,e),(e,f)} 8
5 - [4,a]
*
- - - - {a,c,d,e,f,b},{(a,c),(c,d),(a,e),(e,f),(a,b)} 12
Kết luận: Ta có cây phủ nhỏ nhất gồm các cạnh
(a,c), (c,d), (a,e), (e,f), (a,b)
Với tổng trọng số là: d(T)= 12.
2. Thuật toán Kruskal
a. Thuật toán
+ Đầu vào. Đồ thị G=(V,E) với trọng số.
Các đỉnh ký hiệu là 1, 2, , n
Trọng số của cạnh (i,j), (i,j)∈E, ký hiệu là c
ij
+ Đầu ra.Cây phủ nhỏ nhất T, hoặc kết luận đồ thị không liên thông.
+ Các bước.
(1) Khởi tạo:
T = (V, ∅) là đồ thị gồm các đỉnh của G và không có cạnh.
(2) Kiểm tra điều kiện kết thúc:
Nếu T có n - 1 cạnh, Kết thúc. Kết luận: T là cây phủ nhỏ nhất. Ngược
lại sang bước (3)
(3) Thêm cạnh: Chọn cạnh có trọng số nhỏ nhất không thuộc T sao cho
khi thêm cạnh này vào T thì không tạo ra chu trình trong T.
Quay lại bước (2).
Ngược lại, nếu không chọn được cạnh thêm vào T thì kết thúc. Kết
luận đồ thị G không liên thông.
b. Định lý : Thuật toán Kruskal là đúng.
Chứng minh
Cho e là canh bất kỳ không thuộc T. Cạnh e cùng các cạnh của T tạo thành
chu trình duy nhất C.

Với cạnh a bất kỳ trên C, ta phải có c(a) ≤ c(e). Thật vậy, ở bước (3) ta
chọn a, c(a) ≤ c(e), vì a là cạnh có trọng số nhỏ nhất mà khi thêm vào T không
tạo chu trình (lúc đó e là cạnh của T cũng không tạo chu trình). Theo định lý trên
T là cây phủ nhỏ nhất.
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
15
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
Ví dụ 1. Áp dụng thuật toán Kruskal tìm cây phủ nhỏ nhất của đồ thị sau
4
a b
2 2 5
c 1 d
3 3 6
6 f
2
e
(1) Khởi tạo: T:=({abcdef}, ∅), không có cạnh, số cạnh e:=0, trọng số
d(T):=0
(2) Kiểm tra: Số cạnh của T e=0, sang bước (3)
(3) Thêm cạnh: Trong các cạnh không thuộc T cạnh (c,d) có độ dài nhỏ
nhất là 1.
Thêm cạnh (c,d) vào T, ta có:
T=({abcdef},{(c,d)}) , d(T)=d(T)+1=1 và số cạnh e=1
(2)Kiểm tra: Số cạnh của T là 1 ,sang bước (3)
(3) Thêm cạnh: Trong các cạnh không thuộc T, cạnh (a,c) có độ dài nhỏ
nhất là 2 và không cùng các cạnh của T tạo thành chu trình
Thêm (a,c) vào T, ta có
T=({abcdef},{(c,d),(a,c)}), d(T)=d(T)+2=3, số cạnh e=2
(2) Kiểm tra: Số cạnh của T là 2, sang bước (3)
(3) Thêm cạnh: Trong các cạnh không thuộc T, cạnh (e,f) có độ dài nhỏ

nhất là 2 và không cùng các cạnh của T tạo thành chu trình
Thêm (e,f) vào T, ta có:
T=({abcdef},{(c,d),(a,c),(e,f)}, d(T)=d(T)+2=5, số cạnh e=3
(2) Kiểm tra: Số cạnh của T là 3, sang bước (3)
(3) Thêm cạnh: Trong các cạnh không thuộc T, cạnh (a,e) có độ dài nhỏ
nhất là 3 và không cùng các cạnh của T tạo thành chu trình
Thêm (a,e) vào T, ta có:
T=({abcdef},{(c,d),(a,c),(e,f),(a,e)}, d(T)=d(T)+3=8, số cạnh e= 4
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
16
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
(2) Kiểm tra: Số cạnh của T là 4 , sang bước (3)
(3) Thêm cạnh: Trong các cạnh không thuộc T, cạnh (a,b) có độ dài nhỏ
nhất là 4 và không cùng các cạnh của T tạo thành chu trình
Thêm (a,b) vào T, ta có:
T=({abcdef},{(c,d),(a,c),(e,f),(a,e),(a,b)},
d(T)=d(T)+4=12 , số cạnh e= 5
(2) Kiểm tra: Số cạnh của T là 4 , kết thúc.
Kết luận: Ta có cây phủ nhỏ nhất gồm các cạnh (c,d),(a,c),(e,f),(a,e),(a,b)
4
a b
2 5
c 1 d
3 3 6
6 f
2
e
với tổng trọng số là d(T) = 12
Ví dụ 2. Áp dụng thuật toán Kruskal tìm cây phủ nhỏ nhất của đồ thị sau.
)

a 1 b
2 3
4 e 3
3 2
c 1 d
(1) Khởi tạo: T=({abcde},∅), không có cạnh, số cạnh e=0, trọng số
d(T)=0
(2) Kiểm tra: Số cạnh của T e=0, sang bước (3)
(3) Thêm cạnh: Trong các cạnh không thuộc T cạnh (a,b) có độ dài nhỏ
nhất là 1.
Thêm cạnh (a,b) vào T, ta có:
T=({abcde},{(a,b)}) , d(T)=d(T)+1=1 và số cạnh e=1
(2)Kiểm tra: Số cạnh của T là 1 ,sang bước (3)
(3) Thêm cạnh: Trong các cạnh không thuộc T, cạnh (a,e) có độ dài nhỏ
nhất là 2 và không cùng các cạnh của T tạo thành chu trình
Thêm (a,e) vào T, ta có
T=({abcde},{(a,b),(a,e)}), d(T)=d(T)+2=3, số cạnh e=2
(2) Kiểm tra: Số cạnh của T là 2, sang bước (3)
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
17
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
(3) Thêm cạnh: Trong các cạnh không thuộc T, cạnh (e,d) có độ dài nhỏ
nhất là 2 và không cùng các cạnh của T tạo thành chu trình
Thêm (e,d) vào T, ta có:
T=({abcde},{(a,b),(a,e),(e,d)}, d(T)=d(T)+2=5, số cạnh e=3
(2) Kiểm tra: Số cạnh của T là 3, sang bước (3)
(3) Thêm cạnh: Trong các cạnh không thuộc T, cạnh (d,c) có độ dài nhỏ
nhất là 1 và không cùng các cạnh của T tạo thành chu trình
Thêm (d,c) vào T, ta có:
T=({abcde},{(a,b),(a,e),(e,d),(d,c)}, d(T)=d(T)+1=6, số cạnh e= 4

(2) Kiểm tra: Số cạnh của T là 4 , kết thúc
Kết luận: Ta có cây phủ nhỏ nhất gồm các cạnh (a,b), (a,e), (e,d), (d,c)
với tổng trọng số là: d(T) = 1 + 2 + 2 + 1 = 6
)
a 1 b
2 3
4 e 3
3 2
c 1 d
III. Đánh giá thuật toán Kruskal và thuật toán Prim
Độ phức tạp của thuật toán Kruskal được đánh giá như sau. Trước tiên việc
sắp xếp các cạnh của G theo thứ tự trọng số tăng dần có độ phức tạp O(m
2
) với
m là số cạnh của G. Người ta chứng minh được rằng việc chon cạnh u
k+1
không
tạo nên chu trình với k cạnh đã chọn trước đó có độ phức tạp là O(n
2
) . Do m <
n*(n-1)/2 nên thuật toán Kruskal có độ phức tạp O(n
2
)
Thuật toán Kruskal làm việc kém hiệu quá với đồ thị dày (đồ thị có số cạnh
m

n*(n-1)/2 ). Trong trường hợp đó thuật toán Prim tỏ ra hiệu quả hơn.
CHƯƠNG III. ỨNG DỤNG
I. Giải các toán thực tế
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang

18
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
1.Bài toán xây dựng hệ thống đường sắt.
Giả sử ta muốn xây dựng một hệ thống đường sắt nối n thành phố sao cho
giữa hai thành phố bất kỳ đều có thể thông thương với nhau. Nếu biết trước chi
phí xây dựng các tuyến đường thì bài toán đặt ra là phải xây dựng những tuyến
đường nào để tổng chi phí xây dựng là ít nhất.
Rõ ràng đồ thị mà đỉnh là các thành phố còn các cạnh là các tuyến đường sắt
nối các thành phố tương ứng với phương án xây dựng tối ưu phải là cây. Vì vậy,
bài toán đặt ra dẫn về bài toán tìm cây phủ nhỏ nhất trên đồ thị đầy đủ n đỉnh,
mỗi đỉnh tương ứng với một thành phố, với độ dài trên các cạnh chính là chi phí
xây dựng đường sắt nối hai thành phố tương ứng.
2.Bài toán nối mạng máy tính.
Cần nối mạng một hệ thống gồm n máy tính đánh số từ 1 đến n. Biết chi phí
nối máy i với máy j là c[i,j], i,j = 1, 2, … ,n ( thông thường chi phí này phụ
thuộc vào độ dài cáp nối cần sử dụng). Hãy tìm cách nối mạng sao cho tổng chi
phí nối mạng là nhỏ nhất. Vì vây, bài toán đặt ra dẫn về bài toán tìm cây phủ
nhỏ nhất trên đồ thị đầy đủ n đỉnh, mỗi đỉnh tương ứng với một máy, với độ dài
trên các các cạnh chính là chi phí nối hai máy tương ứng.

II. Bài toán cây phủ lớn nhất.
Cho G = (V, E, (c
i j
)) là đồ thị liên thông có trọng số (c
i j
). Tìm cây phủ T
của G có trọng số:
d(T) =



Tji ),(
c
i j
là lớn nhất.
Xét trọng đồ G’ = (V, E, (-c
i j
)). Áp dụng thuật toán tìm cây phủ nhỏ nhất
Prim hoặc Kruskal (vì chúng không phụ thuộc vào dấu của trọng số) ta tìm cây
phủ nhỏ nhất T* của đồ thị G’ thoả :


Tji ),(
(- c
i j
) ≥
( , ) 'i j T∈

(- c
i j
),

cây phủ T của đồ thị G’


( , ) 'i j T∈

c
i j




Tji ),(
c
i j
,

cây phủ T của đồ thị G
Như vậy cây T* cũng là cây phủ lớn nhất của đồ thị G.

III. Bài toán tìm mạng điện với độ tin cậy lớn nhất.
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
19
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
Cho lưới điện có n nút. Đường dây nối nút i với nút j có độ tin cậy p
ij
. Hãy
tìm cây phủ T với độ tin cậy toàn phần:
p(T) =

∈Tji ),(
p
i j
là lớn nhất.
Bài toán này dẫn về bài toán tìm cây phủ nhỏ nhất với trọng số mỗi cạnh
(i, j) là:
c
i j
= - log
2
p

i j
Thực vậy, cho T là cây phủ nhỏ nhất và T’ là cây phủ bất kỳ. Ta có:

∈Tji ),(
(-log
2
p
ij
)



∈ '),( Tji
(-log
2
p
ij
)



∈Tji ),(
(log
2
p
ij
)




∈ '),( Tji
(log
2
p
ij
)


log
2
(

∈Tji ),(
p
ij
)

log
2
(

∈ '),( Tji
p
ij
)




∈Tji ),(

p
ij




∈ '),( Tji
p
ij
Vậy T là cây phủ có độ tin cậy toàn phần lớn nhất.
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
20
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
KẾT LUẬN
Trong quá trình học tập và nghiên cứu đề tài, với sự nỗ lực và nghiêm túc
của các thành viên trong nhóm, chúng em đã hoàn thành đề tài “Cây phủ nhỏ
nhất và ứng dụng”. Qua đó, giúp chúng em củng cố và nâng cao kiến thức về
cách tìm cây phủ nhỏ nhất, từ đó có thể vận dụng vào việc giải quyết các bài
toán thực tế để đạt hiệu quả cao.
Đề tài được hướng dẫn nhiệt tình của thầy PGS.TSKH Trần Quốc Chiến.
Tập thể nhóm xin gửi lời cảm ơn chân thành đến thầy.
Mặc dù đã cố gắng nhưng đề tài cũng không tránh khỏi thiếu sót. Tập thể
nhóm mong nhận ý kiến của thầy và các bạn để đề tài hoàn thiện hơn.
Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
21
Cây phủ nhỏ nhất & ứng dụng GVHD: PGS.TSKH Trần Quốc Chiến
TÀI LIỆU THAM KHẢO
1. PGS.TSKH. Trần Quốc Chiến: Lý thuyết đồ thị và ứng dụng.
2. Nguyễn Tô Thành, Nguyễn Đức Nghĩa: Giáo trình Toán rời rạc.
3. Ngô Đắc Tân, Lý thuyết tổ hợp và đồ thị. NXB ĐHQGHN 2003.

Nhóm Học Viên: Nhóm 7-PP Toán sơ cấp K24 Trang
22

×