
http://ebook.here.vn Ti min phí ð thi, eBook, Tài liu hc tp
CHƯƠNG VI
CÂY
Mt ñ th liên thông và không có chu trình ñưc gi là cây. Cây ñã ñưc dùng
t! năm 1857, khi nhà toán hc Anh tên là Arthur Cayley dùng cây ñ. xác ñnh nh0ng
d1ng khác nhau c2a hp ch4t hoá hc. T! ñó cây ñã ñưc dùng ñ. gi6i nhi7u bài toán
trong nhi7u lĩnh v:c khác nhau. Cây r4t hay ñưc s< d=ng trong tin hc. Ch>ng h1n,
ngư?i ta dùng cây ñ. xây d:ng các thu@t toán r4t có hiAu qu6 ñ. ñnh v các phCn t<
trong mt danh sách. Cây cũng dùng ñ. xây d:ng các m1ng máy tính vFi chi phí rG nh4t
cho các ñư?ng ñiAn tho1i nHi các máy phân tán. Cây cũng ñưc dùng ñ. t1o ra các mã
có hiAu qu6 ñ. lưu tr0 và truy7n d0 liAu. Dùng cây có th. mô hình các th2 t=c mà ñ. thi
hành nó cCn dùng mt dãy các quyJt ñnh. Vì v@y cây ñLc biAt có giá tr khi nghiên cMu
các thu@t toán sNp xJp.
6.1. ð,NH NGHĨA VÀ CÁC TÍNH CH2T CƠ B3N.
6.1.1. ð4nh nghĩa:
Cây là mt ñ th vô hưFng liên thông, không chMa chu trình và có
ít nh4t hai ñOnh.
Mt ñ th vô hưFng không chMa chu trình và có ít nh4t hai ñOnh gi là mt r!ng.
Trong mt r!ng, mPi thành phCn liên thông là mt cây.
Thí d9 1: R!ng sau có 3 cây:
6.1.2. Mnh ñ:
NJu T là mt cây có n ñOnh thì T có ít nh4t hai ñOnh treo.
Ch=ng minh: L4y mt c1nh (a,b) tuỳ ý c2a cây T. Trong t@p hp các ñư?ng ñi sơ c4p
chMa c1nh (a,b), ta l4y ñư?ng ñi t! u ñJn v dài nh4t. Vì T là mt cây nên u ≠ v. MLt
khác, u và v ph6i là hai ñOnh treo, vì nJu mt ñOnh, u ch>ng h1n, không ph6i là ñOnh treo
thì u ph6i là ñCu mút c2a mt c1nh (u,x), vFi x là ñOnh không thuc ñư?ng ñi t! u ñJn v.
Do ñó, ñư?ng ñi sơ c4p t! x ñJn v, chMa c1nh (a,b), dài hơn ñư?ng ñi t! u ñJn v, trái vFi
tính ch4t ñư?ng ñi t! u ñJn v ñã chn.
6.1.3. ð4nh lý:
Cho T là mt ñ th có n ≥ 2 ñOnh. Các ñi7u sau là tương ñương:
1) T là mt cây.
2) T liên thông và có n−1 c1nh.
3) T không chMa chu trình và có n−1 c1nh.
4) T liên thông và mPi c1nh là cCu.
5) Gi0a hai ñOnh phân biAt b4t kỳ c2a T luôn có duy nh4t mt ñư?ng ñi sơ c4p.
a
b
c
f
d
e
g
h
j
i
k
l
m
n

http://ebook.here.vn Ti min phí ð thi, eBook, Tài liu hc tp
6) T không chMa chu trình nhưng khi thêm mt c1nh mFi thì có ñưc mt chu trình duy
nh4t.
Ch=ng minh: 1)⇒
⇒⇒
⇒2) ChO cCn chMng minh r`ng mt cây có n ñOnh thì có n−1 c1nh. Ta
chMng minh b`ng quy n1p. ði7u này hi.n nhiên khi n=2. Gi6 s< cây có k ñOnh thì có k−1
c1nh, ta chMng minh r`ng cây T có k+1 ñOnh thì có k c1nh. Th@t v@y, trong T nJu ta xoá
mt ñOnh treo và c1nh treo tương Mng thì ñ th nh@n ñưc là mt cây k ñOnh, cây này có
k−1 c1nh, theo gi6 thiJt quy n1p. V@y cây T có k c1nh.
2)⇒
⇒⇒
⇒3) NJu T có chu trình thì bd ñi mt c1nh trong chu trình này thì T ven liên thông.
Làm l1i như thJ cho ñJn khi trong T không còn chu trình nào mà ven liên thông, lúc ñó
ta ñưc mt cây có n ñOnh nhưng có ít hơn n−1 c1nh, trái vFi 2).
3)⇒
⇒⇒
⇒4) NJu T có k thành phCn liên thông T
1
, ..., T
k
lCn lưt có sH ñOnh là n
1
, ..., n
k
(vFi
n
1
+n
2
+ … +n
k
=n) thì mPi T
i
là mt cây nên nó có sH c1nh là n
i
−1. V@y ta có
n−1=(n
1
−1)+(n
2
−1)+ ... +(n
k
−1)=(n
1
+n
2
+ … +n
k
)−k=n−k.
Do ñó k=1 hay T liên thông. Hơn n0a, khi bd ñi mt c1nh thì T hJt liên thông, vì nJu
còn liên thông thì T là mt cây n ñOnh vFi n−2 c1nh, trái vFi ñi7u ñã chMng minh h trên.
4)⇒
⇒⇒
⇒5) Vì T liên thông nên gi0a hai ñOnh phân biAt b4t kỳ c2a T luôn có mt ñư?ng ñi sơ
c4p, nhưng không th. ñưc nHi bhi hai ñư?ng ñi sơ c4p vì nJu thJ, hai ñư?ng ñó si t1o
ra mt chu trình và khi bd mt c1nh thuc chu trình này, T ven liên thông, trái vFi gi6
thiJt.
5)⇒
⇒⇒
⇒6) NJu T chMa mt chu trình thì hai ñOnh b4t kỳ trên chu trình này si ñưc nHi bhi
hai ñư?ng ñi sơ c4p. Ngoài ra, khi thêm mt c1nh mFi (u,v), c1nh này si t1o nên vFi
ñư?ng ñi sơ c4p duy nh4t nHi u và v mt chu trình duy nh4t.
6)⇒
⇒⇒
⇒1) NJu T không liên thông thì thêm mt c1nh nHi hai ñOnh h hai thành phCn liên
thông khác nhau ta không nh@n ñưc mt chu trình nào. V@y T liên thông, do ñó nó là
mt cây.
6.2. CÂY KHUNG VÀ BÀI TOÁN TÌM CÂY KHUNG NHG NH2T.
6.2.1. ð4nh nghĩa:
Trong ñ th liên thông G, nJu ta lo1i bd c1nh n`m trên chu trình
nào ñó thì ta si ñưc ñ th ven là liên thông. NJu cM lo1i bd các c1nh h các chu trình
khác cho ñJn khi nào ñ th không còn chu trình (ven liên thông) thì ta thu ñưc mt cây
nHi các ñOnh c2a G. Cây ñó gi là cây khung hay cây bao trùm c2a ñ th G.
Tjng quát, nJu G là ñ th có n ñOnh, m c1nh và k thành phCn liên thông thì áp
d=ng th2 t=c v!a mô t6 ñHi vFi mPi thành phCn liên thông c2a G, ta thu ñưc ñ th gi
là r!ng khung c2a G. SH c1nh b lo1i bd trong th2 t=c này b`ng m−n+k, sH này ký hiAu
là ν(G) và gi là chu sH c2a ñ th G.
6.2.2. Bài toán tìm cây khung nhL nhMt:
Bài toán tìm cây khung nhd nh4t c2a ñ
th là mt trong sH nh0ng bài toán tHi ưu trên ñ th tìm ñưc Mng d=ng trong nhi7u lĩnh

http://ebook.here.vn Ti min phí ð thi, eBook, Tài liu hc tp
v:c khác nhau c2a ñ?i sHng. Trong phCn này ta si có hai thu@t toán cơ b6n ñ. gi6i bài
toán này. TrưFc hJt, ni dung c2a bài toán ñưc phát bi.u như sau.
Cho G=(V,E) là ñ th vô hưFng liên thông có trng sH, mPi c1nh e∈E có trng
sH m(e)≥0. Gi6 s< T=(V
T
,E
T
) là cây khung c2a ñ th G (V
T
=V). Ta gi ñ dài m(T) c2a
cây khung T là tjng trng sH c2a các c1nh c2a nó:
m(T)=
∑
∈
T
E
)(
e
em
.
Bài toán ñLt ra là trong sH t4t c6 các cây khung c2a ñ th G, hãy tìm cây khung có ñ
dài nhd nh4t. Cây khung như v@y ñưc gi là cây khung nhd nh4t c2a ñ th và bài toán
ñLt ra ñưc gi là bài toán tìm cây khung nhd nh4t.
ð. minh ho1 cho nh0ng Mng d=ng c2a bài toán cây khung nhd nh4t, dưFi ñây là
hai mô hình th:c tJ tiêu bi.u cho nó.
Bài toán xây dng h thng ñưng st: Gi6 s< ta muHn xây d:ng mt hA thHng ñư?ng
sNt nHi n thành phH sao cho hành khách có th. ñi t! b4t cM mt thành phH nào ñJn b4t kỳ
mt trong sH các thành phH còn l1i. MLt khác, trên quan ñi.m kinh tJ ñòi hdi là chi phí
v7 xây d:ng hA thHng ñư?ng ph6i là nhd nh4t. Rõ ràng là ñ th mà ñOnh là các thành
phH còn các c1nh là các tuyJn ñư?ng sNt nHi các thành phH tương Mng, vFi phương án
xây d:ng tHi ưu ph6i là cây. Vì v@y, bài toán ñLt ra den v7 bài toán tìm cây khung nhd
nh4t trên ñ th ñCy ñ2 n ñOnh, mPi ñOnh tương Mng vFi mt thành phH vFi ñ dài trên
các c1nh chính là chi phí xây d:ng hA thHng ñư?ng sNt nHi hai thành phH.
Bài toán ni mng máy tính: CCn nHi m1ng mt hA thHng gm n máy tính ñánh sH t! 1
ñJn n. BiJt chi phí nHi máy i vFi máy j là m(i,j) (thông thư?ng chi phí này ph= thuc vào
ñ dài cáp nHi cCn s< d=ng). Hãy tìm cách nHi m1ng sao cho tjng chi phí là nhd nh4t.
Bài toán này cũng den v7 bài toán tìm cây khung nhd nh4t.
Bài toán tìm cây khung nhd nh4t ñã có nh0ng thu@t toán r4t hiAu qu6 ñ. gi6i
chúng. Ta si xét hai trong sH nh0ng thu@t toán như v@y: thu@t toán Kruskal và thu@t toán
Prim.
6.2.3. Thut toán Kruskal:
Thu@t toán si xây d:ng t@p c1nh E
T
c2a cây khung nhd
nh4t T=(V
T
, E
T
) theo t!ng bưFc. TrưFc hJt sNp xJp các c1nh c2a ñ th G theo thM t:
không gi6m c2a trng sH. BNt ñCu t! E
T
=∅, h mPi bưFc ta si lCn lưt duyAt trong danh
sách c1nh ñã sNp xJp, t! c1nh có ñ dài nhd ñJn c1nh có ñ dài lFn hơn, ñ. tìm ra c1nh
mà viAc bj sung nó vào t@p E
T
không t1o thành chu trình trong t@p này. Thu@t toán si
kJt thúc khi ta thu ñưc t@p E
T
gm n−1 c1nh. C= th. có th. mô t6 như sau:
1. BNt ñCu t! ñ th rPng T có n ñOnh.
2. SNp xJp các c1nh c2a G theo thM t: không gi6m c2a trng sH.
3. BNt ñCu t! c1nh ñCu tiên c2a dãy này, ta cM thêm dCn các c1nh c2a dãy ñã ñưc xJp
vào T theo nguyên tNc c1nh thêm vào không ñưc t1o thành chu trình trong T.

http://ebook.here.vn Ti min phí ð thi, eBook, Tài liu hc tp
4. LLp l1i BưFc 3 cho ñJn khi nào sH c1nh trong T b`ng n−1, ta thu ñưc cây khung nhd
nh4t cCn tìm.
Thí d9 2: Tìm cây khung nhd nh4t c2a ñ th cho trong hình dưFi ñây:
BNt ñCu t! ñ th rPng T có 6 ñOnh.
SNp xJp các c1nh c2a ñ th theo thM t: không gi6m c2a trng sH:
{(v
3
, v
5
), (v
4
, v
6
), (v
4
, v
5
), (v
5
, v
6
), (v
3
, v
4
), (v
1
, v
3
), (v
2
, v
3
), (v
2
, v
4
), (v
1
, v
2
)}.
Thêm vào ñ th T c1nh (v
3
, v
5
).
Do sH c1nh c2a T là 1<6−1 nên tiJp t=c thêm c1nh (v
4
, v
6
) vào T. Bây gi? sH c1nh
c2a T ñã là 2 ven còn nhd hơn 6, ta tiJp t=c thêm c1nh tiJp theo trong dãy ñã sNp xJp
vào T. Sau khi thêm c1nh (v
4
, v
5
) vào T, nJu thêm c1nh (v
5
, v
6
) thì nó si t1o thành vFi 2
c1nh (v
4
, v
5
), (v
4
, v
6
) ñã có trong T mt chu trình. Tình huHng tương t: cũng xãy ra ñHi
vFi c1nh (v
3
, v
4
) là c1nh tiJp theo trong dãy. TiJp theo ta bj sung c1nh (v
1
, v
3
), (v
2
, v
3
)
vào T và thu dưc t@p E
T
gm 5 c1nh:
{(v
3
, v
5
), (v
4
, v
6
), (v
4
, v
5
), (v
1
, v
3
), (v
2
, v
3
)}.
Tính ñúng ñPn cQa thut toán: Rõ ràng ñ th thu ñưc theo thu@t toán có n−1 c1nh và
không có chu trình. Vì v@y theo ðnh lý 6.1.3, nó là cây khung c2a ñ th G. Như v@y
chO còn ph6i chO ra r`ng T có ñ dài nhd nh4t. Gi6 s< tn t1i cây khung S c2a ñ th mà
m(S)<m(T). Ký hiAu e
k
là c1nh ñCu tiên trong dãy các c1nh c2a T xây d:ng theo thu@t
toán v!a mô t6 không thuc S. Khi ñó ñ th con c2a G sinh bhi cây S ñưc bj sung
c1nh e
k
si chMa mt chu trình duy nh4t C ñi qua e
k
. Do chu trình C ph6i chMa c1nh e
thuc S nhưng không thuc T nên ñ th con thu ñưc t! S b`ng cách thay c1nh e c2a nó
bhi e
k
, ký hiAu ñ th này là S’, si là cây khung. Theo cách xây d:ng, m(e
k
)≤m(e), do ñó
m(S’)≤m(S), ñng th?i sH c1nh chung c2a S’ và T ñã tăng thêm mt so vFi sH c1nh
chung c2a S và T. LLp l1i quá trình trên t!ng bưFc mt, ta có th. biJn ñji S thành T và
trong mPi bưFc tjng ñ dài không tăng, tMc là m(T)≤m(S). Mâu thuyn này chMng td T là
cây khung nhd nh4t c2a G.
ð phMc t1p c2a thu@t toán Kruskal ñưc ñánh giá như sau. TrưFc tiên, ta sNp xJp
các c1nh c2a G theo thM t: có chi7u dài tăng dCn; viAc sNp xJp này có ñ phMc t1p O(p
2
),
vFi p là sH c1nh c2a G. Ngư?i ta chMng minh ñưc r`ng viAc chn e
i+1
không t1o nên
chu trình vFi i c1nh ñã chn trưFc ñó có ñ phMc t1p là O(n
2
). Do p≤n(n−1)/2, thu@t toán
Kruskal có ñ phMc t1p là O(p
2
).
v2
v3
v1
v4
v5
v6
v1
v2
v3
v4
v5
v6

http://ebook.here.vn Ti min phí ð thi, eBook, Tài liu hc tp
6.2.4. Thut toán Prim:
Thu@t toán Kruskal làm viAc kém hiAu qu6 ñHi vFi nh0ng ñ
th dày (ñ th có sH c1nh m ≈ n(n−1)/2). Trong trư?ng hp ñó, thu@t toán Prim td ra
hiAu qu6 hơn. Thu@t toán Prim còn ñưc gi là phương pháp lân c@n gCn nh4t.
1. V
T
:={v
*
}, trong ñó v
*
là ñOnh tuỳ ý c2a ñ th G.
E
T
:=∅.
2. VFi mPi ñOnh v
j
∉V
T
, tìm ñOnh w
j
∈V
T
sao cho
m(w
j
,v
j
) = min m(x
i
, v
j
)=:β
j
x
i
∈V
T
và gán cho ñOnh v
j
nhãn [w
j
, β
j
]. NJu không tìm ñuc w
j
như v@y (tMc là khi v
j
không k7
vFi b4t cM ñOnh nào trong V
T
) thì gán cho v
j
nhãn [0, ∞].
3. Chn ñOnh v
j*
sao cho
β
j*
= min β
j
v
j
∉V
T
V
T
:= V
T
∪ {v
j*
},
E
T
:= E
T
∪ {(w
j*
, v
j*
)}.
NJu |V
T
| = n thì thu@t toán d!ng và (V
T
, E
T
) là cây khung nhd nh4t.
NJu |V
T
| < n thì chuy.n sang BưFc 4.
4. ðHi vFi t4t c6 các ñOnh v
j
∉V
T
mà k7 vFi v
j*
, ta thay ñji nhãn c2a chúng như sau:
NJu β
j
> m(v
j*
, v
j
) thì ñLt β
j
:=m(v
j*
, v
j
) và nhãn c2a v
j
là [v
j*
, β
j
]. Ngưc l1i, ta
gi0 nguyên nhãn c2a v
j
. Sau ñó quay l1i BưFc 3.
Thí d9 3: Tìm cây khung nhd nh4t b`ng thu@t toán Prim c2a ñ th gm các ñOnh A, B,
C, D, E, F, H, I ñưc cho bhi ma tr@n trng sH sau.
∞
∞
∞
∞
∞
∞
∞
∞
14182111191218
14172321202032
18173430211920
21233422293423
11213022131319
19202129133316
12201934133315
18322023191615
Yêu cCu viJt các kJt qu6 trung gian trong t!ng bưFc lLp, kJt qu6 cuHi cùng cCn ñưa ra
t@p c1nh và ñ dài c2a cây khung nhd nh4t.
B C D
E F H
A
I
B
C
D
F

