You are on page 1of 13

Cây khung đồ thị

Trong đồ thị liên thông G, nếu ta loại bỏ cạnh nằm trên chu trình nào đó thì ta sẽ
được đồ thị vẫn là liên thông. Nếu cứ loại bỏ các cạnh ở các chu trình khác cho
đến khi nào đồ thị không còn chu trình (vẫn liên thông) thì ta thu được một cây
nối các đỉnh của G. Cây đó gọi là cây khung hay cây bao trùm của đồ thị G.
Tổng quát, nếu G là đồ thị có n đỉnh, m cạnh và k thành phần liên thông thì áp
dụng thủ tục vừa mô tả đối với mỗi thành phần liên thông của G, ta thu được đồ
thị gọi là rừng khung của G. Số cạnh bị loại bỏ trong thủ tục này bằng m-n+k, số
này ký hiệu là n(G) và gọi là chu số của đồ thị G.

Cây khung nhỏ nhất là gì


Định nghĩa
Theo lý thuyết đồ thị, chúng ta đều biết rằng 1 đồ thị được biểu diễn bằng công
thức G=(V,E), trong đó đồ thị G của chúng ta bao gồm tập các đỉnh V và tập các
cạnh E.
 Cây khung (spanning tree) của đồ thị là một tập hợp các cạnh của đồ thị thỏa
mãn tập cạnh này không chứa chu trình và liên thông (từ một đỉnh bất kì có thể
đi tới bất kỳ đỉnh nào khác theo mà chỉ dùng các cạnh trên cây khung)
 Trong đồ thị có trọng số, cây khung nhỏ nhất (minimum spanning tree) là cây
khung có tổng trọng số các cạnh trong cây nhỏ nhất.
 Một ví dụ về cây khung trong đồ thị vô hướng không trọng
số:
 Một ví dụ về cây khung nhỏ nhất trong đồ thị vô hướng có trọng
số:

Trong khuôn khổ bài viết, chúng ta sẽ làm việc với đồ thị vô hướng có trọng số.
Tính chất
Một vài tính chất của cây khung nhỏ nhất trong đồ thị vô hướng có trọng số:

 1. Tính chất chu trình: Trong một chu trình C bất kỳ, nếu e là cạnh có trọng số lớn
nhất tuyệt đối (không có cạnh nào có trọng số bằng e) thì e không thể nằm trên
bất kỳ cây khung nhỏ nhất nào.
 2. Đường đi hẹp nhất: Xét 2 đỉnh u, v bất kỳ trong đồ thị. Nếu w là trọng số của
cạnh lớn nhất trên đường đi từ u đến v trên cây khung nhỏ nhất của đồ thị thì ta
không thể tìm được đường đi nào từ u đến v trên đồ thị ban đầu chỉ đi qua những
cạnh có trọng số nhỏ hơn w.
 3. Tính duy nhất: Nếu tất cả các cạnh đều có trọng số khác nhau thì chỉ có duy
một cây khung nhỏ nhất. Ngược lại, nếu một vài cạnh có trọng số giống nhau thì
có thể có nhiều hơn một cây khung nhỏ nhất.
 4. Tính chất cạnh nhỏ nhất: Nếu e là cạnh có trọng số nhỏ nhất của đồ thị, và
không có cạnh nào có trọng số bằng e thì e nằm trong mọi cây khung nhỏ nhất
của đồ thị.
Các thuật toán tìm cây khung nhỏ nhất
1. Thuật toán Kruskal
Ý tưởng thuật toán: Ban đầu mỗi đỉnh là một cây riêng biệt, ta tìm cây khung nhỏ
nhất bằng cách duyệt các cạnh theo trọng số từ nhỏ đến lớn, rồi hợp nhất các cây
lại với nhau.
Cụ thể hơn, giả sử cạnh đang xét nối 2 đỉnh u và v, nếu 2 đỉnh này nằm ở 2 cây
khác nhau thì ta thêm cạnh này vào cây khung, đồng thời hợp nhất 2 cây
chứa u và v.
Giả sử ta cần tìm cây khung nhỏ nhất của đồ thị G. Thuật toán bao gồm các bước
sau:
 Khởi tạo rừng F (tập hợp các cây), trong đó mỗi đỉnh của G tạo thành một cây
riêng biệt.
 Khởi tạo tập S chứa tất cả các cạnh của G.
 Chừng nào S còn khác rỗng và F gồm hơn một cây
o Xóa cạnh nhỏ nhất trong S
o Nếu cạnh đó nối hai cây khác nhau trong F, thì thêm nó vào F và hợp hai cây kề
với nó làm một
o Nếu không thì loại bỏ cạnh đó.
Khi thuật toán kết thúc, rừng chỉ gồm đúng một cây và đó là một cây khung nhỏ
nhất của đồ thị G

Ví dụ thuật toán Krusal

 Cho đồ thị G như hình vẽ:. Yêu cầu tìm ra cây khung nhỏ nhất của đồ thị G.
 G gồm có 7 đỉnh
 Đồ thị G có n phần tử. Thuật toán Kruskal sẽ dừng khi có n-1 trong tập hợp T
o n=7
o Vậy số cạnh trong tập hợp T: n - 1 = 7 - 1 = 6(*)
Đồ thị G

Bước 1: Liệt kê tất cả cạnh với trọng số của cạnh đó: Dựa vào đồ thị ta liệt kê ra các
cạnh gồm đỉnh đầu, đỉnh cuối và trọng số:

Điểm đầu Điểm cuối Trọng số

1 2 3

1 4 1

1 6 3

2 3 4

2 6 6

3 4 3

3 5 7
3 7 5

4 5 6

4 6 2

5 6 5

6 7 1

Bước 2: Sắp xếp các cạnh theo trọng số tăng dần:

Điểm đầu Điểm cuối Trọng số

1 4 1

6 7 1

4 6 2

1 2 3

1 6 3

3 4 3

2 3 4
3 7 5

5 6 5

2 6 6

4 5 6

3 5 7

Bước 3: Dựa vào kết quả ở bước 2. Ta tiến hành tìm cây khung bằng thuật toán
Kruskal

Kết quả Cạnh đang xét

1-4-1: Ta nhận thấy cạnh 1-4 không tạo ra một chu trình
nào. Vì vậy, thêm 1-4 vào tập hợp

Đồ
thị G

6-7-1: Ta nhận thấy cạnh 6-7 không tạo ra một chu trình
nào. Vì vậy, thêm 6-7 vào tập hợp

Đồ
thị G
4-6-2: Ta nhận thấy cạnh 4-6 không tạo ra một chu trình
nào. Vì vậy, thêm 4-6 vào tập hợp

Đồ
thị G

1-2-3: Ta nhận thấy cạnh 1-2 không tạo ra một chu trình
nào. Vì vậy, thêm 1-2 vào tập hợp

Đồ
thị G

1-6-3: Ta nhận thấy cạnh 1-6 tạo ra một chu trình. Không
thêm vào tập hợp.

3-4-3: Ta nhận thấy cạnh 3-4 không tạo ra một chu trình.
Vì vậy, thêm 3-4 vào tập hợp

Đồ
thị G

2-3-4: Ta nhận thấy cạnh 2-3 tạo ra một chu trình. Không
thêm vào tập hợp.

Đồ
thị G
3-7-5: Ta nhận thấy cạnh 3-7 tạo ra một chu trình. Không
thêm vào tập hợp.

Đồ
thị G

5-6-5: Ta nhận thấy cạnh 5-6 không tạo ra một chu trình
nào. Vì vậy, thêm 5-6 vào tập hợp

Đồ
thị G

 Đến đây, ta đã tìm được 6 cạnh. Vậy kết thúc thuật toán. (Thỏa (*))
 Kết quả: Ta được đồ thị sau

Đồ thị G
Với tổng chi phí là: Ta cộng tất cả các trọng số giữa các đỉnh lại với nhau

 Vậy tổng chi phí: 3 + 1 + 3 + 2 + 5 + 1 = 15

Thuật toán Prim

Ý tưởng thuật toán: Ý tưởng của thuật toán Prim rất giống với ý tưởng của thuật
toán Dijkstra (tìm đường đi ngắn nhất trên đồ thị). Nếu như thuật
toán Kruskal xây dựng cây khung nhỏ nhất bằng cách kết nạp từng cạnh vào đồ
thị thì thuật toán Prim lại kết nạp từng đỉnh vào đồ thị theo tiêu chí: đỉnh được
nạp vào tiếp theo phải chưa được nạp và gần nhất với các đỉnh đã được nạp vào
đồ thị.
Thuật toán xuất phát từ một cây chỉ chứa đúng một đỉnh và mở rộng từng bước
một, mỗi bước thêm một cạnh mới vào cây, cho tới khi bao trùm được tất cả các
đỉnh của đồ thị.
Mô tả thuật toán

 Dữ liệu vào: Một đồ thị có trọng số liên thông với tập hợp đỉnh V và tập hợp
cạnh E (trọng số có thể âm). Đồng thời cũng dùng V và E để ký hiệu số đỉnh và
số cạnh của đồ thị.
 Khởi tạo: Vmới = {x}, trong đó x là một đỉnh bất kì (đỉnh bắt đầu) trong V, Emới =
{}
 Lặp lại cho tới khi Vmới = V:
o Chọn cạnh (u, v) có trọng số nhỏ nhất thỏa mãn u thuộc Vmới và v không
thuộc Vmới (nếu có nhiều cạnh như vậy thì chọn một cạnh bất kì trong
chúng)
o Thêm v vào Vmới, và thêm cạnh (u, v) vào Emới
 Dữ liệu ra: Vmới và Emới là tập hợp đỉnh và tập hợp cạnh của một cây bao trùm
nhỏ nhất

Thuật toán bao gồm các bước sau:

 Khởi tạo tập S là cây khung hiện tại, ban đầu S chưa có đỉnh nào.
 Khởi tạo mảng D trong đó Di là khoảng cách ngắn nhất từ đỉnh i đến 1 đỉnh đã
được kết nạp vào tập S, ban đầu D[i] = +∞
 Lặp lại các thao tác sau n lần(n là số cạnh của đồ thị)
o Tìm đỉnh u không thuộc S có Du nhỏ nhất, thêm u vào tập S.
o Xét tất cả các đỉnh v kề u, cập nhật Dv=min(Dv,wu,v) với wu,v là trọng số cạnh u−v
Nếu Dv được cập nhật theo wu,v thì đánh dấu tracev=u.
o Thêm cạnh u−trace[u] vào tập cạnh thuộc cây khung nhỏ nhất.
o Khi hoàn thành xong n bước trên, ta thu được cây khung nhỏ nhất của đồ thị
gồm n đỉnh và n−1 cạnh.

Hình minh họa U Cạn V\U Mô tả


h
(u,v)

Đây là đồ thị có trọng


{A,B,C,D,E,F, số ban đầu. Các số là
{}
G} các trọng số của các
cạnh.

Chọn một cách tùy ý


đỉnh D là đỉnh bắt đầu.
(D,A)
Các
=5V
đỉnh A, B, E và F đều
(D,B)
được nối trực tiếp
=9
{D} {A,B,C,E,F,G} tới D bằng cạnh của đồ
(D,E)
thị. A là đỉnh
= 15
gần D nhất nên ta
(D,F)
chọn A là đỉnh thứ hai
=6
của cây và thêm
cạnh AD vào cây.

Đỉnh được chọn tiếp


theo là đỉnh
gần D hoặc A nhất. B c
(D,B)
ó khoảng cách
=9
tới D bằng 9 và
(D,E)
tới A bằng 7, E có
= 15
{A,D} {B,C,E,F,G} khoảng cách tới cây
(D,F)
hiện tại bằng 15,
=6V
và F có khoảng cách
(A,B)
bằng 6. F là đỉnh gần
=7
cây hiện tại nhất nên
chọn đỉnh F và
cạnh DF.
(D,B)
=9
(D,E)
Thuật toán tiếp tục
= 15
tương tự như bước
(A,B)
{A,D,F} {B,C,E,G} trước. Chọn đỉnh B có
=7V
khoảng cách
(F,E)
tới A bằng 7.
=8
(F,G)
= 11

(B,C)
=8
(B,E) Ở bước này ta chọn
=7V giữa C, E, và G. C có
(D,B) khoảng cách
=9 tới B bằng 8, E có
chu khoảng cách
{A,B,D,F} {C,E,G}
trình tới B bằng 7, và G có
(D,E) khoảng cách
= 15 tới F bằng 11. E là đỉnh
(F,E) gần nhất, nên chọn
=8 đỉnh E và cạnh BE.
(F,G)
= 11

(B,C)
=8
(D,B)
=9
chu
trình
(D,E)
Ở bước này ta chọn
= 15
giữa C và G. C có
chu
khoảng cách
trình
{A,B,D,E,F} {C,G} tới E bằng 5, và G có
(E,C)
khoảng cách
=5V
tới E bằng 9.
(E,G
Chọn C và cạnh EC.
)=9
(F,E)
=8
chu
trình
(F,G)
= 11
(B,C)
=8
chu
trình
(D,B)
=9
chu
Đỉnh G là đỉnh còn lại
trình
duy nhất. Nó có
(D,E)
khoảng cách
= 15
tới F bằng 11, và
{A,B,C,D,E,F} chu {G}
khoảng cách
trình
tới E bằng 9. E ở gần
(E,G
hơn nên chọn
)=
đỉnh G và cạnh EG.
9V
(F,E)
=8
chu
trình
(F,G)
= 11

(B,C)
=8
chu
trình
(D,B)
=9
chu
trình Hiện giờ tất cả các
(D,E) đỉnh đã nằm trong cây
{A,B,C,D,E,F, = 15 và cây bao trùm nhỏ
{}
G} chu nhất được tô màu xanh
trình lá cây. Tổng trọng số
(F,E) của cây là 39.
=8
chu
trình
(F,G)
= 11
chu
trình

You might also like