Toán rời rạc | Bài giảng môn Phương pháp tính và matlab CTTT | Đại học Bách khoa hà nội

Toán rời rạc là m ột lĩnh vực của toán học nghiên cứu các đối tượng rời rạc. Chúng ta sẽ sử dụng công cụ của toán rời rạc khi phải đếm các đối tượng, khi nghiên cứu quan hệ giữa các tập rời rạc, khi phân tích các quá trình hữu hạn. Tài liệu trắc nghiệm môn Phương pháp tính và matlab CTTT giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

NGUYỄN ĐỨC NGHĨA - NGUYN TÔ THÀNH
----------
GIÁO TRÌNH
TOÁN RI RC
NXB ĐẠI HC QUC GIA HÀ NI -2009
Li nói đu
Toán ri rc là mt lĩnh vc ca toán hc nghiên cu các đi tưng ri rc. Chúng
ta s s dng công c ca toán rời rc khi phi đếm các đi tưng, khi nghiên cu quan
h gia các tp ri rc, khi phân tích các quá trình hu hn. M t trong nhng nguyên
nhân ch yếu làm nâng tm quan trng ca toán ri rc là vic ct gi và x lý thông tin
trên máy tính bn cht là các quá trình ri rc. Cun sách này nhm gii thiu các kiến
thc cơ bn trong ba lĩnh vc có nhiu ng dng ca toán ri rc : lý thuyết t hp,
thuyết đ th và hàm đi s logic. Ni dung cun sách đưc trình bày thành ba phn.
Phn I trình bày các vn đ ca lý thuyết t hp xoay quanh 4 bài toán cơ bn: i
toán đếm, Bài toán tn ti, Bài toán lit kê và Bài toán ti ưu t hp. Ni dung ca phn
1 không nhng giúp nâng cao tư duy toán, mà còn làm quen vi tư duy thut toán trong
vic gii quyết các vn đ thc tế, đng thi cũng rèn luyn k thut lp trình gii các
bài toán t hp.
Phn II đ cp đến lý thuyết đ th - mt cu trúc ri rc tìm đưc nhng ng dng
rng rãi trong nhiu lĩnh vc ca khoa hc k thut và đi sng. Trong phn này sau
phn gii thiu các khái nim cơ bn, các bài toán ng dng quan trng ca lý thuyết
đ th như Bài toán cây khung nh nht, Bài toán đưòìig đi ngán nht, Bài toán lung
cc đi trong mng... và nhng thut toán đ gii quyết chúng đã đưc trình bày chi tiết
cùng vi vic phân tích và hưng dn cài đt chươiig trình trên máy tính.
Phn III liên quan đến lý thuyết hàm đi s logic là cơ s đ nm bt nhng vn đ
phc tp ca k thut máy tính. Sau phn trình bày các khái nim cơ bn, phn này đi
sâu vào vn đ ti thiu hoá các hàm đi s lôgic và mô t m t s thut toán quan trng
đ gii quyết vn đ đt ra như thut toán Quine - M cCluskey, Black - Poreski.
Các vn đ đưc trình bày trong cun sách đu đưc minh ho trên nhiu thí d, các
thut toán đưc mô t trên ngôn ng PASCAL mô phng thun tin cho vic cài đt các
chương trình thc hin thut toán trên máy tính, trong đó nhiu thut toán chn lc đã
đưc cài đt trên ngôn ng PASCAL.
Mc lc
P h n . L ý t h u y ế t T h p
Trang
1
M đu
3
1.1 Sơ lưc v t hp
3
1.2 Nhc li lý thuyết tp hp
5
1.3 Mt s nguyên cơ bn
8
1.4 Các cu hình t hp đơn gin
11
Bài toán đếm
17
2.1 Gii thiu bài toán
17
2.2 Nguyên lý bù tr
19
2.3 Quy v các bài toán đơn gin
22
2.4 Công thc truy hi
24
2.5 Phương pháp hàm sinh
31
2.6 Lit kê
40
Bài toán tn ti
47
3.1 Gii thiu bài toán
47
3.2 Phương pháp phn chng
51
3.3 Nguyên lý Dirichlet
52
3.4 H đi din phân bit
56
3.5. Đnh lý Ramsey
59
Bài toán lit kê
69
4.1 Gii thiu bài toán
69
4.2 Thut toán và đ phc tp tính toán
70
4.3 Phương pháp sinh
85
4.4 Thut toán quay lui 92
Bài toán ti ưu
107
5.1 Phát biu bài toán
107
V
5.2 Các thut toán duyt 111
5.3 Thut toán nhánh cn gii bài toán tiíĩưi du lch 124
5.4 Bài toán lp lch gia công trên hai máy 135
Phn 2. Lý thuyết đ th 145
1. C.ic khái íiini t ơ bn ca th i vèt đ th 147
1.1 Đnh nghĩa đ th 147
1.2 Các thut ng cơ bn 150
1.3 Đưng đi, Chu trình, Đ th liên thông 152
1.4 M t sô' dng đ th đc bit 155
Chương 2. Biu din đ th trên máy tính 165
2.1 M a trn k. M a trn trng s 165
2.2 M a trn liên thuc đnh-cnh 168
2.3 Danh sách cnh 169
2.4 D anh sách k 169
Chưưng 3. Các thut toán tìm kiếm trên đ th và ng dng 175
3.1 Tim kiếm theo chiu sâu trên đ th 176
3.2 Tim kiếm theo chiu rng trên đ th 177
3.3 Tim đưng đi và kim tra tính liên ihông 179
Chương 4. Đ th Euler và đ th Hamilton 187
4.1 Đ th Euler 187
4.2 Đ th Ham ilton 191
Chương 5. Cây và cây khung ca đ th 197
5.1 Cây và các tính cht ca cây 197
5.2 Cây khung ca đ th 199
5.3 Xây dng tp các chu trình cơ bn ca đ th 201
5.4 Bài toán cây khung nh nht 203
Chương 6. Bài toán đưng đi ngán nht 219
6.1 Các khái nim m đu 220
6.2 Đưng đi ngn nht xut phát t mt đnh 222
6.3 Thut toán Dijkstra 224
6.4 Đưng đi trong đ th không có chu trình 227
6.5 Đưng đi ngn nht gia tt c các cp đnh 231
Chương 7. Bài toán lung cc đi trong mng 239
7.1 Mng, lung trong mng và bài toán lung cc đi 239
7.2 Lát ct.Đưòfng tăng lung. Đnh Ford-Fulkerson 241
7.3 Thut toán tìm lung cc đi trong mng 244
7.4 Mt s bài toán lung tng quát 249
7.5 Mt ' ng dng trong t hp 252
Phn 3. Hàm đại s lôgc 261
Chương 1. M đu 263
1.1 Mô hình x lý thông tin và hàm đi s lôgic 263
1.2 Các hàm đi s lôgic sơ cp 265
1.3 Biu din các hàm đi s lôgic qua h tuyn, hi, ph đnh 266
1.4 Biu din ti thiu ca hàm đi s lôgic 269
Chương 2. Dng tuyn chun tc ca hàm đi sò lògic 271
2.1 Các khái nim cơ bn 271
2.2 Dng tuyn chun tc thu gn 273
2.3 Dng tuyn chun tc nghn và dng tuyn chun tc ti thiu
Chương 3. Thut toán tìm dng tuyn chun tác ti thiu 277
3.1 Chú ý m đu 277
3.2 Tim dng tuyn chun tc thu gn 278
3.3 Tim dng tuyn chun tc ti thiu 282
3.4 Sơ đ ti thiu 285
Tài liu tham kho 289
VI
PHNI
LÝ THUYÊY t h p
Ciươti^ . M d á
1
M ĐU
1.1. Sơ lưc v t hợp
T hp như là mt lĩnh vc ca toán hc ri rc, xut hin vào đu thế k 17. Trong mt
thi gian dài, dưng như t hp nm ngoài gung máy phát trin ca toán hc cũng như
ng dng ca nó. Tinh thế bt đu đi khác khi xut hin các máy tính và cùng vi nó
s phát trin ca toán hu hn. Hin nay thuyếl t hp đưc áp dng trong nhiu
lĩnh vc khác nhau: thuyết s, hình hc hu hn. biu din nhóm, đi ' không giao
hoán, quá trình ngu nhiên, thng kê xác sut, quy hoch thc n g h im ,...
1.1.1. Các bài toán tng quát
T hp đng chm đến nhiu vn đ khác nhau ca toán hc, do đó khó có th đnh
nghĩa nó mt cách hình thc. Nói chung, lý thuyết t hp gn lin vi vi^ nghiên cu
phân b các phn t vào các tp hp. Thông thưng, các phn t này là hu hn và vic
phân b chúng phi tho mãn nhng điu kin nht đnh nào đy, tu theo yêu cu ca
bài toán cn nghiên cu. Mi cách phân b như thế đưc gi là mt cu nh t hp.
Trong các tài liu v t hp, thưng gp các dng bài toán dưi đây:
a) Bài toán đếm: đây là các bài toán nhm tr lời câu hi "có bao nhiêu cu hình
tho mãn điu kin đã nêu ?". Phương pháp đếm thưng da vào m t s nguyên lý cơ
bn và mt s kết qu đếm các cu hình đơn gin. Bài toán đếm đưc áp dng mt
Phân J . Lv tlntvêr t hợp
cách có hiu qu vào nhng công vic mang tính cht đánh giá như tính xác sut ca
mt s kin, tính đ phc tp ca mt thut to á n ,...
h) Bi toán liệt kê: bài toán này quan tâm đến tt c cu hình có th có đưc, thế
li gii ca nó cn đưc biu din dưi dng thut toán "vét cn" tt c các cu hình.
Li gii trong tng trưng hp c th s đưc máy tính đin t gii quyết theo thut
toán đã nèu. Bài toán lit kê đưc làm "nn" cho nhiu bài toán khác. Hin nay, m t sô'
bài toán đếm, ti ưu, tn ti vn chưa có cách nào gii, ngoài cách gii lit kê. Nếu
trưc đây, cách gii lit kê còn mang nng tính thuyết, thì bây gi nó ngày càng kh
thi nh s phát trin nhanh chóng ca máy tính đin tử.
C) Bài toán i ưu: khác vi bài bài toán lit kê, bài toán li ưu ch quan tâm đến
mt cu hình "tt nht" theo mt nghĩa nào đy. Đây là bài toán có nhiu ng dng
irong thc tién và lý thuyết t hp đã đóng góp mt phn đáng k trong vic xây dng
đưc nhng thut toán hu hiu.
d) Bài toán tồn tại: nếu như trong các bài toán trên, vic tn ti các cu hình là hin
nhiên thì trong bài toán này, vn đ "có hay không có" cu hình còn là điu nghi vn.
Các bài toán loi này thưng b kt trong tình hung nan gii: không ch ra đưc cu
hình nào nhưng cũng không khng đnh đưc là chúng không tn ti. Lch s toán hc
thưng đ li nhng bài toán khó trong lĩnh vc này và vic c gng gii quyết chúng
đã thúc đy không ít s phát trin ca nhiu ngành toán hc.
1.1.2. Vài nét v lch s
Có th nói tư duy v t hp ra đi t rt sm. Vào thi nhà Chu, ngưi ta đã biết đến các
hình v có liên quan đến nhng hình vuông thn bí. Thi c Hy lp, nhà triết hc
Kxenokrat, sng thế k th 4 trưc công nguyên, đã biết cách tính s các t khác
nhau, lp t m t bng ch cái cho trưc. Nhà toán hc Pitagor và các hc trò ca ông đã
tìm ra đưc nhiu con s có các tính cht đc bit, chng hn s 36 không nhng
tng ca 4 s chn và 4 sô' đu tiên m à còn là tng lp phương ca 3 ' t nhiên đu
tiên. Mt đnh lý ni tiếng ca trưng phái này là đnh lý v đ dài các cnh ca mt
tam giác vuông, và t đó h đã tìm ra các s mà bình phương ca mt s này bng tng
bình phương ca hai s khác. Vic tìm ra đưc các s như vy, đòi hi phi có mt
ngh thut t hp nht đnh. Tuy nhiên, có th nói rng, thuyết t hp đưc hình
thành như mt ngành toán hc mi, vào quãng thế k 17 bng mt lot các công trình
nghiên cu nghiêm túc ca các nhà toán hc xut sc như Pascal, Fermat, Leibnitz,
Euler, ... M c dù vy, trong sut hai thế k rưi, vai trò quan trng trong vic nghiên
cu thế gii t nhiên vn thuc v các ngành toán hc c đin như toán gii tích, các
phép tính vi tích phân, phương trình vi phân, phương trình toán lý...
Chươí^ . M (kỉIt
Trong thi gian hin nay, mi tương quan gia loan hc hu hn và toán hc c
đin đã có nhiu thay đi, đc bit t khi máv tính đin tử ra đi và phát trin. Nhiu
bài toán ni tiếng đã đưc gii trên máy tính bàng nhrm thut toán ca toán hu hn.
Các lĩnh vc tru tưng ca toán hc như đại s logic, ngôn ng hình thc, ... đã tr
thành khoa hc ng dng đ xây dng các ngôn ng lp trình cho máy tính. Trong thi
đi phát trin ca toán hc hu hn, vai trò ca lý thuyết l hp cũng khác xưa. T lĩnh
vc nghiên cu các trò chơi tiêu khin, hay phân lích gii mã các bc thư c, t hp đã
chuyn sang lĩnh vc toán ng dng với sư phát trin mnh m.
1.2. Nhc lại thuyết tp hp
1.2.1. Các khái nim và ký hiu
Trong giáo trình này, tp hp đưc ký hiu bàng nhng ch cái ln A, B
.....
X, Y, ... còn
nhng phn t đưc ký hiu bng các ch cái nh a, b
.......
X, Đ ch .r là phn t ca
X, ta viết .V G X, trái lại ta viết ,v X. Nếu mi phn t ca A cũng là nhng phn t ca
B thì ta nói A là tp con ca B và viết A q B. Nếu B d B q A thì A và s là hai tp
hp bng nhau và viết A = B.
S các phn t ca tp hp A s đưc hiu là N{A) hoc A I . Mt tp gm n
phn t đưc gi là mt /-tp. Các tp hp có thế xem như là nhng tp con ca mt tp
hp vũ tr X. Tp rng là tp hp không có phn t nào, nó đưc xem như tp con ca
mi tp hp.
1.2.2. Các phép toán tp hp
Các phép toán cho trên tp hp là:
Phn bù ca A trong X, ký hiu A , tp các phn t ca Xkhông thuc vào /4:
A = { X e X: X A }.
Hp ca v4 và ký hiu A \ jB , là tp các phn t hoc thuc vào /4 hoc thuc
vào B hoc thuc vào c hai tp A B:
A u B = x: X e A hoc,v e }.
Giao ca A và B, ký hiu A n B , là tp các phn t đng thi thuc vào c hai
tp A và B:
A n B = { x: X e A vàA' 6 I.
Hiu ca tp A và B, ký hiu là /4 \ s (hoc A - B):
A \ B = .x: X 6 /l và,v I.
Phđn I. Lý thuyết t hợp
Các tp hp, cùng vi các phép toán trên nó, lp nên mt đi s, gi là đi ' tập
hì. Dưi đây là mt vài tính cht ca các phép toán tp hp:
kết hp
(À u B )u C = A u (B u C )
(À n B )n C = À n(B n C )
giao hoán
A<j B = B u A
A n B = B r\A
phân b
/ í u f i 5 n C ) = ( / í u 5 ì n ( / l u C )
An {B v)C )^{A nB )^j{A nC )
(đi ngu)
A'-j B = A n B
A n B A\j B
1.2.3. Các tính cht cho trên tp hp
M i tp con ca mt tp hp đưc tương ng vi tính cht (còn đưc gi là mnh đ)
xác đnh nó trên tp hp đã cho. Vi tương ng này, các phép toán tp hp đưc chuyn
sang các phép toán m nh đ:
ph đnh A, ký hiu A (hay NO T A) tương ng vi phn bù A
tuyn ca A và B, ký hiu A v B (hay A or B) tương ng vi A ^ B
hi ca A và ß , ký hiu A & B (hay A and B) tương ng vi A n B
Các m nh đ, cùng vi các phép toán trên nó, lp nên mt đi s, gi là đi sô' mnh dê
(còn gi là đi sô' lôgic). Như thế, đi s mnh đ và đi s tp hp là hai đi sô'đng
cu vi nhau. Tu tình hung, mt bài toán có th phát biu bng ngôn ng ca đi sô'
tp hp hoc bng ngôn ng ca đi s mnh đ.
1.2.4. Tích Đ êcac ca các tp hp
Ngoài các phép toán ca đi s tp hp, ngưi ta còn đnh nghĩa mt phép toán cho
phép ghép hai tp hp đ đưc mt tp hp mi, đó là tích Đêcac
A X B = {(a, b) \ a e A, b G B}.
Tích Đ ècac đưc m rng t nhiên cho trưng hp nhiu tp hp:
X /I2 X ... xA^ = {(|,
.....
a¡) I a, e A, i = 1,2,..., k].
Ngưi ta cũng dùng ký hiu lu tha đ biu din tích Đêcac ca cùng mt tp hp;
/4* = /4 x / l x . .. Xy4 f:lnj.
Cơng I . M dâu
Thí d:
R biu din các đim trên đưng thng,
biu din các đim trên mt phng,
biu din các đim trong không gian.
1,2.5. Quan h tương đương và phân hoch
Trong nhiéu vn đê, ngưi la cn (uan tâm đến ml quan h nào đó giưa hai phn t ca
tp hp đang xét. Mt quan h hai ngôi R trên tp hu hn phn t A"đưc đnh nghĩa
như là tp con R{X) ca tích Đ các XxX. Ngưi ta quan tâm đến các tính cht sau đây
ca mt quan h trên tp X:
đi xng ( có quan h với h kéo theo b có quan h vi íĩ),
phn x (mi phn t có quan h vi chính nó),
truyn ng (nếu a có quan h với h và b có quan h vi c thì a có quan h vi
c).
T h í d: Xét x = {1, 2, 3, 4 . Ta xác đnh mi quan h p gia các phn t ca X như
sau: Gi s Í7, e , ta nói a có quan h (yơ) đi vi b nếu a chia hết cho b. Khi đó
(3, 1),(4, 1), (4 ,2 ) c X x X
D thy p có tính cht phn x (vì rõ ràng là a chia hết cho í/), truyn ng (vì Ü chia hết
cho và í» chia hết cho c kéo theo a chia hết cho c), nhưng không có tính cht phn x
(vì a chia hết cho b không nht thiết kéo theo h chia hết cho a).
Có nhiu kiu quan h, nhirng quan h đưc quan tâm nhiu nht là quan h tươĩĩg
đương. Mt quan h đưc gi là tương đương nếu nó tho mãn c 3 tính cht: đi xng,
phn x và truyn ng. M t quan h lương đương trên tp hp đang xét s chia tp hp
đ ó th àn h c á c l p (g i là c á c ÌỚỊy tư ơ n ^ đ ư ơ n O sa o c h o hai phn t th u c c ù n g m t l p
là có quan h vi nhau và hai phn t khác lp là không có quan h vi nhau. Các lp
tương đương có tính cht ph kín tp hp đã cho (tc là mt phn t bt k phi thuc
vào mt lp nào đó) và ri nhau (tng cp giao với nhau bng rng). Ngưi ta gi m t
h các tp con khác rng ca mt tp hp có tính cht va nêu là m t phân hoch ca
tp hp đó. T đy suy ra mt quan h tương đương trên mt tp hp s xác đnh mt
phân hoch trên tp đó và ngưc li, mt phân hoch bt k trên tp hp đã cho s
tương ng vi mt quan h tương đương trên nó.
T h í d: Gi s xét tp m {m> 1) sô' nguyên dương N„,= {1,2 , m\. Gi s k là s
nguyên dương, k < m. Ta nói hai s nguyên dương a ,h Ç: N, là có quan h vi nhau và
ký hiu là a <r^h nếu như và có cùng ' dư khi chia cho k (ký hiu \ầ.a = b (mod k)).
Như vy,
Phn . Lý thuyết tổhỢỊ)
a <->/? o a = b (mod k),
D dàng kim tra đưc rng mi quan h va xác đnh trên tp là mi quan h
tương đương. Gi
/l, = / e N;. a = i (mod /:)}, i = 0, 1 , :-l.
Khi đó d dàng kim ira đưc rng
A ¡nA j= 0,ii^j và 7V, = J / I , .
/=()
Điu đó có nghĩa là các tp N-, N
.......
to thành mt phân hoch ca tp
Trưna hp riêng khi k=2. tp /V,,. đưc phân hoach thành hai tp: tp các s chn (/V,Ì
và tp các s l (A^i).
1.3. Mt s nguyên cơ bn
1.3.1. Nguyên lý cng
Nếu A và B hai tp hợp rời nhau thì
N(A u ß) = N{A) + N{B).
Nguyên lý cng đưc m rng cho nhiu tp con ri nhau:
Nếu |/4|, Aj, là mí phán hoch ca tập lì(/7 X thì
N{X) = N{A) + NiA^) + ... + N{A^).
Mt trưng hp riêng hay dùng ca nguyên lý cng:
Nếu A mt tính cht cho trên tp X thì N(A) = N(X) - N(A).
Thí d 1. Mt đoàn vn đng viên gm 2 môn bn súng và bơi đưc c đi thi đu
nưc ngoài. Nam có 10 ngưi. S vn đng viên thi bn súng (k c nam và n) là 14.
S n vn đng viên thi bơi bng s nam vn đng viên thi bn súng. Hi toàn đoàn có
bao nhiêu ngưi?
Gii: Chia đoàn thành 2 lp; nam và n. Lp n li đưc chia 2: thi bn súng và thi bơi.
ITiay s n thi bơi bng s nam thi bn súng (2 s này bng nhau theo đu bài), ta đưc
s n bng tng s đu th thi bn súng. T đó, theo nguyên cng, toàn đoàn có 10 +
14 = 24 ngưi.
Chương í . M đầu
Thí d 2, Trong m t đt ph biến đ tài tt nghip, Ban ch nhim Khoa công b danh
sách các đ tài bao gm 80 đ tài v ch đ "xây dng h thông tin qun lý", 10 đ tài
vé ch đ "ihiết kế phn mm dy hc" và 10 đ tài về ch đ "H chuyên gia". Hi
mt sinh viên có bao nhiêu kh năng la chn đ tài?
Gii: Sinh viên có th la chn đ tài theo ch đ th nht bi 80 cách, theo ch đ th
hai bi 10 cách, theo ch đ th ba bi 10 cách. Vy tt c có 100 cách la chn.
Thí d 3. Hòi rng giá tr ca k s là bao nhiêu sau khi đon chưcfng trình PASCAL sau
đuc thc hin?
nl:=10;
n2:=20;
n3:=30;
k:=0 ;
fo r il:= 1
to
nl do k:=k+ l;
fo r
i2:= 1
to n2 do k:= k+l;
for i3:= 1
to n3
do
k:=k+l;
G ii: Đu tiên giá tr ca k đưc gán bng 0. Có 3 vòng lp for đc lp. Sau mi ln lp
ca mi m t trong 3 vòng for, giá tr ca k tăng lên 1. Vòng for th nht lp 10 ln,
vòng for th hai lp 20 ln, vòng for th ba lp 30 ln. Vy, kết thúc 3 vòng lp for giá
tri ca k s là 10+20+30= 60.
1.3.2. Nguyên lý nhân
Nếu mi thành phn , của b th t k thành phn (O, «2..... «k) c rt, kh năng chn
(/ = 1, 2, k), thì s b sè được tạo ra tích s ca c khá năng này ni>Ĩ
2
... rit.
M t h qu trc tiếp ca nguyên lý nhân:
yV(A, X A2 X ... X A,) = N(A,) N{A^)... N(At).
vi A2,/i* là nhng tp hp nào đó, nói riêng;
N{A^) = N{Aý.
T hí d 1. T Hà ni đến H uế có 3 cách đi: máy bay, ô tô, tàu ho. T Huê' đến Sài gòn
có 4 cách đi: máy bay, ô tô, tàu ho, tàu thu. Hi t Hà ni đến Sài gòn (qua Huế) có
bao nhiêu cách đi?
G ii: Mi cách đi t Hà ni đến Sài gòn (qua Huế) đưc xem gm 2 chng; Hà ni -
H uế và H uế - Sài gòn. T đó, theo nguyên lý nhân, sô' cách đi t Hà ni đến Sài gòn là
3x4=12 cách.
Phn 1. Lý thuyết t hợp
T hí d 2. Hi rng giá tr ca k s là bao nhiêu sau khi đon chương trình PASCAL sau
đưc thc hin?
n l; = 10;
n2 :=20;
n3:=30;
k:=0 ;
for il:= 1 to nl do
fo r i2 := 1 to n2 do
for i3:= 1 to p3 do k:= k+l;
G ii: Đu tiên giá tr ca k đưc gán bng 0. Có 3 vòng lp for lng nhau. Sau mi ln
lp ca vòng for, giá tr ca k tăng lên 1. Vòng for th nht lp 10 ln, vòng for th hai
lp 20 ln, vòng for th ba lp 30 ln. Vy, theo nguyên lý nhân, kết thúc 3 vòng lp for
lng nhau, giá tr ca k s là 10 X 20 X 30 = 6000.
Thí d 3. Có bao nhiêu tên biến trong PASCAL đ dài 10 ch cha hai ch cái A, B, bt
đu bi AAA hoc ABA?
G ii: Tp các tên biến cn đếm đưc phân hoch thành hai tp: mt tp gm các biến
bt đu bi AAA, còn tp kia gm các tên biến bt đu bi ABA. Mi tên biến đ dài 8
bt đu bi AAA có th xây dng như sau: chn ký t th 4, th 5, th 10. Mi mt
trong 7 ký t còn li này có 2 kh năng chn (hoc chn A, hoc chn B), nên theo
nguyên lý nhân có
2x2x2x2x2x2x2 = 2 ^= 128
tên biến bt đu bi AAA. Lp lun tương t ta cũng đếm đưc 128 tên biến bt đu bi
ABA. Vì vy, theo nguyên lý cng, có tt c 128 + 128 = 256 tên biến đ dài 10 ch
cha hai ch A, B hoc bt đu bi AAA hoc bt đu bi ABA.
Trong vic gii các bài toán đếm c th, nếu như đếm trc tiếp s cu hình là khó,
ta có th phân hoch tp các cu hình cn đếm ra thành các tp con sao cho vic đếm
các phn t ca các tp con này là đơn gin hơn. Khi đó s dng nguyên cng đ
đếm s cu hình đt ra.
Nếu chúng ta cn đếm các cu hình có th xây dng theo tng bưc, thì khi đó có
th s dng nguyên lý nhân.
Nói chung, điu quan trng khi gii mt bài toán đếm là phi xác đnh đưc cn s
dng nguyên lý nào (tng quát hơn, là công c nào) đ gii bài toán và điu đó đòi hi
tư duy ca ngưi gii.
10
Chươni> . Màcỉấi
1.4. Các câu hình t hợp đơn giản
Dưi đây trình bày mt s cu hình t hp đcm gin, nhng cu hình này thưng đưc
làm cơ s' cho phép đếm.
1.4.1. Chnh hp lp
Điih ngliĩa. Mt chỉỉìh h? lập chập k ca ì pluín tử lù .ìt hộ th l gm k thàî'h
phn lấy ĩn phn iửđã cho. Các lĩùnlì phn có í h dưc lp li
Như thế, m t chnh hp lp chp k ca n có th xein như mt phn t ca tích
Đêcac vi A là tp đã cho. Theo nguyên nhân, s tt c các chnh hp lp chp k
c a n s là n \
T hí d 1. Tính s hàm t mt '-ip vào mt /7-tp,
Gii; Biu din mi hàm bng mt b k thành phn, trong đó thành phn th i là nh
ca phn t / (1 < / < k), Mi thành phn đưc ly t mt trong n giá tr. T đó nhn
đưc s cn tìm là
T h í d 2. Tính s dãy nh phân đ dài n.
G ii: Mi dãy nh phân đ dài n là mt b gm n thành phn, Irong đó m i thành phn
ch nhn mt trong hai giá tr (1 hoc 0). T đó suy ra s các dãy nh phân đ dài n là
2".
T h í d 3. Tính s tp con ca mt /7-tp.
G ii: Gi s n-p đã cho là X = I .V,, j. Biu din mi tp con A ca tp đã cho
X bng mt dãy nh phân đ dài n:
h = (ò bj, h)
trong đó b = 1 nếu phn t X, & A và b = 0 trong trưng hçfp ngưc li (/ = 1, 2,...,
n). T đó nhn đưc sô' tp con là 2".
1.4.2. C h nh hp không lp
Đ nh nghĩa. Mt chỉnh hợp không lặp chp k ca n phn tử là mt b có th t gm k
thành phn ly t n phn t đã cho. Các thành phn klìônđược lp li.
11
Phn 1. Lý thuyết t hợp
Đ xây dng mt chnh hp không lp, ta xây dng dn t thành phn đu tiên.
Thành phn này có n kh nâng chn. Mi thành phn tiếp theo, sô' kh năng chn gim
đi 1 so vi thành phn đng trưc.T đó, theo nguyên lý nhân, s chnh hp không lp
chp k ca n s là /(/ì-l)...(«-/:+1). Đ tn ti cu hình, cn phi tho mãn k < n.
Thí d. Tính s đơn ánh t mt ¿-tp vào mt /-tp.
G ii: Biu din mi đơn ánh bng b nh ca tp ngun như trong thí d 1 mc trên.
Chú ý rng các nh không đưc lp li, ta nhn đưc s cn tìm là n(n-ì)...{tĩ-k+ì).
1.4.3. Hoán v
Đnh nghĩa. Ta gi mt hoán vị ca n phn t mt cách xếp th t các phn l đó.
Mt hoán vị ca n phn t đưc xem như mt trưng hp riêng ca chnh hp
không lp khi k = n.Do đó s hoán vị ca n phn t là 1.2 n = n\
Có th đng nht mt hoán v ca n phn t vi mt song ánh ca m t tp n phn
t lên chính nó. Mt song ánh như vy còn đưc gi là mt phép thế. Các phép thế có
nhiéu tính cht thú vị và vic nghiên cu nó đã đóng góp mt phn quan trng trong
toán hc.
T hí d 1. 6 ngưi đng xếp thành m t hàng ngang đ chp nh. Hi có th ' trí bao
nhiêu kiu?
Gii; M i kiu nh là mt hoán v ca 6 ngưi. T đó nhn đưc sô' kiu nh có th b
tri là 6 ! = 720.
T h í d 2. Cn b trí vic thc hin n chương trình trên mt máy vi tính. Hi có bao
nhiêu cách?
Gii: Đánh s các chương trình bi 1, 2,..., n. M i cách b tri vic thc hin các chương
trình trên máy có th biu din bi mt hoán vị ca 1, 2 , n. T đó suy ra s cách b
trí cn tìm là n !
1.4.4. T hp
Đnh nghĩa. M t t hp chp k ca n phn t là mt b không k th t gm k thành
phn khác nhau ly t n phn t đã cho. N ói cách khác, ta có th coi mt t hp chp k
ca n phn t là mt tp con k phn t ca nó.
12
Chương I . M đầu
Vic đếm các t hp có khó khãn hơn chút ít so vi các cu hình đã trình bày, tuy
nhiên cách đếm dưi đây cho biết cách vn dng các nguyên lý cùng vi các kết qu
đếm đã biết trong vic đếm mt cu hình mi.
Xét tp hp tt c các chnh hp không lp chp k ca n phn t. Chia chúng thành
nhng lp sao cho hai chnh hp thuc cùng mt lp ch khác nhau v th tự. Rõ ràng
các lp này là mt phân hoch trên tp đang xét và mi lp như thế là tưcfng ng vi
mt t hp chp
k ca n. S chnh hp trong mi lp là bng nhau và bng (s hoán
vì. Sô' các lp bng s t hD chap k ca n. Theo nguvên lý cng, tích ca k\ vi s
này !à bng s các chnh hp Ichông lp chp k ca n, nghĩa là bng «(«-1)...(|2-:+1). T
đó nhn đưc s t hp chp k ca n
n{n-\){n-2)..n-k+\) , n\
-----------------1
S t hp này gp khá nhiu trong toán hc, nó thưng đưc ký hiu bi c* và đưc
gi là h s t hợp.
Khi nhn xét rng, giá tr ca phép chia trong (1) mt s nguyên, ta nhn đưc
mt kết qu thú trong sô' hc: tích ca k s t nlìiền liên tiếp bao gi ng chia hết
cho k\.
T hí d 1. Có n đi bóng thi đu vòng tròn. Hi phi t chc bao nhiêu trn đu?
G ii; C 2 đi thì có m t trn. T đó suy ra s trn đu s bng s cách chn 2 đi t n
đi, nghĩa là bng
njn-\)
- 2
T h í d 2. Hi có bao nhiêu giao đim ca các đưng chéo ca mt đa giác lin (n> 4)
đnh nm trong đa giác, nếu biết rng không có ba đưng chéo nào đng quy ti đim
trong đa giác?
G ii: C 4 đnh ca đa giác thì có mt giao đim ca hai đưng chéo nm trong đa
giác. T đó suy ra s giao đim cn đếm là
n{n-\)in-2){n~3)
' 24
Dưi đây là mt vài tính cht ca các h s t hp:
a) Đi xng
ơn = C T ' (2)
13
Phn . Lý thuyết t h)
b) Đ iu kin đu
ơ: ^ c: = I (3)
c) Công thc đ qui
cf, = C:\ + c lu n> k> 0 (4)
Các công thc (2), (3) đưc suy trc tiếp t đnh nghĩa t hp, còn công thc (4) có th
đưc chng minh l ( 1).
T (3) và (4), ta có th tính tt c các h s t hp ch bng phép cng. Các h s
này đưc tính và viết ln lưt theo tng dòng (mi dòng ng vi m t giá tr /;=0, 1, ...),
trên mi dòng chúng đưc tính và viết ln lưt theo tng ct (mi ct ng vi mt giá
lĩ k = 0, 1, n) theo bng tam giác dưi đây:
cs
Cl' cl
Bng này đưc gi là tam giác Pascal.
Dưi đây là tam giác Pascal kích thưc 8:
1
] 2 I
1
3 3
1
1
4
6
4
1
1 5 10 10 5 1
1 6 15 20 15
6 1
1 7 21 35 35 21 7 1
1 8 28
56 70 56
28 8 1
Các h s t hp có liên quan cht ch vi vic khai trin lu tha ca m t nh thc.
Tht vy, trong tích
(x +J^)" = ( x + >^)(j: +,(x + :f )
h s ca / s là s cách chn k nhân t (x + y) mà t đó ta ly ra A' và đng thi
trong n-k nhân t còn lại ta ly ra nghĩa là
14
Chươnỉỉ i . Mà dầu
(x + y)" = c ° x" + c x" ' V + ... + c r -V >"'+ a y'' (5)
Cônc thc (5) còn đưc gi klìíi triển nhtlìc Ne\\on và các h s t hp còn đưc
gi là các lì snìì ĩììc.
Chng hn, căn c vào dòng cui ca tam giác Pascal kích thưc 8 (đã tính trên), ta
phn đirc:
ú ' + V)* - / + 8.v"v + 28.rV + 5 6 . \ ' + 7().vv" + 56,rV -r 2 8 .r" / + /
Tliông thưng, công thc (5) đưc gp dưi dng đa thc mt n:
(x + 1 )" = c l x + c l x "-' + . .. + c r ' A- + c;: (6)
Rt nhiu đng thc v h s t hp đưc suy t (6). Chng hn, trong (6 ) chn A' =1 ta
đưc:
c:+ c!, + ... + c ;r' + c = 2" ^ (7)
tc là nhn đưc kết qu đã biết (thí d 3, mc 1.4,1); s các tp con ca mt /?-tp
bng 2", còn nếu chn ,v = -1 ta đưc:
c: - c ; , + ...+ (- ir c : : - 0 (8)
tc là s các tp con chn (có s phn t là s chán) bng các s tp con l và bng
Nhiu tính cht ca h s t hp có th thu đưc t (6) bng cách ly đo hàm hoc
tích phan theo A' hai vế ca đng thc này mt s hu hn ln, sau đó gán cho .r nhng
giá tr c Ih. Chng hn, cne thc sau đây thu đưc bns cách ly đo hàm hai vế
th e o v à sa u đ ó tron g đ n g thc Ihu đ ư c đ t X - \ :
/72"-' = n c : +(/7 -i)c,: + ... + C ;;-' .
Còn công thc sau đây thu đưc bng cách ly tích phân hai vế theo X và sau đó trong
đng thc thu đưc đt A' = 1:
(« + i)
2
'-'={« + i ) c : + < + ...+ c ;;.
15
Phn 1. Lý thuyết t hợp
Bài tp
1. Cho biết trong các h thc dưi đây h thc nào là đúng h thc nào là sai
a)À Ç A n ß
b ) C Q ( A n ß )u C
c) L.'B Q À n ß
d )A n (ß u A ) = A n B
e) (A u B)\(A d B) = A\B
2. Ký hiu z là tp các s nguyên. Xét hai tp con ca Z:
A= x e z :x = 4p-ì vi mt p e z nào đ ó }
B= { e z :y = 4-5 vi mt q e z nào đó I.
Chng minh rng A = B.
3. Xét hai tp
A = {n e z : n <0 ] và .42 = {« 6 Z: /ì > 0 }.
Hi A, A
2
có to thành phân hoch ca z hay không? Nếu đúng hãy gii thích câu tr
li, nếu sai hãy đưa ra phân hoch đúng ca z.
4. Cho /4 = {0, 1, 2, 3, 4} và xác đnh quan h R trên A bi:
/? = ( (0, 0), (2, 1), (0, 3), (1, 1), (3, 0), (1 ,4 ), (4, 1), (2, 2), (2, 4), (3, 3),
(4 ,4 ), (1 ,2), (4, 2) }.
Q i ra rng quan h R là quan h tương đưcfng hay không? Nếu câu tr li là khng đnh
hãy đưa ra phân hoch ca A thành các lp tưoĩig đương theo quan h R đã cho.
5. Xét các tp vi các phn t là các s nguyên;
Ao = { ...,-1 0 ,-5 , 0 ,5 , 10, 1 5 ,2 0 ,2 5 ,...} ;
= { ...,-9 ,- 4 ,1 ,6 ,1 1 ,1 6 ,2 1 ,2 6 ,...}
2 = { - 8,-3 , 2, 7, 12, 1 7 ,22 ,2 7 ,...}
A, = { -7 ,-2, 3, 8, 13, 1 8 ,2 3 ,2 8 ,...}
A, = { ...,-6 ,- 1 ,4 , 9, 14, 1 9 ,2 4 ,2 9 ,...} .
z.
a) Ch ra rng các tp Aq, A, A
2
, và A4 to thành phân hoch ca tp s nguyên
b) Ch ra quan h s tương ng vi phân hoch này.
16
Chiamg 2. Bài toán dem
2
BÀI TOÁN ĐM
2.1. Giới thiu bài toán
Mt trong nhng vn đ đu tiên ca vic nghiên cu t hp là đếm xem có bao nhiêu
cu hình t hp có th đưc to ra vi nhng quy tãc đã nêu? Nhng bài toán như vy
đưc gi là hài toán đếm t h). Thông thưng, lời gii ca bài toán đếm ph thuc vào
mt s giá Ir tham s ban đu và ngưi ta cô' gng biu din s ph thuc này bng
nhng công thc toán hc. Nói chung, đ đếm các cu hình đã cho, ngưi ta tìm cách
đưa v các cu hình quen thuc bng cách thiết lp mt cmg quan 1-1 gia chúng.
Nhiu khi m t bài toán đếm đưc phân thành nhng bài toán đếm nh hơn bng cách
chia vic đếm thành tng lp đ áp dng nguyên cng hoc phân tích cu hình cn
đếm như là vic ghép mt s cu hình khác đ áp dng nguyên lý nhân. Dưi đây
m t s thí d đơn gin nhm minh ha mt sô' k thut đếm.
Thí d 1. Có bao nhiêu cách xếp 5 ngưi đng thành mt hàng ngang sao cho A không
đng cnh B ?
Gii: Đ đếm s cách xếp này, ta đếm phn còn lại: sô' cách xếp m à A đng cnh B.
Xem A v B như mt ch, ta có 4! = 24 cách xếp. S này cn đưc nhân 2 A có th
17
Phcin I. Lv ílnivếr ti) hp
đng bên trái cũng như bên phi B. Như vy có tt c 48 cách xếp A đng cnh B. Toàn
b có 5! = 120 cách xếp. T đó nhn đưc sô' cách xếp mà A k/.ông đng cnh B là 120
- 48 = 72 cách.
T hí d 2. M t đt phát hành x s vi các sô' vé gm 2 phn: phn đu gm 2 ch cái
ly t A đến z (26 phn t) và phn sau gm 4 ch s ly t 0 đến 9 (1 0 phn t). Hi
xác sut đ trúng gii đc đc là bao nhiêu ?
Gii: Trưc hết ta đếm s vé đưc phát hành. Mi vé gm 2 phn: phn ch và phn
s. Phn ch có 26^ kh năng, phn s có 10“* kh năng. Theo nguyên nhân, s
đưc phát hành là 26 X iO" = 6 760 000. 'ĩ đ nhn đưc xác sut đế trúng gii đc
đc là
1 /6 760 000 « 1 ,4 8 x 1 0 '
T h í d 3. Cho mt lưi gm các ô vuông. Các nút đưc đánh số' t 0 đến / theo c h i u
t trái sang phi và t 0 đến m theo chiu t dưi lên trên (xem hình v). Hi có bao
nhiêu đưng đi khác nhau t nút (0 , 0) đến nút {n, nì) nếu ch cho phép đi trên cnh các
ô vuông theo chiu sang phi hoc lên trên ?
(0, m)
{n, m)
(0, 0) {n, 0 )
G ii: M t đưng đi như th ế đưc xem gm n+m đon (mi đon là mt cnh ô vuông).
Ti mi đon ch đưc chn mt trong 2 giá tr; đi lên (mà ta mã là 1) hay sang phi
(mà ta mã là 0). S đon đi lên đúng bng m và sô' đon sang phi đúng bng n. Bài toán
dn v vic tìm xem có bao nhiêu dãy nh phân đ dài lì + m trong đó có đúng m thành
phn bng 1. Đ ây cũng chính là s tp con m phn t ca mt tp n + m phn t, VI thế
s đưng đi cn đ ếm bng .
Thí d 4. Thut toán "ni bt" dùng đ xếp tăng dn dãy a, (/ = 1,2,..., /) đưc mô t
bng đon chương trình PASCAL dưi đây:
For i := 2 to n do
For j .= n clownto i do
18
Chư ơiìg 2 . B ài toán dem
ư<^íj-n > rlien Swapuj-I. uih:
Hãy đếm xem phi làm bao nhiêu phép so sánh ?
Gii: Ta chia s phép so sánh thành các lớp theo vòng lp / (/ đi t 2 đến n). Vi mi i
xác đnh, phi thc hin ìì-i+I phép so sánh. T đó nhn đưc, theo nguyên lý cng, s
các phép so sánh là:
2 /+ ... + I
,
Có th lý lun gn hơn: thut toán "ni bt" viết trong đon chương trình đã cho
phi so sánh tt ça các cp phn t khác nhau. T đó nhn đưc s phép so sánh là
_ /7(^-1)
" 2
Mt đc tính ca các bài toán đếm t hp là s cu hình tăng rt nhanh khi s giá
tr tham gia vào vic to nên cu hình đó tăng. Điu này thưng dn đến các con s
khng lồ mc dù các con s tham gia ban đu không lón. Hin tưng này thưng đưc
gi là s bùng n t hp và chính nó là nguyên nhân làm cho các thut toán da vào
vic duyt toàn b tr nên không kh thi. Thí d dưi đây cho thy rng, dù qui cách
to c u hình c ó v rt h n c h ế n h ư n g s cu h ình đ ư c t o , h o á ra li rt l n .
T hí d 5. Ngôn ng PASCAL chun qui đnh đt tên biến không quá 8 ký t. Các ký t
trong tên biến ch đưc phép là các ch cái (t A đến Z) hoc các ch ' (t 0 đến 9) và
phi bt đu bng ch cái. Hi có th đnh nghĩa bao nhiêu biến khác nhau ?
Gii: Ta phân các biến thành các lớp: 1-ký tự, 2-ký tự, ... Sô' các biến thuc lp Ả-ký t,
theo nguyên nhân, bàng 26 X 36'" ' (; = 1. 2, 8). T đó, theo nguyên lý cng, ta
nhn đưc s các biến khác nhau :
26.(1 + 36 + 36^ + ... + 36) = 2 095 681 645 538.
2.2. Nguyên tr
Mt s bài toán đếm phc tp hơn, đưc da vào nguyên lng quát ca nguyên
cng. Nu không có gi thiết gì vé s ri nhau gia 2 tp AvàB thì
N{AyjB) = N{A)+ N{B)- NiAr^B). (1)
Công thc (1) đưc m rng cho trưng hp nhiu tp như sau.
Đnh lý. Gi sA, /4,,... , A, các tập hu hạn. Khi đó
N{A^vjAz^...A,) = .V,-A^:+... + ( - i r > , , (
2
)
19
Phn . Lý thuyết t hợp
trong đó N. tổng phn ĩử ca tất c các giao ca k tập ly ì m tập đã cho (nói riêng
/V, = N(A,) + ... + N, = N{A, n A , n ... n A J ).
Chng minh. Chú ý rng, s các giao ca k tập ly t m tp bng ci, , k = \,2 , m.
Đ chng minh công thc (1), ta s tính xem mi phn t ca tp /4| u y\2 . u A,
đưc đếm bao nhiêu ln trong vế phi ca nó. Xét mt phn t tu ý e /4| u .42 u . . .
u y4,. Gi s a là phn t ca k tp trong s m tp đã cho. Khi đó a đưc đếm vế phi
ca công thc ( 1)
C l - C ; + C l - . . . + ( - l ) - 'c :
ln. Do
ci-c;+ c *'-,..+ (-i)* ''c;
=
1
- [
1
- c;+Q =-Q '+...+(-i)*c; ] =
1-(1
-iy=i,
suy ra rni phn t e A/ u u . . . o A, đưc tính đúng 1 ln vế phi ca công
thc ( 1), điu đó đã chng minh tính đúng đn ca công thc ( 1).
Bây gi ta đng nht tp A. với tính cht A. cho trên mt tp X nào đó và đếm xem
có bao nhiêu phn t ca X không tho mãn bt c mt tính cht /4|. nào c.
Gi N là s cn đếm, /V là s phn t ca X, ta có:
~Ñ = N - N { A ,^ A.KJ... A)= N - Ny + ... + {-\ ' N ^ (3)
trong đó là tng các phn t ca X tho mãn k tính cht ly t m tính cht đã cho.
Công thc (3) đưc gi là nguyên tr. Nó cho phép tính N qua các Nf. trong
trưng hp các s này d tính toán hơn.
Ta s xét mt s thí d minh ho cho vic s dng nguyên lý bù Ir đ gii các bài
toán đếm.
Thí d 1. Hi trong tp x = { 1 ,2 , 1 0 0 0 0 } có bao nhiêu s không chia hết cho bt c
s nào trong các s 3, 4, 7?
Gii. Gi
A= X e X: X c h ia h ết c h o ' , i = 3 , 4 , 7 .
Khi đó là tp các s trong X chia hết cho ít nht m t trong 3 s 3, 4, 7,
suy ra theo công thc (3), sô' lưng các s cn đếm s là
N{X) - yV(A3 u /^4 u A^) = N,-N2 + Ny
Ta có
/V, = N(A,) + N{A,) + N{A,)
= [10000/3] + [10000/4] + [10000/7]
= 3333 + 25 00 + 1428 =7261,
20
Chương 2. Bài toán dếm
= N{A^ n /Ì4 ) + N(A^ n A^) + N(A^ n At)
= [10000/(3x4)] + [10000/(3x7)] + [10000/(4x7)]
= 833 + 476 + 357 = 1666,
N, = N{A,r^A,r^A^) = [10000/(3x4x7) ] = 119,
đây ký hiu [ r ] đ ch s nguyên lớn nht không vưt quá r.
T đó s lưng các s cn đếm 10000 - 7261 + 1666 - 119 = 4286.
T hí d 2. Có bao nhiêu xâu nh phân đ dài 10 hoc là bt đu bi 00 hoc là kết thúc
bi 11?
Gii. D thy là s xâu nh phân đ dài 10 bt đu bi 00 là 2® = 256 và sô' xâu nh phân
đ dài 10 kết thúc bi 11 là 2* = 256. Ngoài ra, s xâu nh phân đ dài 10 bt đu bi
00 và kết thúc bi 11 là 2* = 64. Theo công thc (1) suy ra s xâu nh phân hoc bt đu
bi 00 hoc kết thúc bi 11
256 + 256 - 64 = 448.
Kết thúc mc này, ta xét bài toán c đin dưi đây trong lý thuyết xác sut:
Bài toán b thư. Có n lá thư và n phong bì ghi sn đa ch. B ngu nhiên các lá thư
vào các phong bì. Hi xác sut đè xy ra không mt thư nào b đúng đa ch là bao
nhiêu?
Gii; Có tt c n\ cách b thư. Vn đ còn li là đếm s cách b thư sao cho không có
lá thư nào đúng đa ch. Gi X tp hp tt c các cách b thư và là tính cht lá thư
th k b đúng đa ch. Khi đó theo công thc (3) ta có:
~N = N - N , +N
2
- . . . +
irong đó N là sô' cn tìm, A/ = /?!, còn N. là s tt c các cách b thư sao cho có k
thư đúng đa ch. Nhn xét rng, N. là tng theo mi cách ly k lá thư t n lá, vi mi
cách ly k lá thư, có n-k)\ cách b đ k này đúng đa ch, ta nhn đưc:
và
N, = ƠAn-k)\ = ^
k\
T7 1 1 (-1 )
T đó xác sut cn tìm
, 1 1 (-1)”
1! 2! n \
21
Fhân ì . L thuyết t ĩ(/p
Mt điu lý thú là xác sut này dn đến e'^ (nghĩa là còn ln hơn 1/3) khi n khá
lii. S N trong bài toán trên đưc gi là smcĩt íh ĩvìì đưc ký hiu là D,,.. Dưi đây
là mt vài giá tr ca cho ta thy tăng nhanh thế nào so vi ìĩ\
" ^
3 4
5
6 1 7 8 9 1 10
li
! 1
2
9
1
_
_
_
44
265 1 1854 14833 133496 1 1334961
4890741
2.3. Quy v các bài toán đơn gin
M ì trong nhũng phương pháp dếm là qưy bài toán đang xét v nhng bài toán dơn gin
hơn. Điu này không phi lúc nào cũng d nó thưng đòi hi mt s phân tích sâu
sc cu hình cn đếm. Thí d dưi đây trình bày mt bài toán ni tiếng ca Lucas
(1891). qua đó rút ra đưc nhiu điu b ích irong ngh thut đếm.
Bài toán xếp k há ch c a Lucas. Có mt bàn tròn, xung quanh có 2n ghế. Cn sp ch
cho n cp v chng sao cho các ông ngi xen k các bà và không có cp v chng nào
ngi cnh nhau. Hi có tt c bao nhiêu cách xếp ?
G ii: Gi s phi tìm là M. Xếp cho các bà trưc (c mt ghế xếp thì m t ghế đ trng
dành cho các ông). S cách xếp cho các bà là 2«!. Gi s cách xếp các ông ng vi mt
cách xếp các bà là u, ta đưc s cách xếp là
M = 2n\ X u.
Vn đ còn li là đếm s ư.
Đánh s các bà (đã xếp) t 1 đến n, đánh s các ông tương ng vi các bà (ông i là
chng bà i), sau đó đánh s các ghế trng theo nguyên tc: ghế s i nm gia bà / và bà
;+ / (đ tin trình bày, các phép cng ch s trong phn này đu đưc hiu là thc hin
v ò n g tròn, nghĩa là «+1 = 1). Mi cách xếp các ông đưc biu din bng m t phép thế
(p trên tp { 7,2, / vi quy ưc ịi) = j có nghĩa là ghế i đưc xếp cho ông. Theo
đu bài, phi tho mãn
) ĩii v. (p{i) (*)
Như vy ư là s tt c các phép thế 9 tho mãn điu kin (*). Trong toán hc, ư đưc
gi là sô'phân hố.
Xét tp hp tt c các phép thế (p ca {1, 2, n\. Trên tp này, gi p, là tính cht
(p{i) = i và Q là tính cht (f{i) = /+1. Đt p,,^ = Q, và ta đưc, theo nguyên lý bù tr
(tương ng vi 2n tính cht p¡)\
u ^ = n\-N, + N^- ...
22
Chươníị 2. Bùi toán dem
trong đó N¡. là tng s tt c các phép thế tho mãn k tính cht, ly t 2/ tính cht đang
xét.
Chú ý rng, không th xy ra đna thi tho mãn p, Q, hoc đng thi tho mãn
P^i và Q,, do đó trong các cách ly ra k tính cht t ĩn nh chl đang xét, cn thêm vào
điu kin: các p, và Q, hoc P^ và (2, không đưc đng thời có mt. Gi s các cách
này là ẹ(2/?, k) (nói riêng ẹ(2/7, k) = 0 khi k > n). Với mi cách ly ra k tính cht như
vy {k < /7), ta có (_n-k)\ phép thế tho mãn chúng. T đó nhn đưc N = g{2n, k)\n-k)\
\à
JJ,~tì\ - g(
2
n, (
2
ri,
2
).(n-
2
y - ... + {- \ )" íln, n) .
Bây gi còn phi tính các h s g{2n, k), k = 1 ,2
......
Xếp 2n tính cht đang xét trên mt vòng tròn theo th tự P), Qị, P
2
, Ö 2
......
P,I Qn<
ta thy rng g{2n, k) chính là s cách ly ra k phn tử trong 2n phn t xếp thành vòng
tròn sao cho không có 2 phn t nào k nhau cùng đưc lấy ra.
Đ tính i>{2n, k) ta gii 2 bài toán con sau đây:
Bài toán 1. Có bao nhiêu cách ly ra k phn t trong n phn t xếp trên đưng thng
sao cho không có 2 phn t k nhau cùng đưc ly ra ?
G ii: Khi ly ra k phn t, ta còn n-k phn t. Gia n-k phn t này có n-k+ \ khong
trng (k c 2 đu). M i cách ly ra k khong từ các khong này, s tưcmg ng vi mt
cách chn k phn t tho mãn yêu cu đã nêu. Vy s cách cn tìm là cí,-i+i.
Bài toán 2. Ging rihư bài toán 1, nhưng với n phn lử xp trên vòng tròn.
G ii: C đnh phn t a trong /; phn tử. Chia các cách lấy ihùnh 2 lớp:
1. Các cách mà a đưc chn, khi đó 2 phn t kê a s khng đưc chn và ta phi
ly ;-] phn t t /-3 phn t còn li. Các phn l này đưc xem như trên đưng thng.
Theo bài toán 1, s cách thuc lp này là Cf,rl-|.
2. Các cách m à a không đưc chn, khi đó b a đi, la đưa về bài toán ly k phn t
t n- phn t xếp trên đưng thng. Theo bài toán 1, sô’ c ácli thuc lp này là n-k .
Vy, theo nguyên lý cng, sô' cách cn tìm
cÌ:l-, + C * = - ^ C l , .
n - k
T kết qu ca bài toán 2, ta nhn đưc
2n .
g { 2 n , k ) ^ : ^ C L ,
2n-k
và s phân b ơ đưc tính bng
2 2 2
2/7- I 2/7-2 n
23
Phn . Lý thuyết t hợp
(Touchard J. 1934 France).
Dưi đây là mt vài giá tr ca u, mt ln na minh ho hin tưng bùng n t
hp:
/ 2 3
4
5 6
7
8
9 O
0
1 2
13
80 579
4738 43387 439792
2.4. Công thc truy hồi
Thông thưng, ngưi ta quan tâm đến nhng bài toán đếm, trong đó kết qu đếm ph
thuc vào m t tham s ti đu vào (mà ta ký hiu là /í), thí d các ' ơ, ... Vic
biu din kết qu này, như mt hàm ca n, bng mt s hu hn các phép toán, khng
phi là đơn gin. Ngưi ta nhn thy rng, trong nhiu trưng hp, vic tìm kiếm mt
công thc trc tiếp gia kết qu đếm và giá tr n là rt khó khân (hoc không th đưc),
trong khi đó, công thc liên h gia kết qu đếm ng vi n và các kết qu đếm ng vi
các giá tr n bé hơn li đcfn gin và d tìm. Nh công thc này và mt vài giá tr ban
đu, ta có th tính mi giá tr còn li khác. Công thc đó gi là công thc truy hi hay
công thc đ quy. Do tính k ế tha, công thc truy hi rt thích hp vi vic lp trình
trên máy tính. Nó cho phép gim đáng k đ phc tp cũng như gia tăng đ n đnh ca
quá trình tính toán.
2.4.1. Các thí d minh ha
Trưc tiên chúng ta xét mt s' thí d minh ho vic xây dng công thc truy hi đ gii
các bài toán đếm.
T hí d 1. Tính s m t th t D.
Gii: Đánh s thư và phong bì từ 1 đến n (thư / gi đúng đa ch nếu b vào phong bì 0-
M t cách b thư đưc đng nht vi hoán v ( ô | , a) ca (1 ,2
......
n}. Mt mt th t
đưc đnh nghĩa là mt hoán v ( |
......
a) sao cho , vi mi i. Thành phn | có
th nhn n-ĩ giá tr ngoài 1. Vi mi giá tr ^ (: 1) ca ũ, xét 2 trưng hp:
1. = 1, khi đó các thành phn còn li đưc xác đnh như mt mt th t ca n-2
phn t, tc là s các mt th t thuc loi này bng D_
2
-
2. a*. 1, khi đó các thành phn t 2 đến n đưc xác đnh như mt mt th t ca
n-ì phn t (xem giá tr 1 như là giá tr k), tc là s mt th t thuc loi này bng D.|.
T đó nhn đưc công thc
D = (n -1)(D ., + D ,). n>3.
24
Chươiìf> 2. Bãi íoán 'in
Các giá tr ban đu d dàng đưc tìm trc tiếp: D | = 0, D
Mi giá tr còn li đưc tìm đơn gin nh lut kế tha:
D , = ( 3 - 1 )( 0 + 1) = 2
D, = (4- 1)(1 + 2 ) = 9
D, = ( 5 - l)(2 + 9) = 44
=: ( 6 - 1K9 + 44) = 265
D, =(7-1X265+44) = 1854
D, -(8-1X 1854+265) = 14833
Đ công thc truy hi đúng c đi với n = 2, ta xem như D = 1.
Có th nhn đưc công thc trc tiếp qua công thc truy hi. Tht vy, t
D = (« - 1)(D.,+D,)
suy ra
D„ - «ơ., = - (/;
Đt v = D - n D.|, ta có
= v,, = -v, = ... = ( - i r 'v , - ( - i r
hay
D _ A,-I ^ (-1)"
nl {n-\)\ ~ n\
Cng các h thc trên, với /7 = /, 2, ta đưc
A , , 1 1 (-1)"
= 1 + ...+
n\ 1! 2! h!
1 1 (-1)"
và nhân lai công thc đã biêt: D = «!( 1 - +
1! 2!
m
T hí d 2. Trên mt phng, k n đưng thng sao cho không có 2 đưng nào song song
và 3 đưng nào đng quy. Hi mt phng đưc chia thành my phn ?
G ii: Gi s phn mt phng đưc chia bi n đưng thng là 5. Gi s đã k n-\ đưng
thng. Bây gi k thêm đưng thng th n thì s phn đưc thêm s bng s giao đim
đưc thêm cng vi 1. S giao đim đưc thêm là s giao đim m à đưng thng va k
ct n- 1 đưng thng cũ, nghĩa là bng n-1. T đó nhn đưc công thc truy hi
s s.| + «, n>.
vi giá tr ban đ u 5 = 1. T công thc này. d dàng tính mi giá tr ca s, « = 1, 2, ...
s,
1
+
1
=2
= 2 + 2 = 4
25
Plìđn I . Lý thuyết t h)
5, = 4 + 3 = 7
5, = 7 + 4 = 1 1
5, = 11 +5 = 1 6
5^ = 16 + 6 = 2 2
s" = 22 + 7 = 2 9
Đ tìm còng thc trc tiếp, ta cng các h thc Sf. = 5;.| + k vi k - 1,2, /?. Sau
khi kh các s hng ging nhau hai vế, ta nhn đưc:
n{n + \) ri^ + n + 2
s = 5 o + 1 + 2 + ... + /7 - 1 +
Á. Z.
Công thc truy hi đưc m rng mt cách t nhiên cho trưng hp có nhiu tham
s. Khi đó cn mt h các giá tr ban đu (mà chúng thưng đưc gi là các giá tr
biên). Vic tiếp cn các h s t hp như trình bày dưi đây là mt thí d ;ìm mt công
thc như vy.
T hí d 3. Tính h s t hp c\ .
Gii: Chn phn t c đnh a trong n phn t đang xét. Chia s cách chn tp con k
phn t ca tp này th à n h 2 lófp: cha a và không cha a. Nếu a đưc chn thì ta phi
b xung k-\ phn t t n-\ phn t còn li, t đó lp cha a gm z\ cách. Nếu a
không đưc chn thì ta phi chn k phn t t «-1 phn t còn li, t đó lp không cha
a gm C- cách, llie o nguyên lý cng, ta đưc công thc truy hi:
cí = d : , ' + c*_,
vi các giá tr biên đưc suy trc tiếp t đnh nghĩa:
c° = C = 1.
Rõ ràng vic lp trình theo công thc truy hi (xem tam giác Pascal) là hiu qu hơn
nhiu so vi vic lp trình theo công thc trc tiếp.
Phương pháp tìm công thc trc tiếp t công thc truy hi trình bày trong các thí d 1-3
đưc gi là phương pháp khử. Không phi lúc nào cũng d dàng kh đưc công thc
truy hi đ đưa đưc v công thc trc tiếp. Tuy nhiên, trong mt s trưng hp đc bit
ta có th đưa ra phương pháp tng quát đ gii công thc truy hi (tc là tìm công thc
trc tiếp cho s hng tng quát ca dãy s tho mãn công thc đã cho).
T hí d 4. (Bài toán tháp Hà ni). Trò chơi tháp Hà ni đưc trình bày như sau: C 3
cọc a, b, c. Trên cc a mt chng gm n cái đĩa đường kính gim dn l ới lên
trèn. Cn phi chuyn chng đĩa t cc a saníị cc c tuân th quì tắc: mi lần ch
26
ClìKơiì 2. B ài toúìi dếììì
chuyn
1
đĩa Vil ch đưc xếp đĩa có cha'rng kính nhó n l(hi Irên đĩa c đưng kính lớn
hơn. Troni> quá trình chuyn c phép dùng cọc h làm cọc trung gian Bài toán đt ra
là: Tim s ln di chuyn đĩa ít nht cán thc hin đ thc hin xong nhim v đt ra
trong trò chơi tháp Hà ni.
G ii: Gi lĩ là ' ln di chuyn đĩa ít nht cn thc hin đ gii xong bài toán tháp Hà
ni. Ta xây dng công thc đ qui đê tính h. Rõ ràng:
h, = \.
Gi s n > 2. Vic di chuyn (ĩĩa grn các bưc;
(i) Chuyn /7-1 đĩa t cc a đến cc b s dng cc c làm trung gian. Bưc này đưc
thc hin nh gi thiết quy np.
(ii) Chuyn 1 đĩa (đĩa vi đưng kính ln nht) t cc a đến cc c.
(iii) Chuyn /7-1 đĩa t cc h đến cc c (s dng cc a làm trung gian). Bưc này
đưc thc hin nh gi thiết quy np.
Bưc (i) và (ii) đòi hi gii bài toán tháp Hà ni vi /ỉ-1 đĩa, vy s ln di chuyn đĩa
ít nht cn thc hin trong hai bưc này là 2/.|. Do đó ta có công thc đ qui sau:
/?=/;.,+ \,n>2.
S dng công thc đ qui và điu kin đu va tìm đưc đi vi h ta có th d dàng
chng minh bng qui np là
h = 2"-ì,ii>ì.
2.4.2. Gii còng thc truy hi luyếii ííili thun nht h sò hng
Xét công thc truy hi tuyến tính thuii nht h s hng bc k:
+ C2.2 +...+ C'A.*., (1)
trong đó C|, Cj
.....
q là các hng s, q 0.
Ta cn tìm công thc trc tiếp cho sô' hng a ca dãy sô' \ a] tho mãn công thc
(1) (dãy s như vy s gi là nghim ca cng thc truy hi đã cho). Rõ ràng, dãy s
a,,] tho mãn công thc (1) s đưc xác đnh duy nht, nếu như nó phi tho mãn k
điu kin đu sau:
<^0 Cq, | = C|, (2)
trong đó Cq, C,C,_i là các hng s. Ta tìm nghim dưi dng
a = r" , (3)
trong đó r là hng s. Dãy s {a xác đnh theo công thc (3) s tho mãn (1 ) nếu / là
nghim ca phươnp trình:
27
Phì . Lý thuyết t hp
= 4 - C 2 r '" ' + . . . + r ,
h a y là
/ - c\ - C2 - . . . - Q = 0. (4)
Phương trình (4) đưc gi là phương trình đc trưng ca công thc (1), và nghim ca
nó đưc gi là nghim đc trưng. Chúng ta s xét cách s dng nghim đc trưng đ
xây dng công thc nghim dưi dng hin. Trưc hết chúng ta xét trưng hp riêng,
khi k = 2. Sau đó các kết qu s đưc phát biu cho trưng hp "ng quát.
Đnh lý 1. Cho Ci, C' 2 ìà các hng s thực. Gid s phương trình r - Ti r - C
'2
- 0 hai
n^lĩiệm phán hit \ Khi đó dãv s \a,, I Icì nghim ca công thc ĩriiv hồi
,., + C2 a,,2
khi và ch khi
= a / l + (5)
n = Q, 1, trong đó ơ , Ơ
2
là các hng số.
Chng m nh. Trưc hết ta chng minh rng nếu ì\ và là hai nghim phân bit ca
phương trình đc trưng, và a, , «2 là các hng s, thì dãy s \a] xác đnh bi công
thc (5) là nghim ca công thc truy hi đã cho. Thc vy, do r, và ì
' 2
là nghim đc
trưng nên
= c, r, + C2 , /'2 ^ = c , / - 2 + C' 2
t đó suy ra
Í'| + ¿'2 « « . 2 = C| ( « I + « 2 ' 2 " ' ) + + « 2 /V "^)
= or, r, + C2) + «2 r2 '\C /2 + C2)
= + «2
= a , r," + «2 '-2"
= a.
Bây gi ta s ch ra rng nghim [a\ ca h thc = C| a.| + C2 .2 luôn có dng (5)
vi p O nào đó. Thc vy, gi s {a\ là nghim ca h thc đã cho vi điu kin đu
= C ( ) , Ơ = C , (6 )
ta ch ra rng có th tìm đưc các s , a^ă cho (5) là nghim ca h thc vi điu
kin đu này. Ta có
o = Co = a, + « 2 ,
a, = c , = a,/-, +
28
Chươìií 2 . B ii toán dếm
Gii h phương trình tuyến tính ph thuc hai n a,, a, thu đưc, do T ^ /*2»
đưc nghim duy nht
or, = (C, - C / -2 )/(/, - / 2 ),
«2 = (Co /, - c , )/(r, - /,).
(7)
Vi nhng giá tr ca a, , GC
2
va tìm đưc, dãy || xác đnh theo (5) là nghiêm ca h
thc đã cho vi điu kin đu (6). Do h thc đã cho cùng vi điu kin đu (6) xác
đmh duy nht m t dăy s, nén nghim ca .l thc cưc clio bi ccng ihCc (5). Đnh
đưc chng minh.
Thí d 4. Dãy Pibonaci trong toán hc đưc đnh n g h ĩa bng h thc truy hi:
+ /^ 2. n > 2,
= F, = 1.
Tim công thc hin cho
G i: Gii phương trình đc trưng:
r - /* - 1 ==0,
ta thu đưc hai nghim
\ + s
r. =
/2 =
\-4 l
và công thc hin có dng:
F = + QÍ2.(/-,)"
trong đó « I , «2 là các hng s cn xác đnh t các giá tr ban đu Fq, Fị. T công thc
(7), ta có:
1 I+V5 1 I-V 5
a, =
Vs 2
«2 =
s 2
và nhn đưc
/
/ r~\
1 + V 5\
rt+1 ^
V
i 2 1 -
2
/
Mt điu lý thú là công thc này phi dùng các phép toán vô tỉ đ biu din mt giá tr
nguyên.
Đnh lý 1 không áp dng đưc khí phương trình đc trưng có nghim kép. Trong
trưng hp đó ta cn s dng kết qu ca đnh sau.
29
Phân . íhiívt ĩhp
Đ nh lý 2. Cho
C,
C
2
Ici các lĩầnq s thực, C'2 ^ 0. Giả s phương trình - C'| r - c\ - 0
có nghim kép ì\y Khi đó dãy s a } nghiệm ca côni ĩlìc dqui
^«-1 + ^n-2
khi ch khi
r/ - 0 , 1, ĩrong đó ,
0 2
cức hng sei
C hng m inh. Hoàn toàn tương t như chng minh đnh 1.
T hí d 5. Tim nghim cho công thc truy hi
= 6 - 9 .2
v i đ iu k i n đ u 0 () = ] và c/| = 6.
G ii: Phương trình đc trưng - 6 r + 9 = 0 có nghim kép r = 3. Do đó nghim ca
h thc có dng;
a - a, 3" +02 11 3".
Đ tìm « |, «2 - s dng điu kin đu ta có
= 1 = ơ , ,
(7, = 6 = «I . 3 + « 2 . 3.
Gii h này ta tìm đưc «1 = 1 và Ơ
2
= \. T đó nghim ca h thc đã cho là;
a = 3" + n 3".
Đnh lý 3 sau đây là s tng quát hoá kết qu ca đnh lý 1 cho trưng hp h thc
đ qui tuyến tính thun nht h s hng hck> 2.
Đnh lý 3. Cho C|, Cj,c là các sô'(hc. Giá s phương trình đc triúĩg
- C, /*' - - ... - c, = 0
có k ní>liim phân hiệt ì\, ì'
2
, 'f.. Khi đó dãy ' {aj ni>him ca hthức
+ Cjfl,,., +...+
khi ch khi
a = a, /V' + «2 /'2" + /V'
vi /! = 0, 1, 2
.
trong đó « I , Ơ2, ơ các hng s.
C hng m inh; Tương t như chng minh đnh lý 1.
30
Chưc/í; 2. Bcii toán déhi
T h í d 6. Tim nghim ca h thc
a = 6 _, - 11 + 6
vi điu kin đu
= 2, ơ = 5. Ch = 15.
G ii; Phươpg trình đc trưng
- 6 r V 11 / - 6 = 0
có 3 nghim r, = 1, ì
'2
= 2, /, = 3. Vì vy, nghim có dng
a = a, 1" + «2 2" + 3".
S dng các điu kin đu ta có h phương trình sau đây đ xác đnh các hng s a ,, Ơ2,
a,;
í/d = 2 = «I + «2 + a,
í/, = 5 = «I + 0 ^ .2 + y 3
a , = 15 = «I + «2-4 + « ,.9 .
Gii h phương trình trên ta ihu đưc | = 1, = -1 l à «3 = 2. Vy nghim ca h
thc đã cho là
a = 1 - 2" + 2. 3".
C h ú ý: Vic tìm nghim ca h thc (1) trong trưiig hp tng quát dn v vic gii
m t p h ư ơ n g trìn h b c k\
/ - r , / - ' - ... - cv = 0
mà vic biu din nghim ca phương trình này qua mt s hu hn các phép toán, như
đã biết, khôn? phi lúc nào cũng làm đưc vi k > 5 (đnh Abel).
2.5. Phương pháp hàm sinh
2.5.1. Hàm sinh và bài toán đếm
Gi s {/ I /? = 0, 1,2 , .... là mt dãy s. Ta viết dãy này như là dãy vô hn phn tử,
tuy nhiên ta coi rng nó bao gm c trưng hp dãy hu hn. Nếu /Q, /?, là dãy
hu hn, thì ta s biến nó thành dãy hn bng cách đt /;, = 0, i> m .
Đnh nghĩa. Hcim sinh (.v) ca dãy s h 1 /? = 0, 1,2,....} à chui hạn
31
Phn . ĩhuyếi l h)
00
g) = h,, + /ĩị .V + /Ĩ2 + ... = .
/=0
Như vy hàm g{x) sinh ra dãy s đã cho như là dãy các h s ca nó. Nếu dãy là hu
hn thì s tìm đưc m sao cho = 0, / > m. Trong trưng hp này (A') là mt đa ihc
bc m.
Thí d 1. M t trong nhng ngun gc dn đến đnh nghĩa hàm sinh chính là đnh lý v
khai trin nh thc; Hàm
gW = (l +A-)"'
sinh ra dãy các h ' t hp
[h^= C{m, k), -0, 1,..., ni]
bi
(l + x)"* = ^C (w , :)x^ .
/t=0
T h í d 2. Hàm
g(A') = 1/(1-.r)
sinh ra dãy
1 ,1 ,1 ,...
D dàng chng minh điu đó bàng cách thc hin phép chia:
l/( l-x ) = 1 + x + x^ + ...
T h í d 3. Vi ^ > 0, hàm
gix) = 1/(1-X)*
sinh ra dãy
{C{n+k-\,ny.n = 0, 1 ,2 ,...} .
Như vy h s th n s là s kh năng chn n vt t k loi đ vt. Thc vy, ta có
l/ ( l- x / =[ l/(l-x ) f = (l +x + x^ + ...ý.
Nếu ta khai trin biu thc này bng cách thc hin nhân phá ngoc, thì s ln xut hin
s hng x" s bng s nghim nguyên không âm ca phương trình
í, + ¡2 + ... + t, = n,
rnà ta có th dé dàng tính đưc là C{n+k-, n).
Cìiùĩní 2 . Bài toán dem
Ví d này có th gi ý cho ta cách giai nhieu bãi toán đếm. Chng hn xét hàm sinh
,t>(.v) = ( 1 + .V + .r + .V*) (1 - r + .r ) ( 1 + ,v + + .r + x'*).
Gi s .v", x^', y tương ng là các s hng láy t các tha sô' th nht, hai, ba ca vế phi,
điu đó có nghĩa là 0 < í/ < 3, 0 < /; < 2, 0 < C' < 4. Khi khai trin vế phi các tha s này
s cho ta s hng y , vi n = u + h + c. Như vy h s ca trong ^(.v) s là s nghim
nguyên không âm ca phương trình
/ == í/ -1 - h -I- c
thoá mãn
0<a<3,0</?<2, 0<r<4.
Suy ra h s này cũng cho ta sô' cách chn n bông hoa t 3 bông cúc, 2 bông layơn và 4
bông hng.
Tt nhiên vic s dng hàm sinh đ gii bài toán đếm s đòi hi nhiu tính toán khi
thc hin phép nhân các đa thc, và không thích hp cho vic tính tay. Tuy nhiên, vic
đ ó li c ó th th c h in n h a n h ch ó n g trên m á y tín h , và vì th ế h à m sin h s là m t cô n g c
hu hiu đ gii nhiu bài toán đếm trên máy tính. Hcín na hàm sinh s còn cng c
hu ích đ nghiên cu các bài toán đếm mt cách tru tưng.
Ta dn ra mt sô' khai trin đi sô' rt hay s dng trong vic s dng hàm sinh:
//(l-.v ) = A-^ (1 + .V + A' + ...) = + ...
('l-y"')/(|-.v )= 1 +.v + .x' + ... +.v^.
l/(l-.r^)= 1 +,v" + .v'+.v' + ...
x/{ 1 = x{ I + + ..v' + + ...)= .r + x + x* + / + ...
T hí d 4. Có bao nhiêu cách chn ra n qu t 4 loi qu: táo, chui, cam và đào (mi
loi đu có s lưng ít ra là /;) mà trong đó có mt s chn qu táo, s l qu chui,
không quá 4 qu cam và ít ra 2 qu đào?
G ii. Hàm sinh đ gii bài toán này
( 1 + + ...) (x + ,r' + y + ...)( 1 + ,v + + X*) {x^ + + A'' + ...)
Trong công thc trên có 4 tha s đ đếm s qu táo (các s mũ chn), chui (s mũ
l), cam (ch có đến s mũ 4) và đào (s mũ bt đu t 2). Hàm sinh s là
J?(.v) = [l/(1-A-^)] [.v/d-A-^)] [(I-A'’)/(l-.v)] [A^/(l-,r)]
33
Phn I . Lý ìỉuyếĩ t hợp
Câu tr li ; S cách cn đếm là h s th /7 trong khai trin (.v) dưi dng chui lu
tha. Tuy là chúng ta không có câu tr lời bng s, nhưng hàm xây dng đưc cha d
li u đ c ó th lp trình trên m á y tín h đưa ra b n g đ á p s ch o c á c g iá tr c a n m à ta
mong mun.
Trong nhiu trưng hp, vic khai trin hàm sinh dưi dng chui lu tha có thế thc
hin đưc bng tay, chúng ta có th thu đưc công thc đếm dưi dng hin.
T h í d 5. Tim hàm sinh cho s nghim nguvên dương l ca phươnp, trình
t + Í2+ ... + = lì.
G ii. Hàm sinh cn tìm
»(.ĩ) = u + .r + ,r + X + ...)*
= [.y(1 + .v^ + a- + / + ...)]*
= [.V(l-A-^)] = , / ( l - y .
T h í d 6. Tim hàm sinh cho /? là s cách chn ra /7 qu t 4 loi qu; táo, chui, cam
và đào (mi loi đu có s lưng ít ra là n) mà trong đó có mt s chn qu táo, sô'
lưng chui chia hết cho 5, không quá 4 qu cam và không quá 1 qu đào?
G ii. Hàm sinh có dng
g(x) = ( 1 + + / + / + ... ) ( ! + A'' + -v" + A-'- + ...) ( 1 + .V + + X*) ( 1 + A-)
= [1/(1-A-^)] [l/(l-x^)] [(l-xV (l-^ )] (1+A-)
= [l/((l-x )(l+ .r)] [l/(l-.v)] (l+.v)
= l/(l-.v)'
T đó ta có th tìm công thc hin cho lời gii, bi vì
00 00 00
n= 7=0 /7=0
Vy = n + 1.
Thí d 7. Tim hàm sinh cho s cách đi n (nghìn đng) s dng các loi giy bc mnh
giá 1 nghìn đng, 5 nghìn đng, 10 nghìn đng, 50 nghìn đng (gi thiết là ta có mt s
lưng không hn chế mi loi giy bc).
34
2. Bai toün dem
G iäi. So lugng den cän döi ra loai giäy bac 5 nghm döng phai chia het cho 5, so Itrong
ti^n cän doi ra loai g'y bac 10 nghm dong phäi chia het cho 10, so lugng ti6n cän döi
ra loai giäy bac 50 nghin dong phäi chia het cho 50. VI väy
- (1 + .V + A-^ + ...) ( 1 + A-^ + A-" +...) ( 1 + A-"' + A-' + ...) (1 + x ’" + x ' + ...)
= [1/(1-A-)] [ l / ( l . r ) ] [ l/ (l - A -'" ) ] [ l/( i- A '" )].
2.5.2. Ham sinh vä cöng thüc de qui
MiJC näy se trinh bäy phufong phäp häm sinh de tirn cöng tniic dudi dang hien cho so
hang tdng quät ciia däy sö' xäc dinh bai cöng thiic de qui. Nöi dung cüa phuong phäp cö
ihe' trinh bäy nhu sau. G ia sir ta cö |/ ; J lä däy sö dugc xäc dinh theo cöng thüfc de qui.
Xäy dung häm sinh cüa däy sö näy theo cöng thiic
g{x) - //o -f //, A- + /?2 4- ... - .
/=0
Su dung cäc tinh chät cüa däy sö (suy tir cöng thiic de qui xäc dinh nö) ta cö the tim
duac cöng thiic giäi tich cho häm sinh Tir cöng thiic tim duöc ta se khai trien häm
^i*(a') duöi dang chuöi luy ihira, vä tir do tim duöc cöng ihiic cho h.
Truöc het ta dua ra mot sö phep toän döi vai häm sinh. Giä sCr
O. X '
/(.v)= ,M .v)=
/-0 /=0
lä hai häm sinh cön a iä sö thuc. khi do
/=0
Xi
/=0
Tich Cösi cüa hai häm sinh g{.x) va/ ( a ):
trong dö
f(x\i'{x)= ,
/=0
k
"k = ö(i b, + a, + ... + a, h, = .
/=0
35
Phn . ìhuyếí ì hp
00
T gii tích ta biết rng nếu chui ^(A') = hi t lân cn đim 0 thì lng ca nó
/=0
g { x ) lu ô n là h à m g i i tích tron g lâ n c n n à y và
h, = f \0 ) / k \,k = 0, 1,...
co
Khi đó chui y hX^ chính là khai Irin M acloren ca hàm ^(x). Như vy có mt
¡^0
tương ng 1-1 gia mt hàm gii tích và m t chui hi t trong lân cn 0.
Trong vic áp dng hàm sinh ta thưng sư dng cng thc sau:
1 /(1 -« )" = c i , _ ,
k=0
mà trưng hp riêng ca nó là
1/(1 - rx) = \+rx + r^x^ + x + ....
T hí d 1. Gii công thc đ qui
/ì« = 4 /.'.2,
h, = 0,h, = \.
G ii. Gi ịỉix) = /í(, + /ỉ| .r + hj + ... là hàm sinh ca dãy s cn tìm. Ta có
g(x) = + /| .ĩ + /2 + ... + / y + ...
-4 g{x) = -A h ¡^ - 4/| r* -... - 4/_2 y -...
Do / = 4 /ỉ.2 và = Q, h = 1, nên cng hai đng thc trên ta thu đưc
^(x) - 4 g(x) = /o + /ỉ, X = X.
hay
g) = xH 1 - 4x") = l/( 1 - 2x){ 1 + 2x).
S dng phép tách phân thc, ta viết g(x) dưi dng
g{x) = a/( 1 - 2x) + b/(\ + 2x),
trong đó a \à h ]à các hng s cn xc đnh. D dàng tính đưc a = /4 và h = -1/4. T
đó ta có
36
C lìU ơ iì
2
. H à i to á n d ê h i
.í?(.v)= -^[1/(1 - 2 .r ) -l/(l +2,v)l
4
Vì vy
"^k = 0
h , = -[2^-(-2)% k = 0, 1,....
4
Thí d 2. Dãy s Fibonaci (Leonardo di Fisa hav Fibonaci (quáng ì 170 - 1226) nhà
toán hc Ý). Dãy sô' Fibonaci dãy sô đưc xác đnh bi công thc đ qui
L + L -2 , n > 2,
Ta s tìm công thc cho s hng tng quát ca dãy s nh phưoìig pháp hàm sinh.
Xét hàm sinh
Ta có
Vy
suy ra
fu )= Ì/,.» " -
/7 = 0
£ / * " = / ; , + /..V + £ / . r "
n= 0 ri^l
/7 = 2
= /o + /|-'^ + 4 /^(-V) - 1) +
F { x ) .
+ U '( + Ă F { x ) - \ ) + .x^ F { x ),
1
Fix) -
- x - a-2
Ta có (1- A - = (1 - a x) (1 + /?.v), vi a= ^ 3= ' ^
Viết li F{x) dưi dng
\-a x ]- /k
37
Plữin I . Lý thuyết tô'hp
ta tìm đưc A = a/{a - /ỉ), B = -J3/(a- p). Do đó
1
T đó
F{x) =
a - p
______
l
\- a x \ - /3x
=0
J
a - p V5
1 1 . ^ 1
2
\ /
r +1 / / \ ^ +
! - V 5 "
T hí d 3. S C a talan (Charles Catalan (1814-1894) là nhà toán hc Bỉ)
Sô' Catalan )à mt con ' quan trng trong l hp, là lời gii ca nhiu bài toán đếm t
hp quan trng. Ta dn ra đây mt trong nhng bài toán như vy. Xét vic tính tích
ca các rna trn:
A = Af ... A.
Do tích ma trn có tính cht kết hp nên có nhiu cách đ thc hin vic tính tích trên.
Ví d khi n = 3, ta có th thc hin vic tính tích
A - A2Aj
theo 5 cách sau
/l = = A(A,A,)A,)
= { A M A A ĩ) = {A,{A,A,)), =
Gi c là s cách thc hin vic tính A. D thy
Ca = 1, c, = I,
Nếu ta đt du ngoc phân tách đu tiên vào sau tha s Af.:
A = (A ,4,
thì do có q cách thc hin vic tính /4oA| ... A. và cách thc hin vic tính Ai.^Af
. ^ 2
...A , suy ra có q cách tính A trong trưng hp này. Do du ngoc phân tách đáu
tiên có th đt sau A, i = 0, 1, /7-1, nên ta thu đưc
/ 7 - 1
^11 ~ ^^^k^n-k~
k=0
Xét hàm sinh ca dãy s {c}: C(jf) = ^C x' . Ta có
/=0
38
Chươní 2. Bài toán dcm
C V )--- z +
m- /7=0 /-^Ovíỉ^O ) /'=0
Vì thế
C (.v )-.v e (,v )+ .
Gii phương trình này theo C(.v) ta thu đưc
c t v , .
.V
Ta phân tích J\x) - Vl - 4x thành chui da vào công thc Taylor
/( x ) = / ( 0 ) + X
Ta có
dx
( 1 - 4 x) 2 =
k\
X .
-~k^\
...
(l- 4 x )2 (-4 )^
vì thế
i - /t 1-A
= - 2 ^ 1.3 ...(2yt - 3)(1 - 4 x)2 = -2(k -lV -C-^2 ^
A '- ) = > - ^ 1 c 2; V -
k-^r
Thay vào công thc tính C(a'), trong dó rõ ràng cán chn nghim -
--------------
đ phù
X
hp vi điu kin C'> 0, ta thu đưc
^ /-A .k
co , 00 i
e w = j q V ' 2 - = ~ c
k= r
2k
T đó ta tìm đưc
k ^ \
Đ ý đến công thc Stirling tính gn đúng n\
n\^ ^íĩm
2k
39
Phì . Lý ĩhuvĩ t hp
ta có th tính gn đúng theo công thc:
2.6. Lit
Vic tìm mt công thc cho kết qu đếm, ngay c trong trưng hp công Ihc truy hi,
không phi d thc hin. Cho đến nay, còn rt nhiu bài toán đếm chưa có lời gii
dưi dng mt cn thc. Đi vi nhng bài toán như vv, ngưi ta ch còn cách ch ra
mt phương pháp lit kê, theo đó có th đi qua tt c các cu hình cn đếm. Rõ ràng
bn thân phưcfng pháp lit kê không ch ra đưc mt kết qu c th nào, nhưng qua nó,
ngưi ta có ih lp trình cho máy tính đin t đ nh máy tính đếm" h.
Đế thí d, ta xét mt cu hình t hp ni tiếng do hàng lot nhng công trình xunR
quanh nó và cho đến nay còn nhiu vn đ cn gii quyết, đó là các hình ch nht la
tinh.
Gi s s là mt Không mt tính tng quát, la có th gi thiết s là tp 1, 2,
n}. M ĩ h ìn h c h n h t la tin h trên 5 là m t b n g /; d ò n g , C c t , s a o c h o m i d ò n g c a
nó là mt chnh hp không lp chp q ca s và mi ct ca nó là m t chnh hp không
lp chp p ca s.
Theo đnh nghĩa, la có p < n, q < n. Đc bit, trong trưng hp q = /1, mi dòng
ca hình ch nht la tinh là mt hoán vca s, sao cho không có m t ct nào đưc cha
phn t lp li. Hình ch nhl la tinh dng này đưc gi là chun nếu dòng đu ca nó
là hoán vị 1 , 2 , n.
Thí d
1 2 3 4 5 6 7
2 3 4 5 6 7 1
3 4 5 6 7 1 2
là mt hình ch nht la tinh chun trên tp 5 = {1, 2, 3, 4, 5, 6, 7 .
Gi L(p, n) là s hình ch nht la tinh p x /7, còn Kp, n) là s hình ch nht la tinh
chun p x/7. Ta có
L(y;,/) = n\K{jhn)
D dàng thy rng, s mt th t là s các hình ch nht la tinh chun 2x /7,
còn s phân b là s các hình ch nht la tinh chun 3x /1, vi 2 dòng đu
40
Chương 2. Bcì toán đếm
n~ì
n
Riordan J. (1946) đã chng minh công thc
KO,n) = C-Đn-,.Dk.U-2K
k=0
trong đó m = [n!2], U g- 1.
Bài toán đếm s hình ch nht la tinh vi sô' dòng nhiu hơn cho đến nay chưa đưc
gii quyết. Ngưi ta mi ch đưa ra đưc mt vài dng tim cn ca L(p, n) (Erdos p.
(1946), Y am am oto K. (1951)).
Nếu p = q - n, thì hình ch nht la tinh đưc gi là hình vuông la tinh. Mt hình
vuông la tinh cp n đưc gi là chun nếu có dòng đu và ct đu là hoán vị 1 2 ... n.
Thí d mt hình vuông la tinh chun cp 7
6 7
7 1
Gi / là s hình vuông la tinh như thế, IH C(3
L{n,n)^n\[n-\)\.
Vic tìm mt công thc cho / đến nay còn đ ng. Nhiig công thc tính K{p, n) cho
thy rng điu này không phi d. Tuy nhiên ta có th lp mt chương trình cho máy
tính, lit kê tt c các hình vuông la tinh chun cp n. Dưi đây là mt vài giá tr tính
đưc:
n
1
2
3 4
5
6 7
1 1 1 4
56
9408 16942080
41
Phcin . L \ í huyết ĩ ỉiợp
Bài tp
Nguyên lý cng và Nguyên nhán
1. Cho 5 ký t A, B, c , D, E.
(a) Có bao nhiêu xâu ký t đ dài 4 có th lp đưc t các ký tư đã cho. nếu không
cho phép lp li ký t?
(b) Có bao nhiêu xâu ký t trong (a) bt đu t B?
(c) Có bao nhiêu xâu ký t trong (a) không bt đu t B?
2. Cho X là tp n phn tử. Có bao nhiêu b có th l {A, B) tho mãn A Ç ß C X ?
3. Đoàn ch tch ca mt cuc hp gm 6 ngưi A, B, c , D, E, F cn bu ra Ban lãnh
đo gm 1 ch tch, 1 phó ch tch và 1 thư ký.
(a) Hi có nhiêu cách khác nhau?
(b) Có bao nhiêu cách mà trong đó m t trong hai ngưi A, B là ch tch?
(c) Có bao nhiêu cách mà trong đó E là thành viên ca Ban lãnh đo?
(d) Có bao nhiêu cách m à trong đó D và F là thành viên ca Ban lãnh đo?
4. Có bao nhiêu xâu nh phân đ dài 10 bt đu bi hoc là 101 hoc là 111?
5. Có 10 cun sách khác nhau, trong đó có 5 cun sách thuc lĩnh vc Tin hc, 3 cun
sách thuc lĩnh vc toán hc và 2 cun sách v lĩnh vc ngh thut. Hi có bao nhiêu
cách chn ra 2 cun sách có ni dung thuc các lĩnh vc khác nhau t 10 cun sách nói
trên?
6. Có 10 cun sách khác nhau, trong đó có 5 cun sách thuc lĩnh vc Tin hc, 3 cun
sách thuc lĩnh vc toán hc và 2 cun sách v lĩnh vc ngh thut.
(a) Hi có bao nhiêu cách xếp 10 cun sách này lên 1 giá sách?
(b) Hi có bao nhiêu cách xếp 10 cun sách này lên 1 giá sách sao cho tt c các
cun sách Tin hc đưc xếp phía trái giá sách còn hai cun sách v ngh thut đưc
xếp bên phi?
(c) Hi có bao nhiêu cách xếp 10 cun sách này lên 1 giá sách sao cho tt c các
cun sách thuc cùng lĩnh vc đưc xếp cnh nhau?
(d) Hi có bao nhiêu cách xếp 10 cun sách này lên 1 giá sách sao cho hai cun
sách ngh thut không đưc xếp cnh nhau?
7. Có bao nhiêu s có bn ch s có th to thành t các ch s 0, 1, 2, 3 , 4, 5 tho mãn
(a) không có ch s nào đưc lp li,
(b) các ch s đưc lp li,
(c) các s chn trong (b).
42
Chươn 2. Bài toán cUín
8. Trên cnh bên ca mt tam giác ta lấy n đim, trên cnh bên th hai ly m đim. Mi
mt trong hai đnh ca cnh đáy đưc ni vi các đim đưc chn trên cnh bên đi
din bi các đưng thng. Hi
(a) Có bao nhiêu giao đim ca các đưng thng nm trong đa giác?
(b) Các đưng thng chia tam giác ra làm bao nhiêu phn?
9. M t cán b tin hc do đãng trí nên đã quên mt khu ca phn m m máy tính ca
mình. May m án là anh ta CÒ.I nh mt khu có dng NNN-X>C, trong đó M\N lá các
ch s, còn XX ỉà các ch cái ly trona bng ch cái có 26 ch. Hi trong trưng hip
xu nht cn phi th bao nhiêu mt khu đ có th tìm iại mt khu đã đt?
10. Hi có bao nhiêu b có th t gm 3 tp X, X2, X, tho mãn
X, = ( 1 ,2 ,3 ,4 , 5 ,6 ,7 . 8 I và X, 0 X3 0 X3 = 0 .
Ví d: Hai b
x ,= { 1,2 ,3 1 , |1 ,4 ,8 ,X ,= 1 2 ,5 ,6 ,7 )
và
x, = {1 ,4,8 1 , (1 ,2 ,3 1 , {2 ,5 ,6 ,71
đưc coi là khác nhau.
Chnh hp, Hoán v, T hrp
11. Có bao nhiêu hoán v ca các ch cái trong XÛU ABCDEF mà trong đó có cha xâu
con DEF?
12. Có bao nhiêu hoán v ca các ch cái trong xâu ABCDEF mà trong đó có cha ba
ch cái D, E, F đng cnh nhau?
13. Có bao nhiêu cách xếp 6 ngưi vào ngi quanh cái bàn tròn (hai cách xếp không coi
là khác nhau nếu chúng có th thu đưc t nhau bi phép quay bàn tròn)?
14. Có bao nhiêu cách xếp 7 hc sinh nam và 5 hc sinh n ra thành mt hàng ngang
sao cho không có hai n sinh nào đng cnh nhau?
15. Có bao nhiêu xâu nh phân đ dài 32 mà trong đó có đúng 6 s 1?
16. Có bao nhiu xâu ký t có th to đưc t các ch cái
MISSISSIPPI
17. Có 8 cun sách khác nhau. Hi có bao nhiêu cách phân các cun sách này cho 3
hc sinh: Mơ, M ai, M n sao cho Mơ nhn đưc 4 cun còn Mai và M n mi ngưi
nhân hai cun?
43
Phn 1. Lý thuyết t hp
18. Gi s X là tp t phn t. Ta gi t hp lp chp k t t phn t ca X là mt b không
có th t gm k thành phn ly t các phn t ca X
Ví d: b, c , các t hp lp chp 2 t các phn t caX là
{a a), (a b), (a c), {b b), (b c), (c c ).
Chng minh rng s t hp lp chp k t t :
C ( :^ -M ,M ) = C { :f^ l, :).
19. Có 3 r đng các qu cu xanh, đ, tím. Mi gi ch cha các qu cu cùng mu và
mi gi cha ú ra là 8 qu cu.
(a) Có bao nhiêu cách chn ra 8 qu cu?
(b) Có bao nhiêu cách chn ra 8 qu cu mà trong đó có ít nht niĩ qu cu đ,
mt qu cu xanh, 1 qu cu tím?
20. Xét phircmg trình:
X| + X
2
+ X3 + X4 = 29.
(a) Hi phương trình đã cho có bao nhiêu nghim nguyên dưcmg?
(b) Hi phương trình đã cho có bao nhiêu nghim nguyên không âm?
Nguyên lý bù tr
1. Hi trong đon t 1 đến 1000 có bao nhiêu s hoc là s l hoc là s chính phương
2. Có bao nhiêu xâu nh phân đ dài 8 không cha 6 sô' 0 lin nhau?
3. Có bao nhiêu s có 10 ch s vi các ch s ch là 1, 2, 3 mà trong đó mi ch s 1,
2, 3 có mt ít nht 1 ln?
4. Có bao nhiêu xâu nh phân đ dài 10 hoc là bt đu bi 3 s 1, hoc là kết thúc bi 4
s 0?
5. Có bao nhiêu sô' nguyên dương nh hơn 10000 chia hết cho 7 nhưng không chia hết
cho 5 và 2?
6. Có bao nhiêu hoán vị ca các s t nhiên 1,2,...,10 mà trong đó 3 s 1, 2, 3 không
đng cnh nhau theo th t tâng dn?
7. Hi phương trình
44
Clìiíơ 2. Bài toán đếm
X + X
2
+ X, + X4 = 29
có bao nhiêu nghim nguyên không âm tho mãn
X| < 3 , X2 < 12, ,1 :3 < 5, X4 < O .
8. Mt lp gm 50 hc sinh làm bài kim tra gm 3 câu hi. Biết rng m i hc sinh làm
đưc ít nht 1 câu và s hc sinh làm đưc câu 1 là 40, câu 2 là 35, câu 3 là 30. Chng
m in h r l n g s h c sin h là m đ ư ơ c c 3 câu k h ô n g V'jt quá 27
H thc truy hi
1. Gii các h thc truy hi sau
(a) a = 2a. ,n> ,
ơo^-3.
(b) a = 5 ., - 6 a
, 2
,n>2,
o= l ,a , = 0 .
(c) a = 4 a_, - 4 ,n>2,
ŨQ = 6, a, = 8.
(d) a = 4 a,2 , « > 2,
o = 0, | = 4.
(e) a = aJA ,n>2,
ao= l,, = 0 .
2. Lp công thc truy hi cho s s cách chia mt hình ch nht kích thưc 2 X « ra
thành các hình ch nht con có cilh sĩlg song vi cnh ca hình ch nht đã cho và
vi kích thưc là 1 X 2, 2 X 1, 2 X 2. Gii h thc thu đưc.
3. Lp công thc truy hi đ đếm F là s xâu nh phân đ dài n không cha ba s 0 liên
tiếp. T đó tính Fq.
4. Lp công thc truy hi đ đếm Q là sô' chnh hp lp chp n t ba ch sô' 0, 1, 2
không cha hoc là hai s 0 liên tiếp h o c là hai s 1 liên tiếp. T đó tính Qf,. Gii h
thc thu đươc.
5. Xét m a trn vuông
(Q 1]
A =
a) Chng minh rng
45
Phn I. thuvết t hp
A' =
F F ^
^ «-1
F F
n ^ /7fl y
trong đó F,, là s hng th n ca dày s Fibonaci.
b) Tính det(/i"). T đó suy ra công thc: F.F - (F,f = (-1)".
Hàm sinh
1. Viết công thc dưi dng gii tích cho hàm sinh ca c á c dãy s sau
a) a = y \ / 2 = 0 , 1,2,...
b ) Ịí^o, ¿/¡,02^ ^ ÍO, 1,0, 1,...}
2. Tim công thc cho s hng tng quát ca dãy s j a^l có hàm sinh
a) G{x) = 1/(1 - 2x);
b) ơ(A-)= 1/(1 -x )^
c)ơ(.v)= 1/(1 +x-2x^).
3. S dng hàm sinh đ tìm công thc dưi dng hin cho dãy s cho bi công thc đ
qui sau đây:
a) = a + 2,Oo = -3;
b) 2a=a + a.ũo = 0 ,a , = 1;
c) a^2 = - 2a + 2(3)", o = 1 ; ^ 1 = 2.
46
Chươíí^ 3. Bai oún ton ỉui
3
BÀI TOÁN TN TI
3.1. Giới thiu bài toán
Trong mc trưc, ta đã tp Irung chú ý vào vic đếm s các cu hình t hp (s phn t
ca cc đi tưng t hp) thoa màn nhng tính chí nào đó, chng hn đếm s t hp,
chnh hp, hoán v, ... Trong nhim bài loan đó s ln ti ca các cu hình là hin
nhiên và công vic chính là đếm s phán t iho mãn tính cht đt ra, Tuy nhiên, trong
rt nhiu bài toán t hp, vic chí ra s ln tại ca mt cu hình tho niãn các tính cht
cho trưc là hết sc khó khăn. Cháng hn, khi mt k th cán phi tính toán các nưc đi
ca mình đ gii đáp xem liu có kh nãim thng hay không, hoc là mt ngưi gii
m t m ã c n tìm k iế m c h ìa k h o á giải c h o m t b c m t in ã m à an h ta k h ô n g b iế t liu đ â y
có đúng là bc đin tht đưc mã hoá ca đi phương hay không, hay ch là bc mt mã
gi ca đi phương tung ra nhm đm bo an toàn cho bc đin tht Như vy, trong
t hp xut hin mt vn đ th hai rt quan trng là: xét s tn ti ca các cu hình t
hp với các tính cht cho trưc. Các bài toán thuc dng này đưc gi là các bài toán
ĩổn tại t hợp.
47
M t bài toán tn ti t hp xem như gii xong nếu hoc ch ra mt cách xây dng
cu hình, hoc chng minh rng chúng không có. Tuy nhiên c hai kh năng đu không
phi d. Đ thy rõ s phc tp ca vn đ, dưi đây ta s xét mt sô' bài toán tn ti t
hp c đin ni tiếng.
3.1.1. Bài toá n v 36 sĩ qu an
Bài toán này đưc Euler đế ngh, ni dung ca nó như sau: có mt ln ngưi ta triu tp
t 6 trung đoàn m i trung đoàn 6 sĩ quan thuc 6 cp bc khác nhau; thiếu úy, trung
uý, thưng uý, đi uý, thiếu tá, trung tá v tham gia duyt binh sư đoàn b. Hi rng
có th xếp 36 sĩ quan này thành mt đi ngũ hình vuông sao cho trong mi mt hàng
ngang cũng như m i m t hàng dc đu có đi din ca c 6 trung đoàn và ca c 6 cp
bc.
Đ đơn gin ta s dùng các ch cái in hoa A, B, c , D, E, F đ ch các phiên hiu
trung đoàn còn các ch cái thưng a, b, c, d, e, f đ ch các cp bc. Bài toán này có
th tng quát hoá nếu thay con s 6 bi n. Trong trưng hp n = 4, mt lời gii ca bài
toán 16 s quan là
Ab Dd Ba Cc
Bc Ca Ad Db
Cd Bb Dc Aa
Da Ac Cb Bd
M t li gii trong trưng hp « = 5 là
Aa Bb Cc Dd Ee
Cd De Ea Ab Bc
Eb Ac Bd Ce Da
Be Ca Db Ec Ad
Dc Ed Ae Ba Cb
Do li gii ca bài toán có th biu din bi 2 hình vuông vi các ch cái la tinh
hoa và thưng chng cnh nhau nên bài toán tng quát đt ra còn đưc biết dưi tên gi
bài toán v hình vuông la tinh trực giao. Trong hai thí d trên ta có hình vuông la tinh
trc giao cp 4 và 5.
Euler đã m t rt nhiu công sc đ tìm li gii cho bài toán 36 sĩ quan thế nhưng
ông đã không thành công. Vì vy ông đã đ ra gi thuyết là cách xếp như vy không tn
ti. Gi thuyết này đưc nhà toán hc Pháp Tarri chng minh năm 1901 bng cách
duyt tt c m i kh năng xếp. Euler căn c vào s không tn ti li gii khi n=2 và
/2=6 còn đ ra m t gi thuyết tng quát hcm là: không tn ti hình vuông la tinh trc
giao cp n = Ak + 2. Gi thuyết này đã tn ti sut hai thế k, mãi đến năm 1960 ba
nhà toán hc M là Boce, Parker, Srikanda mi ch ra đưc m t li gii vi n = 10 và
Phn I . Lý thuyết t hợp
48
Chương 3. i toún tổn tại
sau đó ch ra phương pháp xây dng hình vuông la tinh trc giao cho mi n = 4k + 2,
vi ' > 1.
Tưng chng bài toán đt ra ch có ý nghĩa thun tuý ca mt bài toán đ hóc búa
th trí tu con ngưi. Thế nhưng gn đây ngưi ta đã phát hin nhng ng dng quan
trng ca vn đ trên vào quy hoch thc nghim, sp xếp các lch thi đu trong các
gii c quc tế, hình hc x n h ,...
3.1.2. Bài toán 4 mu
Có nhng bài toán mà ni dung ca nó có th gii thích cho bt k ai, tuy nhiên lời gii
ca nó thì ai cũng có th th tìm, nhưng mà khó có th tìm đưc. Ngoài đnh lý Fermat
thì bài toán 4 màu là mt bài toán như vy, Bài toán có th phát biu trc quan như sau:
chng minh rng mi bn đ trên mt phng đu có th tô bng 4 màu sao cho không
có hai nưc láng ging nào li b tô bi cùng mt màu. Chú ý rng, ta xem như mi
nưc là mt vùng liên thông và hai nưc đưc gi là láng ging nếu chúng có chung
biên gii là mt đưng liên tc.
Hình 1. Bn đ không tô đưc bi ít hcm 4 mu
Con s 4 không phi là ngu nhiên. Ngưi ta đã chng minh đưc rng mi bn đ
đu đưc tô vi s mu ln hơn 4, còn vi sô' mu ít hơn 4 thì không tô đưc, chng hn
bn đ gm 4 nưc trên hình 1 không th tô đưc vi s mu ít hcm 4.
Bài toán này xut hin vào khong nhng năm 1850-1852 t m t nhà buôn ngưi
Anh là Gazri khi tô bn đ hành chính nưc Anh đã c gng chng m inh rng nó có th
tô bng 4 màu. Sau đó, năm 1852 ông ta đã viết thư cho De M organ đ thông báo v gi
thuyết này. Năm 1878, Keli trong mt bài báo đăng Tuyn tp các công trình ca Hi
toán hc Anh có hi rng bài toán này đã đưc gii quyết hay chưa? T đó bài toán tr
thành ni tiếng, và trong sut hơn mt thế k qua đã có rt nhiu ngưi làm toán,
nghip dư cũng như chuyên nghip, đã c gng chng minh gi thuyết này. Tuy nhiên
49
Phơn . Lý huyếí t hp
mãi đến năm 1976 hai nhà toán hc M là K.Appel và W .Haken mi chiìg minh đưc
gi thuyết này bàng lĩiáy lính đin t. Tt nhiên mt chng minh vi s giúp đ ca
máy tính đin t không thc s tho mãn đưc nhu cu ca công chúng mun kim tra
tính đúng đn ca cách chng mình. Vì vy, chính hai tác gi trên vào cui nhng năm
1990 đã cho công b mt cun sách trình by về phương pháp chng minh ca mình
(cun sách dày trên 800 trang). Cũns vào nhng nm cui ca thế k 20, mt nhóm các
nhà toán hc Mv đã đưa ra mt chng minh cỏ ĩhkiếm ĩra hìí (ay\ Rt tiếc là chng
minh này cũng khòng phi là đơn gin. Cho đến nay các nhà toán hc vn đang n lc
nghiên cu đ tìm ra mt cách chng minh d hiu như bn thân ni dune ca bài toán.
3,1.3. Hình lc giác thn bí
Nãm 1910 Clifford Adams đ ra bài toán hình lc GÌác thn bí sau: trên 19 ó lc eiác
(xem hình v dưi) hãy đin vào các s t 1 đến 19 sao cho tng theo 6 hưng ca lc
giác à bng nhau (và đu bng 38).
Hình 2. Hình lc giác thn bí
Sau 47 năm tri kiên nhn cui cùng ông ta đã tìm đưc lời gii. Sau đó sơ ý
đánh mt bn tho ông ta đã tn thêm 5 nãm đ khôi phc li. Nãm 1962 Adams đã
công b li gii đó (xem hình 2 ).
Tht không th ng là đó là lời gii duy nht (nếu không lính đên các lời gii sai
khác nhau bi phép biến hình dơn gin),
3.1.4. Bài toán chn 2n đim trén lưi nxn đim
Cho mt lưi ô vuông gm nxn đim, Hi có th chn trong s chúng 2n đim, sao cho
không có 3 đim đưc chn nào là thng hàng hay không? Hin nay ngưi ta mi biết
đưc rl ít v li gii ca bài toán trong nhng lình hung không tm thưng. Câu hi
50
ChU(//i}> 3 . Bà i oán n l i
v s tn ti ca lời gii ca bài toán vi nhng giá trị lớn ca ì vn còn đ ng. Hình 3
cho mt lời gii vi n = 12:
Hình 3. Mt lời gii bài toán ca bài toán vi /7=12
3.2. Phương pháp phn chứng
M t trong nhng cách gii bài toán tn tại là dùng lp lun phn chng: gi thiết điu
đ n h c h n g m in h là s a i,
t
đ ó d án đ ến m áu thun.
Thí d 1. Cho 7 đon thng có d dài lớn hơn 10 và nh hơn 100. Chng minh rng
luôn tìm đưc 3 đon đ có th ghép llnli int tam giác.
G ii: Chú ý rng, cn và đ đ 3 đon có thế ghép thành mt tam giác là tng đ dài
ca 2 đon nh phi ln hơn đ dài ca don ln, ta sp các đon đã cho theo th t
tă n g d n c a đ d à i rt|, Ü
2
, a-i và ch n g minh r ng trong d ã y đ ã x ế p lu ô n tìm đ ư c 3
đon liên tiếp sao cho tng ca 2 đon đu lớn hơn đon cui, Gi thiết điu này không
xy ra, nghĩa là đng thi xy ra các bl đang thc:
<7| + Ü2 < í / ; , .
Ü2 + í/, < «4,
(fZ, + ¿Í4 < í/,,
04 + a, <
, + Ö6 < ÚT
T gi thiết |, Ũ
2
có giá tr ln hơn 10. ta nhn đưc í/, > 20. T Ü
2
> 10 và , > 20, ta
nhn đưc « 4 > 30, c như vy ta nhn đưc í/, > 50, > 80 và a-i > 130. Bt đng
thc cui cùng mâu thun vi gi thiết các đ dài nh hcfn 100 và điu đó chng minh
kết luân ca bài toán.
51
Phn 1. Lý thuyết t hợp
Thí d 2. Các đnh ca m t thp giác đu đưc đánh s bi các s nguyên 0, 1, , 9
mt cách tu ý. Chng m inh rng luôn tìm đưc ba đnh liên tiếp có tng các s là lớn
hơn 13.
G ii: Gi ,r,, X
2
, . .V|0 là các s gán cho các đnh ca 1, 2, . . 10 ca thp giác. Gi
s ngưc li là không tìm đưc ba đnh nào tho mãn khng đnh ca thí d. Khi đó ta
có
:, = X| + X
2
+ X3 < 13,
= X
2
+ X3 + ^ 4 < 13 ,
= X , + X|fj + X| < 1 3 ,
.'|Q = X|0 + X + X
2
ú 1 3 ,
T đó suy ra
k + k2 + . . . + <130.
Mt khác do
k + kj + . . . + k^o = 3(X / + X
2
+ . . . + .r,o)
= 3 (0 + 1 + 2 + . . . + 9)
= 1 3 5 ,
suy ra
135 = k + k2 + . . . + kQ < 130.
Mâu thun thu đưc đã chng t khng đnh trong ví d là đúng.
Thí d 3. Chng minh rng không th ni 31 máy vi tính thành mt mng sao cho mi
máy đưc ni vi đúng 5 máy khác.
Gii: Gi s ngưc li là tìm đưc cách ni 31 máy sao cho mi máy đưc ni vi đúng
5 máy khác. Khi đó s ọmg kênh ni là 5x31/2 = 75,5 ?! Mâu thun thu đưc đã
chng minh khng đnh trong thí d là đúng.
3.3. Nguyên Dirichlet
Trong rt nhiu bài toán t hp, đ chng minh s tn ti ca mt cu hình vi nhng
tính cht cho trưc, ngưi ta s dng nguyên lý đơn gin sau, gi là nguyên lý Dirichlet;
Nguyên lý Dirichlet. Nếu đem xếp nhu hơn n đi ợng vào n cái hp, thì luôn tìm
được mt cái hp cha không ít hơn 2 đi ng.
52
Chương 3. Liài toán tòn tại
Chng minh. Vic chng minh nguyên trên chì là mt lp lun phn chng đơn
gin. Gi s ngưc li là không tìm đưc cái hp nào cha không ít hơn 2 đi tưng.
Điu đó có nghĩa là mi cái hp cha không quá mt đi tưng. T đó suy ra tng s
đi tưng xếp trong n cái hp không vưt quá n, trái vi gi thiết là có nhiu hơn n
đi tưng đưc xếp trong chúng.
Lp lun hoàn toàn tương tự, có th chng minh Nguyên Dirichlet tng quát sau.
N guyên lý D irichleí tng quát. Nếu đem xếp n đi tưì xào k cái hp, thì luôn m
đưc mt cái hp cha không ít hơn n/k di tượng.
Nguyên lý trên đưc nhà toán hc ni tiếng ngưi Đc là Dirichlet đ xut t thế k 19
và ng đã áp dng nó đ gii nhiu bài toán tn ti t hp. Các thí d dưi đây cho ta
thy nguyên lý đưc s dng như thế nào.
Thí d 1. Trong s 367 ngưi bao gi cũng tìm đưc hai ngưi có ngày sinh nht ging
nhau bi vì ch có tt c 366 ngày sinh nht khác nhau.
Thí d 2. Trong k thi hc sinh gii đim bài thi đưc đánh giá bi mt s nguyên
trong khong t 0 đến 100. Hi rng ít nht phi có bao nhiêu hc sinh d thi đ cho
chc chn tìm đưc hai hc sinh có kết qu thi như nhau?
G ii. Theo nguyên lý Dirichlet, s hc sinh cn tìm ià 102, ta có 101 kết qu đim
thi khác nhau.
Thí d 3. Trong sô' nhng ngưi có mt trên trái đt luôn tìm đưc hai ngưi có hàm
răng ging nhau, bi vì ch có tt c
2 '' = 4 294 967 296
hàm răng khác nhau mà sô' ngưi trên hành tinh chúng ta hin nay đã vưt quá 5 tỷ.
Thí d 4. Trong 100 ngưi có ít nht 9 ngưi sinh cùng mt tháng.
Gii: Xếp nhng ngưi cùng sinh mt tháng vào mt nhóm. Có 12 tháng tt c. Vy
theo nguyên lý Dirichlet, tn ti ít nht mt nhóm có không ít hơn 100/12 = 8,3... nghĩa
là 9 ngưi.
Thí d 5. Có năm loi hc bng khác nhau. Hi rng phi có ít nht bao nhiêu sinh
viên đ chc chn rng có ít ra sáu ngưi cùng nhn hc bng như nhau?
53
PììLÌn I . L ílìuvết t hợp
G ii: S sinh viên ít nht cn có đ đm bo chc chn có 6 sinh viên cùng nhn hc
bng như nhau là s nguyên nhò nht n sao cho /ì/5 > 5. S nguyên nh nht đó là ì -
5x5+1 = 26. Vy 26 là s lưng sinh viên nh nht đm bo chc chán là có sáu sinh
viên cùng hưng mt loi hc bng.
T h í d 6. Bin sô' xe máy phàn khi lớn gm 7 ký tự:
^4N - NNN - XX,
trong đó hai ký t đu là mã s đa danh, ba ký t tiếp theo s hiu xe, mi ký t
mt s t 0 đến 9, hai ký t cui là mã đăng ký gm hai ch cái ly trong bng ch cái
la tinh gm 26 ch cái. Hi rng, đ có 2 triu bin s xe máy khác nhau thì cn phi có
ít nht bao nhiêu mã đa danh khác nhau?
G ii; Vi mi mt mã đa danh ta có 10\26^ = 676.10'^ bin s xe máy khác nhau. Vì
vy đ có 2 triu bin s xe máy khác nhau, cn có ít nht
2.107(676.10^),
nghĩa là 3 m ã đa danh khác nhau.
Trong nhiu ng dng thú v ca nguyên Dirichlet, khái nim đi tưng và cái
hp cn phi đưc la chn mt cách khôn khéo hơn. Tiếp theo, ta s dn ra m t vài thí
d như vy.
T h í d 7. Trong mt phòng hp bao gi cũng tìm đưc hai ngưi có s ngưi quen
trong s nhng ngưi d hp là bng nhau.
Gii; Gi s ngưi d hp là n, khi đó s ngưi quen ca mt ngưi nào đó trong phòng
hp ch có th nhn các giá tr t 0 đến /-1. Rõ ràng trong phòng không th đng thi
có ngưi có s ngưi quen là 0 (tc là không quen ai c) và có ngưi có s ngưi quen
là n-ì (tc là quen tt c). Vì vy, theo sô' lưng ngưi quen ta ch có th phân n ngưi
ra thành /7-1 nhóm. Theo nguyên lý Dirichlet suy ra có ít nht mt nhóm phi có không
ít hcfn hai ngưi, tc là luôn tìm đưc ít ra là hai ngưi có s ngưi quen là bng nhau.
Bài toán này có th phát biu dưi dng ngôn ng hình hc như sau: trên mt phng
cho n đim , gia chúng có mt s đim đưc ni vi nhau bi các đon thng. Khi đó
bao gi cũng tìm đưc hai đim có cùng mt s cnh ni phát ra t chúng.
T h í d 8. Trong mt tháng gm 30 ngày mt đi bóng chuyn thi đu mi ngày í: nht
mt trn, nhưng không chơi quá 45 trn. Hãy chng minh rng phi tìm đưc mt giai
đon gm m t s ngày liên tc nào đó trong tháng sao cho trong giai đon đó đi chơi
đúng 14 trn.
G ii: Gi s Qj là tng s trn thi đu cho đến hết ngày th j ca đi. Khi đó
54
Cliif(/ni> B i toá n tí/ii l i
ũ, ÜJ
......
í/,,,
là dãy tăng các s nguyên dương đng thi ] < í/ < 45. Suy ra dãy
í/1 +14, + 14, , í/|J + 14
cũng là dãy tăne các s nguyên dươna 15 < í/, +14 < 59.
Tt c có 60 s nguyên dương
ơ|. ơ , a ( í/| + '4 6'2+14, ... í/,,,-^14,
trons đó tt c đu nh hơn hoc bang 59. Vì vv iheo nguvên lý Dirichlet, hai trong s
các s nguyên này phi là bng nhau. Vì các s í/|
......
là đôi mt khác nhau và các
s ơ| + 14
......
«3,,+ 14 cũng là đôi mt khác nhau, nén suy ra phi tìm đưc ch s ; và j
sao cho a¡ = 14. Điu đó có nghĩa là có đúng 14 trn đu trong giai đon t ngày ý+1
đến ngày /.
'/h í d 9. Chng minh rng, trong s ÌÌ+ 1 s nguyên dương, mi s không ln hơn 2/7,
bao gi cũng tìm đưc hai s sao cho s này chia hết cho sô' kia.
Gii: Gi các s đã cho
Viết mi mt s üj trong /+1 s trên dưi dng:
a¡ = , ./ = 1, 2 , n +1
trong đó là nguyên không âin. í/ , là s l. Các s í/|, Í/,. .... í/„^| là các s nguyên l
mi s không ln hơn 2n. Do trong đon t 1 đến 2n ch có n s l, nên t nguyên
Dirichlet suy ra là hai trong s các s í/|, q^. í/+i là bng nhau, tc là tìm đưc hai
ch sô' i và j sao cho q¡ = (¡J = q. Khi đó a¡ = 2 ^ 'f/, tij = 2^iq. Suy ra nếu k < kj thì ÜJ
chia hết cho a,, còn nếu k > kj thì í/, chia hết cho Uj.
T hí d 10. Trong mt phng cho 6 đim đưc ni với nhau tng đôi m t bi các cung
màu xanh hoc màu đ. Chng minh rng luôn tìm đưc 3 đim sao cho các cung ni
chúng có cùng m t màu (ta s nói là chúng to thành tam giác xanh hoc đ).
Gii: Chn đim p nào đó. T nó có 5 cung ni với 5 đim còn li. Theo nguyên lý
Dirichlet, có 3 trong s 5 cung đó phi có cùng mt màu, chng hn là màu xanh. Gi
s đó là các cung PA, PB, PC. Nếu như mt trong s 3 cung AB, AC, BC có màu xanh
thì nó cùng với hai trong sô' ba cung PA, PB, PC to thành m t tam giác xanh. Nếu
ngưc li thì tam giác ABC là mt tam giác đ.
55
Phn 1. Lý thuyết t hợp
T hí d 11. Trên mt phng cho 9 đim đưc ni vi nhau đôi m t bi các đon ni có
mu xanh hoc đ sao cho trong s 3 đim bt k bao gi cũng tìm đưc hai đim đưc
ni vi nhau bi đon ni màu đ. Chng minh rng trong s các đim đã cho luôn tìm
đưc 4 đim mà các đon thng ni chúng đu có màu đ.
Gii: Gi 9 đim đã cho là A, B, c, D, E, F, G, H, I. Xét 2 trưng hp:
a) Tim đuc mt đim là đu mút ca ít nht 4 đon ni màu xanh chng hn đim
đó là A và các đon màu xanh đó là AB, AC, AD, AE. Theo gi thiết, trong s các đon
ni bt k 3 đim nào cũng có ít nht mt đon m àu đ, suy ra các đon BC, BE, BD,
CD, CE, ED là màu đ. Vy B, c , D, E là bn đim cn tìm.
b) M! đim đu là đu mút ca nhiu nht 3 đon ni màu xanh. Trong trưng
hp này, không th tt c 9 đim đu là đu mút ca đúng 3 đon ni màu xanh (chng
minh tương t như trong thí d 3, mc 3.2), t đó suy ra phi tìm đưc đim (I chng
hn) là đu mút ca nhiu nht 2 đon ni m àu xanh. Khi đó I là đu mút ca ít nht
6 đon màu đ, chng hn lA, IB, IC, ID, lE, IF. Theo kết qu ca thí d 10, trong s 6
đim A, B, c, D, E, F phi có ít nht 3 đim, chng hn A, B, c, sao cho các đon ni
chúng có cùng màu, và t gi thiết suy ra màu đó phi là màu đ. Vy I, A, B, c là bn
đim cn tìm.
3.4. H đi din phân bit
Trong nhiu tình hung, s tn ti ca cu hình t hp ph thuc vào m t s điu kin
ràng buc các tham s ban đu. M t trong nhng hưng gii quyết là ngưi ta ' gng
phát hin ra các điu kin đó. Bài toán h đi din phán bit trình bày dưi đy là m t
minh ho cho hưng tìm kiếm này.
Gi s 5|, S2, s, là m t h các tp con ca m t tp hp s (các s, không nht thiết
khác nhau), Ta gi mt b có th tự Q/, Ü
2
, a, mt h đi din phán hit ca h
này nếu a, 6 5, và a, (/ TÍ j). H đi din phân bit đưc viết tt là TRAN
(transversal) và thành phn , ca h đưc gi là đi din ca tp con S {i = 1 , m).
T hí d. 5 = 11,2, 3 ,4 ,5 } , S ;= {2, 5}, 5 ,= 12, 5), 5 ,= { 1 ,2 ,3 ,4 1 ,5 ,= 1 1 ,2 ,5 } có
TRAN là (2, 5, 3, 1). M t TRA N khác ca h này là (5, 2 ,4 , I).
Không phi lúc nào cũng tìm đưc TRAN. Mt điu d nhn thy là nếu h đang
xét có TRAN, thì mi hp ca k tp bt k trong h phi có ít nht k phn t (vì luôn
tìm dưc k đi din khác nhau ca k tp đó). Nói khác đi, nếu tìm đưc k tp nào đó ca
h, mà hp ca chúng có ít hơn k phn t, thì chc chn h đang xét s không có
56
Chươiìíĩ J. Bai fOiin tn i
TRAN. Chng hn trong Ihí d trcn, nếu thay tp 5, cùa h đang xét bi tp (2, 5}, thì
h này s không tn ti TRAN, vì .S'| u u S4 = 12, 5 có ít hơn 3 phn tử.
p. Hall đã chng minh đưc điu kin cn va nêu, cũng đng thi là đ cho s tn
ti TRAN, qua đnh đánh giá cn dưi ca s TRAN dưi đây:
Đ nh H all. Gid s các tập con S/.
......
s, tììoâ mãn điéit kiện:
A '( .S /u 5 ,-^ u ...u 5 /) > : fl)
vi mi 1 < k < m. 1 < /, <
¡ 2
< ... < /; 1 m vìi mi íãp con này cha u nhất t phn t.
Khi :
. nếu t < m thì họ dang xét cỏ ít nlìđr r\ TRAN
. nếu t > m thì h đan^ xét ít nht t\l{t-m)\ TRAN.
Điu kin (1) đưc gi là điều kiện Hall và ta gi mt h con ca h 5|, S
2
, .... s, là ti
hn nếu đi vi nó bt đng thc ( 1) tr thành đng thc.
Chn m inh. Quy np theo m. Vi m = , Vd cỏ t = r\/{t-\)ì TRAN, đnh đúng. Gi
s đnh đúng cho mi h tp con ca s có ít hơn m tp. ta cn chng minh đnh
đúng cho h tp con gm m tp. Chia làm 2 trưng hp:
. Không có h con ti hn. Chn ÍV| mt phn t ca 5|. Loi nó ra khi $
2
, S,
s, (nếu có mt) và gi h nhn đưc là S
2
', 5 ,'
.....
s,„'. D dàng th lại h này tho
mãn điu kin Hall và mi tp thuc h có ít nht Í-I phán tử. ITieo gi thiết quy np h
này có ít nht (r-1)! TRAN khi /-1 < m-\ hay í < m và có ít nht (í-l)!/(/-m)! khi r-1 >
m-l hay í > rn. Mt khác, mi TRAN ca '2', 5 ,'
.....
s,' cùng vi |, xác đnh mt
TRA N cúa S, 5;
......
s, (d đai din cho Điu nàv tlúng cho mi cách chn |
trong sô' ít nht / cách chn nó t T đó nhn đưc đánh giá cn chng minh.
. Có mt h con ti hn. Không íĩuit tính tng quát, có th gi thiết h đó là S|, Sj,
S). [k < m). T s tn ti ca h con ti hn suy ra t < k, vây theo gi thiết quy
np, h S|, S
2
......
5*. có ít nht r! TRAN. Gi T'= (rt|.
......
ct) là m t TRAN như thế.
B các phn t ca T \ nếu có mt, ra khi các tp 5*^,1, s, và gi các tp thu đưc là
S\^.
......
S ,. Khi đó h 5
........
S , s tlio mãn điu kin Hall. Tht vy, nếu có mt
h con gm k' tp ca h đang xét, mà hp ca chúng ít hơn k' phn t, thì h con gm
k+k' tp ca h 5|.
......
s nhn đưc bng cách ghép h con này vi h 5|, S
2
, 5*.
s có hp ít hơn k+k' phn t và điu này là mâu thun với gi thiếtcua đ nh . Như
vy h 5 s có ít nht mt TRAN. Ly ít nht /! TRAN ca h S |. s.ghép
vi TRAN này, ta đưc ít nht t\ TRAN ca h S|, S j , s,. Đnh lý đưc chng minh.
Vic xét s tn ti cũng như xây dng TRAN có nhiu ng dng trong thc tế.
Dưi đây là mt s bài toán mà vic gii quyết nó đưc đưa v vic xây dng TRAN.
57
Phn I . Lý thuyết t hợp
Bài toán ngưi thi hành. Có m ngưi thi hành và n công vic. G i s vi mi ngưi th
i, ta biết đưc tp S là tp hp các công vic mà ngưi đó có th làm. Hi có th phân
công mi ngưi làm mt vic không?
Li gii ca bài toán đưc dn v vic xét s tn ti TRAN ca h S,} và vic xây
dng mt TRAN chính là xây dng mt s phân công như thế.
Bài toán chuyn m ch. Xét m t h thng chuyn mch đơn gin gm 2 nhóm các cc;
đu vào và đu ra. Ti đu vào s xut hin đòi hi v ni mch, Đòi hi này có th
đưc tho mãn bng cách ni nó vi mt đu ra nào đó. Tp hp các đu vào có đòi hi
ni mch đưc gi là danh mc đòi hi. Đu vào ni vi đu ra qua m t mch ni và
mch ni này cn phi không đưc bn nghĩa là nó chưa phc v cho đu vào nào. Các
inch ni như vy gi là danh mc t do. Không gim tng quát, ta có th coi rng danh
mc đòi hi gm m đu vào đu tiên và 5, là tp các ch s các mch ni t do mà theo
đó, đòi hi t đu vào / có th đưc chuyn ti mt đu ra. Nếu h 5|, 5, có
TRAN thì dòng vào gm m đòi hi có th đưc phc v bi thiết b chnh mch. Trong
trưng hp không tn ti TRAN thì cn phi điu chnh li các mch ni đ chn cách
ni khác.
Bài toán đám cưi vùng quê. Ti mt làng quê n có m chàng trai đến tui iy v. Vi
mi chàng trai /, ta biết tp 5, các cô gái mà chàng ta thích. Hi rng có th ghép mi cô
cho mi chàng m à chàng nào cũng va ý hay không? Rõ ràng bài toán đưc dn v vic
xét s tn ti TRAN ca h {S, }. Trong trưng hp tn ti, mi TRAN s cfng ng vi
mt cách ghép m ong mun.
Trong nhng trưng hp s tn ti ca TRA N là hin nhiên thì ngưi ta quan tâm
đến vic đếm hoc lit kê chúng. Dưi đây là hai thí d đếm TRAN m à kết qu đếm
đưc dn v các cu hình đã biết.
T h í d 1. Xét tp { 1 , 2 , n]. Đếm s TRAN ca h tp con
s, = s-{i},
1
</<«.
Gii: Mi TRAN là m t hoán v (|, Ü
2
, a) ca {1, 2 , «} sao cho a, pii vi mi i,
do vy có th đng nht m i TRAN vi m t mt th t trên tp đang xét. T đó nhn
đưc s TRAN cn đếm là D (s mt th t - xem chương 2).
T hí d 2. Đếm s TRAN ca h tp con ca tp {1, 2 , /z); S| = {1, 2 1, = 1, 2, 3},
5j= (2,3,4
.......
s„.,= {n-2,n-,nì,s = {n-l,n].
Gii: Đ bài toán xác đnh c vi n = ì, ta xem trong trưng hp này 5| = {1 Ị. Gi F
là s TRAN cn đếm (ng vi « > 1). Chia các TRAN này thành 2 loi:
58
Chươni 3. Bài toán tón li
1 đi din cho S. Khi đó các thành phn còn lại s là mt h đi din ca h
{2, 3}, {2, 3, 4 |, («-1, //}. Do vậy loi này có f.| TRAN.
2 là đi din cho s,. Khi đó bt buc 1 phi đi din cho S
2
và các thành phn
còn ii s !à mt h đi din ca h {3, 4. {3, 4, 5}, {rt-1, /2}.Vy loi này
có F .2 t r a n .
T đó nhn đưc h thc = F,,.! + F„,2. Các giá tr F = 1, p
2
= 2 đưc tính trc
tiếp. Đây cũng là h thc truy hi xác đnh các s Fibonaci (xem chưoìig 2).
3.5. Đnh Ramsey
3.5.1. Bài toán m đu
Trong mc 3.3 ta đã xét bài toán: Trong mt phng cho 6 đim đưc ni vi nhau tng
đôi mt bi các đon ni màu xanh hoc màu đ. Chng minh rng luôn tìm đưc 3
đim sao cho các đon ni chúng có cùng mt màu (ta s nói là chúng to thành tam
giác xanh hoc đ).
Lp lun đ gii bài toán đưc da trên nguyên Dirichlet.
Mt cách phát biu khác ca kết qu va chng minh : Trong s 6 ngưi ti mt
bàn tic luôn tìm đưc hoc ba ngưi đôi mt quen nhau hoc ba ngưi đôi mt không
quen nhau.
Trong mc này chúng ta s còn kho sát các vấn đ: Hi ít nht phi có bao nhiêu
ngưi đ chc chn tìm đưc hoc 4 ngưi đôi mt quen nhau hoc 4 ngưi đôi mt
không quen nhau? Hi ít nht phi có bao nhiêu ngiíưi cl chc chn tìm đưc hoc 5
ngưi đôi mt quen nhau hoc 5 ngưi đôi mt không quen nhau?
Con s nh nht va nói đến trong các câu hi va nêu đưc gi là các sô' Ramsey,
mang tên nhà toán hc ngưi Anh đã chng minh đưc đnh lý ni tiếng trong lý thuyết
tp hp là s tng quát hoá nguyên Dirichlet.
3.5.2. C ác s R am sey
Đ có th phát biu nhng kết qu tng quát hơn chúng ta cn đến mt s khái nim.
Đ nh nghĩa 1. Gi K b ^m hai tập V, E, íron^ đV là tp gm n đim còn E tập
các đon ni giữa tất cá các cp điểm trong E. Ta s hiệu K = {V, E). Ta s gi các
phn t ca V các đỉnh, và V tập đỉnh ca K^,. Mi đon ni hai đnh u, V e V s
được gi mt cnh ca K và hiệu là {u, v), và tp E được gi là tập cnh ca K.
59
Phn I . Lý thuyết t hợp
Ta có th phát biu li kết qu nêu trong mc trưc như sau: Gi s mi cnh ca '
đưc tô bi mt trong hai màu xanh hoc đ. Khi đó A"(, luôn cha hoc vi tt c các
cnh đưc tô màu xanh (gi tt là xanh) hoc vi tt c các cnh đưc tô màu đ
(gi tt ià K đ). Chúng ta s nói rng s 6 có tính cht (3,3)-Ramsey. Tng quát hơn
ta có đnh nghĩa sau.
Đ nh nghĩa 2. Giá s i và j hai s nguyên sao cho > 2 ,j> 2, S nguvên dươiìí m
tính cht {i,j)-Ramsey nếu K, với mi cnh đưc hi mt trong hai màu xanh, đ
luôn cha hoc K đ hoc Kj xanh.
T kết qu mc irưc ta thy 6 có tính cht (3,3)-Kamsey. Nhưng liu 6 có phi là s
nhó nht có tính cht này hay không? Gi s các cnh ca K đưc tô màu như ch ra
trong hình v dưi đây (đ - đm , xanh - nht).
Rõ ràng không th tìm đưc đ (đm) cũng như không th tìm đưc K xanh (nht).
Như vy s 5 không có tính cht (3,3)-Ramsey. D dàng thy rng mi s nguyên
dương nh hơn 5 cũng không có tính cht (3,3)-Ram sey. Vy 6 là s nh nht có tính
cht này.
Đ nh nghĩa 3. S Ramsey R(i,j) s nguyên dương nh nht có tính cht j)-Ramsey.
Chng hn, t kết qu va trình bày trên, ta có R(3,3) = 6, 6 có tính cht (3,3)-
Ramsey, và nhng s nguyên dương nh hcfn nó không có tính cht này.
T hí d 1. Tim R(2,l) - s nguyên dương nh nht có tính cht (2,7)-Ram sey.
Gii: Trưc hết ta tìm s nguyên dưcíng n sao cho vi mi cách tô các cnh ca K bi
hai màu xanh, đ luôn tìm đưc hoc K
2
đ hoc xanh. R{2J) là sô' nh nht có tính
cht này. Xét mt cách tô màu (tu ý) các cnh ca K-. Rõ ràng hoc là tìm đưc ít nht
60
C l i i f i i ' i i i ; Bài tuán ¡n l i
mt cnh ca K-, đưc tô màu đ. hoc lt c các cnh ca nó đu đưc tô bi màu
xanh. Nếu có cnh tô màu đ thì rõ ràng ta có đ. Còn nếu tt c các cnh đu tô bi
màu xanh thì ta có xanh. Vy s 7 có tính cht (2,7)-Ramsey, và vì thế/?(2,7) < 7.
Nhưng R{2J) không th nh hơn 7, bi vì nếu tô tt c các cnh ca K(, bi màu
xanh ta s không tìm đưc K
2
đ và cũng khng tìm đưc K-, xanh.
Vy R(2,l) = 1.
S dng p lun trong ví d va ìrình bày ta có th ch ra rng:
R{2,k) = k, vi mi k > 2.
Các tính cht cơ bn sau đây cúa s Ramsey Riij) có th chng minh bng các lp lun
tương t như trong các ví d đã trình bày:
1. RiiJ) = R(j,i
2. Nếu m có tính cht (/j)-Ranisey, thì mi sô' n > m cũng có tính cht này;
3. Nếu m không có tính cht (/,y)-Ramsey, thì mi s n < m cũng không có tính
chr này;
4. Nếu /, > /2 thì R J ) > RĩS-
Đ ý rng khi tìm s /?(/,;) ta cn xét s tn ti ca K đ hoc Kj xanh; nghĩa là
màu đ liên quan đến biến /, còn màu xanh liên quan đến biến j. Tương t như vy, khi
tìm RỢ.i), màu đ liên quan đến j còn màu xanh liên quan đến /. Do R,/) = R(J,i) nên ta
ch cn quan tâm đến hoc là R, có các cnh đưc tô bi cùng mt màu (gi tt là /?,
cùng màu), hoc Rj cùng màu.
Vic xác đnh ' Ranisey R{,j) đòi hi chúng ta phi tìm s nguyên ducfng nh
nht có tính cht (/j)-R am sey. Mt câu hi đt ra là: Liu s này có tn ti vi mi i >
2 ,j> 2 hay không? B đ và đnh dưi đây s tr lời câu hi đt ra.
B đ 1. Nếu i > 3 j >3 thì
R{i,j) < /? (/> !)+ /?(/-!,i), (1)
C hng m inh. Gi s m = R {ij-\) + R{i-\j). Ta s chng minh vng m có tính cht (/,/)-
Ramsey. Gi s các cnh ca K, đưc tô bi hai màu xanh, đ, và V là mt đnh ca K,.
Ta phân tp đnh V ca K, ra làm hai tập;
A -
t p t t c c á c đ n h n i v i V b i c n h đ ;
B -
t p t t c c á c đ n h n i vi V b i c n h x a n h .
Do
lAI + ISI = lAuSI = m - ì = RHJ-1) + R{i-J) -1
61
Phn J. L thuyết t hợp
nên hoc là \A\ > R(i-ÌJ) hoc là \B\ > Thc vy, nếu trái li ta có Iy4l < R-\J)
và Ißl < R{i,j-1), t đó suy ra điu phi lý sau
m - \ = \AkjB\ < R{i,i-1) + /?(/-1 j) -1 = /?7 -1.
Xét trưòíig hp 1/41 > /?(/-l j). Gi là b gm tp đnh A và tp cnh là các cnh
ni các đnh trong A ca K,. Ta s ch ra rng K^ hoc cha K, đ hoc cha xanh.
Do MI > /?(/-!,/■), nên hoc cha T,.| đ hoc cha Kj xanh. Nếu K,^ cha /?,.| đ thì
b sung vào nó đnh V và các cnh ni y với các đnh trong A ta thư đưc R. đ. Vy /^
1(1
v à d o đ ó K„ luôn cha hoc đ hoc Kj xanh.
Trưng hp \B\ > R{,j-\) đưc xét tương tự.
Như vy m có tính chi (/,ý)-Ramsey, l đó suy ra bt đng thc (i) đuc chng
minh.
T kết qu ca b đ s dng phép qui np toán hc ta có th chng minh kết qu sau
đây;
Đ nh lý 1 (Đ nh lý R am sey). Nếu i> 2 ,j> 2 các s nguyên dươn thì luôn tìm ợc
s nguyên dươnq với tính cht {Ì,j)-Ramsey {từ đó suy ra sô'R{iJ) là tồn tại).
C h n g m inh . G i s P(n) là mnh đ sau:
P{n): Nếu i + j = n thì luôn tìm được sô'nguyên vi tính cht (iJ)-Ramsey.
Khi / = 4, ta có i = j = 2, t kết qu ca ví d 1 suy ra P{4) là đúng. Gi s P(n) đúng,
ta phi chng minh P(n+l) cũng đúng. Gi s i + j = /+1. Suy ra / + (/-!) = n và (/-1) +
j =
n.
Theo gi thiết qui np, luôn tìm đưc s nguyên có tính cht (i, j - 1 )-Ram sey và s
nguyên vi tính cht (/-1, ý)-Ramsey. T đó suy ra các s R{i,j-\) và là tn ti.
T đó và t bt đng thc (1) suy ra s Rii,j) cũng tn ti. Vy / ’(/?+1) là đúng.
Theo nguyên lý qui np P(n) đúng vi mi / > 2,y > 2. T đó suy ra R{ij) luôn tn
ti vi mi i > 2 ,j> 2.
Chúng ta đã có các kết qu sau:
R{2,k) = R{k,2) = t,
/?(3,3) = 6.
Khi i > 2 ,j> 2, vic tìm các s R(i,j) càng khó khi i, j càng ln. Hin nay mi ch biết
rt ít các s R am sey. Chúng ta s tính thêm mt vài s Ramsey.
T hí d 2. Tim /?(3,4).
Gii: T b đ 1 ta có
62
Chiừrìỉíị J. ìài toán tồn tại
R{3A) < R{33) + ^(2,4) = 6 + 4=10.
Đ xác đnh xem có phi /?(3,4) < 10, la phi xét tt c các cách tô màu cnh ca Kq.
Nếu không cha K¡ đ cũng như khôrm cha K, xanh vi mt cách tô màu cnh ca
nó nào đó, thì R{3A) = 10. Còn nếu như ng với mi cách tô màu, Kg có hoc /<^3 đ
hoc xanh thì ta li phi xét vn đ đó cho K^. Vic xét tt c các cách tô màu cnh
ca không phi là d dàng, do có 36 cnh nén có tt c 2^* > 60x10 cách tô màu
khác nhau.
Rt m ay ta không cn khao sát các cách tô màu , vì có th s dng kết qu sau
đây:
Nếu / > 3, y > 3 và nếu Rj- 1 ) R{i- i j) các s chán thì
R{ij) < R{ij-) + R{i-ì,)- (2)
Chng minh bt đng thc (2) da vào chng minh ca Bổ đ 1.
S dng (2), khi i - Ĩ J = 4, ta thu đưc
/?(3,4) < ^(3,3) + R{2A) - 1 = 6 + 4 -1 - 9,
và như vy /?(3,4) < 9 .
Đ ch ra 8 không có tính cht (3.4)-Ramsey, xét cách tô màu Kg m ô t trong hình
v 2, trong đó các cnh lin nét đưc tô màu đ, còn các cnh đt nét đưc tô màu
xanh.
Rõ ràng không th tìm đưc Kj đ cũns như Kị xanh. Vy /?(3,4) = 9.
Ví d 3. Tim /?(3,5).
63
Phn I. L \ thuyết t hợp
G ii: T (1) ta có
/?(3,5) < /?(3,4) + /?(2,5) = 9 + 5 = 14.
Ta s chng minh RO,5) - 14, bng cách ch ra rng s 13 không có tính cht
(3,5)-Ramsey. V 'i3, các đnh ca nó đánh s t 1 đến 13. Tô màu đ cho cnh (i,j)
nếu I / - ý I =1, 5, 8 hay 12. Tô màu xanh cho các cnh còn i. Có th kirn tra đưc
rng vi cách tô màu đó "|3 không cha AT, đ cũng không cha K xanh.
Bng dưi đây cho ta nhng giá tr đã biết ca R{ij)
i \ j
2 3
4
5 6
2 2
3
3 6
4 4 9 18
5
5
14
2 5 - 2 7 4 3 - 5 2
6
6 18 3 4 -4 3
5 7 - 9 4
1 0 2 -169
7
7
23
> 4 9
> 7 6
8
8 28
> 5 3 > 9 4
9
9 36
> 6 9
Các s R(3,3), /?(4,3), /?(5,3) và ^(4,4) đưc tìm thy t năm 1955 bi A.M. Gleason và
R.E Gleenwood, R(6,3) - J.G. Kalbfleisch năm 1966, R,3) - J.E. Graver, J. Yackel
năm 1968, /?(8,3) - B. McKay và Z.Ke Min mi gn đây, R{9,3) - C.M. Grinstead và
S.M. Robets năm 1982.
3.5.3. Tng q u á t hoá
Các s Ramsey gii thiu trong mc trưc ch là mt trong h các s Ramsey. Trong
mc này chúng ta s xét mt h các s Ram sey tng quát hơn.
Chng hn, nếu ta tô màu các cnh ca K bi ba màu xanh, đ, tím, thì s n ít nht
phi là bao nhiêu đ chc chn tìm đưc hoc K đ, hoc xanh hoc tím? S /7
nh nht có tính cht như vy ta s ký hiu à i?(3,3,3;2). Con sô' 2 đưc viết niiư là mt
thành phn ca /?(3,3,3; 2) bi vì các cnh (đi tưng đưc tô màu) đưc xác dnh bi 2
đnh. Con s 2 này cũng có th thay bi mt s nguyên dương bt k. Ba s 3 cũng có
th thay bi các s nguyên dương tu ý đ có th thu đưc mt h mi các s Ramsey.
Ví d: /?(5,4,7; 2) là s nguyên dưcmg nh nht
n sao cho vi mi cách tô màu các cnh
ca bi 3 màu xanh, đ, tím K luôn cha hoc K đ hoc xanh hoc K-I tím.
64
C u (ơ n ^ 3. B i toà ì tn
Đ nh nghĩa 4, Gỉa s ¡¡, .... lâ các so niuyen dTiv^, ĩrong đó ij > 2. vcri mi j. s
ìiuyên dươỉì^ m được i lì có tính clìcíí (/;, .... 2)'Rarnsey nếu vi mi cách
mc)i các cìh ca K,, hi n ỉììàu 1, 2, .... n ln ĩìm đưc íroỉìíỉ nó K màu ij vi ít nht
mt j nào đó.
S nguyêr dương nh nhr với t'nh ch'it (/ , S, .. , 2)-Ramsey đưc gi là s
Ramsey /?(/|. /; 2).
Chú ý rng, nếu n = 2, sô' Ramsey /?(/].
¡ 2
; 2) chính các s Ram sey /?(/,, /2) trong
mc trưc.
Chúng ta lại có th đt ra câu hi là: Tn tại hav chăng các s Ramsey va đưc
đnh nghĩa? Câu tr li là khng đnh. Đ chng minh s tn ti ca các s Ram sey có
th s dng phươiig pháp chng minh bang quy np.
Chúng ta biết rt ít v các s Ramsey /?(/|,
¡ 2
......
2) khi n > 3. Tuy nhiên, nếu ij =
2 vi mi j, thì có th chng minh đưc rng: /?(2,...,2; 2) = 2. Khi mi > 3, cho đến
thi đim hin ti mi biết duy nht mt giá tr /?(3,3,3; 2) 17.
T hí d 4. (R.E. Greenwood, A.M. Gleason, 1955) Chng minh rng R(3,3,3; 2) = 17.
G ii. Xét mt cách tô màu nào đó các cnh ca Ấ'i7 bởi ba màu xanh, đ, tím. Chn V là
mt đỉnh nào đó ca K-. Trong s 16 đoạn nối V vi các đỉnh n li, theo nguyên lý
Dirichlet luôn tìm đưc 6 đon có cùng mt màu. Không gim tng quát có th coi các
cnh ni V vi các đnh u 2, 3, 4, 5, 6 c cùng màu d. Nếu có mt trong s các cnh
nối giữa các đỉnh 1 , 2 , 6 màu đ thì cạnh này ng vi dỉnh V lập thành đỏ. Nếu
trái li, 6 đnh 1, 2, 6 ch ni với nhau bi các cnh có hai màu xanh hoc tím, thì
theo ví d m đu trong s chúng luôn tìm đưc hoc xanh hoc tím. Vy, K-
luôn cha đ, xanh hoc tím. Do đó, y?(3,3,3; 2) < 17.
Đ ch ra /?(3,3,3; 2) > 16 cn xây dng mt cách tô màu sao cho không tìm
đưc ^3 cùng màu (xem trong cun sách ca c . Berge).
Có mt cách khác đ tiếp tc phát trin các s Ramsey và tiếp tc tng quát hoá các ý
tưng mà ta va xét. Xét bài toán m đu. trong đó ta xét s tn ti đ hoc xanh
trong Bt đu vi vi tp đnh V,Tã xét tt c các íp con 2 phn t ca V (tc là
các cnh ca và chia các tp con này ra làm hai h Cj và Cj. S 6 có tính cht (3,3)-
Ramsey nếu và ch nếu:
i) Tim đưc tp con 3 phn t ca V sao cho mi tp con 2 phn t ca nó đu
thuc vào Cj hoc
65
Phân I . Lý thuyết t hợp
ii) Tim đưc tp con 3 phn t ca V sao cho mi tp con 2 phn t ca nó đu
thuc vào C,.
Nếu coi C| là tp các cnh đưc tô màu đ và C2 là tp các cnh đưc tô màu xanh,
thì rõ ràng ta có tam giác đ khi và ch khi điu kin i) đưc thc hin và có tam giác
xanh khi và ch khi điu kin ii) đưc thc hin. Tuy nhiên trong cách mô t này chúng
ta không cn dùng đến khái nim cnh. Các tính chât đưc phát biu trong ngôn ng tp
hp và các tính cht ca ưil h các tp con ca nó. Cách mô t này cho phép \é t vic
phân các tp con có kích thưc r tu ý (không phi ch có 2) ra thành mt s các h con
(không nht thiết ch phân làm hai h C |, C 2 như trong ví d va nêu). Ta đi đến đnh
nghĩa tng quát sau ca s Ramsey
Đ nh n ghĩa 5. Gi s /|,
¡ 2
......
r các sniiiyên dươnq, troni dó n > 2, \'à /, > / \I
mi j. Sô'ntyén dươììĩ m đưc nói ìà rinh cht (/,, / ; r)-Ramsey nếu như mnh
đ sau y lù đúng:
Nếu s Ici tp m pn l và các tp con V phn củơ s đưc phán chia
vào n h C|, C
2
, c, thì với mt j nào đó tìm đưc tập con ca s
lực ng ij sao cho mi tp con r phn l ca nó đu thuc vào Cj.
S nguyên dương nh nht có tính cht (?|, / ; /-)-Ramsey đưc gi là s Ramsey
/?(/,, / ; r).
Đ nh lý 3 (R am sey , 1930). Nếu / |
......
/ các s nguyên dương, rong đó n > 2 v
ij> r với mi j, thì s Ramsey /?(/|, , r) luôn tồn ti.
Khi r = 1, s R (i|, i ; 1) có th xác đnh khá d dàng, bi vì chúng ta ch phi xét các
tp con 1 phn t ca s. Đnh lý dưi đây cho công thc tính s này.
Đ inh lý 4. R(ii, i; 1) = i, +...+ i - (n -1).
C h ng m in h. Đt
m = /, +...+ / -
Trưc hết ta ch ra rng m có tính cht (/|, .... /; r)-Ram sey. Ly s là tp m phn t và
chia các tp con 1 phn t ca nó ra làm n lp c
....
.
c. Trưc hết nhn thy rng phi
tìm đưc ch sýO sao cho \Cp\ > ijo (Nếu trái li, \C< vi mi j, thì IC^I < /- 1 . Suy ra
m = IC|I + ... +ICI < (/,-1) +...+ (/,,-1) = - n = m - \ ?!). Nếu ta ly /^0 phn t ca
thì ta có tp con ca s vi lc lưng sao cho m i tp con 1 phn t ca nó đu
thuc Cp. Điu đó chng t rng / ? ( / |, /; 1) < /, +...+ / - (/2-1).
Bây gi ta s ch ra rng m-\ = ;'j +...+ / - n không có tính cht / ; /-)-
Ram sey. Ly tp s gm /| + ...+ - n phn t. Phân các tp con 1 phn t ca nó vào n
66
C hươìì^ ĩ . B ù i ĩoán tn ĩ i
lp C], c sao cho lC) = ij - 1. Rõ ràng với cách phân chia này không th tìm đưc
tệp con ca s lc ợng sao cho mi tập con 1 phn l ca nó thuc cùng mt lfp
c'
Khi /| = ... = = 2, ta có
/?(2,...,2; D-/+ 1,
S kin này cho thy đnh lý Ramsey s tng quát hoá ca nguyên lý Dirichlet. Bi
tron.e ngôn ng ca s Ramsey, R{2.
.....
2; ]) = //+ 1 có ngnĩa là « + 1 là s nguyên
dương nh nht có íính cht sau; Nếư lp s có lực lưag // + 1 và nếu phân các phn tử
ca nó vào /7 tp C |, c„ thì phi tìm đưc tp con 2 phn t ca s sao cho các phn l
ca nó thuc vào cùng mt tp nào đó. Nói cách khác luôn tìm đưc ch s j sao cho
tp Cj có ít ra là 2 phn tử. Đó chính ni dung ca rmuyên lý Dirichlet.
67
Phn L Lý thuyếĩ t hợp
Bài tp
1. Trên mt phng cho n > 6 đim, khong cách gia các cp đim là khác nhau tng
đôi. Mi đim đưc ni vi đim gn nó nht. Chng minh rng mi đim đưc ni với
không quá 5 đim.
2. Mt trung tâm máy tính có 151 máy vi tính. Các máy ca trung tâm đưc đt tên bi
mt s nguyên dương trong khong t 1 đến 300 sao cho không có hai máy nào đưc
đt tên trùng nhau. Chng minh rng uôn tìm đưc 2 máv có tên )à các s nguyên liên
tiếp.
3. Các hc sinh ca mt lfp hc gm 45 nam và 35 n đưc xếp ra thành mt hàng
ngang. Chng minh rng, trong hàng đó luôn tìm đưc hai hc sinh nam m à gia h
có 8 ngưi đng xen vào.
4. 12 cu th bóng r đeo áo vi s t 1 đến 12 đng tp trung thành mt vòng tròn gia
sân. Chng m inh rng luôn tìm đưc 3 ngưi liên tiếp có tng các s trên áo là ln hơn
hoc bng 20
5. Chng minh rng trong sô' 10 ngưi bt k bao gi cũng tìm đưc hoc là hai ngưi
có tng s tui là chia hết cho 16, hoc là hai ngưi mà hiu s tui ca h là chia hết
cho 16.
6. Cn có ít nht bao nhiêu b có th t gm 2 s nguyên (, h) sao cho chc chn tìm
đưc trong s đó hai b (c, d) và {e,f) sao cho c - e vằ d - f\ các s có ch sô' tn cùng
bng 0?
7. 17 nhà bác hc đôi mt viết thư trao đi vi nhau v 3 ch đ, mi cp ch trao đi
vi nhau v 1 ch đ. Chng minh rng luôn rii đưc 3 nhà bác hc đôi m t viết thư
trao đi vi nhau v cùng mt ch đ.
8. Trong không gian cho 9 đim có to đ nguyên. Chng minh rng trong s 9 đim đã
cho luôn tìm đưc hai đim sao cho đon thng ni chúng đi qua đim có to đ
nguyên.
9. Chng minh rng trong s 10 ngưi bt k luôn tìm đưc hoc là 4 ngưi đôi mt
quen nhau và 3 ngưi đôi mt không quen nhau hoc là 4 ngưi đôi mt không quen
nhau và 4 ngưi đôi mt quen nhau.
68
C ìK ơ n i^ 4. Bí'ii ĩo ú n li k é
4
BÀI TOÁN LIT K
4.1. Giới thiu bài toán
Nếu như trong bài toán đếm (xein chưcĩng 2), ta ch đòi hi đếm s' cu hình t hp
bao nhiêu thì trong nhiu tình hung, ta còn phi cn ch rõ nhng cu hình t hp đó
nhng cu hình nào. Bài toán đưa ra danh sách tt cá càu hình t hp có th có, đưc
gi là hài toán lit t hp. Vì th, khác vi bài toán đếm tìm kiếm m t công thc cho
li giải, bài toán liệt kê li cần xác dnìì mt thut toctn để theo đó có thể lần lưt xây
dng đưc tt c các cu hình đang quan tâm. Rõ ràng có nhiu cách lit kê, tuy nhiên
chúng phi đm bo 2 nguyên tc:
không đưc lp li mt cu hình,
không đưc b sót mt cu hình.
Có th nói rng phương pháp lit kê là cách cui cùng đ có th gii đưc mt s
bài toán t hp hin nay. Khó khăn chính ca phương pháp này là s "bùng n t hp".
Đ xây dng chng 1 t cu hình (con s này không phi là ln đi vi các bài toán t
hp - xem li các s mt th t D,„ s phân b í/, s hình vuông la tinh /, ...) và gi
thiết rng mi thao tác xây dng mt khong 1 eiây, ta phi b ra quãng 31 năm mi
gii xong. Tuy nhiên với s phái trin ca máy tính đin t, bng phương pháp lit kê,
nhiu bài toán t hp đã tìm thy li gii. Mt khác, chính s n lc tìm kiếm nhng
gii pháp hu hiu cho nhng bài toán khó thuc lĩnh vc này, đã thúc đy mnh m s
phát trin ca nhiu ngành toán hc. Trong chương này, sau phn gii thiu khái nim
69
Phn 7. Lý thuyết t hợp
thut toán, chúng ta s trình bày hai phương pháp lit kê thưng s dng nht, đó
Thut toán sinh và đc bit là thut toán quay lui, mt thut toán có tính ph dng cao.
4.2. Thut toán và đ phc tp tính toán
Như đã gii thiu trên, ta hiu vic gii bài toán lit kê là xây dng mt thut toán đ
theo đó có th ln lưt xây dng đưc tt c các cu hình cn quan tâm. Vy cn hiu
thut toán là gì? Mc này dành đ gii thiu khái nim thut toán và mt s vn đ liên
q u a n c n th iế t c h o v i c trình b à y cá c c h ư ư n g sau.
4.2.1. Khái niin thut toán
Thut toán đã đưc biết đến t rt lâu. Bn thân thut ng Thut toán (Algorithm ) là
viết tt tên ca nhà toán hc thế k th IX: Abu Ja'fa M ohammed ibn M usa al-
Khowarizmi. Đu tiên, thut toán đưc hiu như là các qui tc thc hin các phép tính
s hc vi các con s đưc viết trong h cơ đếm thp phân. Cùng vi s phát trin ca
máy tính, khái nim thut toán càng đưc hiu theo nghĩa rng hơn và chính xác hơn.
Khái nim thut toán đưc đnh nghĩa mt cách hình thc chính xác thông qua máy
Turing. Tuy nhiên, trong giáo trình này chúng ta chưa cn đến đnh nghĩa chính xác
này, mà có th hiu thut toán m t cách trc quan hơn qua đnh nghĩa sau.
Đ nh ng hĩa. Ta hiểu thut toán gii bài toán đt ra mt thủ tục xác đnh hao gm
m! dãy hữu hn các ớc cán thc hiện đ thu đưc li giải ca bài toán.
Thut toán có các đc trưng sau đây:
Đu vào (Inpul): Thut toán nhn d liu vào t mt tp nào đó.
Đu ra (Output): Vi mi tp các d liu đu vào, thut toán đưa ra các d liu
tương ng vi li gii ca bài toán.
Chính xác (Precision): Các bưc ca thut toán đưc mô t chính xác.
Hu hn (Finileness): Thut toán cn phi dưa đưc đu sau mt s hu hn
(có th rt lón) bưc vi mi đu vào.
Đơn tri (Uniqueness): Các kết qu trung gian ca tng bưc thc hin thut
toán được xác đnh mt cách đơn tr ch ph thuc o đu vào c kết
qu ca các bưc trưc.
Tng quát (Generality): Thut toán có th áp dng đ gii mi bài toán có dng
đã cho.
T hí d 1., Cho 3 s nguyên a, h, c. M ô t thut toán tìm s ln nht trong ba sô' đã cho.
70
Chươnĩ 4. Bcii ío¿m iĩ kê
(liai. Tuy rang bài toán đt ra rt đơn gin nhưrm mc đích ca chúng ta là dùng nó
đ gii thích khái nim thut toán. Thut toán gm các bưc sau:
Bưc 1. Đt := a\
Bưc 2. Nếu h > X thì đt x\=b\
Bưc 3. Nếu c > X, thì đt x:~c.
Tư tưng ca thut toán duyt ln ợt giá trị ca tng s và gi li giá tr ln
nht vào biến ,v. Kết thúc thut toán X cho s nguvên lớn nht trong 3 s đã cho.
Ký hiu y z trong mô l thut toán trên có nghía là thay thê giá tri đang có ca
V b i giá tr c a z. Khi phép toán V := 2 đưc thc hin xong, g iá tr ca z không b thay
đi. Ta gi := là ĩoán t gán.
Bây gi ta s theo dõi quá trình thc hin thut toán với nhng giá tr c th ca a,
b, c. Truc hết gi s
a = l, b = 5, c -3.
Ti bưc 1, ta đt giá tr ca -V là a ( 1 ). Ti bưc 2, do /? > A' (5 > 1 ), nên .V đưc đt bng
b (5). Ti bưc 3, do điu kin c > X (3 > 5) không đưc thc hin, nên ta không phi
làm đông tác gán. Kết thúc thut toán, A' có giá trị 5 giá Ir ln nht trong 3 s a, h, c.
Gi s
a = b = 2 , r = 31.
Ti bưc 1, ta đt giá tr ca A' a (7). Ti bưc 2, do điu kin b > X {2 > 7) không
tho mãn, nên ta khng làm gì c.. Ti bưc 3, do c > X (31 > 7), nên ta gán X bng 31.
Kết thúc thut toán, -V có giá tr 31 là giá trị lóĩi nht trong 3 s a, b, c.
Bây gi ta s thy rng thut toán va mô t có các tính cht nêu trên.
Thut toán nhn đu vào là ba s a, b, c và đưa kết qu ư dáu ra là X.
Các bưc ca thut toán đưc mô t chính xcíc đn mc ta có th viết chưcmg trình
theo thut toán trên ngôn ng lp trình và thc hin tren máy tính.
Nếu du vào là đã xác đnh, kết qu tại mi bưc ca thut toán đưc xác đnh duy
nht. Chng hn, vi đu vào
= 7, b = 2, c = 31,
ti bưc 3 ca thut toán, X luôn đưc đt bng 31, không ph thuc vào vic thut toán
đưc thc hin bng tay hay bi máy tính.
Thut toán kết thúc sau ba bưc và đưa ra lời gii ca bài toán, vì vy, thut toán là
hu hn.
Thut toán trình bày trong ví d lun đưa ra giá trị ca s lófn nht trong ba s hất
k, như vy, thut toán có tính tng quát.
71
P h n I . L ý th u yết t hp
4.2.2. M t thut toán bàng ngôn ng phng PASCAL
Cách mô t thut toán bng li như trình bày trong thí d mc trên không tht thun
tin cho vic cài đt thut toán trên nhng ngôn ng lp trình c th, chng hn
PASCAL, c , BASIC,... Tt nhiên có th mô t thut toán s dng mt ngôn ng lp
trình nào đó. Khi đó ta ch có th s dng nhng cu trúc lnh ca ngôn ng đã chn.
Điu đó có th làm cho vic m l thut toán tr nên phc tp đng thi cũng rt khó
hiu. Vì thế, đ mô t thut toán ta s dng ngôn ng phng PASCAL, trong đó cho
phép va mô t thut toán bng ngôn ng đi thưng va s dng nhng cu trúc lnh
tương t như ca ngôn ng lp trình PASCAL (tt nhiên, các qui tc cú pháp ca ngôn
ng lp trình PASCAL không nht thit phi tuân th). Dưi đây ta lit kê mt sô' câu
lnh chính đưc s dng đ mô t thut toán.
Câu lnh procedureunction). Mô t thut toán trong ngôn ng phng PASCAL đưc
bắt đâu t u lệnh procedure (function), trong đó ta đặt n cho thut toán và mô t
danh sách biến ca thut toán. Chng hn, câu lnh
function ma.ximum(a,b,c):
cho biết tên thut toán đưc mô t là maximum, có 3 biến ơ, b, c;
pro ced u re Hoanvi(n);
cho biết tên thut toán đưc mô t là Hoanvi vi biến là n.
Các bưc ca thut toán đưc mô t trong thân th tục (hàm) đưc bt đu bi
begin và kết thúc bi end.
Thí d:
function maximum{a,h,c):
begin
(Thân hàm).
end;
procedure Hoanvin);
begin
(Thân thtc).
end;
C hú ý: Khi mò t thut toán bt đu bng function, khi kết thúc làm vic, thut toán s
dưa ra giá tr đưc ghi nhn trong tên hàm. Vì vy trong thân hàm phi có mt câu lnh
gán giá tr cho hàm. Trong ví d trên maximum s ghi nhn giá tr ln nht trong ba
biến a, b, c.
72
Chương 4. B ù i toá n li t ké
Cáu lnh gán. Câu lnh gán đưc s dng đ gán giá tr cho các biến. Vế trái ca câu
lnh là tên ca biến, còn vế phi biu thc ca các hng, biến đã gán giá tr hoc các
hàm đã đưc đnh nghĩa. Ký hiu := đưc s dng đ biu din phép gán.
T h í d:
variable := expression:
max a;
X s 'n nhít trong các sô' rii, ,,. a\
Khi cáu lnh. Các câu lnh có thê nhóm li thành mt khi. Đ m ô t khi lnh ta s
dng begin và end.
Thí d:
begin
Câu lệnh 1:
Câu nh 2;
Cáu lệnh n;
end;
Các câu lnh trong khi đưc thc hin tun tự. Dưi đây, thut ng câu lệnh đưc
dùng đ ch chung mt câu lnh cũng như mt khi câu lnh.
Chú gii. Đ din gii thêm ni dung ca các đon lnh có th s dng các câu chú
gii. Các dòng chú gii đưc đt trong du hai du {) hoc (* *).
T h í d:
(* X là phần t ln nht trong danh sách L *)
{ d là s phn t ca danh sách L }
Câu lnh điu kin. Câu lnh đơn gin là
if điu kiện then u lnìr,
Khi thc hin câu lnh, điều kiện s đưc kim tra, nếu nó đưc tho mãn thì càu
lệnh s đưc thc hin.
Nhiu khi ta cn phi thc hin m t thao tác nào đó khi điu kin đưc thc hin,
còn nếu ngưc li ta li phi thc hin mt thao tác khác. Khi đó, có th s dng câu
lnh phc tp hơn sau đây
73
Phn 1. Lý thuyết t hợp
if điu kiện then câu lệnh 1
else câu lệnh 2;
Các cáu lnh lp. Ta s s dng các câu lnh sau đây
fo r biến := giáJr_đu to giá_tr_cui do Câu liìh;
Ti đu vòng lp, biến s đưc gán cho giá_ tr_ đu, nếu giá tr đu nh hơn hơn hoc
bng giá tr cui và u lệnh s đưc thc hin với giá tr này ca hiến. Tiếp đến, giá tr
ca bh s tăng lên 1 và câu lệnh s đưc thc hin vi giá tr mi ca hiến. Quá trình
s đưc tiếp tc cho đến khi biến bng g_ trị_ cuối. Sau khi thc hin xong cáu lệnh
vi giá tr ca biến bng g_ trị_ cuối, s chuyn sang thc hin câu lnh tiếp íheo.
Nếu giá_ trị_ đu ln hưn giá_ trị_ cui ihì không có câu lnh nào đưc thc hin.
Câu lnh lp th hai đưc s dng là câu lnh "while" sau đây
while điu kiện do u lnh',
Khi câu lnh này đưc s dng, điu kin s đưc kim tra, nếu nó là đúng thì câu lệnh
đưc thc hin, điu đó có th dn ti s thay đi giá tr ca các biến trong điu kiện.
Nếu điu kin vn là đúng sau khi thc hin cáu lệnh thì câu lệnh li đưc thc hin.
Điu đó s tiếp din cho đến khi điu kin là sai.
Câu lnh lp th ba đưc s dng là câu lnh "repeat" sau đây
rep ea t câu lệnh until điu kin',
Khi câu lnh nàyđư c s dng, u lnh đưc thc hin, điu đó có th dn ti s thay
đi giá tr ca các biến trong điều kiện. Nếu điu kin vn là đúng, thì câu lnh li
đưc thc hin. Điu đó s tiếp din cho đến khi điều kin là đúng.
T h í d 2. Thut toán tìm s ln nht trong 3 s trong thí d 1 có th mô t như sau
function maximum{a,b,c)\
begin
x:=a;
i f
b > X
t h e n
x : = h \
(* N ế u
b
l n h ơ n
X
th i g á n l i X * )
if o x then x:=c, (* Nếu c ln hơn X thì gán li Jt *)
maximum:= x;
end;
74
CơiiíỊ 4. Bài toán lit
Thí d 3. Thut toán tìm sô' lớn nht trong dãy hu hn số.
Đu vào: Dãy gm n s ,, Ú
2
, a.
Đu ra: large - s ln nht trong dãy đã cho.
procedure Find_Large(a, n, large);
begin
large:=ai;
for i:= 2 to n do
(* Nếu a ln bơn laríe thì gán lại lar^e *)
if (3, > large then large, -a ,.;
end;
Trong vic gii các bài toán phc tp, ta thưng phi phân rã nó ra thành các bài
toán con. Ta s xây dng các th tc đ gii các bài toán con, sau đó các th tc này s
đưc tp hp đ gii bài toán đt ra. Thí d dưi đây minh ho cho tư tưng này.
Thí d 4. Tim sô' nguyên t ln hơn s nguyên dương n.
Gii. Trưc hết ta xây dng th tc kim tra xem mt sô' nguyên dương m có phi là s
nguyên t hay không (Th tc Nguyên Jô). S dng th tc này ta xây dng thut toán
gii bài toán đt ra. Do ưc s nguyên t ca s nguyên dương m bao gi cũng không
vưt quá 4m , nên m s là s nguyên tô' nếu như nó không có ưc s nào trong các s
nguyên dương t 2 đến [ 'ím ].
Thut toán kim tra mt s nguyên dương phi nguyên t hay không.
Đu vào: S nguyên dương m.
Đu ra: tru e nếu m là s nguyên t, false nếu ngưc lại.
function Nguyen_to(w);
begin
i:=2;
while (i <= 4m ) and (m mod i = 0) do i:=i+l;
Nguyen_to := i > ;
end;
Thut toán m s nguyên tô'lớn hơn sô' nguyên ơng n.
Thut toán này s dng thut toán Nguyen_to trên như th tc con.
Đu vào: Sô' nguyên dưcmg n.
Đu ra ; m - s nguyên t ln hon 77.
pro ced ure Lagre_fVime(/);
begin
75
P h n 1. L ý th u y ế t t hp
m :-n+ ;
w hile not Nguyen_to(w) do m:=m+I;
end;
Do tp các sô' nguyên tô' là vô hn, nên thut toán Lagre_Prim e là hu hn.
4.2.3. Đ phc tp ca th u t toán.
M t chương trình máy tính, mc dù đưc cài đt theo m t thut toán đúng, có th
không cho kết qu mong mun đi vi mt b d liu nào đó vì hoc là nó đòi hi quá
nhiu thi gian, hoc là không có đ b nh đ lưu gi d liu và các biến ca chương
trình. Vì vy, đ có th đánh giá kh năng ng dng ca chương trình la cn phi phân
tích hiu qu ca thut toán. Phán ch thut toán là quá trình tìm ra nhng đánh giá v
thi gian nh cũng như dung ợng h nh cn thiết đ thc hin thut toán. Đ phc
tp tính toán ca m t thut toán là lưng thi gian và b nh cn thiết đ thc hin
thut toán. Trong mc này ta quan tâm đến vic đánh giá thi gian cn thiết đê thc
hin thut toán (ta s gi là thời gian nh ca thut toán).
Rõ ràng, thi gian tính ca m t thut toán là hàm ca d liu đu vào. Thông
thưng khó có th xây dng công thc dưi dng hin cho hàm này, vì thế ta đăt vn đ
đơn gin hơn. Thay vì làm vic vi d liu đu vào, ta s làm vic vi mt đc trưng
quan trng ca d liu đu vào, đó là ch thưc ca nó. Chúng ta s quan tâm đến
Thi gian ti thiu cn thiết đ thc hin thut toán vi m i b d liu đu vào
kích thưc n. Thi gian như vy s đưc gi là thời gian nh tt nht ca thut
toán vi đu vào kích thưc n.
Thi gian nhiu nht cn thiết đ thc hin thut toán vi mi b d liu đu
vào kích thưc n. Thi gian như vy s đưc gi là thời gian tinh tồi nliãt ca
thut toán vi đu vào kích thưc n.
Thi gian trung bình cn thiết đ thc hin thut toán trên tp hu hn các đu
vào kích thưc n. Thi gian như vy s đưc gi là thi gian tính trung hình ca
thut toán.
Đ tính toán thi gian tính ca thut toán ta s đếm s cáu lệnh mà nó phi thc
hin, hoc trong mt s trưng hp có th đếm c th s phép tính s hc, so sánh,
gán,.... mà thut toán đòi hi thc hin. Rõ ràng t thông s này ta có th tính đưc thi
gian thc s mà thut toán đòi hi nếu như nó đưc cài đt trên m t ngôn ng lp trình
và chy trên mt máy tính c th. M t khác thông s này không ph thuc vào ngưi
lp trình và ngôn ng lp trình đưc chn đ cài đt thut toán cũng như máy tính m à
trên đó nó đưc thc hin. Vì thế nó là tiêu chun khách quan đ đánh giá hiu qu ca
thuât toán.
76
C hư ơng 4. B à i toán i t k
T hí d 5. Xét thut toán tìm s lớn nht trong dãy hu hn s thí d 3. Trong thut
toán này, s lưng phn t ca dãy s n đi lưng hp nht có th dùng đ đánh
giá kích thưc đu vào. Rõ ràng vòng lp trong thut toán luôn thc hin đúng n-\ ln
nên tt c thi gian tính tôì nht, ti nht cũng như trung bình ca thut toán đu bng
//-1.
Thông thưng, trong các ng dng thc tế thi gian chính xác m à thut toán đòi
hi đ thc hiên nó đưc quan tâm ít hơn so vi vic xác đnh tc đ tăng ca thông s
này khi tăng kích thưc ca đu vào. Thí d., gi s thi gian tính ti nht ca mt thut
toán
t{n) = 60 tr + 9« + 9
vi đu vào kích thưc n. Khi n ln s hng 60/ỉ^ xp x bng t{n) (xem bng 1). Trong
trưng hp này t{n) có tc đ tăng ging như 60/7^
n t{n) = 60/ỉ^ + 9n + 9
60«^
10
9099 6000
100
600909
600000
1000
60009009 60000000
10000
6000090009 6000000000
Nếu như t(n) đưc tính bng giây, thì
T n )^ /^ + 0J5« + 0.15
s cho ta thi gian tính đo bng phút ca thut toán. Rõ ràng s thay đi này không nh
hưng đến tc đ tăng ca thi gian tính khi kích thưc đu vào n tăng, mà ch thay đi
đơn v tính thi gian. Như vy khi mô t tc đ tãng ca thi gian tính ca thut toán
khi kích thưc đu vào tăng, không nhng chúng ta ch cn quan tâm đến s hng tri
(60 n^), mà có th b qua các hng s. Vi gi thiết như vy, thi gian tính t{n) tăng
ging như khi n tăng. Ta s nói t{n) có bc là và viết
t{n) = Q(n^).
Tư tưng cơ bn đây là thay thế biu thc /(«) = 60«^ + 9/1 + 9 bi biu đơn gin hem
c ó
c ù n g t c đ tă n g v i
t{n).
T a đ i đ ế n đ n h n g h ĩa s a u
Đ nh nghĩa. Gi s f g các m đi sô'nguyên dương. Ta viết
f{n) = 0(^(«))
và nóif{n) có bc không q nếu tn ti hní s dương C| và sô' nguyên dương Nị
sao cho
\f{n)\ < c ,\g {n )\
vi mi n> N .
Ta viết
77
Phn . Lý thuyết tổlụ/Ị?
f{n) = D.{g{n))
nói f{n) bc ít nht nếu tồn tại hng s dương C
2
s nguyên dươnq Nj
sao cho
\f(n) I < c , I ,(/7) I
với mi n> N
2
-
Ta viết
f(n) = @{g(n))
nói f{n) có bc g(n) nếuf{n) = 0(g{n) vàf{n) = Q(g(rj)).
Đnh nghĩa trên có th phát biu bng li như sau: /(«) = 0(g(n)), nếu ngoi tr
hng sô' và mt s hũti hn ngai l f b chn dưi bi g. f(n) = Cl(g(n)), nếu ngoi tr
hng s và mt s hu hn ngoi l / b chn trên bi g. f{n) = 0(^(«)), nếu ngoi tr
hng s và mt s hu hn ngoi l / b chn dưi và chn trên bi g.
Các biu thc/(n) = 0{g{n)),f{n) = Q(g(n)) và/(n) = 0(g(/í)) thưng đưc gi là ký
hiu ô ln, ôm êga, têta đi vi h àm /.
T h í d 5. Do
60n^ + 9« + 9 < 60 + 9n^ + = 70 vi mi n> ì,
chn C| = 70 trong đnh nghĩa trên ta có
60«^ + 9n + 9 = O(n^).
Do
60/7^ + 9« + 9 > 60 vi mi /í > 1,
chn C 2 = 70 trong đnh nghĩa trên ta có
60/j' + 9« + 9 = n (n^).
Do 60n^ + 9n + 9 = O(n^) và 60n^ + 9n + 9 = Q (n^) nên
60n^ + 9n + 9 ^ e ( n \
Phưcmg pháp chng minh trong thí d 5 có th s dng đ ch ra rng mi đa thc bc k
vi h s dương:
P,(n) = . + . . . + a,
/7
+ ()
có bc là 0(/z*): Pi.(n) - 0(/i*).
T h í d 6. Gi s k là s nguyên dương. Ta có
+ 2* + .. . + /?'' < A* + «^ + . . . + A7* = n. /?*' =
khi « > 1; suy ra
1* + 2' + . . . + /í' = 0 ( /1'" ').
M t khác,
1* + 2* + . . . + > [nl2f + ... +(«-!/ +
78
Chươĩ 4. ßüi loan ỉiệt
> [n!2 + . . . 4- [nH
> {n/2).(n/2f =
nên
1' + 2' + .. . + /ì* = n ( ),
do đó
1* +2*+ =© (/;*"').
T h i d 7. Ta s chng minh
Ig/ì! = © (/7lg« ).
Ta có
Ig/! = Ig « + Ig (n-1) + . . . + !g 2 + Ig 1.
Do hàm Ig là hàm tăng, nên
I g n + I g (n- 1 ) + . . . + I g 2 + I g 1 < I g « + I g n + . . . + I g /7 = /7 I g /7.
Vì vy
Ig n\ - 0 Ig n).
Bây gi, do
Ig n + Ig (/-1) + . . . + Ig 2 + Ig 1 > Ig / + Ig (n-1) + . . . + Ig [//2]
> Ig /2J + Ig [n/2] + . . .+ Ig [/7/2]
> (n/2) lg(//2) > (n Ig /z)/4,
suy ra
Ig/! =Q (n\gn).
Vy
\gn\ = ©(« Ig «).
Bây gi ta có th đnh nghĩa bc ca thi gian tính tt nht, ti nht, và trung bình ca
thut toán như sau
Đ nh nghĩa. Nếu thut toán đòi hỏi ihi í>ian tính tt nht là t(n) với đ dài đu vào n
t{n) = Oigi))
thời gian tính ìốì nht ca thut toán bc không quá ^{n) hay tk gian tính tt nht
ca tlìuật toán 0{g{n)).
Nếu thut toán đòi hi (hi gian íính tồi nhấì t(n) VI đ dài đcìu o n
ì{n) = 0{g{n))
thời gian tính ìồi nht ca tlĩuật toán bậc khôn^ quá ^{n) hay thời gian nh tồi nht
ca thut (oán Oig(rĩ)).
Nếu thuật toán đòi hỏi thời gian tính trung bình là /(/?) với đ dài đu vào n
ĩ{n) = 0{g{n))
79
Phn I . Lý thuyết t hợp
thời gian tính trung hình ca thut toán bc không quá g{n) hay thời gian tính trung
binh ca thut toán 0(g(n)).
Nếu thay o bi í ì và "không quá" bi "ít nhất" trong đnh nghĩa trên ta thu đưc đnh
nghĩa bc ít nht ca thi gian tính tt nht, ti nht, trung bình ca thut toán. Nếu thi
gian tính tt nht ca thut toán va là 0{g(n)) va là Q.{g{n)), ta s nói thi gian tính
tt nht ca thut toán là Q{g(n)). Tương t như vy, ta cũng đnh nghĩa thi gian tính
ti nht và trung bình ca thut toán là Q(g(n)).
T hí d 8. Đ ánh giá s ln thưc hin câu lnh jr. = .r+ l trong đon chưOTg trình sau như
là hàm ca đu vào n:
for i:=l to n do
for j;=l to i do
x:= x + 1 ,
Đu tiên / đưc đt bng 1, và ý s chy t 1 đến 1, lnh x:=x+ đưc thc hin 1 ln,
tiếp đến i đưc đt bng 2, và j s chy t 1 đến 2, lnh x:=x+ đưc thc hin 2 ln,...
Do đó tng s ln thc hin câu lnh x:=x 1 là
1 + 2 + . . . + « = 0(/í^).
Th í d 9. Đánh giá t{n) - s ln thc hin câu lnh x:=x+l vi đ dài đu vào là n trong
đon chương trình sau:
j:=n;
while >= 1 do
begin
for i:=ltojdo x:=x+l;
j:=j div 2;
end;
Ln thc hin đu tiên trong vòng lp while câu lnh x:=x+l đưc thc hin n ln. Vì
vy, t{n) = D.{n). Sau ln thc hin đu tiên giá tr ca j đưc thay bi [//2], vì thế i <
til. Nếu ý > 1, thì câu lnh X ;= x+1 đưc thc hin không quá nH ln trong ln lp th
hai,... Nếu ký hiu k là s ln thc hin các lnh trong thân ca câu lnh while, thì sô'
ln thc hin câu lnh X :=x+l là không quá
n+ n/2 + n/4 + . . . + /í/2*-' = « (l-l/2 ')/( 1-1/2).
80
Chương 4. Bài loan ĩ
Bây gi, do
m < AZ(1 - 1/2') / (1 - 1/2) = 2//(l - 1/2') < 2/í,
nên t{n) = 0{n).
Cui cùng, do trên ta đã có /(/;) = 0.(n), nên t{n) - ©(/7).
T hí d 10. Đ gii bài toán; Tìm trong dãy s
s , S
2
mt phn t có giá tr bàng key chơ trưc, có h áp dng thut toán sau
Đu vào; n và dãy s 5|, Ì 2
...........
Đu ra: V tri phn t có giá tr key hoc là n+1 nếu không tìm thy,
function Linear_Search(s,n,key);
begin
i:=0;
repeat
i:=i+l;
until (i>n) or (key = S);
Linear_Search := i;
end;
Cn đánh giá thi gian tính tt nht, ti nht, trung bình ca thut toán vi đ dài đu
vào là n. Rõ ràng thi gian tính cà thut toán có th đánh giá bi s ln thc hin câu
lnh /. =/+1 trong vòng lp repeat.
Nếu s¡ = key thì câu lnh .-i f 1 Irong thân vòng lp repeat thc hin 1 lân. Do đó
thi gian tính tt nht ca thut toán là ©( 1 ). f .
Nếu key không có mt trong dãy đã cho, thì câu lnh /:= Í + 1 thc hin n ln. Vì thế
thi gian tính ti nht ca thut toán là Q(n).
Cui cùng, ta tính thi gian tính trung bình ca thut toán. Nếu key tìm thy vị tri
th i ca dãy (key = s¡) thì câu lnh i := /+1 phi thc hin i ln (/' = 1, 2 , n), còn nếu
key không có mt trong dãy đã cho thì câu lnh i := ;+l phi thc hin n ln. T đó suy
ra s ln trung bình phi thc hin câu lnh i := /+1 là
[(1+ 2 +. . . + n) + n]/(n+\).
Ta có
[ ( 1 + 2 + . . . + /) + ^?] / ( « + 1 ) < (n^ + n) / ( « + ! ) = n.
Vy thi gian tính trung bình ca thut toán là 0{n).
Mt khc, do
81
P h n 1. L ý th u y ế t t hp
[(1 + 2 + . . . + /7) + /] /(/!+!)> («V4 + n) l{n+\)
>{t?IA + nlA) l{n+\) = nlA,
nên thi gian tính trung bình ca thut toán ià Q.{n). Vì vy, thi gian tính trung bình
c a th u t to á n là © (/?).
Đi vi thut toán trong thí d này. c thi gian tính ti nht ln thi gian tính
trung bình đu bng 0(/i).
T hí d 11. Phân tích thut toán Euclide tìm ưc chung ln nht ca hai s nguyên
dương a, b trình bày dưi đây
Thut toán Euclde.
Đu vào: a v à h là hai s nguyên dương.
Đu ra: ư c chung ln nht ca a và b.
function Gcd(a,h)\
begin
(* Đi ch nếu cn đ đt đưc a > b *)
f a < h then <Đi ch a và b>;
while 0 do
begin
Ly a chia b thu đưc a = bq + r ,0 <r < b ]
a:=b;
h:=r;
end;
Gcd:= a;
end;
Đ đánh giá đ phc tp ca thut toán, ta s đếm s phép chia phi thc hin theo
thut toán.
Trưc hết ta chng minh bng qui np mnh đ sau.
M nh đ 1. Gi s cặp sa, h, a > b, đòi hi n > 1 phép chia trong thut toán Euclỉde.
Khi đó a > h >/ , tron^ đ [f } là dãy s Fibonaci xác đnh bi công thức truy
+ /,.2 ,/7 > 2 ,/o = /, = u .
C hng m inh. D dàng kim tra mnh đ đúng vi /7=1. Gi s m nh đ đng vi / > 1.
Ta chng minh khng đnh ca mnh đ đúng vi /7+1. Gi s cp a, b, a > b đòi hi
n+ị phép chia. Sau khi thc hin phép chia a cho b:
a = b q + r, 0 < r < h ,
82
C hươ ng 4. B ù i toán li t k
thut toán tiếp tc làm vic vi cp s h và r, b > r. Cp ' này đòi hi n phép chia. Do
đó theo gi thiết qui np
r>f.
T đó suy ra
a = h q + r > h + r > /,^1 + /, =/,2 ,
tc là ta có
và theo qui np mnh đ đưc chng minh.
S dng mnh đ va chng minh ta có th đánh giá đưc s phép chia nhiu nht
cn phi thc hin trong thut toán Euclide.
M nh đ 2. Gid s các s nguyên đầu vào của thut íoáỉĩ Euclide là không vượt quá
m, m >8. Khi đó tlìuậí toán đòi li klìỏng quá logĩ^ (2m/3) phép chia.
C hng m ình. Thc vy gi s n là s phép chia lớn nht cn thc hin theo thut toán
vi đáu vào tho mãn điu kin đt ra trong mnh đ. Gi s cp s a,b ,m > a > b đòi
hi n phép chia. Do n? > s, nên, bng cách th trc tiếp các kh năng, có th kim tra
đưc là /7 > 4. Theo khng đnh ca mnh đ 1, ta có a >/^^1. Suy < m. Do /7 + 1
> 5, nên có th chng m inh đưc là
(3/2)'"'
Vi thế suy ra
(3/2)"^' < m,
hay
n + 1 < log,/2 m.
Suy ra
/7 < log3;2 rn - l = log,/2 m - log,/2 3/2 = log3/2 (2m/3).
Mnh đ đưc chng minh.
Nếu như các thí d 8-10 có th to ra cm giác là đánh giá đ phc tp ca mt
thut toán là mt vn đ gin đơn, thì thí d 11 đã cho thy vn đ không hn là như
vy. Nói chung, phân tích đ phc tp tính toán cu mt thut toán là mt vn đ phc
tp, nó đòi hi tư duy sáng to và có phương pháp và cách tiếp cn riêng. Mt khác
trong rt nhiu trưng hp, ta không th thu đưc nhng đánh giá đp đ như trong các
thí d va trình bày trên.
83
Phn I . Lý thuyết t hp
Dng đánh giá Tên gi
© d )
Hàng s
0 (lg Ig n)
Log log
0 (lg n)
Logarithm
0 (« )
Tuyến tính
0(/7 Ig n)
n log n
Bc hai
m ' )
Bc ba
Q o n
Đa thc
m > 2
Hàm mũ
0(/7!)
Giai tha
Bng 1. Các đánh giá thông dng.
Các hng ' b b qua trong cách đánh giá va đưa vào trên có th có ý nghĩa
quan trng trong ng dng thut toán. Chng hn, gi s vi mi d liu đu vào đ dài
n, thut toán A đòi hi thi gian tính là c , n còn thut toán B đòi hi C, n^. Khi đó với
mt sô' kích thưc đu vào nht đnh thut toán B có th vn là tt hơn. Thí d, nếu c, =
300, C
2
= 5, thì vi n = 5, thut toán A đòi hi thi gian 1500 trong khi thut toán B đòi
hi thi gian 125. Tt nhiên, khi n đ ln, thut toán A là luôn nhanh hơn thut toán B.
M t ' đánh giá tc đ tang đc bit đưc đt tên riêng như ch ra tfong bng 1.
Trong bng 1, các đánh giá đưc sp xếp theo th t tăng dn ca tc ìí tãng
(ngoi tr trưng hp 0(/7"'))- Bng 2 dưi đây cho thy thi gian tính tăng như thế nào
vi các đánh giá sô' bưò lp khác nhau (g thiết: mi bưc lp đòi hi 1 m icro giây):
Đ ánh giá
Thi gian
tính nếu
n =
6 12 50 100
1
10 ® see 10 ' sec 10 ® sec
1 O'* sec
Ig Ig n 10'* sec
2x10 * sec 2x10 * sec 3x10'* sec
Ig n
3x10'^ sec 4x10 '^ sec
6x10'^ sec 7x10'* sec
n
6x10 ® sec
10'^ sec
5x1 O'' sec
1 O '* sec
n \g n
2x10 ' sec
4xlO ' sec
3x10 '' sec 7 x l0 sec
4x10 ' sec
lo '* sec
3x10'^ sec
0.01 sec
2x10 sec
2x10'^ sec
0.13 sec 1 sec
2"
6x1 O'“ sec
4x10'^ sec
36 năm
4x1 năm
B ng 2. Thi gian tính vi các đánh giá khác nhau
84
C hư ơng 4. B à i toán li t kâ
Nếu như đi vi mt bài toán ta có th xây dng thut loán vơi thi gian tính ti
nht là đa thc, ù bài toán đt ra gi ợc giải toí. Rt tiếc là cho đến thi đim hin
ti, ch có mt s không nhiu lm bài toán là đưc gii tt.
Nếu bài toán không có thut toán vi thi gian tồi nht đa thc đ gii thì nó đưc
gi là khc) (iái (intractable). Nếu như có thut toán gii bài toán như vy, thì chc chn
nó s đòi hi rt nhiu thi gian.
Có m t s bài toán li khó đến mc ta không th xáy dimg thul toán đ gii nó.
Nhng bài toán như vy đưc gi ià không giải được (unsolvable problem). M t trong
nhng bài toán như vy là Bài toán về tính dng: Cho mt chương trình và tp đu vào,
hi rng chương trình có dng hay không?
Vic nghiên cu lý thuyết v đ phc tp tính toán ca các bài toán và các thut
toán là mt trong nhng vn đ trung tâm ca khoa hc tính toán, mà giáo trình này ta
không có điu kin đ đi sâu hơn na.
4.3. Phương pháp sinh
Phương pháp sinh có th áp dng đ gii bài toán lit kê t hp đt ra nếu như hai điu
kin sau đưc thc hin:
) Có th xác đnh đưc mt th t trên tập các cu hình t hp cn liệí kê. T đó
th xác đnh đưc cu hình đu ĩiên và cấu hình cuối cùng trong ĩh ĩ đã xác định,
2) y dn^ đưc thut ĩoán t cấu hình chưa pi là cui cùng đang có, đưa ra
cấu hình kế tiến nó,
Ta s gi thut toán nói trong điu kin 2) là thut toán sinh kế tiếp. Rõ ràng là th
t trong điu kin 1) cn đưc la chn sao cho có Ih xây dng đưc thut toán sinh kế
tiếp. Gi thiết rng, hai điu kin nêu trên đã đưc thc hin, khi đó thut loán sinh đ
gii bài toán lit kê đt ra đưc mô t như sau:
procedure Generate;
Begirt
<Xáy dng cu hình ban đí>\
S to p fa lse ;
while not stop do
85
Phn ì . Lý thuyết t hp
beẹin
iía ra cu hình cían g có>;
Sinh_kếjiếp;
end;
End.
trong đó Sinh_kếjiếp là th tc sinh cu hình kế tiếp theo thut toán sinh kế tiếp đã xây
dng. Nếu cu hình đang có đã là cui cùng, th tc này cn gán cho biến Stop giá trị
true, ngưc li th tc này s xây dng cu hình kế tiếp ca cu hình đang có trong th
t đã xác đnh.
Dưi đây ta xét mt s thí d minh ho cho vic áp dng thut toán sinh.
Lit ké tt c các dãy nh phán đ dài n.
Viết dãy nh phân dưi dng b /?2 b, trong đó b e (0, i ). Xem mi dãy nh phân b
= , ¿>2 ... b là biu din nh phân ca mt s nguyên p{b). Khi đó th t hin nhiên
nht có th xác đnh trên tp các dãy nh phân là th t t nhn (còn gi là th t từ
đin) đưc xác đnh như sau.Ta nói dãy nh phân b = b b j ... đi trước dãy nh phân b'
= b\ h'
2
... b' trong th t t nhiên và ký hiu {h h< b' nếu p{h) < p(h').
Thí d: Khi /=3, các dãy nh phân đ dài 3 đưc lit kê theo th t t nhiên như sau
b
p(b)
0 0 0
0
0 0 1 1
0 l 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0
6
1 1 1 7
Như thế dãy đu tiên s là 0 0 ... 0, còn dãy cui cùng là 1 1 ... 1. Gi s h b j ... b
là dãy đang có. Nhn xét rng, nếu dãy này gm toàn ch s 1 thì quá trình lit kê kết
thúc, trái li, dãy kế tiếp s nhn đưc bng cách cng thêm 1 (theo modun 2, có nh)
vào dãy hin ti. T đó ta nhn đưc qui tc sinh dãy kế tiếp như sau:
Tim i đu tiên (theo th t / = /7,/7-1, 1) tho mãn è, = 0.
Gán li b; = \ v. bj = Q vi tt c j > i. Dãy mi thu đưc s là dãy cn tìm.
86
Chươiíi 4. Bcii ĩoán ỉiệí
Thí d, Xét dãy nh phân đ dài 10: h == 1101011111. Ta có / = 5. Do đó, đl /?5 = 1,
và h = 0, i = 6, 7, 8, 9, 10, ta thu đươc xâu nh phân kế tiếp 1101100000.
Thut toán sinh kế tiếp đưc mô t trong th tc sau
procedure Nexí_Bi(_Striĩĩg;
f * Sinh xâu nhphân k ế tiếp theo ĩìĩ tự íừ điển ĩừ
xâu đang hl?
2
... b ^ 1 1 ... 1
he^in
ị:=n;
while h - I do
begin
b, = 0;
/;=/-!;
end;
bị:= 1;
end;
Dưi đây là chương trình PASCAL thc hin vic lit kê các dãy nh phân đ dài /I bng
phưcmg pháp sinh. Trong chương trình có thêm mt biến count dùng đ đếm s lưng
dãy nh phân đưc sinh bi chương trình.
{Chương ĩrìnìĩ liệt kê dãy nhpììáỉì)
var
ì, : integer;
b: array[l..20] of 0..];
count: word;
stop: boolean;
procedure Init;
var i: integer;
begin
write('Cho biết đ dài dãy nhphán: '); readln(n);
for := to n do h[ij := 0;
stop false;
count ;= 0;
end;
procedure Nexĩ_Biĩ_Sĩring;
87
P h n I . L ý th u y ế t t hp
var i: integer;
begin
{sinh dãy nhphân k ế tiếp}
i := n;
while (i > = 1 j and (h[ij - 1) do
begin
b[ij := 0;
i:=i-J;
end;
if i <j then stop := true
else h[i :
end;
Begin {main program)
Init;
while not stop do
begin
{đưa ra dãy nh phân hiện ti}
count .= count+1;
write(count:5, ');
for í := I to n do write(b[ij:2); writeln;
Next_Bit_String
end;
write('Gõ Enter đ kết thúc... readln;
End.
Lit kê các tp con m phn t ca tp n phn tử.
Bài toán đt ra : Cho x = {], 2, , n]. Hãy lit kê các tp con m phn t ca X Mi
tp con m phn t ca X có th biu din bi b có th t gm m thành phn
a = {ai, a,
.......
a j
tho mãn
1 < a, < < ... < , < n.
Trên tp các tp con m phn t ca X th xác đnh nhiu th t khác nhau. Th
t đơn gin nht là th t từ đin đưc đnh nghĩa như sau: Ta nói tp con = (|, Ơ
2
.....
,) đi trưc tp con a' = (a '|, a'
2
, ... , a') trong th t t đin và ký hiu là a -< a , nếu
tìm đưc ch s : (1 <k<m) sao cho
a, =a\
..........= aVi- «; <«'*
88
Cơng 4. Bài ĩ oán ỉiệt
T h í d: x= {1, 2, 3, 4, 5}, = 3. Các tp con 3 phn tử ca X đưc lit kê theo th t
t đin như sau
Như vy, tp con đu tiên trong th t t đin là
(1 ,2 ,... . m)
và tp con cui cùng là
{n-m+, n-m+2
......
/ì).
Gi s =(ư,, Ü
2
, ... , ,) là tp con đang có chưa phi cui cùng, khi đó có th chng
minh đưc rng, tp con kế tiếp trong th t t đin có th xây dng bng cách thc
hin các quy tc biến đi sau đi với tp đang có:
Tim t bên phi dãy CI/, Ü;
.......
a, phn t a, ^n-rn+i,
Thay a, bi , + 1;
Thay bi , + j - /, vi j = /+1, i+2,..., m.
Thí d: n = 6, m = 4. Gi s đang có tp con (1, 2, 5, 6), cn xây dng tp con kế tiếp
nó trong th t t đin. Ta có /=2. thay «2 = và «3 = 4, Ü4 = 5, ta đưc tp con k ế tiếp
(1,3,4, 5).
T đó, thut toán sinh kế tiếp có th mô t trong th tc PASCAL mô phng sau
đây:
procedure Nexl_Combination;
(* Sinh m-tp con kế tiếp theo th tự t điển
ca tập con (a¡, a
2
,..., a j ĩ-i ịn-m + } *}
begin
i:=m;
89
P h n I . L ý th u y ế t t hp
while ũ = n-m+i do
a ,. - a, + ;
forj:= i+ to rn do Oj := a¡ + j - i;
end;
Lit kê các hoán v ca tp n phn t.
Bài toán dt ra là; Cho x = [\,2,, n]. Hãy lit kê các hoán vị t /7 phn t ca X M i
hoán v t n phn t ca X có th biu din bi b có th t gm n thành phn a = (öj,
ÛJ,, ơ) tho mãn
a,- e X, i= 1, 2,..., n , ũp ĩ^a^,p
Trên tp các hoán vị t n phn t ca X có th xác đnh nhiu th t khác nhau. Th
t đơn gin nht là th t t điển đưc đnh nghĩa như sau: Ta nói hoán vị = (|, Û
2
.....
a) đi trưc hoán v a' = (a\, a'
2
, ... , a ,,') trong th t t đin và ký hiu là a ^ a', nếu
tìm đưc ch sô': (1 < k< n) sao cho
| Ü , Ü2 2t ~ ^ k-\ ^ ^ k
Thí d: x = {1, 2, 3}. Các hoán v t 3 phn t ca X đưc lit kê theo th t t đin
như sau
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
Như vy, hoán vđu tiên trong th t t đin là
(1,2,...,«)
và hoán v cui cùng là
{n, n - \ , 1).
Gi s a = (, ... , ) là hoán v đang có chưa phi cui cùng, khi đó có th chng
minh đưc rng, hoán v kế tiếp trong th t t đin có th xây dng bng cách thc
hin các quy tc biến đi sau đi vi hoán v đang có:
Tìm t phi qua trái hoán v đang có ch s j đu tiên tho mãn ũj < (nói
cách khác: j là ch s ln nht tho m ãn Oj <
Tim a¡. là s nh nht còn ln hcfn ŨJ trong các s bên phi Uj ;
Đi ch ÜJ vi a¡. ;
Lt ngưc đon t ũj_, đến a.
90
C ln/í/n i; 4. B à i toàn liệt kê
Thí d: Gi s đang có hoán v (3, 6, 2, 5, 4. 1), cn xây dng tp con kế tiếp nó trong
th t t đin. Ta có ch s j = 3 (í/, =2 < - 5). S nh nht còn ln hơn «3 trong các
s bên phi ca ^3 là j = 4. Đi ch a.. với í/, ta thu đưc (3, 6, 4, 5, 2, 1), và cui
cùng, lt ngưc th t đon «4 í/, ta thu đưc hoán vkế tiếp (3, 6, 4, 1, 2, 5).
T đó, thut toán sinh kế tiếp có thế mô t trong th tc PASCAL mô phng sau
đây:
procedure Next_Perrnutation:
Sinh hoán v k ế liếp iheo th lự từ đin
của hoán v (a,, Ũ
2
, .... a) ^(n,!ì-
......
J) *)
begin
Tìm j ch s lớn nht tho < ũj^i *)
j:=n-l;
while ŨJ> do j:= j-;
(* Tìm ũ. sô' nh nht còn ln hơn j n phi Oj *)
k:=n;
while j > Q. do k:=k-;
Swap(aj, a j; (* đi ch vi *)
f* Lt nợc đon t đến a *)
r:=n;
s:=j+I ;
while r>s do
begin
Swap(a, a j; (* đi clìỗ (i,. xi d,.
r:=r-J;
s:= s+ ;
end;
end;
Nói chung, phương pháp sinh không có tính ph dng: không phi cu hình kế tiếp
nào cũng đưc sinh m t cách đơn giản t cu hình hin ti, mt khác cu hình ban đu
không phi d tìm vì ngay c s tn tại mt cu hình nhiu khi vn còn là nghi vn. Vì
vy, thông thưng thut toán sinh ch có th xây dng đưc đi vi nhng bài toán lit
kê t hơp đơn gin. Đ gii nhng bài toán lit kê phc tp, ngưi ta thưng dùng thut
toán đưc trình bày trong mc tiếp theo, có tính ph dng cao hơn. Đ ó là thut toán
quay lui.
91
P h n . L ý thu yế t t ì ?
4.4. Thut toán quay lui
Ni dung chính ca thut toán này là vic xây dng dn các thành phn ca cu hinh
bng cách th tt c các kh năng. Gi thiết cu hình cn tìm đưc mô t bàng m t b
gm n thành phn A'|, A"2
......
A'. Gi s đã xác đnh đưc /-1 thành phn X,X
2
, x .| (mà
ta s gi là lời gii bộ phn cp /-1), bây gi ta xác đnh thành phn X , bng cách duyi
tt c các kh năng có th đ c cho nó (đánh s các kh năiig t 1 đến «,). Vi mi kh
năng j, kim tra xem j có chp nhn đưc không, xảy ra 2 trưng hp:
. nếu chp nhn / thì xác đnh .V, theo j, sau đó nếu i = n thì ta đưc mt cu h ìn h ,
còn trái li ta tiến hành vic xác đnh X^i-
. nếu th tt c các kh năng mà không có kh nãng nào đưc chp nhn thì quay
li bưc trưc đ xác đnh li
Đim quan trng ca thut toán là phi ghi nh ti mi bưc đã đi qua, nhng kh
năng nào đã th đ tránh trùng lp. Rõ ràng nhng thông tin này cn đưc lưu tr theo
cơ cu ngăn xếp {stack - vào sau ra tc). Vì thế thut toán này rt phù hp vi vic
lp trình trên m t ngôn ng cho phép gi đ qui. Bưc xác đnh X, có th din t qua th
tc đưc t chc đ qui dưi đây:
procedure Tryi: integer);
var j: integer;
begin
fo r j I to /, do
if <châ'p nhn j> then
begin
<xác đnh X theo j>
if i - n then <ghi nhn mt cu hình>
else Try(i+1);
end;
end;
Phn quan trng nht trong th tc trên là vic đưa ra đưc mt danh sách các kh năng
đ c và vic xác đnh giá tr ca biu thc logic <chá'p nhn ì>. Thông thưng giá tr
này, ngoài vic ph thuc i, còn ph thuc vào vic đã chn các kh năng ti /-1 bưc
trưc. Trong nhng trưng hp như vy, cn ghi nh trạng thái mi ca quá trình tìm
kiếm sau khi < xá c đnh .V, th e o j> và tr li trng thái c ũ sau li gi Try(i+). Các
trng thái này đưc ghi nhn nh mt s biến tng th (global), gi là các bh trng
thái.
92
Chiù/n:, 4. B á i lo a n i t
Sau khi xây dng th tc đ qui Try, đon chư(Jri,g ĩiình chính gii bài toán lit kê
có dng:
Begin
nit; Try(I);
End.
trong đó Jnit th tc khi to các giá tri ban đu (nhp cár giá tr tham sô' ca bài
toán, khi gán các biến trng thái, biên đ ế m ,...).
Quá trình tìm kiếm lời gii theo ihut toán quay lui có th rnô t bi Cáy tìm kiếm
li gii sau đây
Gc
Kh năng chn
Kh năng chn X
2
vi X đã chn
Kh năng chn X,
vi a:,, đã chn
H ình 1. Cây lit kê lời gii theo thut toán quay lui
Dưi đây là 3 thí d lit kê 3 c u hình cơ bn; dãy nh phân, hoán v và t hp,
bng thut toán quay lui.
T h í d 1. Lit kê các dãy nh phân đ dài n.
G ii: Biu din dãy nh phân dưi dng b bj ... trong đó b e {0,1} Th tc đ qui
Try(i) xác đnh b, trong đó các giá tr đ c là 0 1. Các giá tr này mc nhiên đưc
chp nhn mà không phi tho mãn điu kin gì (vì thế bài toán không cn biến trng
93
P h n . L ý th u yết t hp
thái). Th tc Iniĩ nhp giá tr n và khi gán biến đếm count. Th tc Result đưa ra
dãy tìm đưc.
{Chương trinh lit kê dãy nh phán}
var n: integer;
b: array[1..20j GfO,.l;
count: word;
procedure In;
begin
writeCn = readlnn);
count := 0;
end:
procedure Result;
var i: integer;
begin
count := counts I;
wrife(count:5, \ ');
for i := 1 to n do write(b[i]:2);
writeln;
end;
procedure Try(i: integer);
var j: integer;
begin
for j ;= 0 to I do
begin
b [ij:= j;
if I - n then Result
else Ti-y(i-¥l);
end;
end;
Begin {main program)
Init; Tryl);
writeCGo Enter đ kết ĩhúc... readỉn;
End.
Cây lit kê li gii theo thut toán quay lui đ lit kê các dãy nh phân đ dài 3
đưc mô t trong hình 2.
94
Chương 4. i ĩoáỉì ỉiệĩ k
Hình 2. Cây lit kê day nh phân đ dài s
T hí d 2. Lit kê các hoán vca { 1 , 2 , n }.
G i: Biu din hoán vị dưi dng P 1?2 trong đó p, nhn giá tr t 1 đến n và Pi ^
Pj
vi
i
^
j.
Các giá tr t 1 đến n đưc ln lưt đ c cho P i, trong đó giá tr
j
đưc chp
nhn nếu nó chưa đưc dùng. Vì thế cn phi ghi nh đi vi mi giá tr j xem nó đă
đưc dùng hay chưa. Điu này đưc thc hin nh mt dãy biến logic bp trong đó bj
bng ĩrue nếu j chưa đưc dùng. Các biến này cn phi đưc khi gán giá tr írue trong
th tc In. Sau khi gán j cho P cn ghi nhận false cho bj và phi gán li true khi thc
hin xong Result hay Try(i-¥l). Các phn còn li ging như bài toán trưc.
{Chương trình lit ké các hoán v}
var
n: integer;
p: array [ ,.20] of integer;
b: array[L20 o f boolean;
count: word:
procedure Init;
var i: integer;
begin
writen = '); readln(n);
for i 1 to n do h[i] ;= true:
count := 0;
end;
procedure Result:
var i: integer;
begin
countcount+1 ;
write(count:5, \ ');
95
Phn . Lý thuyết t hp
for i to n do wriĩe(pi]:3);
writeln;
end;
procedure Try(i: integer);
var j: integer;
begin
fo r i ;= I to n do
if h[j] then {chp nhn j}
begin
p[i]
h[j] :=false; ghi nhn trng thái mi)
if i = n then Result else Try(ì+l);
b[j] ;= true; {trả lại trng thái cũ)
end;
end;
Begin (main program)
I nit; Try(l);
yvriteự Enter đ kết thúc... '); readln;
End.
Cây lit kê các hoán v ca 1, 2, 3 đưc cho trong hình 3. Các hoán v đưc lit kê theo
th t t đin tăng dn.
H ình 3. Cây lit kê các hoán vca 1, 2, 3.
T hí d 3. Lit kê các t hp chp m ca { 1 , 2 , n }.
G ii: Biu din t hp dưi dng C| ... c trong đó
96
Chương 4. B ài toán Hi kê
1 <Cj <C'2<
T đó suy ra các giá tr đ c cho r, t +1 đến n-m+i. Đ điu này đúng cho c
trưng hp / = 1, cn thêm vào C(, với C(, = 0. Các giá tr đ c này mc nhiên đưc chp
nhn. Các th tc ¡nit. Result đưc xây dng giông như bài toán trưc.
{ClĩUơnq írình lit c t hp}
var
tĩ, ,77. iiĩteger,
c: array[0..20] of integer;
count: word;
procedure Inil;
begin
wriĩe('n, m = readln(n, m);
c[0] := 0; count := 0;
end;
procedure Result;
var i: integer;
begin
count := counts 1; n>ritc(counĩ:5, \ ');
for i := 1 to m do wriíe(ci:3); wrifein:
end;
procedure Tryi: inte^er):
var j: integer;
begin
for j ;= c//'77+y to do
begin
c[i] :=j;
if i = m then Result else rrvf/+Zj;
end;
end:
Begin {main program}
Init;
Try(l);
write('Gõ Enter đ kết thúc... '); readln;
End.
97
Phn 1. Lý thuyết t hợp
Cây lit kê các t hp chp 3 t {1, 2, 3, 4, 5 đưc cho trong hình 4. D thy các t
hp đưc lit kê theo th t t đin tăng dn.
H ình 4. Cây lit kê t hp chp 3 t {1, 2, 3, 4, 5}
Trong nhiu bài toán, vic xác đnh điu kin <cháp nhn }> không phi là đơn
gin, nó đòi hi phi có m t trình đ t chc nht đnh. Rõ ràng đ phc tp cùa bài
toán ph thuc rt nhiu vào đ phc tp ca điu kin này. Nói chung, ngưi ta c
gng thu hp din đ c các kh năng j và tinh gin ti đa vic tính điu kin chp nhn
j. Đây cũng là cách ch yếu đ nâng cao tính kh thi ca bài toán lit kê.
Dưi đây trình bày bài toán Xếp Hu, là mt bài toán kinh đin đ m inh ho thut
toán quay lui.
T h í d 4. Bài toán Xê'p Hu. Lit kê tt c các cách xếp n quân Hu trên bàn c nxn sao
cho chúng không ăn đưc ln nhau.
G ii: Đánh s ct và dòng ca bàn c t 1 đến n. Mi dòng đưc xếp đúng mt quân
Hu. Vn đ còn li là xem mi quân Hu đưc xếp vào ct nào. T đó dn đến vic
biu din m t cách xếp bng b n thành phn X X ... x,„ trong đó X = j nghĩa là quân
hu dòng / đưc xếp vào ct j. Các giá tr đ c cho X là t 1 đến n. Giá tr j là đưc
chp nhn nếu ô (/, j) chưa b các quân Hu trưc chiếu đến. Đ kim soát đưc điu
này, ta cn phi ghi nhn trng thái ca bàn c trưc cũng như sau khi xếp đưc mt
quân Hu. Đ ý rng, theo lut c, quân Hu ăn ngang, dc và hai đưng chéo.
Vic kim soát theo chiu ngang là không cn thiết vì mi dòng đưc xếp đúng
mt quân H u. V ic kim soát theo chiu dc đưc ghi nhn nh dãy biến logic dj vi
qui ưc Oj bng true nếu ct j còn trng. Đi vi 2 đưòmg chéo ta nhn xét rng mt
đưng có phương trình i+j = const, còn đưng kia i-j = const (2 < i+j < 2n, 1-/7 < i-j <
n-l), t đó đưng chéo th nht đưc ghi nhn nh dãy biến lôgic hj (2 < j < 2n) và
đưng chéo th hai, nh dãy biến logic Cj {\-n < j < n-\) vi qui ưc các đưng này còn
tr n g n ế u b iế n tư c m g n g c ó g iá tr true. C á c b iế n tr n g t h á i Qj,
b, Cj
c n đ ư c k h i g á n
giá tr true trong th tc Init. N hư vy giá tr j đưc chp nhn khi và ch khi c 3 biến
98
Chương 4. Bài ĩoáìì ỉiệĩ
O, b^p C.j cùng có giá tr true. Các biến này cn gán \ì false khi xếp xong quân Hu
th i và tr li true sau khi gi Result hay Try{ị-\-ì). Các phn khác đưc gii quyết như
các thí d trưc.
{Chương trinh giãi bài toán Xếp Hu}
var
n: integer;
x: array L .20] of integer:
a: array [1.20] of boolean:
h: array[2.A0] of boolean;
c: array[~19.J9] of boolean;
count: word;
procedure Init;
var i: integer;
begin
writeCn = readln(n):
count ;= 0;
for i := I to n do a[JI ;= true;
for i ;= 2 to do h[i] ;= true:
f o r i ;= l- n 0 Ĩ- do C'lij ;= true:
end;
procedure Result;
var i: inícỉer;
begin
count := couni+l;
write(counf:5, \ ');
for i ;= 7 to n do wnte(x[ij:3);
writeln;
end;
procedure Tryi: integer);
varj: integer;
begin
for j ;= 1 to n do
if a[j] and h[i+jj and c[i-jj then
begin {chp nhn jj
xlii
99
Phn 1. Lý thuyết t hp
{ẹhi nhn trn ĩhái mi}
alìì :=false; h[i+jl false; c[i-jj :=false,
if i = n then Result else Try(i+):
{trà lại trng thái cũ}
aljl := true; hi+jl := true; c[i-jl . = true;
end;
end;
Begin (main program)
Init;
TryiD;
wriiei'Go Enter đ kết thúc... '); readin:
End.
Dưi đây là s cách xếp Hu ng vi mt sô' giá tr n\
n
4
7 8 9
10
11
12 13
14
2 40
92 352
724 2680
14200 73712 i 365596
Nghim đu tiên m à chưcfng trình tìm đưc ng \'\n = 8
.v = (l,5. 8, 6, 3, 7, 2, 4)
nó tương ng vi cách xếp Hu cho bi hình 6.
H ình 6. M t li gii ca bài toán xếp hu khi « = 8
Cây lit kê li gii theo thut toán quay lui đ lit kê các cách xếp hu vi /7=4
đưc m ô t trong hình 5 (hai nhánh còn li là đi xng vi hai nhánh đu).
100
'tì'
&
Ö-
%
Ccicìì xếp (2, 4, 1,3)
H ình 5. Câv lit kê các cách xếp hu trên bàn c 4x4
T h í d 5. Lit kê tt c các cách xếp k< n quân Hu trên bàn c nxn sao cho chúng
knong n đưc ln nhau đng thòi chúng khng chế tt c các ô ca bàn c.
101
Phn I. Lý thuyết t hợp
Gii. Ta có th gii bài toán đt ra bng cách lit kê tt c các cách chn ra k dòng đ
xếp các con hu, ng vi mi cách chn đó áp dng phương pháp thí d 4 đ lit kê
các cách xếp hu vào k dòng đã chn sao cho chúng không ăn đưc ln nhau đng thi
khng chế tt c các ô ca bàn c. Chương trình gii bài toán này ta không dn ra
đây. Điu đáng lưu ý là khác vi bài toán trong thí d 4, bài toán đây trong rt nhiu
trưng hp là không có lời gii. Trong bài toán này, ngưi ta còn quan tâm đến s k
nh nht tho mãn điu kin đt ra. Bng dưi đây cho thy mt s giá tr đã biết cùa
k
n 1 2 3
4
5 6 7 8
9
10
11
12
13
Krn 1 1
1 t
3
3 4 4
5 5 5
5 7
7
n
14
1
16
17
1
19
1 20
1
22
23 24
25
^niin
8
1 ^
9
9
1 <10 <11
1 1
<13
<13 <13
13
Các ô có du bt đng thc là còn chưa xác đnh đưc chính xác giá tr ca k,.
Vi n= 15, đ lit kê tt c các li gii ca bài toán khi k =9 và chng m inh bài toán
không có li gii khi k=8 chương trình viết trên ngôn ng c ca các tác gi Gibbons và
W ebb đã phi s dng thi gian tương ng là 58.4 và 23.5 gi trên máy DEC ALPHA
3000/600. Đ ch ra vi «=16, khi k=s bài toán không có li gii, chucfng trình nói trên
đã chy mt 113.7 gi máy.
Hy vng rng thí d cui cùng này giúp chúng ta, m t mt, hình dung dưc s
phc tp ca các bài toán lit kê t hp, m t khác, thy rng lit kê vi s tr giúp ca
máy tính là biên pháp đ gii nhiu vn đ tn ti trong t hp.
C hươ ng 4. B à i ĩo á n lit kê
Bài tp
Trong các hài 1-5 hãy v cây lit lời gidi theo thuật toán quay lui đ giải các hài
toán Ht kê t hợp đt ra.
1. Gi s A, B, . . F trên hình 1 là các hòn đo và các đon ni là các cây cu ni
cnúng. M t ngui dd lch Khởi hành ¿ A đi t iiòn đo này sang hòn đo Ichác. Ngưi
du ich s dng ii đ àn trưa nếu như tiếp tc đi s phi đi qua cái cu nào đó hai ln.
(a) Lit kê các cách mà ngưi du lch có th đi cho đến khi dng li ăn trưa.
(b) Cho biết nhng đim nào ngưi du lch có th dng li ăn trưa?
2. Hai đi bóng chuyn A, B thi đu trong mt gii vô đch quc gia. Đi thng trong
trn đu s là đi giành đưc ba hip thng trưc. Hãy lit kê tt c các kh năng có th
ca trn đu gia hai đi.
3. Lit kê tt c các cách mt th t ca 4 sô' t nhiên 1, 2, 3, 4.
4. Lit kê các xâu nh phân đ dài 5 không cha hai s 0 liên tiếp.
5. Lit kê các chnh hp lp chp 4 t 3 ch A, B, c không cha hai ch A hoc hai ch
B.
Lp trình trên PASCAL giải các hài toán lit sau bằng thut toán quay lui
6. Lit kê lt c các phn t ca
D =
{ x = ( x p x 2 , . . . , x j :
^ c i j X j = b , X j
g { 0 , 1 } , ; = 1 ,2 ,...,/? }
7= 1
trong đó ;, ¿2^^ » b là các s nguyên dương.
7. Lit kê tt c các phn t ca
D = = = b , Xj }
7=1
trong đó /, Ũ
2
, ... , a, h là các s nguyên dương, z+là tp các s nguyên không âm.
8. Cho tp X = (1,2, n . Hãy lit kê tt c các phân hoch tp X ra thành k tp con
{k < n).
103
Phán J. Lý thuyết l hợp
9. Cho s nguyên dưcmg N. Hãy lit kê tt c các cách biu din N dưi dng lng ca
mt s s nguyên dương.
10. H ình vuòng th n bí (ma phương) bc n là ma trn vuông cp n vi các phn t là
các s t nhiên t 1 đến tho mãn tính cht: "Tong các phn t trên mi dòng, mi
ct mi mt tronq hai đưng chéo đu có cùng mt giá tr".
Thí d: Dưi đây là mt m a phương bc 3
8 1 6
3 5 7
4 9 2
Đi vi m a phương này, ta có tng các phn t trên các đòng là:
8-f 1 -i-6 = 3 + 5 + 7 = 4 + 9 + 2 = 15;
tng các phn t trên các ct :
8 + 3 + 4 = 1 + 5 + 9 = 6 + 7 + 2 = 15;
tng các phn t trên hai đưng chéo :
8 + 5 + 2 = 6 + 5 + 4 = 15.
Hãy viết chương trình lit kê tt c các ma phương bc n = 3, 4 không sai khác nhau bi
các phép biến hình đơn gin (quay, đi xng).
(Chú ý: Bài toán đếm s lưng ma phương bc n mi ch gii đưc vi /ì = 3 ,4 , 5.)
11. T am giác th n bí. Cho mt lưi ô vuông gm nxn ô và s nguyên dương k. Tim
cách đin các s t nhiên t 1 đến 3n-3 vào các ô ct đu tiên, dòng cui cùng và
đưng chéo chính sao cho tng các s đin trong ct đu tiên, dòng cui cùng và đưng
chéo chính ca lưi đu bng k.
Ví d : Vi = 5, : = 35 ta có cách đin sau:
11
10 2
9 3
1 7
4 5
6 8
12
Hãy phát trin thut toán da trên thut toán quay lui đ ch ra vi giá tr ca n và k cho
trưc bài toán đt ra có li gii hay không? Nếu câu tr li là khng đnh ch cn đưa ra
m t li gii.
104
C lníơn g 4. B à i toán lié ! kè
12. Bài toán v 8 qu àn c: Cho 8 quân c: Vua (V), Hu (H), 2 con Nga (N), 2 con
Tưng (T) khác màu, 2 con Xe (X). Tim cách xếp chúng lên bàn c quc tế 8x8 ô sao
cho chúng khng chế đưc nhiéu ô ca bàn c nht. Lưu ý rng: V trí quân c đng
không coi là b nó khng chế, Các v trí nm trong kh nàng khng chế ca quân c
nhưng b mt quân nào đó chn đưng di chuyn đến đó cOng coi là chưa b quân cò đó
khng chế.
Tlií d: Cách xếp các quân c trong nìiih dưưi đây khng chế đưc 49 ô:
T
N
N
H
V
X
X
abcdef gh
(Các ô bôi đen là chưa bị khng chế bởi các quân c xếp trên bàn c).
Hãy s dng thut toán quay lui gii bài toán đt ra.
13. Đin s. Viêĩ chương trình gii bài toán sau đây;
Cho bng vuông gm N xN ô vuông. Các dòng ca bng đưc đánh s t 1 đến N, t
trên xung dưi. Các ct ca bng đưc đánh s t 1 đến N t trái sang phi. Bên cnh
mi ct và mi dòng ca bng đu có ghi mt s nguyên dương. Gi X là s viết bên
cnh ct i, còn Yj là s viết bên cnh dòng j.
Yêu cu : Cn đin các s nguyên dương vào mt s ô ca bng sao cho:
Các s đưc đin phi khác nhau tng đôi;
Mi dòng và mi ct cn đin đúng hai s;
Tích ca hai s đin trên ct / phi bng X,;
Tích ca hai s đin trên dòng j phi bng Yj-,
Hình dưi đây cho thí d v lời gii ca mt bài toán dng va nêu.
105
Phn I. Lý thuyết t hợp
6 3 18
9
1
9
12 11
132
4
8 32
2 5 10
54 6 12 20 88
D liu: Vào t file văn bn NUMBOARD.INP:
Dòng đu tiên ghi s nguyên N (2 < yv < 10);
D òn g th h a i g h iy v s x ,, (1 <A;< \000, i N):
Dòng tí ba ghi N s Y, (1 ^Yj< 1000,y = 1 , N).
K ết q u : G hi ra file văn bn NUM BOARD.OUT: Dòng th ] ghi N sô' trên dòng rh I
ca bng; D òng th hai ghi N s trên dòng th hai ca bng,..., Dòng th N ghi N s
trên dòng th N ca bng. Qui ưc: Ghi sô' 0 vtrí các ô không đưc đin s.
Ví d : Ni dung ca các file d liu và kết qu tương ng có th như sau
NUM BOARD.INP NUM BOARD.OUT
2 1 3
2 12 2 4
3 8
3 1 2 0
5 8 18 5 0 6
2 30 12 0 4 3
5
6 3 0 0 0
54 6 12 20 88
9 0 1 0 0
18 9 132 32 10
0 0 12 0 11
0 0 0 4 8
0 2 0 5 0
106
Chươĩ 5. B à i ĩoân ti ưi ĩc! hp
5
BÀI TOÁN TI ƯU
5.1. Phát biu bài toán
Trong rt nhiu vn đ ng dng thc tế ca t hp các cu hình t hp còn đưc gán
cho m t giá tr bàng sô' đánh giá giá tr s dng ca cu hình đi vi mc đích s dng
c th nào đó. Khi đó xut hin bài toán: Hãy la chn trong s các cu hình t hp
chp nhn đưc cu hình có giá tr s dng tt nht. Các bài toán như vy chúng ta s
gi là bài toán ti ưu t hp. Dưi dng tng quát bài toán ti ưu t hp có th phát biu
như sau:
Tim cc tiu (hay cc đi) ca phiếm hàm
f ) -> min (max),
vi điu kin
.r e D,
trong đó D là tp hu hn phn tử.
Hàm f{ x ) đưc gi là hàm mc tiêu ca bài toán, mi phn ì X e D đưc gi là
mt phương án còn tp D gi là tp các phương án ca bài toán.
107
Phn 1. Lý thuyết t hợp
Thông thưng tp D đưc mô t như là tp các cu hình t hp tho mãn mt s
tính cht cho trưc nào đó.
Phương án X* e D đem li giá tr nh nht (ln nht) cho hàm m c tiêu đưc gi là
phương án ti ưu, khi đó giá tr / = f{x ) đưc gi là giá tr ti ưu ca bài toán.
Dưi đây chúng ta s gii thiu mt s mô hình ti ưu hoá t hp truyn thng. Các
mô hình này, mt mt, là nhng mô hình có rt nhiu ng dng thc tế, mt khác,
chúng gi vai trò quan trng trong vic nghiên cu và phát trin lý thuyết ti ưu hoá tổ
hp.
Bài toán ngưi du lch.
M t ngưi du lch mun đi tham quan n ìhành ph r ,, Tj, r. X ut phát tù nii thành
ph nào đó ngư! du lch mun đi qua tt c các thành ph còn li, mi thành ph đúng
mt ln, ri quay tr li thành ph xut phát. Biết C là chi phí đi t thành ph T đến
thành ph Tj (/, j = , 2,..., /), hãy tìm hành trình (mt cách đi tho m ãn điu kin đt
ra) vi tng chi phí là nh nht.
Rõ ràng ta có th thiết lp tương ng 1-1 gia hành trình
vói mt hoán v (;r(l), tt.),..., nn)) ca n s t nhiên 1, 2,..., n. Đt
f{7Ỉ) =
ký hiu n tp tt c các hoán v 7Ĩ= (;ĩ(l), 7t{2)
.....
n{n)) ca n s t nhiên 1, 2,...,
n. Khi đó bài toán ngưi du lch có th phát biu dưi dng bài toán ti ưu t hp sau:
min {f{7ĩ) : ;rG n }.
Có th thy rng tng s hành trình ca ngưi du lch là n\, trong đó ch có (/7-1)!
hành trình thc s khác nhau (bi vì có th xut phát t m t thành ph bt k, nên có
th c đnh m t thành ph nào đó là thành ph xut phát).
Bài toán cái túi.
M t nhà thám him cn đem theo mt cái túi có trng lưng không quá b. Có n đ vt
có th đem theo. Đ vt th j có trng ng là Oj g tr s dng là Cj 0 = 1 , 2,..., /).
Hi rng nhà thám him cn đem theo các đ vt nào đ cho tng giá tr s dng ca
các đ vt đem theo là ln nht?
M t phưcmg án đem đ ca nhà thám him có th biu din bi vectơ nh phân đ
dài n: X = {X, X2,..., xj, trong đó Xj = 1 có nghĩa là đ vt th j đưc đem theo và Xj = 0
có nghĩa trái li, Vi phương án X, giá tr đ vt đem theo là
108
Chirơníị 5. i íoún ti ưu t hp
f{x) = c^x^ ,
ý--i
tng trng lưng đ vt đem theo là
và bài toán cái túi có th phát biu dưi dng bài toán ti ưu t hp sau:
Trong s các vectơ nh pliân đ dài n tho mãn điu kin g(x) < b, hãy tìm vectơ /
cho giá tr nh nht ca hàm mc tiêu/(.v);
min { /U ): ,í>(.v) <b \.
Bài toán cho thuê m áy.
M t ông ch có m t cái máy đ cho thuê. Đu tháng ông ta nhn đưc yêu cu thuê
máy ca m khách hàng. Mi khách hàng / s cho biết tp N các ngày trong tháng cn
s dng m áy (/ = 1, 2,..,, m). ô n g ch ch có quyn hoc t chi yêu cu ca khách
hàng hoc là nếu nhn thì phi b trí máy phc v khách hàng i đúng nhng ngày mà
khách hàng này yêu cu. Hi rng ông ch phi tiếp nhn các yêu cu ca khách như
thế nào đ cho tng s ngày s dng máy là ln nht.
Ký hiu / = {1, 2,..., m] tp ch s khách hàng, s là tp hp các tp con ca /.
Khi đó tp hp tt c các phương án cho thuê máy là
D = \ J c: s \ Ni-C\ N = 0 , Vk ĩ^p, k,p eJ \.
và vi mi phương án 7 6 D
/ Ơ ) = Z I M
js J
s là tng s ngày s dng máy theo phương án đó. Bài toán đt ra có th phát biu dưi
dng bài toán ti ưu t hp sau:
m ax { f(J) :JeD .
Bài toán đóng thùng.
Có n đ vt vi trng lưng là W|, W, w. Cn tìm cách xếp các đ vt này vào các
cái thùng có cùng dung lưng là h sao cho s thùng cn s dng là nh nht có th
đưc.
Ta có th gi thiết là
vv, <h,i= 1,2,.., n.
109
P h n I . L th u y ế t t hp
Do đó s thùng cn s dng đ cha tt c các đ vt là không quá n. Vn đ là cn s
thùng ít nht. Ta s m sn n cái thùng. Bài toán đt ra là hãy xác đnh xem mi mt
trong s n đ vt cn đưc xếp vào cái thùng nào trong s n cái thùng đã m đ cho s
thùng cha đ là ít nht. Phân tích va nêu cho thy bài toán đóng thùng là bài toán ti
ưu t hp.
Bài toán ph àn công.
Có n công vic và n th. Biết Cj là chi phí cn tr đ th / hoàn Ihành công vic j (/, j =
1, 2,..., rì). Cn phi thuê th sao cho các công vic đu hoàn thành và mi th ch thc
hin mt công vic, mi công vic ch do mt th thc hin. Hãy tìm cách thuê sao cho
tng chi phí thuê th là nh nht.
Rõ ràng mi mt phương án b trí th thc hin các công vic
Cng vic Th thc hin
1
^ 1 )
2
4 2 )
...
...
n
7 i { n )
tương ng vi mt hoán vị n = (^ 1 ) , n{2)
.....
Tĩin)) ca / s t nhiên 1, 2,..., n. Chi phí
theo phương án b trí trên là
f{ĩì) + Crn2).2 + +
Bài toán đt ra, đưc dn v bài toán ti ưu t hp:
min {f{7ĩ) : 7Ĩ }.
Bài toán lp lch.
Mi mt chi tiết trong s n chi tiết D |, D
2
,:., D cn phi đưc ln lưt gia cônR trên m
máy Mị, M,. Thi gian gia công chi tiết D, trên máy Mj là . H ãy tìm lch (trình
t gia công) các chi tiết trên các m áy sao cho vic hoàn thành gia công tt c các chi
tiết là sm nht có th đưc.
Ta s xét bài toán trên vi thêm gi thiết là các chi tiết phi đưc gia công mt cách
liên tc, nghĩa là quá trình gia công ca mi m t chi tiết cn phi đưc tiến hành mt
cách liên tc hết máy này sang m áy khác không cho phép có khong thi gian dng khi
chuyn t máy này sang máy khác. Tm h hung như vy rt hay gp trong các ngành
sn xut công nghip. Chng hn, trong công nghip luyn thép, vt liu cn phi đưc
gia công mt cách liên tc vì vic gián đon s dn đến s gim nhit đ ca vt liu và
110
Ch ư ơì 5. k ìi oáf ĩ()i lãi ĩ hợp
điu đó cn tr vic gia công tiếp theo. Tình hung ơrìg l cũng có th xy ra tropg
mt s ngành ca công nghip hoá cht.
Rõ ràng m i mt lch gia cône các chi tiết trên các máy trong tình hung như vy
s tương ng vi mt hoán vì rr=(7ĩ{\), /ĩì)) ca n s t nhiên 1, 2,..., n. Thi
gian hoàn thành theo lch trên đưc tính bi hàm s
/7-1 ni
/'(TT) - ĩt( / + ) )
J=\
ĩ = l
C-. = max
\<k<m
trong đó Cịj = Sj- s,, Sj - thi đim t đu thc hin vic gia công chi tiết / (/, / - 1,
2,..., n). Ý nehĩa ca h s C, có th gii ihích như sau; nó tng thi gian gián đon
(đưc tính t khi bt đu gia công chi tiết 0 gây ra bi chi tiết j khi nó đưc gia công
sau chi tiết / trong lch gia công. Vì vy, c, có th tính theo công thc:
i-
. / = 1
/ = 1
Vì vy, bài toán đt ra dn v bài toán tối ưu t hp sau
min {f{7ĩ)\ ; r G n ).
Trong thc tế lch gia công thưns còn phi tho màn thêm nhiu điu kin khác.Vì
nhng ng dng quan trng ca vn đ này mà trong li ưu hoá t hp đã hình thành
mt lĩnh vc lý thuyết riêng v các bài toán lp lch gi là thuyết lp lch (hay quy
hoch lch).
5.2. Các thut toán duyt
5.2.1. Duyt toàn b
Mt trong nhng phương pháp hin nhiên nht đ gii bài toán ti uu t hp đt ra ;
Trên cơ s các thut toán lit kê t hp ta tiến hành duyt tng phưcmg án ca bài toán,
đi vi m i phương án ta đu tính giá tr hàm mc tiêu ti nó, sau đó so sánh giá trị
hàm mc tiêu ti tt c các phương án đưc lit kê đ tìm ra phương án ti ưu. Phương
pháp xây dng theo nguyên tc như vy có tên gi là phương pháp duyt toàn b. Duyt
toàn b là khó có th thc hin đưc ngay c trn nhng máy tính đin t hin đi nht.
Ví d đ lit kê hết
15! = 1 307 674 368 000
hoán v trên m áy tính đin t vi tc đ tính toán 1 t phép tính m t giây, nếu đ lit kê
mt hoán v cn phi làm 100 phép tính, thì ta cn mt khong thi gian là 130767 giây
111
Phn 1. Lý thuyết t hợp
> 36 tiếng đng h! Vì vy cn phi có nhng bin pháp nhm hn chế vic tìm kiếm
thì mi có hy vng gii đưc các bài toán ti ưu t hp thc tế. Tt nhiên đ có th đ ra
nhng bin pháp như vy cn phi nghiên cu k tính cht ca bài toán ti ưu t hçfp c
th. Nh nhng nghiên cu như vy, trong mt s trưcmg hp c th ta có th xây dng
nhng thut toán hiu qu đ gii bài toán đt ra. Tuy nhiên phi nhn mnh rng trong
nhiu trưng hp (ví d trong các bài toán ngưi du lch, bài toán cái túi, bài toán cho
thuê máy nêu trên) chúng ta chưa th xây dng đưc phương pháp hu hiu nào khác
ngoài ohương pháp duyl toàn b. Khi đó, mt vn đ đt ra là trong quá trình lit kê lời
gii ta cn tn dng các thông tin đã tìm đưc đ loi b nhng phương án chc chn
không phi là ti ưu. Trong mc tiếp theo chúng ta s xét mt sơ đ tìm kiếm như vy
đ gii các bài toán ti im t hp mà trong tài liu tham kho đưc biết đến vi tên gi:
thut toán nhánh cn.
5.2.1. Thut toán nhánh cn.
Ta s mô t tư tưng ca thut toán trên mô hình bài toán ti UXI t hp tng qi 't sau
min f{x) X & D ],
trong đó D là tp hu hn phn tử.
Gi thiết rng tp D đưc mô t như sau
D - \x = (.r,, X j , x„) e A|X ... X A: X tho mãn tính cht P],
vi Aị, A , là các tp hu hn, còn p là tính cht cho trên tích Đ cac>\| X / i j X . .. X
-
Nhn thy rng, các bài toán va trình bày mc trưc đu có th mô t dưi dng
bài toán trên.
Vi gi thiết v tp D nêu trên, chúng ta có th s dng thut toán quay lui đ lit
kê các phương án ca bài toán. Trong quá trình lit kê theo thut toán quay lui, ta s
xây dng dn các thành phn ca phương án. M t b gm k thành phn (|, Ũ
2
, ÖJ.)
xut hin trong quá trình thc hin thut toán s gi là phương án b phn cp k.
Thut toán nhánh cn có th áp dng đ gii bài toán đt ra nếu như có th tìm
đưc m t hàm g xác đnh trên tp tt c các phương án b phn ca bài toán tho mãn
bt đng thc sau:
g(a,, «2
-----
-
a^) < min j/(x): .r e D, X; = a , , = 1, 2,..., (*)
vi mi li gii b phn (ứ|, Ü
2
, a^, và vi mi /: = 1, 2,...
Bt đng thc (*) có nghĩa là giá tr ca hàm g ti phương án b phn (|, 02, a^)
là không vưt quá giá tr nh nht ca hàm mc tiêu ca bài toán trên tp con các
phương án
112
Chương 5. B à i oáì íấi ưu l h>
C2, .... = \ X e D : A', ^ O J = 1, 2
......
k },
hay nói mt cách khác, Ũ
2
J , a ) cn dưi ca giá tr hàm mc tiêu trên tp
0 ( |, Ci
2
, a^). Vì l đó, hàm đưc gi hàm cn dưi, và giá tr g{a^, Oj, , O)
đưc gọi là cận i ca tập D{a^, Ơ2, .... C). Do ihể đng nht tập DiO, Ũ2, ơ.)
vi phưcmg án b phn (a,, Ũ
2
......
Ci^), nên ta cũng gi giá tr gici, í/2, . . . , Ơ.) là cn
dư i c a p h ư ơ n g án b p h n C
2
, .... Ch).
Gi s đã có hàm g. Ta xét cách s dng hàm này đ gim bt khi lưng duyt
trong quá {rình duyt tt c các ptiưưng án theo inut tcán quay lui. Trong quá tnnli lii
kê các phươíig án có th đã thu đưc rnt s phương án ca bài toán. Gi X là phương
án vi giá tr hàm mc tiêu nh nht trong s các phương án đã tìm đưc, ký hiu 7 =
/( X ). Ta s gi X là phương án tt nht hin có, còn / là k lc. Gi s đã có / ,
khi đó nếu
> / ,
thì t bt đng thc (*) suy ra
/ < Ũ
2
..........í/<) < min |/(.v): e D, .V, =: a, , / = 1, 2,..., k],
th ế tp con các phương án ca bài toán D(í/j, «2. . «<) i-'hac chn không cha phương
án ti ưu. Trong trưng hp này ta không cn tiếp tc phát trin phương án b phn {,
Ơ
2
, . , a ), nói cách khác là ta có ih loi b các phương án trong tp D (|,
0 2
, , <3^)
khi quá trình tìm kiếm.
Thut toán quay lui lit kê phương án cn sa đi lại như sau
procedure Try(k);
(* Phát trin phương án b phn (a,, Ì2,a;,.,)
theo thut toán quay lui có kim tra cn dưi
trưc khi tiếp tc phát trin phương án *)'
begin
for G A do
if <chp nhn Si,> then
begin
Xk := a,;
if k = n then < Cp nht k l o
else
if g(a,, a^,aj < f then Try(;-+Ĩ)
end;
end;
113
Phn /. Lý thuyết t hợp
Khi đó, thut toán nhánh cn đưc thc hin nh th tc sau
procedure Nhanh_can;
begin
f := +co;
(* Nếu biết mt phương án X nào đó thì có th đt f = f( X ) *)
Try(J); _
if f < +00 then < f là giá tr ti ưii, X là phưoìig án ti ưu >
else < bài toán không có phương án >;
end;
Chú ý rng nếu trong th tc Try ta Ihay câu lnh
if k = n then < Cp nht k l o
else
if g(a a j ,a , ) < f then Try(k+1)
bi
if k = n then < Cp nht k l o
else Try(k+1)
thì th tc Try s lit kê toàn b các phương án ca bài toán, và ta thu đưc thut toán
duyt toàn b.
Vic xây dng hàm g ph thuc vào tng bài toán ti ưu t hp c th. Thông thưng ta
c gng xây dng nó sao cho;
Vic tính giá tr ca g phi đoíi gin hơn vic gii bài toán ti ưu t hp vế
phi ca (*).
G iá tr c a « 2. . « t) p h i s á t v i g iá tr c a v ế p h i c a (* ).
Rt tiếc là hai yêu cu này trong thc tế thưng đi lp nhau.
Dưi đây chúng ta s xét mt s thí d minh ho cho thut toán va trình bày.
a) Bài toán cái túi.
Chúng ta s xét mt dng bài toán cái túi na rt hay đưc s dng trong các ng
dng thc tế (v nguyên tc, mô hình đây và mô hình đã trình bày trong mc 5.1 là có
th qui dn v nhau). Thay vì có n đ vt như m ô hình trong mc 5.1, đây ta gi thiết
rng có n loi đ vt và s lưng đ vt mi loi là không hn chế. PLhi đó ta có mô
hình bài toán cái túi biến nguyên sau đáy: Có n loi đ vt, đ vt th j có trng lưng
ƠJ và giá tr s dng là Cj 0 = 1 - 2,..., n ) . Cn cht các đ vt này vào m t cái túi có
trng lưng là h sao cho tng giá tr s dng ca các đ vt cht trong túi là ln nht.
114
ChU(ín¡f 5. Bùi Ĩ(XUÌ toi ưu ì hp
Mô hình toán hc ca bài toán có dng sau; Tini
/ -m ax {/(x) = Xc,-v,:Zû,-v, 6 2 ,,y = 1,2,...,« }, (1)
7 = 1 7 = 1
trong đó là tp các s nguyên không âm.
Ký hiu D là tp các phương án ca i toán ( 1 ):
D ¿ a X < h , .V z , j - 1 , 2 .. . n }.
./ I
Không gim tng quát ta gi thiết rng các đô vt đưc đánh s sao cho bãt đng thc
sau đưc tho mãn
c j a ^ > í \ l a
2
> ...> c la . (2)
Đ xây dng hàm tính yn dưi, cùng với bài toán cái i (1) ta xét bài toán cái tiíi biến
liên tc sau: Tim
g = max { / ( x ) = Y,c¡xr. Y jüjX j < b, Xj > o, ý = l ,2 ,...,/ 7 },
./-1
(3)
Mnh đ. Phương án fi ưu ca hài íũán (3) là vecĩơ X - ( A'| ,
'2
, A'^, ) vi cúc
thành phn dưc xc đnh hi công ỉlìc:
,V] = b / Ci , = . . . = = 0 .
ĩĩ) giá í r ti ưu là /a ,
Chng minh. Thc vy, xét A' - (.V,. Ai,.... ,v) là mt phương án lu ý ca bài toán (3).
Khi đó t bt đng thc (3) và do ,v^ > 0, ta suy ra
C)X^ > (C/ C ) üj.Xj ,j = 1,2, n
suy ra
^ J ^ J - K -'; = (^1 = S -
;=1 ./ = 1 j = \
Mnh đ đưc chng minh.
Bây gi, gi s ta có phương án b phn cp k: (W|, w¿). Khi đó giá tr s dng
ca các đ vt đang có trong túi
ơ. = C /í| + C-2 í/2 + ' - + Q-
115
Phn . Lý ĩhuyếĩ t UT)
và Irng lưng còn li ca cái túi
6^. = - aj W| + «2 ^2 -
Ta có
max{ fix): X G D, = Uj = 1, 2 , k ]
^ max {ơ* + '¿CjXj : Y^üjXj < b^, Xj G z^,j = k + ì,k 4 2,...}
j=k*-\ J=k-^\
<ơ-^ + max{ >
0,7
= : + 1,^ + 2,...,;?}
J^.kri j=k^\
(theo M nh đ: giá tr s hng th hai là b/. /
= ơ-t + c,
Vy ta có th tính cn trên cho phương án b phn ( « , «2- i) bi công thc
C hú ý: Khi tiếp tc xây dng thành phn th ^+1 ca ỉời gii, các giá tr đ c cho
s là 0, 1,..., [h/. / a,^.| ]. Do có kết qu ca mnh đ, khi chn giá tr cho Xi.+ ta s duyt
các giá tr đ c theo th t gim dn.
Th í d. Gii bài toán cái túi sau theo thut toán nhánh cn va trình bày
f{x) = 10 -V| + 5 JÍ2 + 3 JCj + 6 X4 > max,
5 X, + 3 ^2 + 2 Xj + 4 X4 < 8,
Xj G ,y =1, 2, 3, 4.
Gii.
Quá trình gii bài toán đưc mô t trong cây tìm kiếm trong hình 1. Thông tin v mt
phưoTig án b phn trên cây đưc ghi trong các ô trên hình v tương ng theo th t sau:
đu tiên là các thành phn ca phương án, tiếp đến, ơ là giá tr ca các đ vt đang cht
trong túi, vv - trng lưng còn li ca túi và g - cn trên.
Kết thúc thut toán, ta thu đưc phương án ti ưu là / = ( 1, 1,0, 0), và giá tr ti ưu
l à /= 15.
116
ClìươnỊ> 5. Bài loán ti ưu t hp
1 ....... .
Gc; +'X)
^ = 0
( l ) ; a = 10;
k-= 3 ;ì- I 5
(0 ); ơ= 0 ;
vi- 8 ; .^ - 4 0 /3
-v, = 0
( 1. 1):
ơ=15;
H '= 0 ; .?=15
a-3 = 0
( 1, 1,0 )
; ơ=15;
H ' = 0 ;
A - 15
.V, = 0
ri,.Oi: ơ - 10;
VI-3; ,í>=14,5
I
Loi vì cn trên < k lc
Thu đưc phương án ca bài loán.
Cp nht lại k lục.
H ình 1. Gii bài toán cái túi bàng thut toán nhánh cn
Dưi đây là chương trình trên PASCAL gii bài toán cái túi theo thut toán nhánh
cn va trình bày.
uses crt;
const in f = 25000;
type arm = array 1 ..50J o f in te r;
arrn - array! . .50/ of real;
var
c ,a :a r n il;
x ,x o p t,in d : arm ;
n : integer:
w ,fopt, cost, weight: real:
procedure Init:
var i,j,tg:integer;
f.real:
117
Plìn . Lý thuyết t hợp
begin
Sap xep cac do vat theo thu ĩu kìĩon^ ían cua c[i]/a[il
fo p t:=
0
; w eight:-
0
:
fo r i:= to n do ìĩd[i]:~i;
fo r i:= to n
- 1
do
heqin
fo r j:=i'\-J ĨO n do
ifc[i]la[i]< c[j]la[jj) ĩhen
begin
í:= c[i: c[iJ:=c[j; c f j j - t ;
:= a[ĩj; a[i.a íj; a[j:=f;
tg:= ind/ij; ind[il := ind[jj: ind[j]:=ĩg;
end;
end;
end;
procedure Readfiie;
var i : integer;
f : text; name : siring;
begin
writeCCho ten file du lieu: ');readln(name);
assign(f,name):reseĩ(f); read(f,n,w);
fo r j: = l to n do read(f,a[jj);
fo r j:= I to n do read(f,c[jj);
close(f);
w riteln(Trong luong cai ĨUÌ: \w :l :0);
w n teln (V E C TO GIA TRJ DO V A T );
fo r j: ~ I to n do write(c[j]:4:0); writeln:
w n teln (V E C TO TRON G LUO NG DO V A T );
fo r j : - l to n do w rite(a[jj:4:0); writeln:
end;
procedure G hin ha n _kyjuc;
var i: integer;
begin
i f cost > fo p t then
begin
xopt: fopt:= cost;
end;
end;
118
Chuang 5. Bái toan toi lúi to hap
procedure Branch _and_Boiind{i: inte ge r):
var j,t:integer;
begin
t:= trunc((w-weight}lalij):
fo r j:= í down to O do
begin
x[i]-=i;
w e ig h t : - - w e ig h t + a f i ]
;
c o s t : = C O S Í
+ c //y / ;
i f i= n t h e n G h i n h a n j c y j u c
e ls e
if cost + c[i+I ¡"^'(w-weight)la[i-\~l J > fo p t
then Branch_and_Boiind{/+7 j;
weight:=weight-a[ i /*.v/ ij:
cost:=cost-c[ /y*x//7 ;
end;
end;
procedure Inkc[;
var j,i:integer;
begin
K K r Q U A T IN H T O A N
writeln(T ong gia tri cua cac do vat: 'fo p t:l:
0
):
wriieln('Phuong an dent do: '):
fo r j:= J to n do writeln('So luong do v a t i n d l j j / : \xopt[j]:4);
write('Go Enter de tiep tuc...');n'aclln;
end;
BEG IN
clrscr;
Readfile;
Init;
Branch _and_Bound( 1);
Inkq: readin:
END .
119
Phn I. Lý thuyết l hp
b) Bài toán ngưi du lch.
Mô hình ca bài toán đã trình bày trong inc trưc. C đnh thành phô' xul phát là 7’|,
bài toán ngưi du lch dn v bài toán:
Tìrn cc tiu ca hàm
-h
.......
-'») = 1 -^2] + f'U;- X 3 ] + ... + c[x,.¡, A-J + í [a', 11 -> min,
với diu kin
(x'
2
, A ' v
...........
v) l à hoán vị ca các s 2, 3 , n.
Ký hiu
r = min { (■[/,;] , /,ý = 1, 2 , ỉ, i Î
ch phí đi lại nh nht gia các thành ph.
Đ có đưc thut toán nhánh cn gii bài toán ngưi du lch, trưc hết cn đưa ra
cách đánh giá cn dưi cho phương án b phn. Gi s ta đang có phương án b phn
(W|, «<). Phương án này tưcíiig ng vi hành trình b phn qua k thành ph:
T I -> TiUj) T{u¡..^) -> T{u¡).
Vì vy, chi phí phi tr theo hành trình b phn này s là
ơ = c [ l,» 2 ] + c[«2> «
3
] +
Đ phát trin hành trình b phn này thành hành trình đy đ, ta còn phi đi qua n-k
thành ph còn li ri quay tr v thành ph T, tc là còn phi đi qua n-k+ \ đon đưng
na. Do chi phí phi tr cho vic đi qua mi mt trong ' n-k+ 1 đon đưng còn li đu
không ít hơn nên cn dưi cho phưofng án b phn (W|, «2- «*) có th tính theo
công thc
g{ii,
« 2 , ....
u^)
= ơ +
(n-k+l)
.
S dng cách tính cn dưi va nêu ta có th áp dng thut toán nhánh cn đ gii bài
toán ngưi du lch.
T hí d. Gii bài toán ngưi du lch vi ma trn chi phí sau
c =
0 3 14 18
15
3 0 4 22
20
17
9
0
16
4
6 2 7
0 12
9 15
11 5 0
120
Cliươní’ 5. Bùi loán i lúi l hợp
Ta có í = 3. Quá trình thc hin thut toán đưc m ta bdi cAy tìm kiếm li gii cho
trong hình 2 .
Tliông tin v int phương án b phn trên cây đưc phi trong các ô trên hình v tương
ng theo th t sau; đu tiên là các thành phn ca phương án, tiếp đến, ơ là chi phí
theo hành trình b phn và g - cn dưi.
Kết thúc thut toán, ta thu đưc phương án ti ưu (1, 2, 3, 5, 4, 1) tưotig ng vi
hình rrình
T| T, T, T, -> T., -> T.
và chi nh nht là 25.
chi phí 53. Đ t f = 53 K lc mi: f = 25
Hình 2. Gii bài toán ngưi du lch
Chương trình trên PASCAL thc hin thut toán có th viết như sau:
121
Phan 1. Ly thuyet to hcxi?
uses crt;
var
c : arra yll .
2 0
,
1
.
2 0
] o f integer;
a, xo pt : a rra y ll..
2 0
] o f integer;
chuaxet : arrayll .
2 0
] o f boolean;
n ,fop t, cmin, Can : integer;
procedure Readfde;
var f'tex t;
name :sf ring;
iJ :integer;
begin
write('Cho ten file du lieu: ');
readln(name);
assign(fn am e) ;reset(f);
rea d(fn );
fo r i: ~ l to n do
fo r j : - l to n do rea d (fc lij]);
close(f);
cm in:=m axint;
fo r i:= l to n do
fo r j : - l to n do
i f ( i o j ) and (cm in> clij]) then cm in:= cli,j];
end;
procedure Ghinhan;
var sum:integer;
begin
sum:= C an + cla[n],all]];
if sum < fo p t then
begin
xopt:= a;
fopt:= sum ;
end;
end;
procedure Try(i:integer);
var j:integer;
begin
122
Chươní^ 5. Bcii loan tối ưu t h)
Co dinh thanh pììo xuaĩ phaĩ la Thanh pho I
Duyet (n-1)! hanh rinh ĩheo nhanh can
fo r j
: - 2
to n do
ifclìuơxet[jj then
begin
a[ij:=j;
chuaxetlj]:=faìse;
can :=can-¥c[a[i~ l/ ii l ] ;
if i- n then Ghiììon
else
if C a n ^ ( n -i^I)^cmin <fopĩ then Try(i-^)
cơn:= can< [a[ĩ-l ] ,a[i] J ;
chuaxeĩ[j]:=ĩrue:
end;
end;
procedure Inkq;
var iJ'Anteger;
begin
writelnCMA TRAN CHI PHI');
fo r i:= to n do
begin
fo r j:= l to n do w rite(ciij]:4):
writeln;
end;
writelnCHanh trinh ĩoi uu CO chi p h i : 'fopt);
fo r /;= / to n do wrte(xopĩ[i/ - >
wriieln(xopt[IJ);
writeCGo Enter de tiep iuc...');reacUn;
end;
procedure Init;
var i j : integer;
begin
cmin:=maxint;
fo r i:= I to n do
begin
chuaxet [i]:=true;
fo r j : - l to n do
123
Phân . Lý thuyết t hợp
if ( i o j ) and (cm in> c[ij) then cm in :~ cfiJ;
end:
fopt:~m axinf;
Can:=0:
« / / / ; = / ;
end;
BEGN
Readfiie; ni í;
Try(2);
nkq;
END.
Hiu qu ca thut toán nhánh cn ph thuc rt nhiu vào vic xây dng hàm tính
cn dưi. Vic xây dng hàm tính cn dưi li ph thuc vào cách xây dng thú lc
duyt các phương án ca bài toán (đưc gi là th tc phân nhánh). Trên đây chng ta
trình bày cách xãy dng cn dưi khá đơn gin cho hai bài toán ni tiếng ca ti uti t
hp. Các chương trình đưc cài đt theo các thut toán đó, luy rng làm vic tt hơn
nhiu so vi duyt loàn b, nhưng cũng ch có th áp dng đ gii các bài toán vi kích
thưc nh. Mun gii đưc các bài toán đt ra vi kích thưc ln hơn cn có cách đánh
giá cn tt hơn. Mt Irong nhng phương pháp xây dng Irên tư tưng ca thut toán
nhánh cn cho phép gii bài toán ngưi du lch vi kích ihưc lớn hơn s đưc trình bày
trong mc tiếp theo.
5.3. Thut toán nhánh cn gii bài toán ngưi du lịch
Thut toán nhánh cn là mt trong nhng phương pháp gii ch yếu ca ti ưu t hp.
Như trong mc trưc đã thy, tư tưng cơ bn ca nó là trong quá trình lìm kiếm lời gii
ta s phân hoch tp các phương án ca bài toán ra thành hai hay nhiu tp con đưc
biu din như là các nút ca cây tìm kiếm và c gng bàng phép đánh giá cn cho các
nút, tìm cách loi b nhng nhánh ca cây tìm kiếm (nhng tp con các phương án ca
bài toán) mà ta biết chc chn là không cha phương án ti ưu. Mc dù trong tình
hung ti nht thut toán s tr thành duyt toàn b, nhưng trong nhiu trưng hp c
th, k thut đó cho phép rút ngn đưc mt cách đáng k quá trình tìm kiếm. Mc này
s trình bày mt cách th hin khác nhng tư tưng ca thut toán nhánh cn vào vic
xây dng thut toán gii bài toán ngưi du lch.
124
Ciươiĩ 5. Bù toán !i ưi ô' lìơp
Xét bài toán ngưi du lch phát biu trori2 mc irưc, Gi
C= c: i,j= 1 .2
.....
n ì
là ma trn chi phí. Mi hành trình ca nmri du lch
có th viết li dưi dng
(Mì), n{2)),(X2\ n(3)\. ,A^n~). 7n)).(7ĩ<n), 7ĩ(ì)),
trong đó mi thành phn (.70'-1). ^ i ) ĩ s dưc goi nil canh ca hành trình.
Trong bài toán ngưi du lch khi tiến hành tìm kiếm lời gii chúng ta s phân tp
các hành trình ra thành hai tp con: mt tp gm nhng hành trình cha mt cnh
{i,j)
nào đó còn tp kia gm nhne hành trình khns cha cnh này. Ta gi vic làm đó là
phân nhánh và mi tp con nói trên s đưc gi là mt nhánh hay mt nút ca cây tìm
kiếm. Vic phân nhánh đưc minh ho bi cây lìm kiếm:
Vic phân nhánh s đưc thc hin da trên mt quy tc c/ristic nào đó cho phép ta rút
ngn quá trình tìm kiếm phương án tối ưu. Sau khi phân nhánh ta s tính cân dưi ca
giá tr hàm mc tiêu trên mi mt trong hai tp con nói trên. Vic tìm kiếm s đưc tiếp
tc trên tp con có giá tr cn dưi nhò hơn. Th tc này s đưc tiếp tc cho đến khi
thu đưc mt hành trình đy đ, tc mt phương án ca bài toán ngưi du lch. Khi
đó ta ch cn xét nhng tp con các phương án nào có cn dưi nh hơn giá tr hàm mc
tiêu ti phương án đã tìm đưc. Quá trình phân nhánh và tính cn trên tp các phưcmg
án ca bài toán thông thưng cho phép nít ngn mt cách đáng k quá írình tìm kiếm
do ta loi đưc khá nhiu tp con chc chn không cha phương án ti ưu.
M t k thut cơ bn na ca thut toán là lính cn dưi s đưc xây dng da trên
th tc rút gn m à chúng ta s trình bày dưi đây. Sau đó nhng bưc chính ca thut
toán nhánh cn s đưc mô t thông qua mt ví d s và cui cùng ta s trình bày sơ đ
nguyên tc ca thut toán.
125
Phán . Lý thuyếĩ t hợp
a) Th tc rút gn,
R ràng tng chi phí ca m t hành trình ca ngưi du lch s cha đúng mt phn t
ca mi dòng và đúng mt phn t ca mi ct trong ma trn chi phí c. Do đó, nếu ta
tr bt mi phn t ca m t dòng (hay ct) ca ma trn c đi cùng mt s a thì đ dài
ca tt c các hành trình s cùng gim đi a , vì thế hành trình ti ưu cũng s không thay
đi. Vì vy nếu ta tiến hành tr bt các phn t ca mi dòng và mi ct đi m t hng s
sao cho thu đưc ma trn gm các phn t không âm m à trong mi dòng và mi ct ca
nó đu có ít nht mt s 0 thì tng các hng s tr đó s cho ta cn dưi ca mi hành
trình. Th tc tr bt này s đưc gi là th tc rút gn, các hng s tr mi dòng
(ct) s đưc gi là hng s nít gn theo dòng (ct), còn m a trn thu đưc s goi là ma
trn rút gn, Hàm s sau đây cho phép rút gn mt ma trn A kích thưc là k X k đng
thi tính tng các hng s rút gn (đ tin trình bày, các tham s có mt trong các hàm
và các th tc PASCAL dưi đây đưc gi thiết khai báo sao cho phù hp):
function Reduce(A, k): real;
f*** Th tc rút gn ma trn ***)
begin
sum := 0;
for i := 1 to k do (* k - kích thưc ca A *)
begin
r[i]:= <phn t nh nht trong dòng i>;
if r[i] > 0 then
begin
<Bt mi phn t ca dòng i đi r[i]>;
sum := sum + r[i];
end;
end;
for j := i to k do
begin
s[j] := <phn t nh nht trong ct j>;
if s[j] > 0 then
begin
<Bt mi phn t ca ct j đi s[j]>;
sum := sum + s[j];
end;
end;
Reduce := sum;
end;
T hí d, Ta có ma trn chi phí ca bài toán ngưi du lch vi n =
6
thành ph sau
126
Chương 5. i ĩoún tối ưu ( hp
s [ j
1 2 3
4
C
J> 6
r [ i
1
00
3 93 13 33 9 3
2 4
00
77 42 21
16
4
3
45
17
00
36 16 28
16
4 39 90 80
co
56
7
7
5 28 46
88 33
00
25
25
6
3
88
18 46
92
co
3
]
0 ũ
15 8
Ũ C
Đu tiên tr bt mi phn t ca các dòng 1, 2, 3, 4, 5, 6 cho các hng s nít gn
tương ng là 3, 4, 16, 7, 25, 3, sau đó trong ma trn thu đưc, Ir bt các phn t ca
các ct 3 và 4 cho các hng s rút gn tương ng là 15 và 8, ta thu đưc ma trn rút gn
sau
1
2 3
4 5 6
1
00
0
75 2 30
6
2
0
00
58 30
17
12
3
29 1
00
12
0
12
4
32
83
58
co
49 0
5
3
21
48
0
00
0
6
0
85
0
35 89
00
Tng các hàng s rút gn là 81, V I vy cn dưi cho t i c các hành trình là 81 (nghĩa là
không th tìm đưc hành trình có tng chi phí nh hơn 81).
Bây gi, ta xét cách phân tp các phương án ra thành hai tp. Gi s là ta chn cnh
(6 , 3) đ phân nhánh. Khi đó tp các hành trình s đưc phân thành hai tp con, m t tp
là các hành trình cha cnh (6 , 3), còn tp kia là các hành trình không cha cnh (6 , 3).
Vì biết cnh (6, 3) là không đưc tham gia vào hành trình, nên ta có th cm vic đi
theo cnh này bng cách đt = co. Ma trn thu đưc s có th rút gn bng cách bt
mi phn t ca ct 3 đi 48 và không bt gì các phn t ca dòng 6 . Như vy ta thu
đưc cn dưi cho các hành trình khng cha cnh (6 , 3) l 81 + 48 = 129. Còn đi vi
tp các hành trình cha cnh (6 , 3) ta phi loi dòng 6 và ct 3 khi m a trn tương ng
vi nó, bi vì đã đi theo cnh (6 , 3) thì không th đi từ 6 sang bt c nơi nào khác và
cũng không đưc phép đi t bt c đâu vào 3. Kết qu ta thu đưc ma trn vi bc gim
đi 1. Ngoài ra, do đã đi theo cnh (6, 3) nên không đưc phép đi t 3 đến 6 na, vì vy
ta cn c m đi th e o c n h (3 , 6) bng cách đt C36 - 00. Cây tìm kiếm c h o đến bưc n à y ,
có dng cho trong hình 1 sau đây;
127
Phn . Lv thuyết ĩ hợp
tt c các hành t r ì n ^ Cii dưi = 81
Cn dưi
= 81
Hành trình
ch a(6,3)
1 2 4 5 6
00 0 2 30 6
0 co 30 17 12
29 1 12 0 oc
52 83 00 49 0
3 21 0 00 0
Hành trình Cn dưi
không cha (6,3) = 1 2 9
1 2 3 4 5 6
00 0 27 2 30 6
0 OO10 3 Ũ 1 7 12
29 1 oc 12 0 12
32 83 10 00 49 0
0 85
H in h 1.
co 35 89 00
Cnh (6 , 3) đưc chn đ phân nhánh vì phân nhánh theo nó ta thu đưc cn dưi ca
nhánh bên phi là ln nht so vi vic phân nhánh theo các cnh khác. Quy tc này s
đưc s dng đ phân nhánh mi đnh ca cây tìm kiếm. Trong quá trình tìưi kiếm
chúng ta luôn đi theo nhánh bên trái trưc. Nhánh bên trái s có ma trn rút gn vi bc
gim đi mt. Trong ma trn ca nhánh bên phi ta thay mt s bi 00, và có th rút gn
thêm đưc ma trn này khi tính li các hng s rút gn theo dòng và ct tương ng vi
cnh phân nhánh, nhưng kích thưc ca ma trn vn gi nguyên.
Do cnh cn chn đ phân nhánh phi là cnh làm tăng cn dưi ca nhánh bên
phi lên nhiu nht, nn đ tìm nó ta s chn s không nào trong ma trn mà khi thay
nó bi co s cho ta tng hng ' rút gn theo dòng và ct cha nó là ln nht. Ta có th
tc sau đây đ chn cnh phân nhánh (r,c);
b) Th tc chn cnh phân nhánh (r,c)
Đ u vào: Ma trn rút gn A kích thưc kxk.
Đ u ra : Cnh phân nhánh (r, c) và tng hng sô' rút gn theo dòng r
ct c là beta.
procedure BestEdge(A,k,r,c,beta);
(* T h tc phán nhá nh *)
begin
beta := -oo;
for i 1 to k do
128
Cìươì^ 5. Bài ĩon toi ưn ( ì.
for j := 1 to k do
if a[i,j] = 0 then
begin
minr := <phn t nh nht trên dòng i khác với
mine := <phn t nh nht trên ct j khác với a
total := minr + mine;
if total > beta then
begin
beta := total;
r := i; C'* ch s dòng ca cnh tt nht *)
c ;= j; (* ch s ct ca cnh tt nht *)
end;
end;
end;
Trong ma trn rút gn 5 x 5 ca nhánh bên trái hình 1, sô' không v trí (4, 6) s cho
tng hng s rút gn là 32 (theo dòng 4 là 32, ct 6 0). Đày là giá tr ln nht đi vi
các s không ca ma trn này. Vì vy, vic phân nhánh tiếp theo s da vào cnh (4, 6).
Khi đó cn dưi ca nhánh bên phi tương ng với tp các hành trình đi qua cnh (6,3)
nhưng không đi qua (4,6) s là 81 + 32 = 113. Còn nhánh bên trái s tương ng vi m a
trn 4 X 4, rng ta phi loi b dòng 4 và ct 6. Tinh hung phân nhánh này đưc mô
t trong hình 2 .
các hành tr ì n h \ Cn dưi
cnh (6, 3) =81
Hành trình cha
(6 , 3), (4, 6 )
^ Cn dưi
= 81
Hành trình cha
íhông cha (4
Cn dưi
= 113
1
2 4
00
0
2
0
00
30
29
1
00
3
21
0
5
30
17
0
00
1
2 4 5 6
00
0
2 30 6
0
00
30
17 12
29
1 12 0
00
0 51
00
17
00
3 21
0
00
0
Hình 2.
129
Phn I . Lý thuyết t hỊj
Nhn thy rng vì cnh (4, 6) và (6 , 3) đã nm trong hành trình nên cnh (3, 4) không
th đưc đi qua na (nếu không ta s có mt hành trình con t nhng thành ph này).
Đ ngăn nga vic to thành hành trình con ta s gán cho phn t vị trí (3, 4) giá tr 00.
Ngăn cm to thành hành trinh con.
Tng quát hơn, khi phân nhánh da vào cnh (/,„ y,) ta phi thêm cnh này vào danh
sách các cnh ca nút trái. Nếu / là đnh cui ca mt đưng đi (/'|,
¡ 2
.....
và là đnh
đu ca đưng đi 0 , j
2
.....
Á) thì đ ngăn nga kh năng to thành hành trình con ta phi
cm cnh (Ji.. ¿¡).
Đ tìm /, ta có th đi ngưc t còn đ tìm ý/, ta có th đi xuôi t J.. theo danh sách
các cnh đã đưc kết np vào hành trình.
Tp tt c các
hành trình
Cn dưi
= 81
Hành trình
không cha
(6,3 )
Cn dưi
= 129
Cn dưi
= 81
Cn dưi
= 81
Tp các hành
trình không cha
(4, 6) Cn dưi
= 113
Tp các hành
-l trình không cha
(2, 1) ^ Cn dưi
- 101
Tp các hành
-M trình không cha
Cn dưi
= 84
(1,4 ) Cn dưi
= 112
Cn dưi = 84
Hành trình (1, 4, 6, 3, 5, 2 ,1 ). Đ dài hành trình: 104,
Hình 3.
130
Chi /ĩí 5. Bcü tocin tô'i ưu hp
Tiếp tc, ta li phân nhánh t đnh bên trái bng cách s dng cnh (2, 1), vì sô'
không v trí này có tng các hàng s rút gn là 17 + 3 = 20 (theo dòng 2 là 17, theo
ct 1 là 3). Sau khi phân nhánh theo cnh (2. 1 ) m a trn c a nhánh trái có kích thưc là
3 X 3. Vì đã đi qua (2, I ) nên ta cm cnh (1,2) bng cách đt C|2 = 00, ta thu đưc ma
trn sau
2 4 5
1
^XI
2
33
3
1
00
0
5
21 0
00
M a trn này có th rút gn đưc bng cách bt 1 t ct 2 và bt đi 2 dòng 1. Điu đó
dn đến ma trn
2
4 5
1
00
0 28
3
0
co
0
5
20
0
Û0
Ta có cn dưi ca nhánh tương ng là 81 + 1 + 2 = 84. Cây tìm kiếm cho đến
bưc này đưc th hin trong hình 3.
Chú ý rng sau khi đã chp nhn /7-2 cnh vào hành trình thì ma trn còn lại s có
kích thưc ià 2 X 2. Hai cnh còn lại ca hành trình s không phi chn la na, mà
đưc kết np ngay vào chu trình. Trong ví d ca chúng ta đây, sau khi đã có các cnh
(6 , 3), (4, 6), (2, 1) và (1, 4) ma trn ca nhánh trái có dng
2
5
3
00
0
5 0
co
vì vy ta kết np nt hai cnh (3, 5) và (5, 2) vào và thu đưc hành trình 1, 4, 6, 3, 5, 2,
1 vi chi phí là 104.
131
Phn I . Lý thuyết tc) hợp
C hú ý. Trong quá trình tìm kiếm mi m t nút ca cây tìm kiếm s cíng ng vi mt
m a trn chi phí A. bưc đu tiên ma trn chi phí tương ng vi gc chính là ma trn
c . Khi chuyn đng t gc theo nhánh bên trái xung phía dưi kích thưc ca các ma
trn chi phí A s gim dn. Cui cùng khi ma trn A có kích thưc 2x2 thì ta chm dt
vic phân nhánh và kết np 2 cnh còn li đ thu đưc hành trihnh ca ngưi du lch.
D thy rng ma trn rút gn cui cùng này ch có th có ĩnt Irong hai dng sau:
w
X
w
X
u 0
00
r
u
00
0
V
00
0
V 0
X'<
trong đó u, V, vv, X có th là 4 đnh khác nhau hoc ch có 3 đnh khác nhau. Trong mi
trưng hp đ xác đnh xem hai cnh nào cân phi kết np nt ta ch cn xét mt phn
t ca ma trn A;
if A [ l,l Ị] = 00 then
Kết np cnh (u,x) và (v,w)
else
Kết np cnh (u,w) và (v,x);
Bây gi tt c các nút ca cây có cn dưi ln hơn 104 có th loi b vì chúng không
cha hành trình r hơn. Trên hình 3 ta thy ch còn nút có cn dưi 101 là cn phi xét
tiếp. N út này tương ng vi tp nhng hành trình cha các cnh (6, 3), (4, 6) và không
cha cnh (2, 1). M a trn chi phí tương ng vi đnh này có dng
1
2
4
5
00
0 2
30
00 00
13
0
26
1
00
0
0 21
0
00
Vic phân nhánh s da vào cnh (5, 1) vi tng hng s rút gn là 26. Vic r nhánh
tiếp theo t nút này đưc cho trong hình 4.
132
ClơiiỊ’ 5. Bài loan i ưu t hp
Tp các hành trình cha
(6, 3), (4, 6) không qua (2,1)
(
Tp các hành cha
trình cha (5,1)
Cn dưi
= 101
' Cn dưi
= 127
Tp các hành trìnnX
không cha (5,1) ]
^
__
_ _ _ .,^ C n dưói
=: 103
2 4 5
1 0 0
CD
3
00
11
0
5 1
00
0
(
Hành trình chà
(1,4)
H àn h trinh l, 4,
6
, 3, 2, 5 ,1
Đ ô d à i: 104
Hành trình khôni
cha (1,4) y Cn dưi =114
Hình 4.
Như vy chúng ta thu đưc hai hành trình tới ưu vi chi phí là 104. Thí d trên cho thy
rng bài toán ngưi du lch có ihê có nhiéu phưcíng an i ưu. Trong thí d này hành
trình đu tiên tìm đưc đã là ti ưu, tt nhiên điu đó khôiig th trông đi trong trưng
hp tng quát. Đi với thí d trên ta ch phi xét 13 nút, trong khi tng s hành trình
ca ngưi du lch là 120.
c) Thut toán nhánh cn gii bài toán ngưi du lch.
Bây gi ta có th mô t các bưc chính ca thut toán nhánh cn gii bài toán ngưi du
lch trong th tc đ quy TSP sau đây. Th tc TSP xét hành trình b phn vi Edges
cnh đã đưc chn và tiến hành m kiếm tiếp theo. Ta s dng các biến;
Edges - s cnh trong hành trình b phn;
A - ma trn chi phí tương ne với kích thưc
(n-edges) X (n-edges);
cost - chi phí ca hành trình b phn;
M inCost - chi phí ca hành trình tt nht đã tìm đưc.
133
Phn J. Lý thuyết t hợp
Trong th tc s dng hàm R educe(A , k) và th tc B estE dge(A , k, r, c, beta) đã mô t
trên.
procedure TSP(edges, cost, A);
begin
cost:= cost + Reduce(A , n-edges);
if cost < MinCost then
if edges = n-2 ihen
begin
<B sung nt hai cnh còn li>;
MinCost := Cost:
<Ghi nhn hành trình tt nhĩ>;
end
else
begin
BestEdge(A,n-edges,r,c,beta);
LowerBound:= cost + beta;
<Ngăn cm to thành hành trình con>;
NewA ;= <A loi b dòng r ct c>
TSP(edges+l,cost,NewA); (* đi theo nhánh trái *)
<Khôi phc A bng cách b sung li dòng r ct k>;
if LowerBound < M inCost then
begin (* đi theo nhánh phi *)
A[r,c]:=oo;
TSP(edges, cost, A);
A [r,c]:i;
end;
end;
<Khôi phc ma trn A> ; (* thêm li các hng s rút gn
vào các dòng và ct tưcfng ng *)
end; (* o fT S P *)
134
Clìươníi 5. Bài ĩodiỉ tôi ÍU t ìp
5.4 Bài toán lp lịch gia công trên hai y.
Thut toán Jonhson
Trong mc này ta s thy vic nghiên cu k các tính cht ca bài toán ti ưu t hp
dn đến vic xây dng đưc thut toán rt hiu qu đ gii nó.
Xét bài toán lp lch gia công trên 2 máy, trưng hp riêng ca bài toán lp lch
n^u trong rrc 5.1: Mi mt chi tiết trong s n chi nết D| Di,... D cn phi đưc ln
lưi gia cng trên 2 máy A, B. Tliời gian gia công clỉi tiết D trên máv A trên tnáy
B là h (i - 1, 2,..., /). Hãy tìm lch (trình t gia công) các chi tiết trên hai máy sao cho
vic hoàn thành gia công tt c các chi tiết là sm nht có th đưc.
Gi thiết rng, trình t gia công các chi tiết trên hai máy là như nhau. Khi đó mi
lch gia công s tương ng với mt hoán v
n = (Tt(l), n(n))
ca n s t nhiên 1, 2 ,..., n.
Ký hiu íx là thi đim bát đu và kết thúc vic gia cóng chi tiết j trên máy X,
ý = 1, 2,..., /ỉ; X = a , B. Gi s Tt là mt lch gia công. Theo điu kin ca bài toán, máy
A có th bt đu thc hin công vic n(l) vào thi đim S;!n = 0 và công vic M^k) sau
khi thc hin xong công vic ;?(;-1), tc
■^'t(k)A ^ /ĩ(k -l)A fc 2, 3,..., lĩ. ( 1 )
Máy B có th bt đu thc hin công vic
7
ĩ{ 1) ngay sau khi máy A kết thúc vic gia
công nó tc là vào thi đim
''>1(1 )B - (2)
Máy B có th bt đu vic gia cng chi tiết n(k) {k = 2, 3,..., n) sau khi công vic này
đưc thc hin xong trên máy A và đng thi nó phi hoàn thành vic gia công chi tiết
7ĩ(:-l), tc là:
k = 2, 3,..., lĩ. (3)
Thi gian đ hoàn thành vic gia công tt c các chi tiết trên hai máy là T{n) -
Rõ ràng, vi n ' đnh, T(n) đt giá trị nh nht khi tt c các du bt đng thc
(1), (2), (3) đưc thay bi du đng thc, tc
~ t ^ 2, 3,..., fĩ,
= max (ỈRỊiyị, = 2, n.
(4)
135
Phn J. Lý thuyết t hợp
nghĩa là các máy s thc hin ngay các công vic m t khi điu kin cho phép.
T hí d 1. Xét bài toán khi / = 5. Thi gian gia công các chi tiết trên các máy đưc cho
trong bng sau:
Gi s thc hin vic 5Ìa công các chi tiết theo lch 7Ĩ = (1, 2, 3, 4, 5). Khi đó, theo các
cô n í thc (4) ta tính đưc
0 ;
-- 3;
^24 =
3;
^2. = 7;
^ÌA -
7;
í3.= 13;
^4/1
13;
^4^=18;
18;
Í.M = 24;
^1« -
3;
ifí= 6 ;
7;
Í2/ = 10;
^Ji -
13;
18;
^4/ 25;
SsH =
25; rw = 28.
Đ biu din lch gia công ngưi ta thưng s dng sơ đ Gantt, trong đó các máy đưc
biu th theo trc tung, còn trc hoành đ biu din thi gian. Sơ đ Gantt, theo lch gia
công thu đưc trong thí d đã cho, có dng trong hình 1;
M áy
D 1 D 2 D 4
D 5
D 3
D 4
D 5
t
J _ J J
- í . . J 1 _ J 1...I 1 1
1 1 1 1 1
H ình 1.
136
Chương 5. Bãi toán tối ưu th)
Thi gian hoàn thành vic gia công tt c các chi tiết theo lch thu đưc là T{n) = =
28. T hình 5 nhn thy rng trong cách bô' trí máv B thc hin vic gia công các chi
tiết theo lch gia công 71 có nhiu khong thi gian máy chết (trên hình v đánh du
bng cách tô mu sm). Rõ ràng ta luôn có th bô' trí li việc gia công ca máy B sao
cho không có các khong thi gian chết này bng cách dn chúng vào đon đu đ sau
đó máy B hot đng liên tc và vic này không làm tăng thi gian hoàn thành vic gia
công (giá tr Chng hn, đ thoát khi các khong thi gian chết ca máy B trong
thí d, ta có th bu đu gia cong Irên máy B vào đim dg = IC (lc là bng tdng các
khoáng thi gian chết trong hình 3, cng vi /n I)/). Sc? đ Gantt ca cách b trí này cho
trong hình 2 :
M áy
B
D I D 2 D3
D 4
D 5
A D I D 2
D 3
D 4 D 5
t
1 1
1 1 1
1, i_ j
1 1
.1 1 1
1
1 1 1 1 1
1
L .J 1
1 1
H ình 2.
Vì vy luôn có th gi thiết rng, hai máy s thc hin vic gia công m t cách liên tc.
Máy A bt đu thc hiên vic gia công vào thi đim = 0. Gi dg là thi đim máy B
bt đu thc hin vic gia công các chi tiết. Rõ ràng ta có
T{n) = d ,{n )+ h j,
j=\
trong đó s hng th hai là không ph thuc vào lch gia công K. Ta cn tìm công thc
tính dain). D thy là dgin) là bng tng ca và các khong thi gian chết ca máy
kh; ta b trí máy B thc hin vic gia công các chi tiết theo công thc (4). Vì thế, ta
có công thc sau đây, đ tính clnin):
trong đó
d,in) = max A(ti)
!<«<«
A(tc) = z
j=
z bn),
;=1
u =
2
, n .
137
Phn . Lý thuyết tổlĩp
Trong thí d 1, ta có
A,(tĩ) = 3;
A
2
Ìn) = 3 + 4 - 3 = 4;
A3(7ĩ) = (3 + 4 + 6) - (3 + 3) = 7;
à n ) = (3 + 4 + 6 + 5) - (3 + 3 + 2) = 10;
Aj(tĩ) = (3 + 4 + 6 + 5 + 6)-(3+ 3 + 2 +7) = 9;
Vy dgin) = 10.
Như vy bài toán đt ra dn v bài toán ti ưu t hp sau
min ( d g ( n ) : K e p .
trong đó p là tp các hoán v ca 1, 2, n.
B đ 1. G i s n = 7c( : - 1 ) , Tĩ(k), n{n)) là ml lch gia công còn 7t
là lch gia công thu dưc t n bng cách hoán v hai phn t n{k) và 7i(:+l):
k' = (Tt(l),..., 7t(Ấ:-l), 7ĩ(/:+l), n(k),..., n(n)).
Khi đó nếu
m in (n(it), ^It(*+1)) ^ rn in (Í>n(í), (5 )
t h ì
d,{%) < dsin').
(6)
C h n g m inh . Do n, n' ch khác nhau v trí th : và :+I nên ta có
A„(7i) = A(7r') vi u = ì,..., k -ì,k+ 2,..., n.
T đó đ chng m inh (6) ta ch cn chng t
max (Aì(7ĩ), < max (A^(7i:'), A*^,(tĩ’)) (7)
Tht vy, bt đng thc (7) cmg đương vi
max (Át(n) - ô, Am Ìti) - 6) < m ax (A^(7t') - 5, - 5) (8)
vi m i giá tr ô. Chn
k + ì k-
J=ì J=ì
và đ ý rng
k k-l
^n(j) - X t>n(j),
=i j=
ta nhn đưc (8) dưi dng
138
max -^ J ,) < max -hn^M,)
o -min < -min
<=> min(a,^.), < min
nghĩa là (7) tương đương vi (5). B đé đưc chng minh.
B đ 2, N ếu i,j, k là ha ch s tho mãn
min (a¡, b ) < mi 1 [U, hị) (9)
min (üj, b) < min (a^, bị) ( 10)
tronq đó có ít nht mt trong hai bt đnq thc trên là ht đng thc cht, thì
min (ứ b^) < min (^, ò,) ( 11)
C hng m inh. Gi sử trong (9) ta có a, < hj và < b, còn trong ( 10) ta có ÛJ < b, và ũ. <
bj. Khi đó từ (9) suy ra O <
Ü J,
n t ( 10) suy ra Oj < ũ.. Tức ta có a, < b,a, < b. và a,
< a¡., t đó suy ra có ( 11).
Chng minh tương t cho 15 trưng hp còn li, ta thu đưc b đ.
Đ nh lý Joh nson (1954). T{æ) đt giá tr nh nht khi lch gia công n - (M l), ^ 2 ),...,
;t(aì)) tho mãn
min < min (3;^*^.,)) ( 12)
vi m i : = 1, 2,..., n -\.
C hng m inh. Thc vy gi s
Tr = (7r(I), 7i'(2),..., n\n))
là lch gia công ti ưu. Nếu n' không tho mãn (12), thì theo b đ 1, khi thay đi v tri
ca hai phn t lin nhau tương ng trong nó, ta thu đưc lch gia công mi n vi dẶTÌ)
không ln hơn í/a(n'). Quá trình này đưc lp li đi với n cho đến khi thu đưc lch
tho mãn (12). B đế 2 đm bo đưc rng vic lp như thế là kết thúc. Đnh lý đưc
chng minh.
Đnh lý va chng minh ch cho chúng ta cơ s xây dng thut toán gii bài toán
đt ra. Gi s
X = min (a,, ,).
!</</;
Xét hai trưng hp:
1) Nếu X = Of. vi mt k nào đó thì ta có min (., hj) < min (b,, a¡) vi mi j ?^k. Vì
thế chi tiết D* phi đưc gia công đu tiên trong lch ti ưu.
Chươnọ^ 5. B ill íoán ti Uli ĩh p
i39
Phn I . Lý thuyết t hợp
2) Nếu X = bp vi m t p nào đ ó thì ta có min {ũp, b) > min (/?,,, í/,) \ới mi / p . Vì
thế chi tiết Dp phi đưc gia công cui cùng trong lch ti UXI.
T đó nhn đưc thut toán sau đây
Thut toán JOHNSON
1. Chia các chi tiết thành 2 nhóm: nhóm N gm các chi tiết Dị tho mãn a, < b,,
tc là min ( b:) đt đưc ti và nhóm N
2
gm các chi tiết D, tho mãn <3, >
ố,, tc là min (a,, bị) đt đưc ti b,. Các chi tiết D ího mãn ơ = h, xếp vào
nhóm nào cũng đưc.
2. Sp xếp các chi tiết trong N theo chiu tăng ca các ơ, và sp xếp các chi tiết
trong /V theo chiu gim ca các b,.
3. Ni N
2
vào đuôi N. Dãy thu đưc (đc t trái sang phi) s là lch gia công ti
ưu.
Quay tr li gii bài toán trong thí d l theo thut toán Johnson: Các kết qu đưc tính
trong tng bưc như sau:
1. Chia nhóm: N, = {D D 4}; N , = {D D D ,
2. Sp xếp theo chiu tăng ca các , và sp xếp N
2
theo chiu gim ca các b'.
yv, = (D D,); n [ = (D D D 3)
3. Ni N
2
vào đuôi ca N , ta đưc lch gia công ti ưu:
71 = (D D 4, O2, Đ 5, D^).
Sơ đ Gantt ca lch này đưc cho bi hình 3 vi thi gian hoàn thành vic gia công là
T{n) = 26:
M áy
D I
D I
I
D 4
1 D 4 D 2
D 2
1 1 1
D 5
1 1 1 1 1
D 3
.................
1
1
I
1
I
Hình 3.
Rõ ràng có nhiu lch ti ưu, chúng có th khác nhau v thi đim bt đu ca máy B
nhưng đu chung nhau m t thi đim kết thúc. Chng hn mt lch ti ưu khác ca thí
d trên là 7ĩ = (£>4, Z)|, O 5, 0 2 , D 3) vi sơ đ Gantt cho bi hình 4:
140
Chương 5. Bài toán ti ưu t h])
M áy
B
D 4
D I
D5
D 2 m m
D 4
1 1 1 1
D 1
1 1.
D 5
1 1 1 1 1
D 2
1 1 1
D 3
1 1 1 1 1
I I J- 1 L
Hình 4,
C h ú ý.
1) Có th chng minh đưc rng vic tìm lch gia công dưi dng mi m áy mt
trình t gia công riêng không dn tới vic hoàn thành gia công các chi tiết sm hcm. Vì
vy, thut toán Johnson vn cho kết qu đúng ca bài toán mà không cn có gi thiết
rng trình t gia công trên hai máy phi như nhau.
2) K thut chng minh đnh Johnson da trên b đ 1 là mt k thut cơ bn
trong lý thuyết ip lch, nó đưc biết dưi tên gi; Th thut hoán vị.
3) K hông th thu đưc đnh tương t như đnh lý Johnson cho trưng hp bài
toán 3 máy hoc nhiu hơn. Trong trưng hp tng quát, hin nay chưa có phương pháp
hu hiu nào đ gii chúng ngoài vic s dng phương pháp nhánh cn.
M t s trư n g hp riêng có thế dn v bài toán 2 máy.
Xét bài toán gia công n chi tiết trên 3 máy theo th t A, B, c vi bng thi gian a-, b,
c / = 1, 2,..., n, tho mãn:
max,. < mina,, hoc m ax6, < mine,.
' i ' /
tc là thi gian gia công ca máy B khá nh so vi A hoc c.
Khi đó, lch gia công ti ưu trên 3 máy s trùng vói lch gia công ti ưu trên 2 máy:
máy th nht vi thi gian a¡ + b và máy th hai với thi gian b¡ + c, (đ ý rng ch có
lch ti ưu ca chúng là trùng nhau còn thi gian gia công ca chúng là khác nhau).
T h í d 2. Thcfi gian gia công 5 chi tiết trên các máy A, B, c cho bi bng sau:
tiết
M á y \ ^
D,
D,
Ds
/l 1 11
8 7
6
B 6 5 3
5
3
c
4 12 7 8 3
141
Phn 1. Lý thuyết t hp
Th li max b, =
6
< min O - 6 , do đó bài toán đưc dn v vic tìm lch gia công ti
ưu trên 2 máy A', B':
Lch gia công ti ưu tìm đưc là 71 = (D, D
2
, D, 3, D 5) vi thi gian hoàn thành T(tì)
49 và sơ đ Gantt cho bi hình 5:
H ìn h 5.
142
Chươní> 5. Bcii ĩoáìì toi ưu t Ì(/)
Bài tp
1. Áp dng thut toán nhánh cn gii bài toán ngưi du lch vi m a trn chi phí sau
a)
A B
C D
E
A 0 8
5
22 11
B
4
0
Q
11
27
C
'1 ^
1
1 C 12 35
D 5
27 17
0
29
E 23
21 19
7
0
b)
c)
A
B
C
D E
A 0
5
37
21 29
B 42
0 31
7
33
C
31
27
0 31
8
D 49
33
14
0 39
E
5
41 32
38
0
A
B C
D
E
A 0
8 5 22
11
B
4
0
9 17
27
C
15
7 0
12 35
D 5
27 17
0 29
E 23
21
1 ^
7
n
Thành ph xut phát là A. Quá trình gii theo thut toán trình bày trên cây lời gii.
2. Gii các bài toán cái túi sau đây bng thut toán nhánh cn
a)
17 X, + 8 ^2 + 6 X3 + 3 X4 -> max
7 X, + 6 X2 + 4 X-, + 2 X4 < 19
Xy>0, nguyên,ý = 1,2, 3,4.
b)
c)
16 X| + 9 X
2
+ I X, + 5 .V4 -> max
6 X| + 5 A'2 + 3 X3 + 2x^ < 17
Xj>0 , nguyên, ý = 1.2, 3,4.
16 .r, + 8 + 6 X, + X , max
143
Phn I . Lý thuyết t hợp
7 X| + 6 ^2 + 4 .Y3 + X4 < 26
Xj>0, nguyên, ý = 1,2, 3 ,4.
Quá trình thc hin thut toán mô t trên cây tìm kiếm li gii.
3. M ô t thut toán quay lui đ gii bài toán sau;
O io n s nguyên dương a ,, ;,,-. Tim các s S e |-1 , 1}, ' = 1, 2 , n sao cho
! - A
/=1
là nh nht.
4. Bt đng thc sau đây có tên là bt đng thc hoán v đưc s dng trong vic phái
trin thut toán gii nhiu bài toán lp lch: Cho hai dãy s thc |, ¿2, và òj, ^ 2
trong đó ¿1 > ¿2 ^ ^ bn- Gi s (ơ (l), ơ(2), ơ(^2)) và (y(1), y(2), y{n)) là
các hoán vca các s 1, 2 , ^ tho mãn
^v(l) " ^v{2) - ** - ^ơ(l) - ^ơ(2) - - ^ơ(n)
Khi đó bt đng thc
n n n
/ = 1 i=l /=l
đưc thc hin vi mi hoán v (7t(l), 7t(2)
......
n{n)) ca các s 1, 2 , n.
Như là ví d ng dng, xét bài toán lp lch sau đây; Có n khách hàng đến thuê
thc hin chưcmg trình trên máy tính song song ti trung tâm m áy tính hiu năng cao.
Biết rng thi gian cn thiết đ chy xong chương trình ca khách hàng i là ti, i = 1,2,
n. Gi Ihiết là thi gian đ máy chuyn t vic thc hin chương trình này sang thc
hin chưotng trình khác là bng 0, hãy tìm trình t thc hin các chương trình sao cho
tng thi gian ch đi ca tt c n khách hàng là nh nht.
S dng bt đng thc hoán vđ ch ra rng trình t cn tìm là trình t không gim
ca thi gian thc hin các chương trình.
144
PHN II
LÝ THUYẾT ĐỔ TH
Cơỉìí’ I . c khái ìitn cơxl/ì của /ý ĩlìKv d ílĩị
1
CÁC KHÁI NIỆM Cơ BN
CA LÝ THUYT Đ THI
Lý thuyết đ th là mt lĩnh vc nghiên cu đã có l lâu và có nhiu ng dng hin
đi. Nhng tư tưng cơ bn ca lý thuyết đ th đưc đ xut vào nhng năm đu ca
thế k 18 bi nhà toán hc li lc ngưi Thu s Leonhard Euler. Chính ông là ngưi
đã s dng đ th đ gii bài toán ni tiếng về các cái cu thành ph Königsberg.
Đ th đưc s dng đê gii các bài loán trong nhiu lĩnh vc khác nhau. Chng
hn, đ th có th s dng đ xác đnh các mch vòng trong vn đ gii tích m ch đin.
Chúng ta có th phân bit các htíp cht hoá hc hu cơ khác nhau vi cùng công thc
phân t nhưng khác nhau vể cu trúc phân t nh đ th. Chúng ta có th xác đnh xem
hai máy tính trong mng có th trao đi thông tin đưc với nhau hay không nh mô
hình đ th ca mng máy lính. Đ Ihị có trng sô' trên các cnh có th s dng đ gii
các bài toán như: Tim đưng di ngn nht gia liai thành ph trong m t m ng giao
thông. Chúng ta cũng còn s dng đ th đ gii các bài toán v lp lch, thi khoá biu,
và phân b tn s cho các trm phát thanh và truyn hình...
1.1. Đnh nghĩa đ th
Đ th là mt Cu trúc rời rc bao gm các đnh và các cnh ni các đnh này. Chúng ta
phân bit các loi đ th khác nhau bi kiu và s lưng cnh ni hai đnh nào đó ca
đ th. Đ có th hình dung đưc ti sao li cn đến các loi đ th khác nhau, chúng ta
s nêu ví d s dng ch^ng đ mô t mt mng máy tính. Gi s ta có mt m ng gm
147
Phn 2. Lý thuyết đ th
các máy tính và các kênh đin thoi (gi tt là kênh thoi) ni các m áy tính này. Chúng
ta có th biu din các v trí đt máy tính bi các đim và các kênh thoi ni chúng bi
các đon ni, xem hình 1.
Hà tây Đ ng nai Huế An Giang
H ình 1. Sơ đ mng máy tính
Nhn thy rng trong mng hình 1, gia hai máy bt k ch có nhiu nht là mt kênh
thoi ni chúng, kênh thoi này cho phép liên lc c hai chiu và không có máy tính
nào li đưc ni vi chính nó. Sơ đ mng m áy tính cho trong hình 1 đưc gi là đơn đ
th vô hưng. Ta đi đến đnh nghĩa sau
Đ nh ng hĩa 1. Đơn đ th vô hưng G = (V,E) hao gm V là tp các đnh, và E là tp
các cp không có th t gm hai phn t khác nhau ca V gi là các cnh.
Trong trưng hp gia hai m áy tính nào đó thưng xuyên phi truyn ti nhiu thông
tin ngưi ta phi ni hai m áy này bi nhiu kênh thoi. M ng vi đa kênh thoi gia các
m áy đưc cho trong hình 2 .
Hà tây Đng nai H uế An Giang
H ìn h 2. Sơ đ mng máy tính vi đa kênh thoi
Đ nh ng hĩa 2. Đ a đ th vô hưng G = [V,E) bao gm V là tp các đnh, và E là h các
cp không có th t gm hai phn t khác nhau ca V gi là các cnh. H ai cnh | và
Ê2 đưc gi là cnh lp nếu chúng cùng tương ng vi mt cp đnh.
148 >
Chương . Các khái nim cơ hản ca /v ỉhuyết d th
Hà uìy
Đng nai
Huế An Giang
Khánh hoà
ơ
____________
_
^ ,
_____
L o n g a n
Qung ngãi -p
H ình 3. Sơ đ mng máy tính với kênh thông báo
Rõ ràng mi đofì đ th đu là đa đ th, nhung không phi đa đ th nào cũng là
đơn đ th, vì trong đa đ th có th có hai (hoc nhiu hơn) cnh ni m t cp đnh nào
đó.
Trong mng máy tính có th có nhng kênh thoi ni mt máy nào đó vi chính nó
(chng hn vi mc đích thông báo). Mng như vy đưc cho trong hnh 3. Khi đó đa
đ th không th mô t đưc mng như vy, bi có nhng khuyên (cnh ni m t đnh
vi chính nó). Trong trưng hp này chúng ta cn s dng đến khái nim gi đ th vô
hưng, đưc đnh nghĩa như sau
Đ nh ngh ĩa 3. Gi đ ĩh v hưímg G = iy,E ) bao gm V tp các đnh, và E là h
các cp không có th t gôm hai phân t {không nht íhiết phi khác nhau) ca V gi là
các cnh. Cnh e dưc gi lc) khuyên nếu nâ có dng e=(u,u)>
Các kênh thoi trong mng máy tính có th ch cho phép truyn tin theo m t chiu.
Chng hn, trong hình 4 máy ch Hà ni ch có th nhn tin t các máy đa phưcmg,
có mt s m áy ch có th gi tin đi, còn các kênh thoi cho phép Iruyén tin theo c hai
chiu đưc thay thế bi hai cnh có hưng ngưc chiu nhau.
Hà tây
Qung ngãi
An giang
Khánh hoà
Đng tháp ^ Long an
Hình 4. Mng máy vi các kênh thoi mt chiu
149
Phn 2. Lý thuyết đ th
Ta đi đến đnh nghĩa sau.
Đ nh nghĩa 4. Đơn đó' th có hưng G = (V, E) bao gm V là lp các đnh, và E là tp
các cp có th t gm hai phn t khác nlìơu ca V gi là các cung.
Nếu trong mng có th có đa kênh thoi m t chiu, ta s phi s dng đến khái
nim da đ th có hưng:
Đnh nghĩa 5. Đa đó' th có lìUn G = (V, E) bao ^m V là tp các đnh, và E h các
cp có th t gm hai phn t khác nhau ca V gi là các cưng. H ai cung , tương
ứìĩí vi cùng mt cp đnh đưc gi là cung p.
Trong các phn tiếp theo ch yếu chúng ta s làm vic vi đơn đ th vô hưiig và
đơn đ th có hưng. Vì vy, đ cho ngn gn, ta s b qua tính t đon khi nhc đến
chúng.
1.2. Các thut ng bn
Trong mc này chúng ta s trình bày mt ' thut ng cơ bn ca lý thuyết đ th.
Trưc tiên, ta xét các thut ng mô t các đnh và cnh ca đ th vô hưng.
Đ nh nghĩa 1. H ai đnh uvàv ca đ th vô hưng G đưc gi là
kề
nhau nếu
u,v)
là
cnh ca đ th G. Nếu e=(u,v) là cnh ca đ th thì ta nói cnh này là liên thuc vi
hai đnh u và V, hoc cũng nói là cnh e là ni đnh u và đnh V, đng thi các đnh u và
V
s đưc gi
các đnh đu ca cnh
(u,v).
Đ có th biết có bao nhiêu cnh liên thuc vi mt đnh, ta đưa vào đnh nghĩa sau
Đ nh nghĩa 2. Ta gi bc ca đnh
V
trong đ th vô hưng là s cnh liên thuc vi nó
và s ký hiu là deg{v).
b e d
H ình 1. Đ th vô hưng G
T h í d 1. Xét đ th cho trong hình 1, ta có
dega) - 1, degib) = 4, deg{c) = 4, deg) = 3,
deg{d) = 1, degie) = 3, deg{g) = 0.
150
Chương 1. Các khái niệm cơ bản của ihuyết dô th
Đnh bc 0 gi là đnh cô lp. Đnh bc 1 đưc gi cíỉnh treo. Trong ví d trên đnh g
là đnh cô lp, a và í/ là các đnh treo. Bc ca đình có tính cht sau:
Đnh lý 1. Gid s G = {V, E) là d th vô hưng với m cnh. Khi đó
Im = ^ d e g (v )
ver
Chng minh. Rõ ràng mi cnh e=(u,v) đưc tính mt ln trong deg(u) và mt ln
trong deg(v). T đó suy ra tng tt c các bc ca các đnh bng hai ln s cnh.
Thí d 2. Đ th vi n đnh và mi đỉiih có bc là 6 có bao nhiêu cnh?
Gii: Theo đnh lý 1, ta có 2m = 6 « . T đó suy ra sô' cnh ca đ th là 3/ỉ.
H qu. Trong đ th vô hưng, s đnh bc l (nghĩa có bc là sô l ) là mt sô' chn.
Chng minh. Thc vy, gi o v u tương ng là tp đnh bc l và tp đnh bc chn
ca đ th. Ta có
2
m = ^ d e g (v ) = ^ d e g (v ) + ^ d e g (v )
veV veO veU
Do deg{v) là chn vi V là đnh trong u nên tng th hai trong vế phi trên là s chn.
T đó suy ra tng th nht (chính là tng bc ca các đnh bc l) cũng phi là s chn,
do tt c các s hng ca nó là sô' lẻ, nên tng này phi gm mt s chn các s hng.
Vì vy, s đnh bc l phi là s chn,
Ta xét các thut ng lương t cho đ th có hưng.
Đnh nghĩa 3. N ếu e -(u,v) là cung ca đ th có hưiìg G thì ta nói hai đnh u và V
là k nhau, và nói cung (u,v) ni inìi II VI cíinlì V' hoc c/ii> nói cung này là đi ra khi
đnh u và đi vào đnh V. Đnh u ( v) s dưc gi đnh du (cui) ca cung (u,v).
Tương t như khái nim bc, đi vi đ th có hưng ta có khái nim bán bc ra (vào)
ca mt đnh.
Đnh nghĩa 4. Ta gi hán bc ra (bán hc vào) ca ca đnh V trong đ th có hưng
s cung ca đ th đi ra khi nó (đi vào nó) và ký hiu là deg*{v) {deg'{v) )
151
Phn 2. Lý thuyết đ th
T h í d 3. Xét đ th cho trong hình 2. Ta có
degXA) = 2, degXB) =3, deg X O = l.degiD) = 2. deg(E) = 2.
d e g \A ) = 3, deg*(B) = 2, d e g \C ) = 2, deg*{D) = 2, deg*{E) = 1.
Do m i cung {u,v) s đưc tính m t ln trong bán bc vào ca đnh và mt ln
trong bán bc ra ca đnh u nên ta có:
Đ nh lý 2. G i s G=(V,E) là đ ĩh có hưng. Khi đó
ZdQg~^iv)= deg^{v)=\E\
v e V v e V
Rt nhiu tính cht ca đ th có hưng không ph thuc vào hưng trên các cung ca
nó. Vì vy, trong nhiu trưòng hp s thun tin hon nếu ta b qua hưng trên các cung
ca đ th. Đ th vô hưng thu đưc bng cách b qua hưng trên các cung đưc gi là
đ th vô hưng tương ng vi đ th có hưng đã cho.
1.3. Đưng đí, Chu trình. Đ th liên thông
Đnh nghĩa 1. Đ ưng đi đ dài n t đnh u đến đnh V, trong đó n l sô'nguyên dương,
trên đ th vô hưng G -{V ,E ) là dãy
...........
...
x
trong đó u = X q, V = x, (X, x,+|) e E, / = 0, 1, 2,..., n -\.
Đưng đi nói trên còn có th hiu din dưi dng dãy các cnh:
(X.X), (XpJCj)
.........
Đ nh u gi là đnh đu, còn đnh V gi là đnh cui ca đưng đi. Đưng đi có đnh đu
trùng vi đnh cui (tc là u = v) đưc gi là chu trình. Đưng đi hay chu trình đưc
gi là đơn nếu như không có cnh nào b lp li.
Thí d 1. Xét đ th vô hưng cho trong hình 1:
a b c a
Hình 1. Đưng đi trên đ th
152
Chương I . Các klìái nim CƠÌHUÌ ca /} thuyết đ th
Ta có: a, d, c,f, e là đưng đi đơn đ dài 4. Còn cl, e, c, a không là dưng đi, đo (e, c)
không phi là cnh ca đ th. Dãy b, c. f, e, h là chu trình đ dài 4. Đưòtìg đi a, b, e, d,
a, h có đ dài là 5 không phi là đưng đi đơn, do cnh (a, b) có mt trong nó hai ln.
Khái nim đưng đi và chu trình trên đ th có hưng đưc đnh nghĩa hoàn toàn
tương t như trưng hp đ th vô hưng, ch khác ta có chú ý đến hưng trên các
cung.
Đ nh nghĩa 2. Đưìg đi đ dài n t iín.lì u đến đHí l>^on^ đó n là SCI nguyên dương,
trên đ (h cô hưng G=(V,A) là dãy
t r o n g đ ó u = Xg,
V =
x , { x
e A , / = 0 , l. 2
........
« -1 .
Đưng di nói trên còn có th hiu din dưi dng cv CCIC cung:
C v ,.Y ;), ( .V p .V i)
............
Đnh u gi là đnh đu, còn đnh V gi là đnh cui ca đưng đi. Đưng đi có đnh đu
trùng vi đnh cui (tc là li - v) đưc gi là chu trình. Đưng đi hay chu trình đưc
gi là đơn nếu như không có cung nào b lp lại.
T hí d 2. Trên đ th có hưng cho trong hình 1; a. íì, c,f, e là đưng đi đơn đ dài 4.
Còn d, e, c, a không đưng đi, do (£,<:) không phi cung ca đ th. Dãy h, c,f, e, b
là chu trình đ dài 4. Đưng đi a, b, e, d. a, h có đ dài là 5 không phi là đưng đi đofn,
do cung {a,h) có mt trong nó hai lần.
Xét mt mng máy tính. Mt câu hi đt ra hai máy tính bt k trong mng này
có th trao đi thông tin dưc với nhau hoc trc liếp qua kênh ni chúng hoc thông
qua m t hoc vài máy tính trung gian trong mng? Nếu s dng đ th đ biu din
mng máy tính này (trong đ các đnh ca đ th tưitng ng vi các máy tính, còn các
cnh tuơng ng vi các kênh ni) câu hi đó đưc pt biu trong ngôn ng đ th như
sau: Tn ti hay chăng đưng đi gia ini cp đinh ca đ th?
Đ nh n ghĩa 3. Đ th vô hưii G= (Y,E) đưc ẹọ/ liên thông nếu luôn tìm đưc
đưng di gia hai đnh ht k ca n.
Như vy hai máy tính bât k trong mng có th trao đổi thông tin đưc vi nhau khi và
ch khi đ th tương ng vi mng này là đ th liên thông.
Thí d 3. Trong hình 2: Đ th G là liên thông, còn đ th H là không liên thông.
153
Phn 2. Lý thuyết đ tlìị
H-
H,
H-
H
H ình 2. Đ th liên thông G và đ th H gm 3
thành phn liên thông //,, //., Hy
Đ nh n ghĩa 4. Ta gi đ th con ca đ th G = (V,E) là đ th H = {W, F), trong đó
w V và F a, E.
Trong trưng họfp đ th là không liên thông, nó s rã ra thành m t s đ th con liên
thông đôi m t không có đnh chung. Nhng đ th con liên thông như vy ta s gi là
các
thành phn liên thông ca đ th.
T h í d 4, Đ th H trong hình 2 gm 3 thành phn liên thng / / |, H y
Trong m ng m áy tính có th có nhng m áy (nhng kênh ni) m à s hng hóc ca
nó s nh hưng đến vic trao đi thông tin trong mng. Các khái nim tương ng vi
tình hung này đưc đưa ra trong đnh nghĩa sau.
Đ nh n g hĩa 5. Đ nh V đưc gi là đnh r nhá n h nếu vic loi b V cùng vi các cnh
liên thuc vi nó khi đ th làm tăng sô' thành phn liên thông ca đ th. Cnh e đưc
gi là cu nếu vic loi b nó khi đ th làm tăng s thành phn liên thông ca đ th.
T hí d 5. Trong đ th G hình 2, đnh íi và e l đnh r nhánh, còn các cnh {d,g) và
(ef) là cu.
Đi vi đ th có hưng có hai khái nim liên thông ph thuc vào vic ta có xét
đến hưng trên các cung hay không.
Đ nh n gh ĩa 6. Đ th c hưng G= (VA) đưc gi là liên thông mnh nếu luôn tìm
đưc đưng đi gia hai đnh bt k ca nó.
Đ nh n g h ĩa 7. Đ th có hưng G= (V ^ ) đưc gi là liên thông yếu nếu đ th vô hưng
tương ng vi nó là đ th vô hưng liên thông.
Rõ ràng nếu đ th là liên thông mnh thì nó cũng là liên thông yếu, nhưng điu ngưc
li là không luôn đúng, như ch ra trong thí d dưi đây.
154
Cơng . Các khái niệm cơhn của thuyết đ th
T h í d 6 . Trong hình 3 đ th G là liên thông mnh, còn H là liên thông yếu nhưng
không là liên thông mnh.
H ình 3. Đ th liên thông mnh G và đ th liên thông yếu H
M t câu hi đt ra là khi nào có th đnh hưng các cnh ca m t đ th vô hưng
liên thông đ có th thu đưc đ th có hưng liên thông mnh? Ta s gi đ th như vy
là đ th đnh hưng đưc. Đnh dưi đây cho ta tiêu chun nhn biết m t đ th có là
đnh hưng đưc hay không.
Đ nh ý 1. Đ th vô hưng liên thông là đnh hưng đưc khi và ch khi mi cnh ca
nó nm trên ít nht mt chu trình.
C h ng m inh . Đ iu kin cn. Gi s (m ,v) là mt cnh ca đ th. T s tn ti đưng
đi có hưng t u đến V và ngưc li suy ra ( m ,v) phi nm trên ít nht m t chu trình.
Đ iu kin đ. Th tc sau đây cho phép đnh hưng các cnh ca đ th đ thu đưc đ
th có hưng liên thông mnh. Gi s c là mt chu trình nào đó trong đ th. Đnh
hưng các cnh trên chu trình này theo mt hưng đi vòng theo nó. Nếu tt c các canh
ca đ th là đã đưc đnh hưng thì kết thúc th tc. Ngưc li, chn e là m t canh
chưa đnh hưng có chung đnh vi ít nht mt trong s các cnh đã đnh hưng. Theo
gi thiết tìm đưc chu trình C cha cnh e. Đnh hưng các cnh chưa đưc đnh
hưng ca C theo m t hưng dc theo chu trình này (không đnh hưng li các cnh đã
có hưng). Th tc trên s đưc lp li cho đến khi tt c các cnh ca đ th đưc đnh
hưng. Khi đó ta thu đưc đ th có hưng liên thông mnh.
1.4. Mt s dng đ thđc bit
Trong m c này ta xét m t s dng đơn đ th vô hưng đc bit xut hin trong nhiu
vn đ ng dng thc tế.
Đ th đ y đ. Đ th đy đ n đnh, ký hiu bi K, là đơn đ th vô hưng m à gia
hai đnh bt k ca nó luôn có cnh ni.
155
Phn 2. Lý thuyết đ th
Các đ th Ky, K, cho trong hình 1 dưi đây.
K,
H ình 1. Đ th đy đ
Đ th đy đ K có tt c n(n-ì)/2 cnh, nó là đơn đ th có nhiu cnh nht.
Đ th vòng. Đ th vòng c , /7 > 3, gm n đnh V|. V2 , . . . , v,,và các cnh
(V|, Vj), (Vj, V,), v), (v, V|).
Đ th vòng C 3, C4, c Q cho trong hình 2.
C,
C4
Hình 2. Đ th vòng C3 , C4 , c C(
Đ th bánh xe. Đ th w thu đưc t c bng cách b sung vào m t đnh mi ni
vi tt c các đtih ca c (xem hình 3).
K
H ìn h 3. Đ th bánh xe VK3, 1^ 4, W5,
Đ th lp phuơng. Đ th lp phương n đnh là đ th vi các đnh biu din 2"
xâu nh phân đ dài n. Hai đnh ca nó là k nhau nếu như hai xâu nh phân tương ng
ch khác nhau 1 biti Hình 4 cho thy Q. vi n = 0,1, 2, 3, 4.
156
Chương /. Các khái nim cơhchĩ ca lý thuyếĩ dó th
o
1 o
/7=1
01
1 1 = 2
000
001
H ình 4. Đ th lp phương Q
Đ th hai phía. Đơn đ th G = {V,E) đưc gi là hai phía nếu như tp đnh V ca nó
có th phân hoch thành hai tp X và K sao cho mi cnh ca đ th ch ni mt đnh
nào đó trong X vi mt đnh nào đó trong Y. Khi đó ta s s dng ký hiu G=(X u Y, E)
đ ch đ th hai phía vi tp đnh XuY.
Đnh lý sau đây cho phép nhn biết mt đơn đ th có phi là hai phía hay không.
Đ nh lý 1. Đơn đ th là đ th hai phía khi và chí khi nó khóng cha chu trình đ dài
lẻ.
Đ kim tra xem m t đ th liên thông có phi là hai phía hay không có th áp
dng th tc sau. Chn V là mt đnh bt k ca đ th. Đ t x = {v}, còn Y là tp các
đnh k ca V. Khi đó các đnh k ca các đnh trong Y phi thuc vào X. Ký hiu tp
các đnh như vy là T. Vì thế nếu phát hin T r\Y ^ 0 thì đ th không phi là hai phía,
kết thúc. Ngưc li, đt x = Xu T. Tiếp tc xét như vy đi vi T' là tp các đnh k
ca T,...
Đ th hai phía G = (XuY, E) với \x\ = m,\Y \ = n đưc gi là đ th hai phía
đy đ và ký hiu là nếu mi đnh trong tp X đưc ni vi mi đnh trong Y. Các
đ th ^2 3> ^3 3> ^3 4 đưc cho trong hình 5.
157
Phn 2. Lý thuyết đ th
K
H ình 5. Đ th hai phía
Đ th phng. Đ th đưc gi là đ th phng nếu ta có th v nó trên m t phng sao
cho các cnh ca nó không ct nhau ngoài đnh. Cách v như vy s đưc gi là biu
din phng ca đ th.
Thí d đ th là phng, vì có th v nó trên m t phng sao cho các cnh ca nó
không ct nhau ngoài đnh (xem hình 6).
H ình 6. Đ th là đ th phng
Mt đim đáng lưu ý là nếu đ th là phng thì luôn có th v nó trén mt phng
vi các cnh ni là các đon thng không ct nhau ngoài đnh (ví d xem cách v K
4
trong hình 3).
Đ nhn biết xem m t đ th có phi là đ th phng có th s dng đnh lý
Kuratovski, mà đ phát biu nó ta cn mt s khái nim sau: Ta gi m t phép chia
cnh (m,v) ca đồ th là vic loi bỏ cnh này khi đ thvà thêm vào đ thị m t đỉnh
mi vv cùng vi hai cnh (u,w), (w,u). H ai đ th G = (V, E)\H = (W, F) đưc gi là
đng cu nếu chúng có th thu đưc t cùng m t đ th nào đó nh các phép chia cnh.
Đnh lý 2 (Kuratovski). Đ th phng khi và ch khi nó không cha đ th con đng
cu vi K-¡ 3 hoc K.
Trong trưng hơp riêng, đ th K và K không phi là đ th phng. Bài toán v
tính phng ca đ th K 3 là bài toán đ ni tiếng v ba căn h và ba h thng cung cp
năng lưng cho chúng: Cn xây dng h thng đưòfng cung cp đin, hơi đt và nưc
cho ba căn h, ni mi m t trong ba ngun cung cp năng lưng vi mi m t căn h
nói trên sao cho chúng không ct nhau.
158
Chương . Các khái niệm cơ hàn ca ìỷ thuyết đ th
Đ th phng còn tìm đưc nhng ng đng quan trng trong công ngh chế to mch
in. Biu din phng ca đ th sẽ chia mt phng ra thành các m in, trong đó có th có
c min không b chn. Thí d, biu din phng ca đ th cho trong hình 7 chia mt
phng ra thành 6 min R | R2, ..., Rfi.
R,
H ình 7. Các min tương ng vi biu din phng ca đ th
Euler đã chng m inh đưc rng các cách biu din phng khác nhau ca mt đ th
đu chia mt phng ra thành cùng mt s min. Đ chng minh điu đó, Euler đã tìm
đưc mi liên h gia s min, s đnh ca đ th và s cnh ca đ th phng sau đây.
Đ nh lý 3 (C ông thc Euler). Gi s G là đ th phng liên thông vi n đnh, m cnh.
Gi r là sô' min ca mt phng bị chia bi biu din phng ca G. Khi đó
r = m - n +
2
.
Có th chng minh đnh bng qui np. Xét thí d minh ho cho áp dng công
thc Euler.
T h í d. Cho G là đ th phng liên thông với 20 đnh, mi đnh đu có bc là 3. Hi
mt phng b chia làm bao nhiêu phn bi biu din phng ca đ th G?
G ii. Do mi đnh ca đ th đu có bc là 3, nên tng bc ca các đnh là 3x 20 = 60.
T đó suy ra s cnh ca đ th m = 60/2 = 30. Vì vy, theo công thc Euler, s min
cn tìm là
r=30 -20 + 2 = 12.
159
Phn 2. Lý ìhuyết đ th
Bài tp
1. Xác đnh bc ca các đnh trong đ th G^. Xác đnh bán bc ra và bán bc vào ca
các đnh ca đ th Gß.
Ga
2. V đ th vô hưcmg G = (V,E) cho bi;
V=[A,B, C, D,E,F)
và
E = {{E.G), (B,F), { D ,0 , (D,F), (C,F), (A,F), (E,D)]
3. Vi mi đ th trong các đ th sau đây hãy cho biết nó có là đ th hai phía hay
không? Nếu câu tr li là khng đnh, hãy ch rõ cách phân hoch tp đnh thành hai tp
đnh sao cho cnh ni ch có gia hai đnh thuc hai tp khác nhau.
3. Cho đcm đ th vô hưng liên thông G = (V, E) vi n đnh.
160
Chương y. Các khái nim cơhíin ca lÝ thuyei d thị
a) Chng minh rng luôn tn tại đưiig đi đưn ni hai đnh u, V bt k ca đ th.
(Gi ý: Đưng di cn tìm ìc> dưng di Iìi>âii lìlìấr ¡heo sơ cnh)
b) Chng minh rng luôn tn tại đưòìig đi qua không quá n đnh ni hai đnh u, V
bt k ca đ th.
(Gi ý: Đưng đi cán tìm là dưng cli ngn nht theo scnh).
4. Cho G là đơn đ th vô hưng vi / đinh, m cnh, k thành phn liên thông. Chng
ĩiinh rng;
n-k < {n-k) {n-k+\) !
2
.
T đó suy ra đ th n đnh vi sô' cnh ln hơn (/-l)(/;-2)/2 là liên thông.
(Gi : Chng minh bng qui np theo s cnh ca đ th).
5. Chng minh rng trong đơn đ th với / > 1 đnh luôn tìm đưc hai đnh không là
đnh r nhánh.
6. Chng minh rng đnh u trong đom đ th liên thông G đnh r nhánh khi và ch
khi tìm đưc hai đnh V và vv (v,>v ĩ^u) sao cho mi đưòmg đi ni V và vv đu đi qua đnh
u.
7. Chng minh rng cnh e trong đơn đ th G cu khi và ch khi nó không thuc bt
c chu trình nào trong G.
8. Cho G là đ th hai phía vi n đnh và m cnh. Chng minh rng m < n^/4.
9. Cho G là đ th hai phía vi n đnh và m cnh. Gi K k là bc lfn nht và nh nht
ca các đnh ca G. Chng minh răng
m <
2
m!n < M.
10. Đ th vô hưng đưc gi là chính qui bc k nếu tt c các đnh ca nó đéu có bc
là k. Vi giá tr nào ca /7 đ th sau là chính qui?
a)/^
b) c
c)W^
d) Q
11. Ta gi đ th G ' là đ th bù ca đơn đ th G nếu các đnh ca nó là đnh ca đ
th G và hai đnh ca ơ'là k nhau khi và ch khi chúng là không k nhau trên G. Hãy
v các d th bù ca K, K,, c, Q.
161
Phn 2. Lý thuyết đ th
12. Hai đơn đ th vô hưng ơ | = (V^I, £ |) và = (^ 2- ^ 2) đưc gi là đng cu nếu tn
ti mt song ánh /: V| -» V
2
sao cho (m,v) e E khi và ch khi {u),f{v)) e £
2
- Thí d,
hai đ th G| và Ơ2 cho trong hình dưi đây là đng cu
Song án h /đ ư c xác đnh như sau;/(A )= 1,/(B )= 2 ,/(C )= 3 ;/(D )= 4,/(E )= 5,/(F )= 6 .
Hi hai đ th sau đây có đng cu hay không?
162
Chương I. c khái niệm cơ bản của /v thuyết đ th
13. Vi mi đ th trong các đ th sau đây hãy cho biết nó có là đ th phng hay
không. Nếu câu tr li là khng đnh hãy trình bày cách v đ th sao cho các cnh
không ct nhau ngoài đnh:
a)
0
14. Hi rng đ th Q3 có phi là phng không? Trong trưng hp câu tr li là khng
đnh hãy v nó trên mt phng sao cho khng có cnh nào ct nhau.
15. Cho G là đơn đ th phng liên thông với 20 đnh và mi đnh ca nó đu có bc là
3. Hi rng khi v G trên mt phng thì mt phng bchia làm bao nhiêu phn ?
16. Bài to án tò m àu đ th: Cho đơn đ th vô hưng G = (V,E). Hãy tìm cách gán cho
mi đnh ca đ th mt màu sao cho hai đnh k nhau không b tô bi cùng mt màu.
Mt phép gán màu cho các đnh như vy đưc gi là mt phép tô m àu đ th. Bài toán
tô màu đòi hi tìm phép tô màu với s màu phi s dng là ít nht.
Ta gi sc s ca đ thi G, ký hiu là x(G), là sô' màu ít nht cn dùng đ tô màu đ
th. Dưi đây là m t s kết qu liên quan đến tô màu đ th
a) Đnh lý 4 màu: Mi đ th phng đu có th tô bi 4 m u .
b) Đcfn đ th G là hai phía khi và ch khi (G) = 2.
Hãy chng minh mnh đ b).
163
Phn 2. Lv tlitiyếi d th
17. Hãy tính sc s ca các đ th cho trong các hình v sau
a) Đ th Petersen
b) Đ th lp phương
c) Đ th Herschel
164
Chương 2. Biểu dien d thtrân rnáy Ịính
2
Biu DIN Đ TH
TRN MÁY TĨNH
Đ lưu tr đ th và thc hin các thut toán khác nhau vi đ th trên máy tính
cn phi tìm nhng cu trúc d liu ihích hp đ mô l đ th. Vic chn cu trúc d
liu nào đ biu din đ th có c đng rt ln đến hiu qu ca thut toán. Vì vy, vic
chn la cu trúc d liu đ biu din d th ph thuc vào tng tình hung c th (bài
toán và thut toán c th). Trong mc này chúng ta s xét mt s phương pháp cơ bn
đưc s dng đ biu din đ thtrên máy tính, đng thi cũng phân tích mt cách ngn
gn nhng ưu đim cũng như nhng nhưc đim ca chúng.
2.1. Ma trn k. Ma trn trng s
Xét đơn đ th vô hưng G = (V, E), với tp đính V = {1, 2,..., «}, tp cnh £= {e,,
e,}. Ta gi ma trn k ca đ th G là (0,l)-m a trn
/\ = {üij : i.j= 1 ,2
.....
/}
»
165
Phn 2. Lý thuyết đ th
vi các phn t đưc xác đnh theo quy tc sau đây:
đý = 0, nếu (j ) E và ùj = 1, nếu ,J) G E,
i. j = 1,2
.....
n.
T h í d 1. Ma trn k cu đ th vô hưng G cho trong hình 1
1 2
3
4.
5
6
1
0
1 1
0
1
0
2
1 0 1
0
1
X 0
1
1
1 Û 1 Ü Ũ
4 0 0 1 0 1 1
5
1 1 0 1
0
1
6 0 0 0
1
1
0
4
G G,
H ình 1. Đ th vô hưng G và Đ th có hưng G,
Các tính cht ca ma trn k:
1) Rõ ràng ma trn k ca đ th vô hưng là ma trn đi xng, tc là
a[i,j]=a[,i], i,j^
1
,
2
,..., n.
Ngưc li, mi (0,1 )-ma trn đi xng cp n s tương ng, chính xác đến cách đánh s
đnh (còn nói là: chính xác đến đng c u ), vi mt đơn đ th vô ốfng n đnh.
2) Tng các phn t trên dòng i (ct j) ca m a trn k chính bng bc ca đnh i
(đnh f).
3) Nếu ký hiu
aỊ! , i , j = 1, 2,..., n
là các phn t ca ma trn tích
166
Chươní 2. Biểu diền d th trên ny tính
Khi đó
A^^A.A...A
cho ta s đưng đi khác nhau t đnh ; đến đnh j qua p- 1 đnh trung gian.
Ma trn k ca đ th có hưng đưc đnh nghĩa mt cách hoàn toàn tương tự.
T h í d 2, Đ th có hưng G, cho trong hình 1 có ma trn k là ma trn sau
1
1 r 0
6
0 -
0
0
0
1
0
Lun ý rng ma trn k ca đ th có hưng không phi là ma trn đi xng.
Chú ý: Trên đây chúng ta ch xét đơn đ th. Ma trn k ca đa đ th có th xây dng
hoàn toàn tương t, ch khác là thay ghi 1 vào vị trí a[ij] nếu (/, j) là cnh ca đ th,
chúng ta s ghi k là sô' cnh ni hai đnh i và j.
Trong rt nhiu vn đ ng dng ca thuyết đ th, mi cnh e = i, v) ca đ th
đưc gán vi mt con s c{e) (còn viết là c{u,v) ) gi là trng ' ca cnh e. Đ th
trong trưng hp như vy đưc gi là đ th có trng s. Trong trưng hp đ th có
trng s, thay vì ma trn k, đ biu din đ th ta s dng ma trn trng s
C = c[i,jị i,j= 1, 2,..., n.
vi
và
nếu (/, j) e E
c[/,] =
e,
nếu(i,y)£,
trong đó s 0 , tu tng trưng hp c th, có th đưc đt bng m t trong các giá tr
sau: 0, +00, -00.
ư u đim ln nht ca phương pháp biu din đ th bng ma trn k (hoc ma trn
trng s) là đ tr li câu hi: Hai đnh u, V có k nhau trên đ th hay không, chúng ta
ch phi thc hin mt phép so sánh. Nhưc đim ln nht ca phương pháp này :
167
Phn 2. Lý thuyết đ íh
không ph Ihuc vào s cnh ca đ th, ta luôn phi s dng đcm v b nh đ u
tr ma trn k ca nó.
2.2. Ma trn liên thuc đnh-cnh
Xét G = (V, E),{V = {1, 2, r.}, E = {<?|, ?2, ), là đơn đ th có hưóng. Xây dng
ma trn A = {a¡¡. i = 1,2, n\ j = 1,2, ni), trong đó
' nếu đnh / là đnh đu ca cung e¡
^ nếu đnh i là đính cui ca cung ej
Q nếu đnh i không là đu mút ca cung
Ma trn A xây dng theo qui tc va nêu đưc gi là ma trn liên thuc đnh-cnh.
Ví du. Xét đ thi cho trên hình 3
(1.2)
(1.3)
(2.3)
(2.4)
(3,5) (4,5) (4.6) (5,2) (5,6)
1
1 1
0
0
0 0 0
0 0
2
- 1
0
1
1
0
0
0
- 1 0
3
0 - 1
- 1
0
1 0
0
0 0
4
0 0 0 - 1 0 1 1
0 0
5
0 0
0
0
- 1 0 0 1 1
6
0 0
0
0
0 0 - 1
0
- 1
H ình 2. Đ th có hưng và ma trn liên thuc đnh cnh
Ma trn liên thuc đnh-cnh là m t trong nhng cách biu din rt hay đưc s dng
trong các bài toán liên quan đến đ th có hưng mà trong đó phi x lý các cung ca
đ th.
168
Chươiì 2. iìêii (ìiẻn (ỉn ĩh ĩrcìì naíy ĩínì
2.3. Danh sách cnh (cung)
Trong trưng hp đ th thưa (đ th có s cnh m tho mãn bt đng thc: m <
6
n)
ngưi ta thưng dùng cách biu din đ th dưi dng danh sách cnh.
Trong cách biu din đ th bi danh sách cnh (cung) chúng ta s lưu tr danh
sách tt c các cnh (cung) ca đ th vô hưng (có hưng). Mi cnh (cung) e = (jc, y)
ca đ ih s cmg ihig vói l.ai biếii Dau[í?], Cuoì[ế']. Như vy, đ lưii tr đ5 ';h ta cn
sư dng 2m đơn v b nh. Nhưc đim ca cách biểi. din này là đ xác đnh nhng
đnh nào ca đ th là k với mt đính cho trưc chúng ta phi làm c m phép so sánh
(khi duyt qua danh sách tt c các cnh ca đ th).
C k ý: Trong Irưòng hp đ th có trng s ta cn thêm m đơn vị b nh đ lưu tr
trng s ca các cnh.
Thí d 3. Danh sách cnh (cung) ca đ th G (G) cho trong hình 1 là:
Dau
Cuoi
Dau
Cuoi
1
2
1
2
1
3
1
3
1
5
3
2
2 3
3 4
2 5
5 4
3
4
5
6
4
5
6
5
4
ó
5 6
Danh sách cnh ca c Danh sách cung ca ơ ,
2.4. Danh sách k
Trong rt nhiu vn đ ng dng ca lý thuyết đ th, cách biu din đ th dưi dng
danh sách k là cách biu din thích hp nht đưc s dng.
Trong cách biu din này, với mi đnh V ca đ th chúng ta lưu tr danh sách các
đinh k vi nó, m à ta s ký hiu Ke(v), tức là
Ke(v) = {u£V:(v,u)eE }.
Khi dó vòng lp thc hin với mi mt phn t trong danh sách này theo th t các
phn t đưc xp xếp trong nó s đưc viết như sau:
ĩor ueKeịv) do...
169
Phn 2. LÝ thuyết đ th
Chng hn, trên PASCAL có th mô t danh sách này như sau (Gi là cu trúc
F o rw a rd S tar):
Const
m = 000; { m - s cnh
n = 100; { n -sđnh}
var
Ke : array[l ..m] of integer;
Tro; array[l..n+ l] of integer;
trong đó Tro[i] ghi nhn vtrí bt đu ca danh sách k ca đnh i, i= l,2,...,n, Tro[nH l]
= 2m + l.
Khi đó dòng lnh qui ưc
ĩruKe(v) do
begin
end;
có th thay thế bi cu trc lnh c th trên PASCAL sau
f o r i : = Tro[v] to Tro[v+l]-l do
begin
u :=Ke [ i ] ;
e n d ;
Trong rt nhiu thut toán làm vic vi đ th chúng ta thưng xuyên phi thc
hin cc thao tác: Thêm hoc bt m t s cnh. Trong trưng hp này cu trúc d liu
dùng trên là không thun tin. Khi đó nên chuyn sang s dng danh sách k liên kết
{L inked A djancency List) như mô t trong chương trình nhp danh sách k ca đ th
t bàn phím và đưa danh sách đó ra màn hình sau đây:
program AdjList;
const
maxV = 100;
type
link - '\iode;
node - record
V ; integer;
n e x t: link
end;
170
Chương 2. BiCit (lien dồ thtréii má\ lính
var
j, .V, m, n, u, ; integer;
t : link;
Ke : array11..maxVJ o f link:
BEGIN
write( 'C ho sô'cnh và đnh ca đ th: A readln( m,n);
(* Khi to *)
fo r j : - to n do Kcljj:= nil:
fo r j:=--l tc m do
begin
write('CììO đnh đu cui ca cnh 'j, ': ');
readìn(x,y);
new (t); t^.v:=.x: t^.nexí:=Ke[y]: Key]:=t;
new(r); í^.v:=; !^.next:=KelxJ; Kelx]:=t;
end;
wriíeln( 'D anh sách k ca cúc đnh ca đ th: ');
fo r j:= l to m do
begin
w rite ln i'Danh sách các đnh k ca đnh ' j , ');
t:- K e íjl:
while t^.next < > nil do
begin
write(t^.v:4);
t:=t^.nexí:
end;
end;
readin;
END.
Thí d 4. Danh sách k ca các đ th trong hình I đưc mô t trong hình sau:
Đnh đu
{ 3
Í 3
{2
5 I nil
6 nil
fó ínil
Đinh đu
171
Phn 2. Lý thuyết đ th
H ình 2. Danh sách k ca đ th vô hưng G
và có hưng ơ | cho trong hình 1.
Đ ý rng trong cách biu din này chúng ta cn phi s dng c m+n đơn vị b
nh.
Trong các thut toán mô t các phn tiếp theo hai cu trúc danh sách k và ma
trn trng s đưc s dng thưng xuyên.
172
Chương 2. Biểu cin dó íh íréỉì mây lính
i tp
1. Lp trình nhp đ th vi các cu trúc d liu đã mô tả.
2. Lp trình cho phép chuyn đi t cu trúc d liu biu din đ th dưi dng ma trn
k sang danh sách k và ngươc lại.
3. Hãy xây dng ma trn k, danh sách k ca các đ th cho trong các hình v sau đây
a)
Ga
lb_)
\ '
\ Ci-'' < ĩ ) /
X
/
----
(¿1 \
\ \
i)
-------------------
( )
b)
4. Hãy xây dng ma trn liên thuc đnh cnh ca các đ th cho trong các hình v sau
a) b)
173
Phn 2. Lý thuyết đ th
5. Hãy xây dng ma trn trng s ca các đ th cho trong các hình v sau
a)
b)
c)
6. M a trn liên thuc đnh cnh có mt tính cht rt đc bil hay đưc s dng trong
vic phát trin thut toán ti ưu trên đ th. Đ phát biu tính cht này ta cn khái nim
sau.
Đ nh nghĩa. M a tr n A đưc gi là ma trn hoàn toàn đơn mô đun, nếu mi định thc
con khác không ca nó đu có tr tuyt đi là bng 1.
Chng minh rng ma trn liên thuc đnh cnh ca đơn đ th có hưng là hoàn toàn
đơn mô đun.
174
Chươììiị 3. Tìm kihì Ịrén (lílì Ví> lOìỉ
3
CÁC THUT TOÁN TÌM KlM
TRÊN Đ TH VÀ NG DNG
Rt nhiu thut loan trên đ th dưc xây dng da Irên cơ s duyt tt c các đinh
cúa đ th sao cho m i đnh ca n íluc viếng lliani (lúng (Iil ln. V ì vy, vic xây
dng nhng thut toán cho phép duyt inl cách h thng tất c các đnh ca đ th là
mt vn đ quan trng thu hút s quan tâm nghiên cu ca nhiu tác gi. Nhng thut
toán như vy chúng ta s gi là thut toán tìm kiếm trên đ th. Các thut toán này gi
mt vai trò quan trng trong vic thiết k ế các thut toán trên đ th. Trong m c này
chúng ta s gii thiu hai thui loái lim kiếm cơ bn trén đ tlìỊ: Thut toán tìm kiếm
theo chiu sâu (Depth First Search) và Thut toán tim kiếm theo chiu rng (Breadth
First Search) và ng dng ca chúĩiíĩ vào vic gii mt s bài toán trên đ th.
Trong m c này chúng ta sẽ xéi đ th vô hưng G = (V, E), vi n đinh và m cnh.
Chúng ta s quan tâm đến vic đánh giá hiu qu ca c thut toán trên đ th, m à m t
trong nhng đc trưng quan trng nht là đ phc tạp tính toán, tức là s phép toán mà
ĩhiiĩ ĩoán càn phi ihc hin ĩrong ĩình hung.xu nhĩ được biu din như hàm ca
kích thưc đu vào ca bài toán. Trons các thut toán trên đ th, đu vào đ th G =
{V, £ ) , vì vy, kích thưc ca bài toán s đính n và s cnh m ca đ th. Khi đó đ
phc tp tính toán cúa thut toán SC được biu din như l à hàm ca hai biến s / f / , / ? j l à
s phép lOÚn nhiu nht cn phái ilic hiện theo thut toán đối vi mi đ thvới n đnh
175
Phân 2. Lv ỉhuyếĩ d thị
và m cnh. Khi so sánh tc đ tăng ca hai hàm nhn giá trị không âm f(n) gn)
chúng ta s s dng ký hiu sau:
fn) =
0
(g(n))
<=> tìm đưc các hng s c , N > 0 sao cho
f(n) < C g(n) với mi // >N.
Tươiig t như vy nếu f(n¡, g(n, là các hàm nhiu biến, ta viết
f(n¡, = 0(g(rĩ,
<=> tìm đưc các hng s c , N > 0 sao cho
f(n¡, n
2
,...,n,) < c g(ĩĩị, với mi «/,
Nếu đ phc lp tính toán ca thut toán là 0{g(n)) thì ta s còn nói nó đòi hi thi
gian tính c
0
(g(n)),
3.1. Tìm kếm theo chiểu sâu trên đồ th
Ý tưng chính ca thut toán có th trình bày như sau. Ta s bt đu lìm kiếm t m t
đnh nào đó ca đ th. Sau đó chn u là mt đnh tu ý k với và lp lại quá trình
đi với u. bưc tng quát, gi s ta đang xét đnh V. Nếu như trong s các đnh k vi
V tìm đưc đ n h w l à chưa đưc xét t h ì t a s xét đ n h này ( n ó s tr thành đ ã x é t ) v à b t
đu t nó ta s tiếp tc quá trình tìm kiếm , Còn nếu như không còn đnh nào k vi V là
chưa x ét thì ta s nói rng đnh này là đã duyt x on g và quay tr li tiếp tc tìm kiếm t
đnh m à trưc đ ó ta đ ế n đưc đnh V ( n ế u V = Vy. th ì k ế t th ú c tìm kiếm). C ó th n ó i n ô m
na là tìm kiếm Iheo chiu sâu bt đu t đnh V đưc thc hin trên cơ s tìm kiếm theo
chiu sâu t tt c các đnh chưa xét k với V. Quá trình này có th mô tả bi thù tc đ
qui sau đây.
procedure DFS(v);
Tìm kiếm theo chiu sâu bt đu t đnh v;
Các biến Chuaxet, Ke là biến toàn cc
begin
Thăm_đnhv);
Chuaxet [v ]: =false;
for u eK e(v) do
if Chuaxet[u] then DFS(u);
end; đnh V ỉà đã duyt xong * j
Khi đ ó, Tim kiếm theo chiu sâu trên đ th đưc thc h in nh thut toán sau:
BEGIN
("* Initialization
fo r V e V do Chuaxetfv]:=true;
fo r V e V do
if Chuaxetv] then DFS(v);
END.
176
Chươf];^ 3. Tìiìì kicn rci L lli va ÍOÍ ciìí
Rõ ràng lnh gi DFS(v) sẽ cho phép đén thăm tt ca cc đinh thuc cùng thành phn
liên thng vi đnh V, bởi vì sau khi Ihăin đnh lệnh gi đến th tc DFS đi với tl c
các đnh kề với nó. Mt khác, do mỗi khi ihãm đnh V xong, biến Chuaxet[v] đưc đl
lại giá trị ýase nên mi đnh sẽ được thăm đúng một ln. Thut toán lần t s tiến
hành tìm kiếm t các đnh chưa được ihã ĩT i, vì vậy, nó sẽ xél qua tt c các đnh ca đ
th (không nht thiết phải liên thông).
Đ đánh giá đ 3hc tạp tírlì toán cúa th tục, trước hết nhn thy rng s phép
toán cn thc hin trong hai chu trình ca ihut toán (hai vòng for chương trình chính)
là c
n. Th tc DFS phải thực hiện không quá n lán. Tng s phép toán cn phi thc
hin trong các th tc này là do trong c th tục này ta phi xét qua tt c các
cnh và các đnh ca đ thị. Vạy độ phức tạp tính toán ca ihut toán là 0{n-\-m).
Thí d 1, Xét đ th cho trong hình 1. Các đnh ca nó đưc đánh s lại theo th t
chúng đưc thãm theo th tục m kiếm Iheo chiu sâu mô t trên. Gi thiết rng các
đính trong danh sách kề ca đnh (Kc(v)) đưc sp xếp theo th t tăng dn ca ch
s.
3(9)
Hình 1. Chs mới (irong ngoc) ca c đỉnh đưc đánh lại theo th tự
chúng được thăm trong thut toán tìm kiếm theo chiu sâu
Thut toán tìm kiếm theo chiu sâu trên đ thvồ hưcíĩig trình bày trên d dàng có
th mô t lại cho đ th có hướng. Trong trường hợp đồ thị có hưng, th tc DFS(v) s
cho phép thăm tt c các đnh ti nào từ V có đường đi đến u. Đ phc tp tính toán
ca thut toán là 0 (a2+/?í).
3.2. Tìm kiếm theo chiu rng trên đ th
Đ ý rng trong thut toán tìm kiếm theo chiu u đỉnh đưc thăm càng mun s càng
sm tr thành đã duyt xong. Điu đó hệ qu tất yếu ca vic các c nh đưc thăm s
177
Pn 2. Lý tlu ix ct dó lli
đưc kê't np vào trong ngăn xếp (STA CK ). Tim kiếm theo chiu rng trên d ih, nếu
nói m t cách ngn gn, đưc xây dng da trên cơ s thay thế ngăn xếp (STA C K ) bi
hàng đi (Q U E U E ). Vi s ci biên như vy, đnh đưc thăm càng sm s càng sm tr
thành đã duyt xong (tc là càne sm di khi hàng đi). Mt đnh s Ir thành đã
duyt xong ngay sau khi la xét xong tt c các đinh k (chưa đưc thăm ) vi nó. Th
tc có thế m ô tá như sau:
procedure BFSv):
Tìm kiếm theo chiu rn, ?ĩ đu t đnh v;
Các hiéh Chuaxet, Ke biến toàn cc
heí^in
QUEUE:=0;
QUEUE <^v; Kéì np V vào QUEUE
Chuaxeĩ ]: =fase;
while QUEUE ^ 0 do
begin
p QUEUE; Ly p t QUEUE
Thăm_đnhip);
fo r Li eKe(p) do
if Chuaxet uj then
begin
QUEUE Cr u; Cìmaxeĩlii]:-false;
end;
end;
end;
Khi đó, Tim kiếm theo chiu rng trên đ ih đưc thc hiên nh thut toán sau:
BEGN
Initialization
for V e V do Chtaxefv:=tnie;
fo r V e V do
if Chuaxet[v] then BFSv);
END.
Lp lun tương t như trong th tc tìm kiếm ih eo chiu sâư, có th ch ra đưc
rng lnh gi BFS(v) s cho phép đến thăm tt c các đnh thuc cùng thành phn liên
thông vi đnh V, và m i đnh ca đ th s đưc thãm đúng mt ln. Đ phc tp lính
toán ca thut toán là 0 (/7 + w ).
Thí d 2, Xét đ th trong hình 2. Th t thăm đnh ca đ th này theo thut toán tìm
kiếm theo chiu rng đưc ghi trong ngoăc.
178
Cììưoiị 3. Tìm kicnì frén dỏ iì và ìi; dnni
8(13)
Hình 2. Ch s mi (trong ngoc) ca các đinh đưc đánh li theo th tự
chúng đưc thăm trong thut toán lìm kiếm theo ch iu sâu
3.3. Tìm đưng đi và kiểm tra tính liên thông
Trong m c này ta xét ng dng các thul toán tìm kiếm m ô ta trong các m c trưc vào
vic giãi hai bài toán cơ bân trn đ thị: bài toán tìm đưng đi và bài toán v xác đnh
các thành phn liên thông cúa đ th.
a) Bài toán tìni đưng đi gia hai đính: Gi s s vù ĩ lủ hơi đnh nào dó ca d thị.
Hây tìm cíưìyng đi t s dến .
Như trên đã phân lích, th tc DFS() (BFS(.v)) s cho phép ihăm lt c các đnh
thuc cùng m t thành phn liên thôn vi .V. Vì vâ, sau khi thưc hin xon g th tc, nếu
Chuaxel[/]=truc» thì điu ct có nghĩa khng có đưctiig đi t s đến /, còn nếu Chua
xet[/]=fa lse Ihì ĩ thuc cùng ihành phn liên thng vi .V, hay nói mt cách khác: tn ti
đưng đi t đến t. Trong trưng hp tn lại đưng đi, đc ghi nhn đưng đi, ta dùng
ihêm biến T ru oc[\] đế ghi nhn đinh (li trưc đính V trong đưng đi tìm kiếm t s đến V.
Khi đó, đ i vi th tc DFS(r) cán sa sa đi câu lnh if irong nó như sau:
if Chiơxeĩlưl then
hc^in
TriiOciil :-v;
DPSịii);
end:
Còn đi vi th tc B FS(\) cn sa sa đi câu lnh if Irong nó như sau:
if Cuiaxetii/ íhen
hei^in
QUEUE Cr u: CỉỉncỉxetluỊ:=faỊse;
Triiocliiì :=p:
end:
179
Phcin 2. Lý ĩiiuyếĩ d th
Đưng đi cn tìm s đưc khôi phc theo quy tác sau:
t ^ p :-T riio c[ĩì ^ p2:=T'uoc[pĩI . . <-s .
Chú ý: Đưng đi tìm đưc theo thut toán lìm kiếm theo chiu rng đưòĩg đi ngn
nht (theo s cnh ) từ đnh ^ đến đnh /. Điu này suy trc tiếp từ th t ihàm đnh theo
thut toán tìm kiếm thec chiu rng.
b) Tìni các thành phn liên thòng ca đ th: Hãy cho biếĩ đó th gm hao nhiêii
íhcinh phn liên thông và tng thành phn liên thông ca nó ỉà gm nhng đnh nào.
D o th tc D F S (s) (BFS(s)) cho phép thm tt c các đnh ihu c cùn g m t thành
phn liên thne vi s. nên s thành phn liên thông ca đ Ihchính bng s ln gi đến
th lc này. Vn đ còn li là cách ghi nhn các đnh trong tng thành phn 'iên thông.
Ta dùng thêm biến ĩndex[v] đ ghi nhn ch s ca thành phn liên thông cha đnh V,
và dùng thêm biến Ĩnconnecĩ đ đếm sô' thành phn liên thông (biến này cn đưc khi
to giá trị 0 ). Th tc T hăm _đnh(v) trong các th tc D FS(v) và BFS(v) có nhim v
gán: ndexv]:- nconnect, còn câu lnh if trong các chưong trình chính gi đến các
th tc này cn đưc sa li như sau
Ĩnconnecĩ:=
0
;
if Chuaxetv then
begin
ĩnconnect:-nconnect+ l;
DFS(v); (*BFS(v)
end;
Kết thúc vòn g lp th hai trong chương trình chính, Inconect cho s thành phn liên
thng ca đ th, còn biến mng Index[v], \ e V cho phép lit kê các đnh thuc cùng
m t thành phn liên thông.
C iư ơ n g trình trên PA SC A L gii hai bài toán nói trên có th viết như sau.
{ CHƯONG TRNH TIM DUONG Dí VA KIEM TRA TINH LIEN THONG
THEO CAC THƯAT TOAN TIM KIEM TREN DO THI
uses crt;
var
a : array[1..20,1..20] o f byte;
Q U E U E , C huaxet, Truoc : array[1..20] o f byte;
i,j,n,S olt,k ,s,t : integer;
stop : boolean;
ch : char;
180
Chương 3. Tim kicm vèn dồ íì Vcí ng dunịị
p n cedttre Nhapsolìeu;
begin
write('Cho so dinh cua do thi:');readn(n);
writeln('Nhap so lieu ma tran ke:');
for i:=l to n do
begin
for j:= i+1 to n do
begin
vvriteC read(a[i,j]); a[j,i]:=a[i,j];
end;
a[i,i]:=0; writeln;
end;
end;
procedure ReadFUe:
var f;text; fn:string;
begin
write('Cho ten file du lieu:');readln(fn);
assign(f,fn);reset(f); readln(f,n);
writeln('Nhap so lieu ma tran ke:');
for i:=l to n do
for j:= l to n do read(f,a[ij]);
close(f);
end;
procedure Insolicu:
begin
writeln('Ma tran ke:);
for i;=l to n do
begin
for j:= l to n do write(a[i,j]:3); writein;
end;
end;
procedure Ketqualienthong:
begin
Insolieu;
if Solt=l then writein('Do thi la lien thong')
else
begin
wriîeln('So thanh phan lien thong cua do thi la: ',Solt);
181
Phcỉn 2. Lý thuyết đ ílì
for i;=l to Solt do
begin
writeln(Thanh phan lien Ihong thu ',i,' gom cac dinh:');
for j:=l to n do if Chuaxet[j]=i then write(j:3); writeln;
end;
end;
write(Go Enter de tiep tuc...#7);readln;
end;
procedure BFS(i:integer);
Tìm kiếm theo chiu rng bt đu t đnh i
var u, dauQ, cuoiQ: integer;
begin
dauQ :=l; cuoiQ:"=ỉ,
QUEƯE[cuoiQ]:-i;Chuaxet[i]~Solt;
while dauQ cuoiQ do
begin
u:=QUEUE[dauQ]; dauQ;=dauQ+l;
for j:= l to n do
if (a[uj]=l)and(Chuaxet|j]=0) then
begin
cuoiQ:=cuoiQ+l; QUEUE[cuoiQ]:=j;
Chuaxet[j]:=Solt; Truocj]:=u;
end;
end;
end; { o f procedure BPS }
procedure DFS(v: integer);
Tim kiếm theo chiu sâu bt đu t đnh V
var u:integer;
begin
Chuaxet[v]:=Solt;
for u:=l to n do
if (a[v,u]=I )and(Chuaxet[u]=0) then
begin
Truoc[u]:-v; DFS(u);
end;
end;
procedure Lienĩhong:
begin
{ Khoi tao so lieu }
182
ChUo'ng 3. T im kic'm frcn d o thi va ifn;^ ditn^
for j:=l to n do Chuaxet[Jl;-(); Solt-4);
for i~ l to n do
if Chuaxet[i]=0 then
begin
Solt:=Solt+l;
{BFS(i);}DFS(i);
end;
Ketqualienthong;
end;
procedure Ketquaduongdi:
begin
if Truoc[t]=0 then writein('Khong co duong di tu ',s,' den ',t)
else
begin
writeln('Duong di tu ',s,' den ',t,' la:');
j:-t;
write(t,' < = ');
while Truoc[j]<>s do
begin
\vnte(Truoc[j],' ');
j:=TruocO];
end;
writeln(s);
end:
write('Go Enter de tiep tuc...'#7);readln;
end;
procedure Duongdi;
begin
Insolieu;
writeC Tim duong di tu dinh: '); readln(s);
writeC den dinh:'); readln(t);
for j:= l to n do { Khoi tao so lieu }
begin
Truoc[j]:=0; Chuaxet[j]:=0;
end;
Solt:=l;BFS(s); { DFS(s); }
Ketquaduongdi;
end;
183
Phẩn 2. Lý ĩhuyếí đổ íh
procedure Menu:
begin
crscr;
writeln( TIM DUONG DI VA KIEM TRA TINH LIEN THONG');
writeln( CUA DO THI THEO THUAT TOAN TM KIEM TREN DO THI);
writeln(' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 1 = = = = ') ;
writeln(' 1. Nhap so lieu tu ban phim.');
writeln(' 2. Nhap so lieu tu file.');
writeInC 3, Kiem tra tinh lien thong.');
wriíeln(' 4. Tim duong di giua hai dinh.');
writeln{' 5. Thoat.');
writeln('
.................
-
...............................
-..............................');
write (' Hay go phim so de chon chuc nang...'#7);
ch:=readkey;wriíeln(ch);
end;
{ Main program }
BEGIN
repeat
Menu;
case ch of
'1' : NhapsoHeu;
'T : ReadFile;
'3 : Lienthong;
'4': Duongdi;
end;
until (c h -5') or (upcase(ch)-Q');
END.
184
Chươỉii^ 3. Tìm kil'h] iri'/i d ỉììị V') lOi^ dnn
Bài tập
1. Gi s đ th G - (V.E) đưc cho bi danh sách kc. Hã\' viết th tc loi b cnh
(//.v), thêm cnh (x,y) vào đ thị.
2. Th tc sau đây cho phép duyt qua tt c các đính ca đổ th đưc cho bởi danh sách
kề:
procedure Find(x);
begin
Thamdinh(x); Clìuatham[x]:- Đà íháìĩK
while (Trong V n đình đà ĩhm) do
begin
v:= đnh đã thăm new đ ó:
i f (Tìm đưc đỉnh chưa thăm u e Ke(\ ) ) then
begin
u;= đỉnh chưa thám đáu ĩn ĩrong Ke(\')\
Thamdinh(u); Chuatham[u]:= Đã ĩhăm\
end
else Chuatham[v] Đã duyt .xong;
end;
end;
BEGIN
for V G V do Chuatham[v]:-Chưa thàm;
for V e V do
if (Chualham[v]= CZ/z/'t/llicn I’ind(v);
END.
Hãy ch ra rng c hai Ih tục tìiĩì kiếm theo chiu u lìm kiếm theo chiu rng
đu có th xem như trưng hp riêng của Ih lục này. Viếl chương trình trên PASCAL
thc hin thut toán mô t trên.
3. Áp dng th tc tìm kiếm theo chiu sâu m tất cả các cu trên đ th vô hưng.
(Cu là cnh mà vic loi b nó làm ng s thành phn liên thông ca đ th).
4. Áp dng th tc tìm kiếm theo chiu u kiếm tra xem đồ thcó hưng G = (y A ) có
cha chu trình hay không?
5. Cho mt bng ô vuông gm m X // ô, ô nằm trên dòng / ct j gi ô (/j), / = 1, 2,,..,
m ,j = 1, 2,..., n. Trong iTìi ô (/,7) ca ta viết mt s a[i,j] e (0,1}. T mt ô nào đó
ta ch có th di chuyn sang ô cha s 1 cổ chung cnh vi n . Gi s cho ô (p, q) ô
185
Phn 2. Lv ĩhiyết đ th
xut phát, hày viết chương trình tìm xem có cách di chuyn t ô này ra mt ô mép ca
bng hay không? (Ô (//, v) gi là ô mép bng nếu hoc là // = 1, hoc là li = m, hoc
là V = 1, hoc l à V = n ).
6. Cho mt bng ô vuông gm m X /? ô, ô nm trên dòng ct j gi ô (/j), / = 1, 2,...,
m ,j = 1, 2,..., n. Trong mi ô ,j) ca nó ta viết mt s a[i,j] e (0,1}. Hãy viết chương
trình đếm s min con toán 0 ca bng. Ví d s min con toàn 0 ca bng kích thưc
5x5 đưc ch ra trong hình sau đâv
1 1 [Õ ~ Õ
1 1
0 0
1 1
1 l
7. Có N ngưi kiách (N < 100) mang s hiu t 1 đến N. đưc mời đến d tic. Gia
h có mt s ngưi quen biết nhau. D liu về mi quan h quen biết này đưc cho
trong mt file văn bn có tên ià KHACH.DAT có cu trúc như sau: Dòng đu tiên ca
nó cha s ng khách mi N. Mi dòng th i trong s N dòng liếp theo cha s hiu
ca các ngưi quen ca khách i, các s hiu đưc ghi cách nhau bởi ít nht mt du
cách.
Ngưi ta mun xếp các khách này vào các phòng tic, sao cho hai khách trong cùng
ml phòng hoc là quen biết nhau hoc là có th làm quen nhau thông qua nhng ngưi
quen biết trung gian ca họ.
Viết chương trình nhp d liu vào t file, sau đó tìm cách phân khách vào các
phòng tic sao cho s phòng phi s dng nht. Kết qu phân công đưa ra mt file
văn bn, dòng đu tiên cha s phòng tic cn s dng K, mi dòng th i trong sô' K
dòng tiếp theo ghi s hiu ca khách xếp vào phòng tic i.
8. Bản đ giao thông đưc cho bi n nút giao thông đánh s là 1, 2,..., n và h thng
gm m đon đưng E, Ej,..., mi đan ni 2 trong s n nút giao thông nói trên. Bản
đ giao thông đưc gi là liên thông đơn nếu gia hai nút giao thông bt k ch có đúng
mt đưng đi ni chúng. D liu cho trong file văn bn có tên GT.DAT, dòng đu tiên
cha các s n, m, hai s ghi cách nhau bi đu cách. Mi dòng i trong s m dòng tiếp
theo cha s hiu hai nút giao thông đưc ni bi đon đưng E|.
Viết chương trình nhp d liu vào t file sau đó thông báo xem bn đ có phi
liên thông đcm hay không. Trong trưng hp bn đ là không liên thông đơn hãy tìm
cách xây dng b sung và loi b mt s đon đưng đ cho bn đ liên thng đơn
sao cho s đon đưng phi xây dng b sung ít nht. Các kết qu đưa ra màn hình.
186
Chương 4. í) th Euler và cĩó ĩi Hamilton
4
Đ THEULER
VÀ
Đ TH HAMILTON
Trong chưcmg này chúng ta s nghiên cu hai dng đ th đc bit là đ th Euler và
đ th Hamilton. Dưi đây, nếu khng có gii thích b sung, thut ng đ th đưc dùng
đ ch chung đa đ th vô hưng và có hưiig, và thut ng cnh s dùng đ ch chung
cnh ca đ th vô hưng cũng như cung ca đ th có cmg.
4.1. Đ th Euler
Đ nh nghĩa 1, Chu trình đơn ĩron^ G đi qua mi cnh ca nó m t ln đưc gi là chu
trình Euler. Đưng đi đơn trong G đi qua mi cnh ca nó m t ln đưc gi là đưng
đi Euler. Đ th đưc gi là đ th Elder néìi n có chu trình Euler, và gi là đ th
na Euer nếu nó có đưììg đi Euler.
/
Rõ ràng mi đ th Euler luôn na Euler, nhưng điu ngưc li không luôn đúng.
187
Phân 2. Lý thuyết đ th
T h í d 1, Đ Ih G| trong hình 1 là đ th Euler nó có chu trình Euler a, e, c, d, e, h,
a, Đ th G 3 không có chu trình Euler nhưng nó có đưng đi Euler a, c, d, e, h, d, a, h,
vì thế G3 là đ th na Euler. Đ th G2 khng có chu trình cũng như đưng đi Euler.
a h a h a b
d c
Ơ
2
H ình 1. Đ th G |, Gj. ơ ,
T h í d 2. Đ th H
2
trong hình 2 là đ th Euler vì nó có chu trình Euler a, h, c, d. e, a.
Đ th không có chu trình Euler nhưng nó có đưng đi Euler c, a, b, c, d, h thế /y,
là đ th na Euler. Đ th //, không có chu trình cũng như đưng di Euler.
a h a h c a
a
\
K
----------------
>----------------^
K
"
----------------
d b
H
2
H ình 2. Đ th / / / / 2 , / / 3
Điu kin cn và đ đ mt đ th là mt đ th Euler đưc Euler tìm ra vào năm 1736
khi ông gii quyết bài toán hóc búa ni tiếng thi đó v by cái cu thành ph
Königsberg, và đây là đnh lý đu tiên ca lý thuyết đ th.
Đ nh lý 1 (E u ler). Đ th vô hưng liên thông G là đ th Euler khi và ch khi mi
đnh ca G đu c bc chn.
Đ chng m inh đnh lý trưc hết ta chng minh b đ:
B đ. N ếu bc ca m i đnh ca đ th G không nh hơn 2 thì G cha chu trình.
C h ng m in h. N ếu G có cnh lp thì khng đnh ca b đ là hin nhiên. Vì vy gi s
G là đcíri đ th. Gi V ià mt đnh nào đó ca G. Ta s xây dng theo quy np đưng đi
188
Chương 4. Đ thEuler tà đ thị Ham ilton
trong đó V, là đnh k vi còn vi / > 1 chn i,+| là vi V, và 5 v,,| (có th chn
như vy là vì deg{Vị) > 2). Do tp đnh ca G là hữu hn, nên sau mt s hu hn
bưc ta phi quay li mt đnh đã xut hin trưc đó. Gi đnh đu tiên như thế là v^.
Khi đó, đon ca đưng đi xây dng nm gia hai đnh 1 chu trình cn tìm.
C h ng m inh đn h lý.
C n . Gi s G là đ th Euler tc là tn ti chu trình Euler p trong G. Khi đó c mi
ln chu irình p đi qua 1 đnh nào đ ca Cr thì bc ca đnh đó tàng lên 2. M t kliác
mi cnh ca đ th xut hin Irong F đúng 1 ln, suy ra mi đính ca đ th đu có bc
chn.
Đ . Quy np theo s cnh ca G. Do G liên thông deg{v) là s chn nên bc ca
mi đnh ca nó không nh hơn 2. T đó theo b đ G phi cha chu trình c . Nếu c đi
qua tt c các cnh ca G thì nó chính chu trình Euler. Gi s c không đi qua tt c
các cnh ca G. Khi đó loi b khi G tt c các cnh thuc c ta thu đưc 1 đ th mi
H (không nht thiết là liên thông). S cnh trong H nh hơn trong G và rõ ràng mi
đnh ca H vn có bc là chn. Theo gi thiết quy np trong mi thành phn liên thông
ca H đu tìm đưc chu trình Euler. Do G là liên thông nên mi thành phn trong H có
ít nht 1 đnh chung vi chu trình c . Vì vy, ta có th xây dng chu trình Euler trong G
như sau; Bt đu t mt dnh nào đó ca chu trình c , đi theo các cnh ca chu trình c
chng nào chưa gp phi đnh không cô lp ciía H. Nếu gp phi đnh như vy thì ta đi
theo chu trình Euler ca thành phn liên thông ca H cha đnh đó. Sau đó li tiếp tc
đi theo cnh ca c cho đến khi gp phi đnh không cô lp ca H thì li theo chu trình
Euler ca thành phn liên thông tương ìig trong H v.v... (xem hình 3). Quá trình s kết
thúc khi ta tr v đnh xut phát, tức thu đưc chu trình đi qua mi cnh ca đ th
đúng mt ln.
189
Phn 2. Lý thuyết đ th
H q u 2. Đ th vô hưn liên thôn^ G là na Euler khi và ch khi nó có klìôiì^ quá 2
đnh bc lẻ.
C h ng m inh. Thc vy nếu G có không quá 2 đnh bc l thì sô' đnh bc l ca nó ch
có th là 0 hoc 2. Nếu G không có đnh bc l thì theo đnh lý 1 nó là đ th Euler. Gi
s G có hai đnh bc i là u và V. Gi H là đ th thu đưc t G bng cách thêm vào G
mt đnh mi vv và hai cnh (w,u) và (M^v). Khi đó tt c các đnh ca H đu có bc là
chn, vì thế theo đnh lý 1 nó có chu trình Euler
c.
Xoá b khi chu trình này đnh vv và
hai cnh k nó ta thu đưc đưng đi Euler trong đ th G.
Gi s G là đ th Euler, t chng minh đnh lý ta có th tc sau đ tìm chu trình
Euler trong G.
pro ced u re E uler Cycle;
begin
STACK := 0 ; CE := 0 ;
Chn u !à mt đnh nào đó ca đ th;
STACK <= u;
while STACK ^ 0 do
begin
x:= top(STACK); (*
.X
là phn t đu STAC K *)
if K e (x ) t0 then
begin
y;= đnh đu tiên trong danh sách Kex);
STACK c= y;
(* Loi b cnh (x,y) khi đ th *)
Ke(x) Ke(x) \ (y I: Ke(y) := Ke(y) \ {X};
end else
begin X <= STACK; CE <= x: end;
end;
end;
Gi s G là đ th Euler, thut toán đơn gin sau đây cho phép xác đnh chu trình Euler
khi làm bng tay.
T h u t toán F lor
Xut phát t 1 đnh u nào đó ca G ta đi theo các cnh ca nó 1 cách tu ý ch cn tuân
th 2 quy tc sau:
190
Chương 4. Đ thị Elder và đ tlì Hamilton
i) Xoá b cnh đ ã di qua và dóiĩĩ thi xoá c nhn đnh cô lp to thành.
ii) m i bưcỉc ta ch đi qua cu khi khõns, còn cách lựa chn nào khác.
C hng m inh tính đún g đn ca th u t toán. Trưc tiên ta ch ra rng th tc trên có
th thc hin đưc mi bưc. Gi s ta đi đến mt đnh V nào đó, khi đó nếu V TÍ M thì
đ th con còn li H là liên thông và cha đúng hai đnh bc l là V và u. Theo h qu
trong H có đưng đi Euler p t
V '
đến u. Do vic xoá b cnh đu tiên ca đưng đi p
khng làrn mt tính liên thông ca h , lừ đù sa> ra tn tc co tnế thc liin mi bưc.
Nếu V = II thì lp lun trên s vn đúng chm g nào văn còn cnh k vi u.
Như vy ch còn phi ch ra là th lc trên dn đến đưng đi Euler. Thc vy trong
G không th còn cnh chưa đi qua khi inà ta s dng cnh cui cùng k vi u (trong
trưng hp ngưc li, vic loi b 1 cnh nào đó k với 1 trong sô' nhng cnh còn li
chưa đi qua s dn đến mt đ th không liên thông, điu đó là mâu thun vi gi
t h i ế t i i ) ).
Chng minh tương t như trons đnh 1 ta thu đưc kết qu sau đây cho đ th có
hưng.
Đ nh lý 2. Đ th có hưng liên thòng mnh là đ th Euler khi và ch khi
deg*(v) = deg^(v), V veK .
4.2. Đ th Hamilton
Trong mc này chúng ta xét bài toán tưcmẹ tự như trong mc trưc ch khác là ta quan
tâm đến đưng đi qua tt c các đnh ca đ th, mi đnh đúng mt ln. S thay đi
tưng chng như là không đáng k này trên thc tế đã dn đến s phc tp hoá vn đ
cn gii quyết.
Đ nh nghĩa 2. Đưng di qua tt c các (lỉnh ca đ th mi dnh đúng mt ln đưc gi
l dưng đi Ham ilton. Chu trình ht đu t mt đnh V nào đó qua tt c các đnh còn
li m i đnh đúng mt ln ri quay tr v V đưc gi chu trình Hamilton. Đ th G
đưc gi là đ th Hamilton nếu nó cha chu trình Hamilton, và gi là na Hamilton
nếu nó cha đưng đi Hamilton.
Rõ ràng đ th Hamilton là na Hamilton, nhưng điu ngưc li không luôn đúng.
T hí d 3. Trong hình 3: G, là Hamilton, Ơ2 là na Hamilton còn G| không là na
Hamilton.
191
Phn 2. Lý thuyết đ th
G, G
2
G,
H ình 3. Đ th Hamilton G , na Hamilton Ơ2 , và G|
Cho đến nay vic tìm mt tiêu chun nhn biết đ th Hamilton vn còn là m, mc
dù đây là môt vn đ trung tâm ca lý thuyết đ th. Hơn thế na, cho đến hin nay
cũng chưa có thut toán hiu qu đ kim tra m t đ th có là H amilton hay không.
Các kết qu thu đưc phn ln là các điu kin đ đ m t đ th là đ th Hamilton.
Phn lófn chúng đu có dng "nếu G có sô'cnh đ ln thì G là Hamilton". Mt kết qu
như vy đưc phát biu trong đnh lý sau đây:
Đ nh lý 3 (D irak 1952). Đơn đ th vô hưng G vi n >2 đnh, mi đnh có bc không
nh hơn n/2 là đ th Hamilton.
Chng mnh. Thêm vào đ th G k đnh mi và ni chúng vi tt c các đnh ca G.
Gi s k là s nh nht các đnh cn thêm vào đ cho đ th thu đưc G' là đ th
Ham ilton. Ta s ch ra rng k = 0. Thc vy, gi s ngưc li là k > 0 . Ký hiu
V, p, w
......
.
y
là chu trình H amilton trong G', trong đó V, vv là đnh ca G còn p là mt trong sô' các
đnh mi. Khi đó w không k vi V vì nếu ngưc li, ta không cn s dng p và điu đó
là m âu thun vi gi thiết k nh nht. Hơn thế na đnh (vv'chng hn) k vi w không
th đi lin sau đnh v' (k vi v) vì rng khi đó có th thay
V > v '> w '
bi
V > v ' w w ' ... > V
bng cách đo ngưc đon ca chu trình nm gia w và v'. T đó suy ra là s đnh ca
đ th ơ ' không k vi w là không nh hoíi s đnh k vi nó (tc là ít nht cũng là bng
n/2 + k), đng thi s đnh ca G' k vi w cũng ít ra là phi bng n!2 + k. Do không có
đnh nào ca G' va không k, li va k vi w, cho nên tng s đnh ca đ th G' {G
có n + k đnh) không ít hcm n + 2k. Mâu thun thu đưc đã chng minh đnh lý.
Đnh lý sau là tng quát hoá ca đnh lý Dirak cho đ th có hưng:
Đ nh lý 4. Gi s G à đ th có hưng liên thông mnh vi n đnh. Nếu
192
Chươií 4. Đ th Eiter và d th H am ito n
deg'^{v) > /7/ 2, dc ( v ) > « /2 , Vv
thì G là Hamilton.
Có mt s dng đ th mà ta có th biết khi nào nó là đ th Hamilton. Mt ví d
như vy là đ th đu loi. Đ th dcíu loi là đ th có hưng mà trong đó 2 đnh bt k
ca nó đưc ni vi nhau bi đúng mt cung. Tên gi du loi xut hin vì đ th như
vy có th dùng đ biu din kết qu thi đu bóng chuyn, bóng bàn hay bt c mt trò
chcíi lào T không cha pháp hDà. Ta CC đnh !v sau.
Đ nh lý 5. i) M i đ thi đu loi ỉà ua Hamilton:
ìi) Mi đ rli du loi liên rlìôn^ mnh là Hamilton.
T h í d 4. Đ th đu loi D,, Df, đưc cho trong hình 4.
D,
H ình 4. Đ th đu loi D y đu loi liên thông mnh D,
Thut toán lit kê tt c các chu tnh Hamilton ca đ thị.
Thut toán sau đây đưc xây dng da trên cơ s thut toán quay lui cho phép lit kê tt
c các chu trình Hamilion ca đ th.
p ro ce d u re H am ilto n(k);
(* Lit kê các chu trình Hamilton thu đưc hng vic
phát trin dãy đnh (X 1 X [k-11)
ca đ th G=(V, E) cho hi danh sách ké: Ke(v), V G V
*)
193
Phn 2. Lý thuyết đ th
begin
for y e K e(X [k-l]) do
if ( k = n+1 ) and ( y = vO ) then Ghinhan(X [l],...,X[n],vO)
else
if Chuaxet[y] then
begin
X[k] - y;
Chuaxet[y] ;= false;
H am ilton(k+l);
Chuaxet[y] := true;
end;
end;
(* M ain Program *)
BEGIN
for V e V do Chuaxet[v] := true;
X [ l]:= v O ; (* vO là mt đnh nào đó ca đ ihi *)
Chuaxet[vO] false ;
Hamilton(2);
END.
Ví d 5. Hình 5 dưi đây mô t cây tìm kiếm theo thut toán va mô tả.
2 1
v3
H ình 5. Đ th và cây lit kê chu trình Hamilton
ca nó theo thut toán quay lui
Trong trưng hp đ th có không quá nhiu cnh thut toán trên có th s dng d
kim tra xem đ th có phi là Ham ilton hay không.
194
Cliiín'n;^ 4. i )ñ ilì i u c r và lío lì ld iu ìoii
Bài tp
1. Chứnu minh rãne đa đ ti có hiiíVrm có dưòìm di Eulcr khi và chi khi n là lièn
ihõnii yếu và bán bc vào và báii bâc ra cua íáì ca cac dinh là bim nhau, neoi tr luii
đinh đc bit li. V ta có
deu*(//) = deu (/0+1. cleu (V) = cleuìr)+l
2. a) Vi nhng giá tr nào cua íìì và li d íh hai phía dav đu ',,, ., l;i đ th .ùilci. đ th
na Euler?
b) Chứn^ minh răim đ th Q, luõn có chu ninh HaiiiiUon.
3. Vi m i đó th sau sú dnií ilìut toán Fleurv dế đưa ra chu trình E uler cúa đ th
hoac ch i ra rãnii dó th khnu phai à đ \h\ Euler:
f .
a.
c)
b.
( è
4. V iết chirơne trình kieni tra xcm m t đ thi có cl6 th Euler, đ th na E uer, và
tronu trưni hp câu tra li là kháng đnh, hãy lìm chu trình Euler h oc đ ư n e đi Eiiler
troníi đ th theo thut toán m õ trone 4 .1.
5. Viết chương ĩrình kiem ira xem mt d th C() pliai ià đó th Hamilton, dò tli nưa
Hamilton hay khổnẹ? (Sdne thut toán mò tá Ironu 4,2)
6. T ron e uiãi vô đch bóniĩ ch uyn c n đi đánh s t 1 đến n thi đu v ònu tròn m l
lưt. Kết quá thi đu đưc cho bi mt bánu s (a[i.j|, i, j 1 ,2 , .... n). tron<4 đ ó a| i. j|= l
nếu đ i i thãim troim trn up đi j và a|i,j|= {), troim trưns hp đ i i thua trone trn
up di . D liu vào đưc cho íronu int file vãn ban c lên là K Q T D .IN P , dònii dáu
lién cha s n, các clone tiếp iheo cha các s a|i,j]. i, j = 1. 2
.....
n. các s cách nhau
195
Phn 2. Lý thuyết đ th
bi du cách hoc du xung dòng. Kết thúc gii, ban t chc mun mi các đi trưng
ca đi bóng ra xếp thành mt hàng ngang đ chp nh. Hãy tìm cách xếp các đi
trưng thành m t hàng ngang sao ngoi tr hai ngưi đng hai mép ca hàng mi
ngưi trong hàng đu đng cnh mt đi trưng ca đi thng, mt đi trưng ca đi
thua đi mình trn đu ca gii. Kết qu đưa ra màn hình: th t đng các đi trưng
ca các đi trong hàng ngang tìm đưc.
7. Tim cách viết 9 s 1,9 s 2, 9 s 3 thành dãy
|, ^2 ,. ^^21,
sao cho 27 s có 3 ch s
a,a,3 ,a ,a 3 a ,,..
là đôi mt khác nhau.
8. Cho n xâu ký t S|, S,..., S, mi xâu có đ dài không quá 80 ký tự. Các xâu này
đưc ghi trong mt file văn bn có tên là XAU.INP, mi dòng ca nó cha mt xâu ký
t nói trên. Gi s p và Q là hai xâu nào đó trong các xâu đã cho. Ta nói p có th ni
đưc vi Q nếu ký t đu tiên ca p là trùng vi ký t cui cùng ca Q. Lp trình kim
tra xem có th ni n xâu đã cho thành mt xâu theo quy tc nêu trên hay không.
9. Mt mng máy tính gm n máy tính đánh s t 1 đến n, trong đó có mt máy gi là
máy ch đưc đánh s là 1. Hai máy trong m ng có th đưc ni vi nhau bi nhiu
hơn mt kênh truyn tin. Tt c có m kênh truyn tin gia các máy đưc đánh s t 1,
2,..., m. D liu ni mng đưc cho trong mt file văn bn có tên là NET.INP, mi dòng
ca nó cha thông tin v mt kênh truyn tin trong mng gm hai s d|, c, là ch s ca
hai máy đưc ni bi kênh truyên tin th i trong m ng (i = 1, 2,..., m). Đ kim tra các
kênh truyn tin, ngưi ta gi m t thông đip t m áy ch trong mng, thông đip này
cn phi ln lưt thông qua các máy trong mng truyn đi qua tt c các kênh truyn tin
trong mng mi kênh đúng mt ln ri li quay tr v máy ch. Hãy lp trình nhp d
liu vào t file, sau đó cho biết có cách truyn tin như va mô t trên hay không.
Trong trưng hp câu tr li là khng đnh hãy đưa ra màn hình trình t các kênh trong
mng mà thông đip cn ln lưt đưc truyn qua.
10. Có 17 ngưi bn gp nhau mt lp bi dưng nâng cao trình đ. Trong sut thi
gian ca đt hc tp h cùng nhau ăn ti m t nhà hàng có nhiu món ăn hp khu v
vi h. Biết rng trong tt c các ba ăn ti đó, h đu ngi quanh mt cái bàn tròn và
mi cp ch ngi cnh nhau đúng m t ln. Hi rng đcrt hc tp đó kéo dài nhiu nht
bao nhiêu ngày? Hãy lp trình đưa ra cách xếp ch ngi ca h trong nhng ngày đó.
196
Chươtg 5. c<}\ va Ccìv khtíiìg ca đ th
5
CÂY VÀ CÂY KHUNG
CA Đ TH
Đ th vô hưng liên thông khng có chu trình đưc gi là cây. Khái nim cây ln
đu tiên đưc Cayley đưa ra vào luim 1H57, khi ông s dng chúng đ đếm mt s dng
cu trúc phân t ca các hp clì hoá hc trong hoá hc hu cơ. Cây còn đưc s dng
rng rãi trong rt nhiu lĩnh vực khác nhau, đc bit trong tin hc, cày đưc s dng đ
xây dng các thut toán t chc các thư mc, các thut loán ct gi, truyn d liu và
tìm kiếm ...
5.1. Cây và các tính cht cơ bản ca cây
Đ nh nghĩa 1. Ta gi cày là d ílìị r hưní liên íhôií không có chu trình. Đ th
không có chu trình đưc í>i là rng.
Như vy, rng là đ th mà mi thành phn liên thông ca nó là m t cây.
197
Plìdiì 2. Ly (ìuyc dó ìị
Thí d l. Troniz hình 1 mr rừrm um 3 cây 7 |, T., Ty
T-
Hình 1. Rniĩ gm ba câv T , 7^,
C ó íh ế nói cy l a đ th vô h ư n e đưn íia n nht. D inh lý sau đay ch o ta niì sò lính
cht c a câ y .
Đnh lý I. G iá sír T ^ iV .E ) ìi dó ílĩ vô lìiã)ĩì\ cỉínỉi. K lĩi dó cúc nììh cíc sau cỉây à
ÍIÍƠ Ì^ ¿ÍU'(J'IÌ^ :
( l ì T l cây:
(2) T klôní^ ca cìii rỉiìỉì vìỉ có ì-Ì CI:
T lièì ĩlìô/ìĩ^ có /-l cnh;
(4) T liên thô^ và mi cnh ca nó đêu lù cn:
(5) Hư (lỉnlì hcíĩ k\ ca T dưc ni V(J nhau hi đúniị mt đuúiìi(li dơfì:
() T k h ô n ^ cĩa chu trình nhưní^ h c thcfii YCU) nó rnĩ cnlì ĩa ỉliii cỉìíc
ílũni ÌÌ ch u rìnlĩ.
C hng m inh. Ta s chng m inh đnh lý theo sơ đ sau;
{!) => (2) => (3) => (4) (5) ^ (6) => (1) .
(1) => (2) T h eo đnh ngh ĩa T không chu chu irình. T a s chúìm m inh brm quy np
theo s đinh /7 k h n s đnh: S cnh c a cây vi n đnh là //-1. R õ ràn« khní đnh đúnu
V(3'i // - 1. G ià s /? > . Trưc hết nhn thy rim irona m i cây T có n đinh đu tìm
đưc ít nhài m t đinh là đin h treo (tc là đính có bc là 1). Thc vy, e i \ị.
.....
đưim đi dài nht (theo s cn h) troim T. Khi dó rõ ràne i[ và \\ là các đínli treo, l \'|
(v^) khônu có cnh ni ti bt c đinh nào troni s cá c đ inh V-,.
......(do đ ih khònii
cha chu trình), cũnu như ti bt' c đính nào khác ca đ th (do đưni đi đanu xét là
dài nht). L oai b \'j và cnh (i'|. Vj) khòi T ta thu đưc c â y 7 , vi /-1 đ nh, m à theo ui
thiết qui n p,có -2 cnh. V y cãy T có /7-2+] - ì- cnh.
198
Clnfffng 5. Cáy va Cay Umng cíia ilii
(2) ^ (3) Ta chúng minh báng phán chiíng. Giá six T khóng lien thong. Khi dó T phan
ra hanh k > 2 thánh phán lien thóng 7',, T,,... J*. Do T khóng chúa chu trinh nén mói 7,
(/ - 1, 2,..., k) cüng khóng chúa chu trinh, vi thé mói T] la cay. Do dó néu gol n{T¡) va
e(T¡) theo thií tu lá só' dinh va canh cüa T,, ta có
e{T,) = n{T,) - \, / = 1, 2, , Á:,
suy ra
= c{T) ^ e(T,)+ . . . + K f,)
= n (l\)+ . . . + /¡(7*.) - k
= n{T) - k < n - \ V .
Máu thuán thu dugc chiíng tó T lá lien thóng.
(3) => (4) Viéc loai bó mót canh bát ky khói T dán den dó thi vói n dinh va n-2 canh ro
ráng lá dó thi khóng lién thóng. Váy moi canh trong T déu lá cáu.
(4) => (5) Do T lá lién thóng nén hai dinh bát ky cüa nó duóc nói vói nhau bói mót
duóng di don. Néu có cap dinh náo cüa T có hai duong di dcfn khác nhau nói chúng, thi
r dó suy ra dó thi chiía chu trinh, va vi thé các canh tren chu trinh náy khóng phái lá
cáu ?!
(5) => (6) T khóng chúa chu trlnh, bói vi néu có chu trinh thi hoá ra tim dirgc cap dinh
cüa T dugc nói vói nhau bói hai duóng di dan. Báy gió, néu thém váo T m ót canh e nói
hai dinh m va v náo dó cüa T. Khi dó ciinh náy cüng vói duong di don nói u vói v sé tao
thánh chu trinh trong T. Chu trlnh thu duac náy líi
ciuy
nhfil, vi néu thu dugc nhiéu hon
mót chu trinh thi suy ra trong T triróc dó phái có sán chu trinh.
(6) (1) Giá sü T khóng lién thóng. Khi dó nó góm ít ra lá 2 thánh phán lién thóng.
Vi váy, néu thém váo T mót canh nói hai dinh thuóc hai thánh phán lién thóng khác
nhau ta khóng thu dugc thém mót chu trlnh náo cá. Diéu dó máu thuán vói giá thiét (6).
Dinh ly dtrgc chúng minh.
5.2. Cáy khung cúa do thj
D jnh nghía 2. Giá süG = (V,E ) lá dó thi vó huáng lién thóng. Cáy T=(V,F) v&i Fez E
dugc ggi lá cáy kh u n g cúa dó thi G.
T h i du 2. Dó thi G va cay khung cüa nó dugc cho trong hinh 2
199
Phn 2. Lý thuyết đ th
h c
d
H ình 2. Đ th và các cây khung ca nó
Đnh lý sau đây cho biết s lưng cây khung ca đ th đv đ ',,:
Đ nh lý 2 (Cayley). S cây khung ca đ ih '„ lá ^ .
Đnh lý 2 cho thy s lưng cây khung ca mt đ th là mt s rt ln. Bây gi ta xét
áp dng ca thut toán tìm kiếm theo chiu sâu và theo chiu rng trên đ th đ xây
dng cây khung ca đ th vô hưng liên thông. Trong c hai trưng hp mi khi ta đến
đưc đnh mi u (tc Chuaxet[«] = true) t đnh V thì cnh (y, u) s đưc kết np vào
cây khung. Hai thut toán tương ng đưc trình bày trong hai th tc sau đây.
procedure S T R E E DFS(v);
(* Tìm kiếm theo chiu sâu áp dng vào tìm tp cnh ca cáy khung T
ca đ th vô hưng liên thông G cho hi danh sách k.
Các biến C huaxet, Ke, T là toàn cc *)
begin
Chuaxet[v] := false ;
for u e Ke(v) do
if Chuaxet[u] then
begin
T := T u (v ,u );
STREE_DFS(u);
end;
end;
(* M ain Program *)
BEGIN
(* Initialiation *)
for u e V do Chuaxet[u]:=true;
T := 0 ; (* T là tp cnh ca cây khung *)
STREE_DFS(root); (* root là đnh nào đó ca đ th *)
END.
200
Chương 5. Cây và Cáy khung ca đ th
p roce d u re ST R E _B FS(r);
(* Tìm kiếm theo chiu rng áp dng tìm tp cnh ca cây khung T
ca đ th vô hưìig liên thông G cho bi danh sách Ke *)
begin
QUEUE := 0 ;
QUEUE o : r ;
Chuaxet[r]:=false;
M ìús QUEU ED 0 dD
begin
v<= QUEUE;
for u e Ke(v) do
if Q iuaxet[u] then
begin
QUEUE -i= u; Chuaxet[u]:=false;
T : - T u ( v ,u ) ;
end;
end;
end;
(* M ain Program *)
BEGIN
for u e V do Chuaxet[u]:=true;
T := 0 ; (* T là tp cnh ca cây khung *)
STREE_BFS (root); (* root i mt dnh tu ý ca đ th *)
END.
C hú ý:
1. Lp lun tương t như trong phn trưc có th ch ra đưc rng các thut toán
mô t trên có đ phc tp tính toán
0
{n+m).
2. Cây khung tìm đưc theo th tc STREE_BFS(r) cây đưng đi ngn nht t
gc r đến tt c các đnh còn lại ca đ th.
5.3. Xây dng tp các chu trình cơ bn ca đ th
Bài toán xây dng cây khung ca đ th liên quan cht ch vi m t bài toán ng dng
khác ca lý thuyết đ th: Bài toán xây dng tp các chu trình cơ bn ca đ th mà ta s
xét trong mc này.
TRR - 14
201
Phđn 2. Lý thuyết d th
Gi s G = (V, E) là đơn đ th vô hưng liên thông, H={V,T) là cây khung ca nó.
Các cnh ca đ th thuc cây khung ta s gi là các cnh trong, còn các cnh còn li s
gi là cnh ngoài.
Đ nh nghĩa 3. Nếu thêm m t cnh n^oài e s E \ T vào cây khun^ H chúng ta s thu
đưc đúri^ m t chu trình tron^ H, ký hiu chu trình này là c , . Tp các chu ninh
/2 = { C, : e G E \ T ]
đưc gi là tp các chu trình cơ bn ca đ th G.
Gi s A và B là hai tp hp, ta đưa vào phép toán sau
A ® B -= ( A u B ) \( A
Tp A B đưc gi là kiu đôi xng ca hai tp hp A và B.
Tên gi chu trình cơ bn gn lin vi s kin là mi chu trình ca đ th đu có th
thu đưc t các ciiú trình cơ bn như chi' ra trong đnh lý sau đây:
Đ nh lý 3. Gi sG = (V ,E) là đ th vô hưng liên thông, H -(V ,T ) là cây khung ca nó.
Khi đó mi chu trình ca đ th G đu có th biu din như là hiu đi xng ca m t s
các chu trình cơ bn.
Vic tìm tp các chu trình cơ bn gi mt vai trò quan trng trong vn đ gii tích
mng đin. C th hcm, theo mi chu trình cơ bn ca đ th tương ng vi mng đin
cn phân tích ta s thiết lp đưc mt phương trình tuyến tính theo đnh lut Kirchoff:
Tng hiu đin th ế dc theo m t mch vòng là bng không. H thng phương trình
tuyến tính thu đưc cho phép tính toán hiu đin thế trên mi đon đưng dây ca lưi
đin.
Ta s mô t thut toán xây dng tp các chu trình cơ bn da trên th tc tìm kiếm
theo chiu sâu trên đ th. Thut toán có cu trúc tương t như thut toán xây dng cây
khung theo th tc tìm kiếm theo chiu sâu m ô t trong mc trưc.
Thut toán xây dng tp các chu trình cơ bn.
Gi thiết rng đ th G = {V, E) đưc mô t bng danh sách k Ke(v), e V.
pro ced ure Cycle(v);
{* Tìm tp các chu (rình cơ bn ca thành phn liên thông cha đnh v;
Các biến d, num, STACK, Index là toàn cc *)
begin
d:=d+l;
STACK[d] := v;
num := num+1;
202
Chươnịị 5. y Cày khunĩ ca đ thị
Index[v] := num;
for u G Ke(v) do
if lndex[u]=0 then Cycle(u)
else
if (u STACK[d-l]) and (Index[v] > Index[u]) then
< Ghi nhn chu trình vi các đnh:
ĨTAC K[d], S^TACK[d-lJ,... , ĨT A C K íd , vi STACK[c]=u >:
d ;= d - l;
end;
(* M ain Program *)
BEGIN
for V e V do Index[v] ;= 0;
num := 0; d := 0; STACK[0] := 0;
for V e V do
if Index[v] = 0 then Cycle(v);
END.
C hú ý: Đ phc tp tính toán ca thut toán va mô t là 0 ( I £ I 1 K I ).
5.4. Bài toán cây khung nh nhât
Bài toán cây khuiig nh nht ca đ th mt trong sô' nhng bài toán ti ưu trên đ th
tìm đưc ng dng trong nhiu lĩnh vc khác nhau ca đi sng. Trong mc này chúng
ta s trình bày nhng thut toán cơ bn đ gii bài loán này. Trưc hết chúng ta phát
biu ni dung ca bài toán.
Cho G = (V, E) là đ th vô hưng liên thông với tp đnh V = j 1, 2,..., n] và tp
cnh E gm m cnh. Mi cnh e ca đ th G đưc gán với mt s thc c{e), gi là đ
dài ca nó. Gi s H = /,T) là cây khung ca đ th ơ. Ta gi đ dài c(H) ca cây
khung H là tng đ dài ca các cnh ca nó:
ciH) = z c{e).
e & T
Bài toán đt ra là trong s tt c các cây khung ca đ th G hãy tìm cây khung vi đ
dài nh nht. Cây khung như vy đưc gi là cây khung nh nht ca đ th và bài toán
đt ra đưc gi là bài toán cây khung nh nht.
203
Phn 2. Lý ihuyết đ thị
T h í d 3. Hình 3 cho mt thí d v đ th có trng s trên cnh và cây khung nh nht
ca đ thi đươc ch ra bi các canh tô đâm.
Đ m inh ho cho nhng ng dng ca bài toán cây khung nh nht, dưi đây, ta
phát biu hai m ô hình thc tế tiêu biu ca nó.
B ài toán xá y d ng h thng đưng st. Gi s ta m un xây dng m t h thng đưng
st ni n thành ph sao cho hành khách có th đi t bt c mt thành ph nào đến bt
k m t trong sô' các thành ph còn li. M t khác trên quan đim kinh tế đòi hi là chi
phí v xây dng h thng đưng phi là nh nht. Rõ ràng là đ th mà đnh là các
thành ph còn các cnh là các tuyến đưng st ni các thành ph tương ng vi phương
án xây dng ti ưu phi là cây. Vì vy, bài toán đt ra dn v bài toán tìm cây khung
nh nht trên đ th đy đ n đnh, mi đnh tương ng vi mt thành ph, vi đ dài
trên các cnh chính là chi phí xây dng đưng ray ni hai thành ph tương ng (chú ý là
trong bài toán này ta gi thiết là không đưc xây dng tuyến đưng st có các nhà ga
phân tuyến nm ngoài các thành ph).
B ài toán n i m n g máy tính. Cn ni mng mt h thng gtn n máy vi tính đánh s t
1 đến n. Biết chi phí ni máy i vi máy i là c[/,ý], i , j = 1, 2,,.., n (thông thưng chi phí
này ph thuc vào đ dài cáp ni cn s dng). Hãy tìm cách ni mng sao cho tng chi
phí ni mng là nh nht.
Đ gii bài toán cây khung nh nht, tt nhiên có th lit kê tt c các cây khung
ca đ th và chn trong s chúng cây khung nh nht. Phương pháp như vy, trong
trưòng hp đ th đy đ, s đòi hi thi gian c n"'^, và rõ ràng không th thc hin
đưc ngay c vi nhng đ th vi s đnh c hàng chc. Rt may là đi vi bài toán
cây khung nh nht chúng ta đã có nhng thut toán rt hiu qu đ gii chúng. Chúng
ta s xét hai trong s nhng thut toán như vy: Thut toán Kruskal và Thut toán Prim.
204
Chưưiìí 5. Cày Cây kliiiní ca ÍÍCÌ th
5.4.1. T h u t toán K ruska
Thut toán s xây dng tp cnh 7' ca cày khung nh nht H - (Y,T) theo tng bưc.
Trưc hết xp xếp các cnh ca đ thG theo th tự không gim ca đ dài. Bt đu t
tp T = 0 , mi bưc ta s ln ợt duyt trong danh sách cnh đã xp xếp, t cnh có
đ dài nh đến cnh có đ dài ln hơn, đ tìm ra cnh mà vic b sung nó vào tp T
không to thành chu trình trong tp này. Thut toán s kết thúc khi ta thu đưc tp T
¿m /7-1 C.nli. Cụ th, thut tcár c5 :hn ô u nhi' Sỉu:
proced u re K rusk al;
begin
T : = 0 ;
while I T I < (n-1) and ( E 0 ) do
begin
Chn e là cnh có đ did nh nht trong E;
E:=E\{e);
if ( T u (? không cha chu trình ) then T := T u e I ;
end;
if ( I T 1 < n-1 ) then Đ h không liên tlìông;
end;
T h í d 4, Tim cây khung nh nht ca đ th cho trong hình 4.
Bưc khi ro. Đt T := 0 . sp xếp các cnh ca đ th theo th t không gim ca đ
dài ta có dãy:
(3,5), (4,6), (4,5), (5,6), (3,4). (1,3), (2,3), (2,4), (1,2)
dãy đ dài cmg ng ca chúng
4, 8, 9, 14, 16, 17, 18, 20, 23.
ba ln lp đu tiên ta ln lưt b sung vào tp T các cnh (3,5), (4,6), (4,5). Rõ ràng
nếu thêm cnh (5,6) vào T thì nó s to thành với 2 cnh (4,5), (4,6) đã có trong T chu
trình. Tinh hung tương t cũng xy ra đi với cnh (3,4) là cnh tiếp theo trong dãy.
Tiếp theo ta b sung cnh (1,3), (2,3) vào T và thu đưc tp T gm 5 cnh;
T = {(3,5), (4,6), (4,5), (1,3), (2,3)}
chính là tp cnh ca cây khung nh nht cn tìm.
205
Phn 2. Lý thuyết đ thi
20
Hình 4. Đ th có írng sô
Thí d 5. Hình 5 minh ho quá trình tìm cây khung nh nht ca đ th cho trong hình
3: Các cnh đm là các cnh đưc chn vào cây khung, các canh đl nét là các cnh
đưc b qua trong quá trình duyt qua các cnh.
Hình 5. Tim cây khung nh nht theo thut toán Kruscal
Chng minh tính đúng đn ca thut toán.
Rõ ràng đ th thu đưc theo thut toán có /7-1 cnh và không có chu trình, vy theo
đnh lý 1 nó là cây khung ca đ th G. Như vy, ch còn phi ch ra rng T có đ dài
nh nht. Gi s tn ti cây s
ca đ th G mà c{S) < c(T). Ký hiu e,- là cnh đu tiên
trong dãy các cnh ca T xây dụfng theo thut toán va mô t không thuc 5. Khi đó đ
th con ca G sinh bi cây
s
đưc b sung cnh C. s cha 1 chu trình duy nht
c
đi qua
é^.. Do chu trình c
phi cha cnh e thuc 5 nhưng không thuc T
nên đ th con thu
206
ChươiiíỊ 5. Cáv Cày kììiii ca (l i
đưc t s bng cách thay cnh í' ca nó bởi { ký hiu đ th này là S') s là cây
khung. Theo cách xây dng c{e^) < ce) do đó r('0 < f(5), đng thi s cnh chung
ca S' và T đã tăng thêm mt so với s cnh chung ca s và T. Lp li quá trình trên
tng bưc mt ta có th biến đi s
thành T
trong mi bưc tng đ dài không tăng,
tc là cT) < c{S). Mâu thun thu đưc chúng t 7 là cây khung nh nht.
V vic lp trình thc hin thut toán.
Khôi iưng lính .oán niiiu nhi ca thut toín cliính b jó c ,iắ3 ;cế3 các cnh ca đ
th theo th t không gim ca đ dài đ la chn cnh b sung. Đôi vi d th có m
cnh cíìn phi thc hin c m log m phép toán đ sp xếp các cnh ca đ th thành
dãy không gim theo đ dài. Tuy nhiên, đ xây dng cây khung nh nht với /7-1 cnh,
nói chung, ta không cn phi sp th t toàn b các cnh mà ch cn xét phn trên ca
dãy đó cha / < m cnh. Đ làm vic đó ta có thê s dng các th tc sp xếp dng
Vun đng (Heap Sort). Trong th tc này, đ to đng đu tiên ta mt c 0 {m ) phép
toán, mi phn t lớn tiếp theo trong đng có th tìm sau thi gian 0(log m). Vì vy,
vi ci tiến này thut toán s mt thi gian c
0
{m+p log m) cho vic sp xếp các cnh.
Trong thc tế tính toán s p nh hơn rt nhiu so vi m.
Vn đ th hai trong vic ih hin thut toán Kruskal là vic la chn cnh đ b
sung đòi hi phi có mt th lc hiu qu kim tra tp cnh 'ru |í> có cha chu trình
hay không. Đê ý rng, các cnh trong T à các bưc lp trung gian s to thành mt
rng. Cnh e cn kho sát s to thành chu Irình vi các cnh trong T khi và ch khi c
hai đnh đu ca nó thuc vào cùng nit cây con ca rng nói trên. Do đó, nếu cnh e
không to thành chu trình vi các cnh trong T, thì nó phái ni hai cây khác nhau trong
T. Vì thế, đ kim tra xem có th b sung cnh c vào 7' la ch cn kim tra xem nó có
ni hai cây khác nhau trong T hay không. Mt trong các phương pháp hiu qu đ thc
hin vic kim tra này là ta s phân hoch tp các đnh ca đ th ra thành các tp con
không giao nhau, mi tp xác đinh bi mt cây con trong T (đưc hình thành các
bưc do vic b sung cnh vào T). Chng hn, đi với đ th trong ví d 3, đu tiên ta có
sáu tp con 1 phn t: 11, (2), (3), {4, (5). |6 . Sau khi b sung cnh (3, 5), ta có
các tp con {1}, {2, {3, 5 Ị, |4 |, |6 . Tiếp theo, sau khi cnh (4,6) đưc chn, ta có
các tp con {!}, {2}, { 3 ,5, |4, 6(. bưc th 3, ta chn cnh (4,5), khi đó hai tp con
đưc ni li và danh sách các tp con là {1}, j 2 , i 3, 4, 5, 6 . Cnh có đ dài tiếp theo
là (4, 6), do hai đu ca nó thuc vào cùng mt tp con j 3, 4, 5, 6 , nên nó s to thành
chu trình trong tp này. Vì vy cnh này không đưc chn. Và thut toán s tiếp tc
chn cnh tiếp theo đ kho s á t...
Như vy, đ gii quyết vn đ th hai này ta phi xây dng hai th tc: Kim tra
xem hai đu u, V ca cnh e={u, v) có thuc vào hai tp con khác nhau hay không, và
trong trưng hp câu tr lời là khng đnh, ni hai tp con tương ng thành m t tp.
207
Phn 2. Lý thuyết d th
Chú ý rng mi tp con trong phân hoch có th lưu tr như là mt cây có gc, và khi
đó mi gc s đưc s dng làm nhãn nhn biết tp con tương ng.
Chưoíig trình trên Pascal thc hin thut toán Kruskal vi nhng nhn xét va nêu
có th viết như sau:
(* Tìm cây khung nh nht theo thut toán Kruskal
của đ thcho bởi danh sách cnh *)
uses crt;
type
aưn = aưay [l ..50] of integer;
arrm = aưay[1..5000] of integer;
var
n, m, M inL : integer;
Dau, Cuoi,
w
: arrm;
DauT, CuoiT, Father; arm;
Connect : boolean;
procedure Nhapdl;
var i : integer;
fname: string;
f : text;
begin
write(Cho Tên file d li u :'); readln(fname);
assign(f, fname);
reset (f);
readln(f,n,m);
for i := 1 to m do readln( f, Dau[i], Cuoi[i], W [i]);
close(f);
end;
procedure Indulieu;
var i: integer;
begin
writeln('S đnh; Sô' cnh: ',m);
writeln(' Đnh đu Đnh cui Đ dài');
for i:= l to m do
writeln(Dau[i]:4, Cuoi[i]:10, W[i]:12);
end;
208
CliM/ng 5. Cay va Cay khung cua do thi
procedure Heap(First, Last:inieger);
var j, k, 11, t2, t3: integer;
begin
j := first;
while (j <= trunc(last/2)) do
begin
if (2*j < last) and (W [2*j+1] < W[2*j]) then
k := 2*j+l
else
k := 2*j;
ifW [k ]< W [j] then
begin
tl:= D a u [j]; t2 := Cuoi[j]; t3 ;= W[j];
Dau[j] :=D au[k]; Cuoi[jJ ;=Cuoi[k]; W[j] := W[k];
Dau[k] := tl; Cuoi[k] := t2; W[k] := t3;
j : = k ;
end
else j := Last;
end;
end;
function Find(i: integer) : integer;
var Tro : integer;
begin
Tro := i;
while Father[Tro] > 0 do
Tro:= Father[TroJ;
Find:=Tro;
end;
procedure Union(i,j : integer);
var x: integer;
begin
X := Father[i] + Father[j];
if Father[i]> Father[j] then
begin
Father[i] := j;
Father[j] := x;
end
else
209
Phn 2. Lý thuyết đ th
begin
Fatherjj] := i;
Father[i] := x;
end;
end;
procedure Kruskal;
var i, Last, u, V , r l , r2. Ncanh, Ndinh ; integer;
begin
(* Khi to mng Father đánh du cây con
vồ khi to Heap *)
for i: - l to n do Father[i]:--1;
for i:= trunc(m/2) downto 1 do Heap(i,m);
last:=m; Ncanh := 0; Ndinh := 0;
MinL 0;
Connect := true;
while (Ndinh < n-1) and (Ncanh < m) do
begin
Ncanh := Ncanh+1;
u := D au[l]; V := C uoi[l];
(* Kim tra u và V có thuc cùng mt cây con? *)
rl := Find(u);
r2 := Find(v);
if rl <> r2 then
begin
(* K ết np cnh (u,v) vào cây khung *)
N dinh:=N dinh+l; U nion(rl,r2);
DauT[Ndinh]:=u;
CuoiT[Ndinh]:=v;
M inL:=M inL+W [l];:
end;
(* T chc li Heap *)
D au[l] := Dau[Last];
C uoi[l] := Cuoi[Last];
W [l] :=W [Last];
Last := Last-1;
Heap( 1 ,Last);
end;
if N d i n h o n - 1 then Connect := false;
end;
210
Cơng 5. Cay Cây kỉìung của d thị
procedure Inketqua;
var i; integer;
begin
writelnC*** Kết qu tính toán
writeln('Đ dài ca cây khung nh nht: \M inL);
writeln('Các cnh ca cây khiins nh nht:'):
for i := to n-1 do
writelnC(\D auT[i]:2;, ,CuoiT[i]:2;) ):
end;
BEGIN
clrscr;
Nhapdl;
Indulieu;
Kruskal;
if Connect then Inketqua
else
writeln('Đ th không liên thông');
readln;
END.
File d liu ca bài toán trong thí d 4 c dng sau:
6 9
3 5 4
4 6 8
4 5 9
5 6 14
3 4 16
1 3 17
2 3 18
2 4 20
1 2 23
Kết qu tìm đưc: Đ dài ca cây khung nh nht và tp cnh ca cây khung nh
nht đươc đưa ra màn hình
211
Phn 2. Lý thuyết đ th
5.4.2. Thut toán Prim
Thut toán Kruskal làm vic kém hiu qu đi vi nhng đ th dày (đ th vi s cnh
m » n{n-\)/2). Trong trưòíig hp đó thut toán Prim t ra hiu qu hơn. Thut toán Prim
còn đưc gi là phương pháp lân cn gn nht. Trong phương pháp này, bt đu t mt
đnh tu ý ca đ th s, đu tiên ta ni s vi đnh lân cn gn nó nht, chng hn là đinh
y. Nghĩa là trong s các cnh k ca đnh 5, cnh {s. _y) có đ dài nh nht. Tiếp theo,
trong s các cnh k vi hai đnh í hoc y ta tìm cnh có đ dài nh nht, cnh này dn
đến đnh th ba z, và ta thu đưc cây b phn gm ba đnh và hai cnh. Quá trình này s
đưc tiếp tc cho đến khi ta thu đưc cây gm n đnh và /ỉ-1 cnh s chính là câv khuna
nh nht cn tìm.
Gi s đ th cho bi ma trn trng s
c =
c[ij], i,j
- 1, 2,..., n\.
Trong quá trình
thc hin thut toán, mi bưc đ có th nhanh chóng chn đnh và cnh cn b sung
vào cây khung, các đnh ca đ th s đưc gán cho các nhãn. Nhãn ca mt đnh V s
gm hai phn và có dng [ J[v], near{v\ ], trong đó d[v] dùng đ ghi nhn đ dài ca
cnh có đ dài nh nht trong s các cnh ni đnh V vi các đnh ca cây khung đang
xây dng (ta s gi là khong cách t đnh đến tp đnh ca cây khung), nói m t cách
chính xác
í/[v] := min { c[v, vv] : w e Vị } ( = c[v, z]),
còn nearv] ghi nhn đnh ca cy khung gn V nht {near[v] := z).
Thut toán Prim đưc mô t đy đ trong th tc sau:
procedure Prim;
beg in
(* Bưc khi to *)
Chn s là mt đnh nào đó ca đ th ;
V h { s }; T : = 0 ;
d[s] := 0; near[s] := s.
for V e v \ V h d o
b egin
d[v] := c[s,v];
near[v] := s;
end;
(* Bưc lp *)
Stop := false;
while not Stop do
begin
Tim u G
v\
V h (hod mãn: d[u ] = m in { d [v] : u G
v\
V h };
212
Chươiì 5. Cày Vil Cây khuììi ca d th
Vh := Vh U u }; T := T u { ( u, near|uj ) ;
if iVHl = n then
begin
H = ( Vh ,T ) là cây khung nh nht ca đ th ;
Stop := true;
end
else
for ve
v\
Vh do
if d[v]> c[u,v] then
begin
d[v] := c[u,v] ;
near[v] := u;
end;
end;
end;
T hi d 6. Tim cây khung nh nht cho đ th xét trong thí d 4 theo thut toán Prim.
Ma trn trng s ca đ th có dng
1 2 3 4
5 6
1 0
33 17
00
00 co
2 33 0
18 20
00 00
C = 3 17 18 0 16 4
00
4
00
20
16 0
9 8
5
00
co
4 9
0 14
6
_ 00
00 co
8 14
0 _
Bng dưi đây ghi nhãn ca các đnh trong các bưc lp ca thut toán, đnh đánh
du * là đnh đưc chn đ b sung vào cây khung (khi đó nhãn ca nó không còn b
biến đi trong các bưc lp tiếp theo, vì vy ta đánh du - đ ghi nhn điếu đó) :
Bưc
lp
Đỉnh 1
Đỉnh 2 Đỉnh 3 Đnh 4
Đỉnh 5
Đinh 6
V h
T
Khi to
[0, 1]
[33,1]
[17, 1]*
[^, ]
1^^, 1] 1», 1]
1
0
1
-
[18,3]
-
[16, 3J
[4,3]*
K n
1,3
(3,1)
2
-
[18,3]
- 19.5]*
-
[14, 5J 1,3,5
(3,1), (5,3)
3
-
[18,3]
- - - [8,4]*
1,3, 5,4 (3,1), (53), (4.5)
4
- [18.31* -
-
-
'
1,3, 5,4, 6
(3,1), (5,3), (4,5), (6,4)
5
"
1,3,5,4 , 6, 2 (3,1), (5,3), (4,5),
(6,4), (2.3)
213
Phn 2. Lý tlnivếí đ th
T hí d 6. Hình 6 minh ho quá trình tìm cây khung nh nht ca đ th cho trong hình
3: Các cnh đm là các cnh đưc chn vào cây khung, Mũi tên ch hưng chn đnh
tiếp theo, Cnh đt nét không cn phi xét trong các bưc tiếp theo.
5.4.3. M t s bài toán dn v bài to án cây k h un g nh n h t
Trong mc này ta nêu hai bài toán có th dn v bài toán cây khung nh nht, và thế
có th gii đưc nh các thut toán mô t trong mc trưc
a) Bài toán cây khung lớn nht. D dàng nhn thy rng trong các thut toán trên ta
không cn s dng đến đòi hi v du ca đ dài. Vì vy có th áp dng chúng đi vi
đ th có các cnh vi đ dài có du tu ý. Vì vy, gi s ta phi tìm cây ln nht (tc
là có đ dài c{H) ln nht) thì ch cn đi du tt c các đ đo và áp dng mt trong
hai thut toán va mô tả.
b) Bài toán tìm mng đin vi đ tin cy ln nht. Cho i đin có n nút. Đưng
dây ni nút / vi nút j có đ tin cy 1 > p[i,j] > 0, i , i = 1, 2,..., n. Gi G = (V, E) là đ
th tương ng vi i đin này. Hãy tìm cây khung H ca đ th G vi đ tin cy
n
ln nht.
Bài toán này dn v bài toán tìm cây khung vi tng đ dài nh nht trên đ th G
vi đ dài ca mi cnh ^ G E là - log p{e). Thc vy, gi s H là cây khung nh
nht trên đ th vi đ dài - loe o(e), ta có
214
Chương 5. Cv và Cá\' klìuni^ Cic d ílì
logp(e) < - ] ^ log/?{c")
ee/ eG.fi'
vi mi cây khung // ' ca đ th G. T đó suy ra
^ lo gp (e) > ^ ìogp ie)
eçH ư^H'
do đó
0f>n - ''êFi
h eeH'
hay là
n - n
te H e^H'
vi mi cây khung H \ Vy H là cây khung có đ tin cy lớn nht.
215
Phđn 2. Lý thuyết đ th
Bài tp
1. Hãy viết các chương trình trên Pascal thc hin các thut toán;
a) Xây dng câv khiirie ca đ th;
b) Xây dng tp các chu trình cơ bn ca đ th;
c) Xây dng cây khung nh nht theo thut toán Prim.
2. Áp dng thut toán Kruscal tìm cây khung ngn nht cho đ th sau dây
3. Áp dng thut toán Prim m cây khung ngn nht cho đ th sau đây, lấy đnh xut phát là
đnh l
4. Tim cây khung ngn nht cho đ th có trng s cho trong hình v dưi đây theo
thuât toán Kruscal và thuât toán Prim
216
Chươn;^ 5. Cáy \ à Cáy khưni ca đ thị
a)
b)
8 2
5 6
3 9
6
9
4
3 5
1
4
11
c)
3
= 5 ' 7 2 2
7
5 7 5 3
11 ^
5
s 9
5 1 2 7
d)
----------
-
1
1
3
<
9
4
5
2
8
3
t
5 5
e)
5. Xét đ th gm 6 đnh A, B, c, D, E, F cho bởi ma trn trng s
A B
C
D
E
F
A
0 33 17 H5
85 85
B
33 0 18 20
85 85
C
17 18
0
16 4
85
D
85 20 16
0 9 8
E 85 85 4
9 0 14
F
85 85 85 8 14
0
Tìm cây khung ngn nht theo thut toán Prim. Yêu cu viết rõ kết qu trung gian
trong tng bưc. Kết qu cui cùng: Tp cnh ca cây khung nh nht và đ dài ca nó.
6. M t công ty lp mt d án mc đin thoi cho n («<100) nhân viên ca m ình bng
m t lưi các đon ni t máy ca mt ngưi đến máy ca m t s ngưi khác (không
phi hai ngưi nào cũng đưc ni vi nhau). D án phi đm bo yêu cu sau (gi là
yêu cu v tính thông sut ca mng): Trên lưi đin thoi đó mi nhân viên ca
Công ty đu có th nhn tin cho bt c mt nhân viên khác hoc trc tiếp hoc
TRR - 15
217
Phn 2. Lý thuyết đ Ih
thông qua m t s nhân viên trung gian. D liu v d án đưc ghi trong file văn bn
có tên NETW .IN P có cu trúc như sau:
- Dòng đu tiên cha s n;
- Dòng tiếp theo cha s đưng ni;
- Trong các dòng tiếp theo cha các đưng ni ca d án: mi dòng gm 3 sô
nguyên ĩheo th t là ch s ca hai máy đưc ni và chi phí ni hai máy này.
Hãy lp trình nhp d liu vào tù file, sau đó:
a) Kiưi tra xem d án có đáp ng yêu cu v tính thông sut hay không?
b) Trong trung hp d án đáp ng yêu cu thông sut, hãy tìm cách loi b mt s
đưng ni sao cho mng vn là thông sut đng thi gim đến mc ti thiu chi phí ni
mng.
7. Ngưi ta đnh ì chc mt mng máy tính gm m xn máy đưc b tri theo mt mng
ô vuông gm m xn nút. Nút ca lưi hàng i ct j gi là nút (;'j) , j= \,2,...,n.
M i máy s đưc đt mt nút và các máy đưc ni vi nhau theo cnh ca các
vuông (gi là các đưòng ni ca mng). Trong khi mng còn đang trong quá trình xây
dng (mi ch có m t s đưng ni nào đó đưc xây dng xong), phi đưa mng vào
phc v kp thi k thi Olim pic Tin hc Quc tế, ngui ta mun kim tra xem tt c các
máy đã trao đi thông tin đưc vi nhau hay chưa (hai máy bt k trong mng gi
trao đi thông tin đưc vi nhau nếu như chúng có th trao đi thông tin đưc vi nhau
hoc là trc tiếp, hoc thông qua các máy trung gian). Trong trưng hp câu tr li
ph đnh, cn xác đnh s đưng ni ít nht cn phi gp rút xây dng trưc sao cho tt
c các máy đu trao đi thông tin đưc vi nhau, nhm phc v kp thi nhim v đt
xut nói trên. D liu v các đưng ni đã xây dng xong đưc cho trong mt file văn
bn có tên COM N ET.INP có cu trúc như sau
- Dòng đu tiên cha hai s m,
- Trong các dòng tiếp theo, m i dòng cha thông tin v mt đưng ni đã xây dng
xong trong thi đim hin ti gm 4 s nguyên dương xác đnh to đ ca hai m áy đưc
ni vi nhau bi đưng ni này.
Hãy lp trình nhp d liu vào t file, sau đó thc hin các yêu cu nói trên.
218
CìKơìii . Btù ĨOLUI dưng âi ì^cvì ni
6
BÀI TOÁN ĐƯNG ĐI NGN NHẨT
Trong các ng dng thc tế, Bài toán tìm đưng đi ngn nht gia hai đnh ca mt
đ th liên thông có mt ý nghĩa to ln. Có th dn về bài toán như vy nhiu bài toán
thc tế quan trng. Ví d, Bài toán chn mt hành trinh tiết kim nht (theo liêu chun
khong cách hoc thi gian hoc chi phí) trên mt mng giao thông đưòfng b, đưng
thu hoc đưng không; Bài toán chn mt phương pháp tiết kim nht đ đưa m t h
đng lc lc t trng thái xut phát đến mt trng thái đích, i toán lp lch thi công
các công đon trong mt công trình thi công ln, i loán la chn đưng truyn tin vi
chi phí nh nht trong mng thông tin, V..V... Hin nay có rt nhiu phương pháp đ gii
các bài toán như vy. Thế nhưng, thông thưng, các thut toán đưc xây dng da trên
cơ s lý thuyết đ th t ra là các thut toán có hiu qu cao nht. Trong chương này
chúng ta s xét mt sô' thut toán như vy.
219
Phn 2. L thuyết đ ĩh
6.1. Các khái nim m đu
Trong chương này chúng ta ch xét đ th có hưng G = (V, E), IVI=/Í, \E\=ni vi các
cung đưc gán trng s, nghĩa là, mi cung (u, v) e E ca nó đưc đt tương ng với
m t s thc a{u,v) gi là trng s ca nó. Chúng ta s đt a(u, v) = co, nếu {u, v) E.
Nếu dãy
Vo . V ,, . . . , Vp
là mt đưng đi trên G, thì đ dài ca nó đưc đnh nghĩa là tng sau
/=1
tc là, đ dài ca đưng đi chính là tng các trng sô' trên các cung ca nó. (Chú ý rng
nếu chúng ta gán trng s cho tt c các cung đu bng 1, thì ta thu đưc đnh nghĩa đ
dài ca đưng đi như là s cung ca đưng đi ging như trong các chương trưc đã xét).
Bài toán tìm đưng đi ngn nht trên đ th dưi dng tng quát có th phát biu
như sau; Tim đưcmg đi có đ dài nh nht t mt đnh xut phát e V đến đnh cui
(đích) t e V. Đưng đi như vy ta s gi là đưng đi ngn nht t s đến t còn đ dài
ca nó ta s ký hiu là d{s,t) và còn gi là kìĩong cách t 5 đến t (khong cách đnh
nghĩa như vy có th là s âm). Nếu như không tn ti đưòmg đi t s đến í thì ta s đt
d(s,t) = co. Rõ ràng, nếu như mi chu trình trong đ th đu có đ dài dương, thì trong
đưng đi ngn nht không có đnh nào b lp li (đưng đi không có đnh lp li s đưc
gi là đưng đi cơ bn). Mt khác, nếu trong đ th có chu trình vi đ dài âm (chu
trình như vy, đ ngn gn, ta s gi là chu trình âm) thì khong cách gia m t s cp
đnh nào đó ca đ th có th là không xác đnh, bi vì, bng cách đi vòng theo chu
trình này m t s đ ln ln, ta có th ch ra đưòng đi gia các đnh này có đ dài nh
hơn bt c s thc cho trưc nào. Trong nhng trưng hp như vy, có th đt vn đ
tìm đưng đi cơ bn ngn nht, tuy nhiên bài toán đt ra s tr nên phc tp hơn rt
nhiu, bi vì nó cha bài toán xét s tn ti đưng đi Hamilton trong đ th như là mt
trưng hp riêng. M t tính cht ca đưng đi ngn nht na có th phát biu mt cách
không hình thc như sau: Mi đon đưng con ca đưng đi ngn nht cũng là đưng đi
ngn nht. Tính cht tuy rt hin nhiên này nhưng li hàm cha m t ni dung rt sâu
sc, và ngưi ta thưng gi nó là nguyên lý ti ưu. Vic chng minh tính đúng đn ca
hu hết các thut toán tìm đưcmg đi ngn nht đu đưc xây dng da vào nguyên lý
này.
Trưc hết cn chú ý rng nếu biết khong cách t s đến t, thì đưng đi ngn nht t
5 đến t, trong trưng hp trng s không âm, có th tìm đưc m t cách d dàng. Đ tìm
22 0
Chương 6. Bài toán đưnỊỊ đi ní nhái
đưng đi, ch cn đ ý là đi với cp đnh 5, t e V tu ý (í t) luôn tìm đưc đnh V sao
ch'"
d{s\t) = cì{s,v) + a{v,t).
Thc vy, đnh V như vy chính l à đnh đi trưc đnh t trong đưng đi ngn nht t 5
đến t. Tiếp theo ta li có th tìm đưc đnh u sao cho d{s,v) = d{s,u) + a{u,v), ... T gi
thiết v tính không âm ca các trng s d dàng suy ra rng dãy t, V, u, ... không cha
đrh lp 'i và kết thúc đ h h 5 Rõ ràng dãv thu dươc xác đ'nh f'neu lt ngưc th t
các đnh trong nó) đưng đi ngn nht từ 5 đêíi t. T đó ta có thut toán sau đây đ tìm
đưòĩig đi ngn nht t 5 đến t khi biết đ dài ca nó.
procedure Find_Path;
(*
Đ u vào:
d[v] - khong cách t đnh s đến tt c các đnh còn li V e V;
t - đnh đích;
a[u,v] , u, V e V - ma trn trng s trên các cung.
Đu ra:
M ng STACK cha dãy đnh xác đnh đưng đi ngn nht t s đến t
*)
begin
STACK := 0 ; STACK <= t ; V := t ;
while V s do
begin
u:= đnh tho mãn dlvj = d[uj + a[u,v] ;
STACK c= u ;
V ;= u ;
end;
end;
Chú ý rng đ phc tp tính toán cu thut toán là O(n^), do đ tìm đnh u ta phi
xét qua tt c các đnh ca đ th. Tt nhiên, ta cũng có th s dng k thut ghi nhn
đưng đi đã trình bày trong chương 3: dùng biến mng Truoc[v], V e V , đ ghi nh đnh
đi trưc V trong đưng đi tìm kiếm.
Cũng cn lưu ý thêm là trong trưng hp trng s trên các cnh là không âm, bài
toán tìm đưng đi ngn nht trên đ th vô hưng có th dn v bài toán trên đ th có
hưng, bng cách thay mi cnh ca nó bi hai cung có hưng ngưc chiu nhau vi
cùng trng s là trng s ca cnh tương ng. Tuy nhiên, trong trưng hp có trng s
âm, vic thay như vy có th dn đến chu trình âm.
221
Phân 2. Lý thuyết đ th
6.2. Đưng đi ngn nht xuâ't phát t mt đnh
Phn ln các thut toán tìm khong cách gia hai đnh i' và / đưc xây dng nh k
thut tính toán mà ta có th mô t đi th như sau: t ma trn trng sô' <7[m,v], , V e V,
ta tính cn trên J[v] ca khong cách t i' đến tt c các đnh I’ e V. Mi khi phát hin
d[u] + a[u,v]<d[v] (1)
cn trên d[v] s đưc là tt lên: í/[v] := d[u] +
Quá trình đó s kết thúc khi nào chúng ta không làm tt thèin đưc bt c cn trên
nào. Khi đó, rõ ràng giá tr ca mi d[\>] s cho ía khong cách t đnh i' đến đnh V.
Khi th hin k thut tính toán này trên máy tính, cn trên d[v\ s đưc gi là nhãn ca
đnh V, còn vic tính li các cn trên này s gi là phép gán nhãn cho đ th và toàn b
th tc thưng gi là ih tc gán nhãn. Nhn thy rng đ tính khong cách t i đến
t,
đây, ta phi tính khong cách t s đến tt c các đnh còn li ca đ th. Hin nay vn
chưa biết thut toán nào cho phép tìm đưng đi ngn nht gia hai đnh làm vic thc s
hiu qu hơn nhng thut toán tìm đưng đi ngn nht t mt đnh đến tt c các đnh
còn li.
Sơ đ tính toán mà ta va mô t còn chưa là xác đnh, bi vì còn phi ch ra th t
chn các đnh u và V đ kim tra điu kin (1). Th t chn này có nh hưng rt ln
đến hiu qu ca thut toán.
Bây gi ta s mô t thut toán Ford - Bellman tìm đưng đi ngn nht t đnh i' đến
tt c các đnh còn li ca đ th. Thut toán làm vic trong trưng hp trng s ca các
cung là tu ý, nhưng gi thiết rng trong đ th không có chu trình âm.
p ro c ed u re F ord _B ellm an;
(*
Đ u vào: Đ th có hưtĩg G={V,E) vi n đnh,
s e V là đnh xut phát,
a[u,v], u,v G V, ma trn trng s;
Đ u ra: Khong cách t đnh s đến tt cá các đnh còn li úí[v], V e V.
Truoc[v], V e V, ghi nhn đnh đi trưc V trong đưc/ng đi ngn
nht t s đến V
G i th iết: Đ th không có chu trình ám.
*)
begin
222
Chươn^ 6. Bài toán cưì^ đi ngn nht
(* Khi to *)
for V G V do
begin
d[v] := a[s,v] ;
Truoc[v]:=s;
end;
d[s]:=0;
for k := 1 to n-2 do
for veV\|s do
for u e V do
if d[v] > d[u] + a[u,v] then
begin
d[v] ;= d[u] + a[u,v] ;
Truoc[v] ;= u ;
end;
end;
Tính đúng đn ca thut toán có th chng minh trên cơ s nguyên ti uu ca
quy hoch đng. Rõ ràng là đ phc tp tính toán ca thut toán là 0{n^).
Lưu ý rng chúng ta có th chm dt vòng lp theo k khi phát hin trong quá trình
thc hin hai vòng lp trong không có biến iry[v'] nào b đi giá tr. Vic này có th xy
ra đi vi k < n-
2
, và điu đó làm tăng hiu qu ca thut toán trong vic gii các bài
toán thc tế. Tuy nhiên, ci tiến đó không thc s ci thin đưc đánh giá đ phc tp
ca bn thân thut toán.
Đi vi đ th thưa tt hơn là s dng danh sách ké Ke(v), V & v, á biu din đ
th, khi đó vòng lp theo u cn viết lại dưi dng
for u e Ke(v) do
if d[v] > d[u] + a[u,v] then
begin
d[v] := d[u] + a[u,v] ;
Truoc[v] ;= u ;
end;
Trong trưng hp này ta thu đưc thut toán vi đ phc tp 0{n.m ).
T h í d 1. Xét đ th cho trong hình 1. Các kết qu tính toán theo thut toán đưc mô t
trong bng dưi đây
223
Phn 2. Lý thuyết đ th
(3)
00 1 00 00 3
00 00 3 3 8
0 0 0 0 0 0 1 -5
00 00 2 00 00
00 00 00 4 oo
H ình 1. M inh ho cho thuât toán Ford - Bellman
d [l],
Truoc[l]
0, 1
0, 1
0, 1
0 ,1
d[2],
Truoc[2]
1, 1
1, 1
1,1
1,1
d[3],
Truoc[3]
CO, 1
4 ,2
4 ,2
4 ,2
d[4],
Tmoc[4]
CO, 1
4 ,2
3 ,5
3 ,5
d[5],
Truoc[5]
3, 1
-1,3
-1,3
-1,3
Bng kết qu tính toán theo thut toán Ford - Bellman
Trong các mc tiếp theo chúng ta s xét mt s trưng hp riêng ca bài toán tìm
đưng đi ngn nht mà đ gii chúng có th xây dng nhng thut toán hiu qu hơn
thut toán Ford - Bellman. Đó là khi trng s ca tt c các cung là các s không âm
hoc là khi đ th không có chu trình.
6.3. Trưng hp ma trn trng s không âm.
Thut toán Dijkstra
Trong trưng hp trng s trên các cung là không âm thut toán do Dijkstra đ ngh đ
gii bài toán tìm đưng đi ngn nht t đnh 5 đến các đnh còn li ca đ th làm vic
hu hiu hơn rt nhiu so vi thut toán trình bày trong m c trưc. Thut toán đưc xây
dng da trên cơ s gán cho các đnh các nhãn tm thi. Nhãn ca mi đnh cho biết
cn trên ca đ dài đưng đi ngn nht t 5 đến nó. Các nhãn này s đưc biến đi theo
m t th tc lp, m à mi mt bưc lp có m t nhãn tm thi tr thành nhãn c đnh.
N ếu nhãn ca m t đnh nào đó tr thành c đnh thì nó s cho ta không phi là cn trên
mà là đ dài ca đưng đi ngn nht t đnh 5 đến nó. Thut toán đưc m ô t c th như
sau.
224
Chương . Bài toán (lươii đi ngắn nht
procedure Dijkstra;
(* Đ u vào: Đ th có hưng G=(V,E) vi n đnh,
s e V là đnh xut phát, a[u,v], u,v e V, ma trn trng ';
Gi thiết: a[u,v] > 0, H, V e V.
Đ u ra : Khong cách t đnh s đến tt c các đnh còn li d[v], veV.
Truoclv}, ve V, ghi nhn đnh đi trưc V trong đưn^ đi ngn nht t s đến V.
*)
begin
(* Khi to *)
for V e V do
begin
d[v] := a[s,v] ;
Truoc[v]:=s;
end;
d[s] := 0; T := V \ {s ); (* T là tp các đnh có nhãn tm thi *)
(* Bưc lp *)
while T 0 do
begin
Tim đnh u e T tho mãn d[u] = min{ d[z] : z e T};
T := T \{ u ) ; (* Cô'đnh nhãn ca đnh u *)
for V e T do (* Gán nhãn li cho các đnh trong T *)
if d[v] > d[u] + a[u,v] then
begin ,
d[v] :=d[u] + a[u,v] ;
Truoc[v] := u ;
end;
end;
end;
Đnh lý 1. Thut toán Dijkstra lìm đưc đưng đi ngn nht trên đ th sau thi gian c
o).
Chng minh. Trưc hết ta chng minh là thut toán tìm đưc đưòmg đi ngn nht t
đnh s đến các đnh còn li ca đ th. Gi s rng mt bưc lp nào đó các nhãn c
đnh cho ta đ dài các đưng đi ngn nht t 5 đến các đnh c nhãn c đnh, ta s
chng minh rng ln lp tiếp theo nếu đnh u* thu đưc nhãn c đnh thì d[u*] chính
là đ dài đưng đi ngn nht t s đến w*.
225
Phân 2. Lý thuyết đ th
Ký hiu S là tp các đnh có nhãn c đnh còn s, là tp các đnh có nhãn tm thi '
bưc lp đang xét. Kết thúc mi bưc lp nhãn tm thi d[v] cho ta đ dài ca đưng đi
ngán nht t .V đến V ch qua nhng đnh nm hoàn toàn trong tp 5|. Gi s rng đưng
đi ngn nht t đến không nm trn trong tp S|, tc là nó đi qua lì nht mt đính
ca tp 52- Gi z G S2 là đnh đu tiên như vy trên đưng đi này. Do trng s trên các
cung ià không âm, nên đon đưng t z đến có đ dài L > 0 và
d[z] < d[u^] - L < d[ii%
Bt đng thc này là mâu thun vói cách xác đnh đnh là đnh có nhãn tm thi nhò
nht. Vy đưng đi ngn nht t 5 đến /Y* phi nm trn troriR 5|, và thế cl[] là đ
dài ca nó. Do in lp đu ìiên = { và sau mi ln lp la ch thêm vào 5, mE đnh
¿/* nên gi thiết là d[v] cho đ dài đưng đi ngn nht t .V đến V' vi mi V ^ 5, là đúng
vi bưc lp đu tiên. Theo qui np suy ra thut toán cho ta đưng đi ngn nht t s đến
mi đnh ca đ th.
Bây gi s đánh giá s phép toán cn thc hn theo thut toán, mi bưc lp đ
tìm ra đnh u cn phi thc hin
0
(n) phép toán, và đ gán nhãn li cũng cn phi thc
hin m t s lưng phép toán cũng là 0{n). Thut toán phi thc hin /7-1 bưc lp, vy
thi gian tính toán ca thut toán là c
0
{n^).
Đnh lý đưc chng minh.
Khi đã tìm đưc đ dài ca đưng đi ngn nht d[v] thì đưng đi này có th tìm da
vào nhãn Truoc[v], V G V, theo qui tc ging như chúng ta đã xét trong chương 3.
T hí d 2, Tim đưcmg đi ngn nht t đnh 1 đến các đnh còn li ca đ th hình 2.
(7)
( 1)
(3)
H ình 2. M inh ho thut toán Dijkstra
Kết qu tính toán theo thut toán đưc trình bày trong bng dưi đây. Qui ưc viết
hai thành phn ca nhãn theo th tự: d[v], Truoc[v]. Đnh đưc đánh du là đinh
226
ChươiiỊ’ . i toán dưiì đi n.í>n Iilìãì
đưc chn đ c đnh nhãn bưc lp dang xét, nhãn ca nó không biến đi các bưc
tiếp theo, vì thế ta đánh du
Bưc lp
Khi to
5
Đnh 1
0 , 1
Đính 2
I. 1
Đinh 3
cc, 1
6 ,2
4, 4 *
Đnh 4
X, 1
3 ,2 *
Đnh 5
co, 1
co,
1
7, 4
7, 4
Đnh 6
co, 1
8 ,2
8 ,2
5 ,3 *
6, 6
Bng kết qu tính toán theo thut toán D ijkstra
C hú ý:
1) Nếu ch cn tìm đưng đi ngn nht t .V đến mt đnh t nào đó thì có th kết
thúc thut toán khi đnh í tr thành có nhãn cô' đnh,
2) Tương t như trona mc 6.2. d dàng mô tả li thut toán cho trưng hp đ th
cho bi danh sách k. Đ có th gim bt khi lưng tính toán trong vic xác đnh đnh
u mi bưc lp, có th s dng thut toán Heapsort (tưong t như trong chưcmg 5 khi
th hin thut toán Kruskal). Khi đó có th thu đưc thut toán vi đ phc tp tính toán
là
0
{m log /í).
6.4. Đưng đi trong đ th không có chu trình
Bây gi la xét trưng hp riêng ih hai ca bài toán đưímg đi ngán nht, mà đ gii nó
có th xây dng thut toán với đ phc tp lính toán đó là khi đ th không có
chu trình (còn trng s trên các cung có th là các s ihc tu ý). Trưc hết ta chng
minh đnh lý sau.
Đ nh lý 2. Gi s G là đ th không c chu ĩrìĩh. Kììi đó các đnh ca nó có th đánh s
sao cho mi cuĩí ca đ th ch hưn^ ĩ đnh có ch s nh hơn đến đnh có ch s ln
hơn, nghĩa lá mi cun^ ca nó có ihhiu din dưi clạníỊ (v[/], v[/]), trong đó i < j .
Đ chng minh đnh ta mô t thut toán sau đây, cho phép tìm ra cách đánh s
tho mãn điu kin đnh lý.
proced u re N um bering;
(* Đ u vàc: Đ th có hưìĩg G~{V,E) vi n đnh khôn^ cha chu trình
đưc cho bi danh sáclì ké Ke{v), V e V.
227
Phn 2. Lý thuyết đ th
Đu ra: Vi mi đnh V e V ch S N R [v] thod mãn:
Vi mi cung {u,v) ca đ th ta đu có NR[u] < NR[v]. *)
begin
for V e V do Vao[v] := 0;
(* Tính Vao[v] = deg-(v) *)
for u e V do
for V G Ke(u) do Vao[v] ; = Vao[v] + 1 ;
QUEUE := 0 ;
for V e V do
if Vao[v] = O then Q UEUE Cr V ;
num := 0;
while QUEUE ^ 0 O
begin
u ^ QUEUE ;
num := num + 1 ; NR[u] := num ;
for V 6 Ke(u) do
begin
Vao[v] ;= Vao[v] - 1 :
if Vao[v] = 0 then QUEUE V ;
end;
end;
end;
Thut toán đưc xây dng da trên ý tưcmg rt đơn gin sau; Rõ ràng trong đ th
không có chu trình bao gi cũng tìm đưc đnh có bán bc vào bng 0 (không có cung
đi vào). Thc vy, bt đu t đnh V, nếu có cung đi vào nó t thì ta li chuyn sang
xét đnh V j. Nếu có cung t V3 đi vào V j, thì ta li chuyn sang xét V3, ... Do đ th là
không có chu trình nên sau mt s hu hn ln chuyn như vy ta phi đi đến đnh
không có cung đi vào. Thot tiên, tìm các đnh như vy ca đ th. Rõ ràng ta có th
đánh s chúng theo m t th t tu ý bt đu t 1. Tiếp theo, loi b khi đ th nhng
đnh đã đưc đánh s cùng các cung đi ra khi chúng, ta thu đưc đ th mi cũng
không có chu trình, và th tc đưc lp li vi đ th mi này. Quá trình đó s đưc tiếp
tc cho đến khi tt c các đnh ca đ th đưc đánh s.
C hú ý:
1) Rõ ràng trong bưc khi to ta phi duyt qua tt c các cung ca đ th khi tính
bán bc vào ca các đnh, vy đó ta tn c
0
{m) phép toán, trong đó m là ' cung
ca đ th. Tiếp theo, mi ln đánh s mt đnh, đ thc hin vic loi b đnh đã đánh
s cùng vi các cung đi ra khi nó, chúng ta li duyt qua tt c các cung này. Suy ra đ
228
Cơng 6. Bài loàn đường đi ngn nht
đánh sô' tt c các đnh ca đ th chúng ta s phi duyt qua tt c các cung ca đ th
mt ln na. Vy đ phc tp ca thut toán là 0{m).
2) Thut toán có th áp dng đ kim tra xem đ th có cha chu trình hay không?
Thc vy, nếu kết thúc thut toán vn còn có đnh chưa đưc đánh ' (num < n) thì điu
đó có nghĩa là đ th cha chu trình.
T h í d 3. Đ th trong hình 3 có các đinh đưc đánh s tho mãn điu kin nêu trong
đnh .
7 O) n
í=9
Do có thut toán đánh s trên, nên khi xét đ th không có chu trình ta có th gi
thiết là các đnh ca nó đưc đánh sô sao cho mi cung ch đi t đnh có ch s nh đến
đnh có ch s ln hơn. Thut toán tìm đưng đi ngn nht trên đ th không có chu
trình đưc mô t trong sơ đ sau đây.
procedure Critical_Path;
(* Tìm đưng đi ngn nht t đnh ngun đến tát c
các đĩnh còn li trènđ th không có chu trình
Đ u vào: Đ th G = (V^, E), trođó V ={ y[l], v[2], , v[/2] }.
Đi vi mi cung (v[/], v[ì) s E, ta có i < j.
Đ th đưc cho bài danh sách k Ke{v), V e V.
Đ u ra : Khong cách tv{\] đến lt c các đnh còn li
đưc ghi trong mng ¿/[v[/]], / = 2, 3, n *)
begin
d[v[l]] := 0;
for j:= 2 to n do
d[v[j]] := a [v [l],v U ]];
for j:= 2 to n do
for V e Ke[v[j]] do
d[v] := min ( d[v], d[v[j]] + a[v[j], vj );
end;
229
Phn 2. Lý thuyết đ th
Đ phc tp tính toán ca thut toán là 0{m), do mi cung ca đ th phi xét qua
đúng m t ln.
Các thut toán mô t trên thưng đưc ng dng vào vic xây dng nhng
phương pháp gii bài toán điu khin vic thc hin nhng d án ln, gi tt là PERT
(Project Evaluation and Review Technique) hay CDM (Critical path Method). MÍ thi
d đơn gin cho ng dng này đưc mô í trong thí d dưi đây.
T hí d 4. Vic thi công mt công trình ln đưc chia ra làm
1
công đon, đánh s t 1
đến n. Có mt s công đon mà vic thc hin nó ch đưc tiến hành sau khi mt s
công đon nào đó đã hoàn thành. Đi vi mì còng đon biết t[i] là thi gian cn thiết
đ hoàn thành nó (/ = 1-, 2,..., n). Các d liu vi /2 = 8 đưc cho trong bng sau đây
Công
đon
t[i]
Các công đon phi
đưc hoàn thành trưc nó
1
15 không có
2 30
1
3 80
không có
4
45
2 , 3
5 124
4
6
15
2 , 3
7 15
5 , 6
8
19 5
Gi s thi đim bt đu tiến hành thi công công trình là 0. Hãy tìm tiến đ thi
công công trình (ch r mi công đon phi đưc bt đu thưc hin vào thcfi đim nào)
đ cho công trình đưc hoàn thành xong trong thi đim sm nht có th đưc.
Ta có th xây dng đ th có hưng n đnh biu din hn chế v trình t thc hic
các công vic như sau: Mi đnh ca đ th tương ng vi m t công vic, nếu công vic
/ phi đưc thc hin trưc công đon j thì trên đ th có cung (/j) , trng s trên cung
này đưc gán bng t[/], xem hình 4 dưi đây.
15 30
H ình 4. Đ th minh ho PERT
230
Cơnq (ì. Bài toán dưn di lìiii nht
Thêm vào đ th 2 đính 0 và /;+l tương ng vi hai s kin đc bit: đnh s 0 tương
ng vi công đon L khi côìì>, nó phi đưc thc hin trưc tt c các công đon
khác, và đnh /ỉ+1 tương ng vi công đon c t hn, khánh thành công trình, nó phi
thc hin sau tt c các công đon, với /[0] = /[/?+!] = 0 (trên thc tế ch cn ni đnh 0
với tt c các đnh có bán bc vào bng 0 và ni lt c các đnh có bán bc ra bng 0 vi
đnh /+1). Gi đ th thu đưc là G. Rõ ràng bài toán đt ra dn v bài toán tìm đưng
đi dài nht t đính 0 đến tt c các đnh còn li trên đ th G. Do đ th G rõ ràng là
không cha chu trình, nên d gii bài toán đt ra có th áp dng các thut toán mô t
trên, ch cn đi du tat c các trng s trên các cung thành du ngưc li, hoc đoín
gián hơn ch cn đi toán t min trong thut toán Critical_Path thành toán t m ax. Kết
thúc thut toán, chúng ta thu đưc d[v là đ dài đưng đi dài nht t đnh 0 đến đnh V.
Khi đó f/[v] cho ta thi đim sm nht có th bt đu thc hin công đon V , nói riêng
d[n+\] là thi đim sm nht có th ct bãng khánh thành, tức là thi đim sm nht có
th hoàn thành toàn b công trình.
Cây đưng đi dài nht ca bài toán trong thí d 4 tìm đưc theo thut toán đưc ch
ra trong hình 4.
6.5. Đưng đi ngn nhâ't gia tt c các cp đỉnh
Rõ ràng ta có th gii bài toán tìm đưng đi ngán nht gia tt c các cp đnh ca đ
th bng cách s dng n ln thut toán mô t mc trưc, trong đó ta s chn s ln lưt
là các đnh ca đ th. Rõ ràng, khi đó ía thu đưc thut toán vi đ phc tp là 0 ( // )
(nếu s dng thut toán Ford - Bellman) hoc 0{ì^) đi với trưng hp trng sô' không
âm hoc đ Ih không có chu trình. Trong trưng hp tng quát, s dng thut toán Ford
- Bellman n ln không phi là cách làm tt nht, đây ta s mô t m t thut toán gii
bài toán trên vi đ phc tp tính toán 0(/^): Thut toán Floyd. Thut toán đưc mô t
trong th tc dưi đây.
pro ced u re Floyd;
(* Tim đưng đi ngn nht gia tt c các cp đnh
Đ u vào: Đ th cho hi ma (rn trĩí sa[ij], ,j =
Đu ra :
Ma ĩrn đưng đi ngn nhcíĩ gia các cp đnh
d[ij], i j ^ 1,2,.
trong đó d[ìj] cho đ dài đưug đi ngn nlìĩ t i đến j.
Ma rn ghi nhn ducmg đi
pUJÌ. i j = U
2
,...,ỉì,
trong đó p[i,j] ^hi nhn cnh đi íru(/c đnh ronq đườnọ, đì ngn nht t i đến j.
*)
231
Phn 2. Lý thuyết đ th
begin
(* Khi to *)
for i 1 to n do
for j 1 to n do
begin
d[i,j] := a[i,j];
p[ij] := i;
end;
(* Bưc lp *)
for k:= 1 to n do
for i := 1 to n do
for j 1 to n do
if d[i,j] > d[i,k] + d[k,j] then
begin
d[i,j] := d[i,k] + d[k j] ;
p[i,j] := pfkj];
end;
end;
Rõ ràng đ phc tp tính toán ca thut toán là 0{n^).
Kết thúc chương này chúng ta trình bày mt cách th hin thut toán Dijkstra trên
ngôn ng PASCAL:
(* Chương trình tìm đưng đi ngn nht t đnh s đến đnh t theo thut toán Dijkstra *)
uses crt;
const
max = 50;
var
n, s, t ; integer;
chon : char;
Truoc ; aưay [L.max] o f byte;
d : array [1..max] o f integer;
a ; aư ay [1..max, 1..max] of integer;
final : aưay [L.m ax] of boolean;
procedure NhapSoLieu;
var
f : text;
fname : string;
232
ChươiiỊ; . i loán citòn đi iiin Iilìi
i,j : integer;
begin
write ("Vao ten file du lieu can doc: ');
readln(fnam e);
assign(f,fnam e);
reset(f);
readln(f,n);
for 1 to n do
for j:= 1 to n do read(f,a[i,j]
close(0;
end;
procedure InSoLieu;
var
i, j : integer;
begin
writelnC So dinh cua do thi : '.n);
writelnC Ma tran khoang cach:');
for i 1 to n do
begin
for j:= 1 to n do write(a[i,j];3,' '):
writeln;
end;
end;
procedure InKetQua;
var
i, j : integer;
begin
writeln (' DUONG DI NGAN N HA TTU ',s,' DEN ',1);
write(t,' < = ');
i:=Truoc[t];
while i o s do
begin
write(i,' < = ');
i:=Truoc[i];
end;
writeln(s);
writeln('D o dai cua duong di la; '.d[t]);
end;
TRR-16 233
Phn 2. Lý thuyết đ th
procedure Dijkstra;
var V, u, minp : integer;
begin
write('Tim duong di tu s = ');
readln(s);
write(' den t = ');
readln(t);
for v:=l to n do
begin (* Khi to nhãn *)
d[v]:=a[s,v];
Truoc[vJ:=s;
final [v]:=false;
end;
Truoc[s]:=0;
d[s]:=0;
final[s]:=true;
while not final[t] do (***** Bưc lp *****)
begin
{ Tim u là đnh có nhãn tm thi nh nht }
minp;= maxint;
for v;=l to n do
if (not final[v]) and (minp > d[v]) then
begin
u:= v;
minp:= d[v];
end;
fm al[u]:= true;
if not final[t] then
for v;= l to n do
if ( not final [v ] ) and ( d[u] + a[u,v] < d [v ] ) then
begin
d[v]:= d[u] + a[u,v];
Truoc[v]:= u;
end;
end:
end;
end;
234
CơiìíỊ 6. Bài tocĩn ng di ngn nht
procedure Menu;
begin
clrscr;
writelnC CHUONG TRINH TIM DUONG DI NGAN NH AT TU s DEN t ');
writelnC THEO THUAT TOAN DIJKSTRA');
writelnC
writelnC 1. Nhap so lieu tu file.');
w-itelnC 2. Giai bai toan.');
writelnC 3. Ket thuc.');
writelnC-----------------------------------------------------------------------');
writeC Hay chon chuc nang: '#7):
end;
BEGIN (* Chương trình chính *)
repeat
Menu; chon:=readkey; writeln(chon);
case chon of
T : NhapSoLieu;
'2': begin
InSoLieu; Dijkstra; InKetQua;
end;
'3': Exit;
end;
until false;
END.
235
Phn 2. Lý thuyết đ th
Bài tp
1. Lp trình thc hin các thut toán mô t trong chương 6:
a) Thut toán Ford - Bellman;
b) Tliut toán Dijkstra;
c) Thut toán Flovd;
d) Thut toán tìm đưng đi dài nht trên đ th không có chu trình (PERT).
2. Trong trưng hp đ th thưa, các thul toán Ford - Bellman, Dijkstra, Floyd s làm
viêc hiu qu hơn nếu ta s dng danh sách k đ biu din đ th. Hãy mô t li các
thut toán trên cho trưiig hp này, và đánh giá đ phc tp tính toán ca chúng.
3. Tìm đưng đi ngn nht theo thut toán D ijkstra t đnh A đến tt c các đnh còn lại
trên đ th cho trong các hình v dưi đây:
a)
5
D E
9 y
2 / 5
N.
F
\ ^ 3
G \ .
7
\ 7
5 y /
4
X . 4
4
Á
\
1 X
/ 7 /
J K
L
b)
2 3 6
C lìiC oV i Ó. ì à i o n iĩi{'(')ìì<^ cíì IÌ U n l ì d i
4. Ap ílng thuât tcìaii đánh s dinh tlò kicii tra cló Ili sau clà\ cia chu Irình hav khõiii!
o
(
y
9
5. Xét đ th uni 7 đinh A. B, c. D, E. F, G cho boi ma Irii Irnu s
A
B C D E F'
G
A
0 1 1 65
17
65
6,5
63
B
65 0 12 65
65 10
16
C 65
65
0
13
.14
65
19
D 65 65
65 0 65 6? 18
E
65
65 65
65
0
65
15
F
65 13 18
65
65
0
10
G 65 65 65
65
65
65
0
Tim đưnũ di n^án nhát íừđinlì A đèn diiìh G iheo thut loán Dijkstra. Yêu cu viết rõ
kêt quá triinu uian imnu lna bưc. Kí quá cui cùim: Đun đi niĩán nht t A đến G
và đ dài cúa nó.
6. Cho mi bng gồm /7/x// ô. Nếu ml ô năm ' hàne / CI / ca bán^ ihì ta s nói này
có to đ (/./) (/ 1,2
.....
/77; /= 1,2
......
//). Trone nìi vicì inõl s neuyên ÌM uiá tĩ ca
ô). T mt ò bt k ca báne chi có thê di chuyên den nhü'n bên phai có chunu
cng hoc đinh vi n. DCr liu ve báim nói irén clươc clio trorm mt file vãn bán c tên
DATA3.INP, ne đáu tién ca n cha hai s f)i. n đưc uhi ch nhau bi du cách.
Mi ne th / tron<ĩ s clòne ĩiếp theo cha n s' iỉhi tronií n ò cúa dòníĩ th ĩ cúa
báng* cc số đưc ghi cách nhau bi du cách (/=1,2
.....
fì). Hãy lp trình nhp dữ liu
vào t file, sau đó tìm dãy cđc di chuyn t nicp Irái cúa bâim sane mép phái ca bárm
sao cho tống sò các ííiá tr cúa các ô đi qua là nho nht. Yêu cu kết quà đưa ra dưi
clne cTiv to d ca các ô cán di chuyến qua hál dáu t mt xut phát mép trái và
kếr íluìc mt nào đó mép phái, và tim s' các i!Ìá tr ca các ò này.
237
Phcin 2. Lv ihuyé'í đ th
7. Cho d ã y /? s nguyên -V[ 1 ], AÌ2],..., .v[/í], tron« đó Ị</7<Ị()()() l<v[/]<2()(), / = 1.
Dãy s đã cho đuc ghi trone mt file văn bn có tíMi là DATA4.1NP. các s
đưc ưhi cách nhau bi ít nht mt du cách hoc dâ'ii xLiốns dòn«. Nhp dũ' liu vào từ
file, sau đó tìm cách xoá b ít nhất mt s các Dhn tử ca dãy đã cho sao cho các phán
còn lại (iii neuyên thứ tự CLUI chúns troim dãy ban đu) to thành nìột dãy con
khôim giám. Đưa ra màn nh tn« s các phán tử cán xoá và chí so ca chúnu trono
dãv đfi cho.
8. Dãy sô nuuyn a [l|. a|2J..........am| đưc ưọi là dãy con ca dãy con ca day sô
nguyên b[ I ], b |2 |
......
b[n] (m < n) nếu tìm đưc dãy các chi s j[ 11. j|2|,...J|m | sao cho
I j[ll< j|2|< ...<j|ni|<n
và
Cho hai dãy s nsLiyèn
a|il = b|j[i]],i=1.2
.....
m. (1)
C[1],C|2J,... ,cịp|, (2)
d|lldf2],._ d [q l. (3)
D liệu v hai dãy s đưc shi iTOim file Vein bàn có tên DATA5.INP. dòng đấu tiên
cha hai s p, q đưc ghi cách nhau bởi du cách. Trong cách dòne tiếp theo ehi lán
lưr các phn tử ca dãy (2) ri liếp đến các phần tứ ca dãy (3). các s ^hi cách nhau
bới ít nht mt du cách hoc du xunti dòng. Hãy lập trình nhp dũ‘ liu vào từ file,
sau đó tìm dãy con chung có s phn từ lớn nhất ca hai dày đã cho. Kếi quá dưa ra
file có n KQUA5-OUT: dòng đu tiên cha s phn cùa dãy con ciìunu ùm đưc,
trone các dòni: tiếp theo lần ợt uhi các phần tứ ca hai dãy ch s íLi'0'n iz nií chi rõ v
trí cúa dãy con này trone hai dãy ban đu (các s uhi cách nhau bới ít iihfii mi dán
cách hoc du xung dòni>.
9. Cho n c quc tế gm n.n (n < 50). Trong mi ô (j) cúa nó ta đin mt s
nguyên dương a[ij] <100, /', j = 1,2,...,;?. T mt ô bt k (/,/) ca bảrm ta có thế di
chuyn sang ô có cùng mu với nó nếu như aij\ s chn, và sail" ô khác màu với n
nếu a[ij] s lẻ. D liu đưc cho trone nit file văn bân có tên D ATA6.ÌNP, dòníĩ
đu tiên cha s n. Tronc các dòng tiếp theo cha các phn t ¿/[1,] ], a\ 1.2], .... aị 1
a[/,2], aì.n], các s đưc lần lượt «hi theo th tự va néu cách nhau
bởi ít nhr mt du cách hoc du xung dòng.
Yêu cu: T im m t cá ch di chu yn m t ô nào đó ct ĩh n ht sani; m t ô nào đó ct
th n cù a bàn c sao c ho tn« các s ghi troim các ô di ch u y ế n qua là n hó nht. Đưa ra
m àn hình kết quá diii dim ba s nuyên .V. V. rrona đó A' là ìo đ d ò n g cúa ò xut
phát. V - to đ dòriỉx CLia ô kếl thúc, L - tng các s hi trong các ô cn di chuy n qua.
238
Chương 7. Bài toán lung cực đi trong mng
1
BÀI TOÁN LUNG cực ĐI
TRONG MẠNG
Bài toán lung cc đi trong mng là mt trong sô' nhng bài toán ti ưu trên đ th
tìm đưc nhng ng dng rng rãi trong thc tế cũng như nhng ng dng thú vtrong
lý thuyết t hp. Bài toán đưc đ xut vào đu nhng năm 1950, và gn lin vi tên
tui ca hai nhà toán hc M là Ford và Fulkerson. Trong chương này chúng ta s trình
bày thut toán ca Ford và Fulkerson đ gii bài toán đt ra và nêu mt s ng dng ca
bài toán.
7.1. Mng. Lung trong mng. Bài toán lung cc đại
Đ nh nghĩa L Ta gi mng là đ th có hưng G = (V, E), trong đó có duy nht mi
đnh s không có cung đi vào gi là đim phát, duy nht m t đnh t không có cung đi ra
gi là đim thu và mi cung e = (v,w) G E đưc gán vi m t s không âm c{e) = c{v,w)
gi là kh năng thông qua ca cung e.
239
Phân 2. Lý thuyết đ th
Đ thun tin cho vic trình bày ta s qui ưc rng nếu không có cung (v,vv) thì kh
nãng thông qua c{v,w) đưc gán bng 0.
Đ nh nghĩa 2. Gi s cho m ng G ={V, E). Ta gi lung f ĩrong nuìììg G - (V, E) ỉíi
ánh x f : gán cho m i cung e - (v,w) G E m t sô'thc không ám f{e) = /(v^uO,
gi là lung trên cung e, ílĩo mãn các diu kin sau:
) Lung trên mi cung e e E không vưĩ quá kh năng thông qua ca nó:
0 < f{e) < c{e),
2) Điu kin cân bng lung ĩrn mi đnh ca mng: Tng-ìun^ ĩrên ccc cun^ đi
vào đnh V bng ìng lung ĩrên các Ciitĩ^ đi ra khi đnh V, nếu V ĩ :
It'6r“(v) ueP* (v)
trong đó p (v ) - tp các đnh ca mng mà t đó có cung đến V, p(v') - tp các đnh cúa
mng m à t V có cung đến nó:
r ( v ) = { H 'e V ; (v l^ v )e £ '), P ( v) = { h' g V: (v, w ) e £ |.
3) Ta gi giá tr ca lung f là s
v a l ) = ^ f { s ,w ) =
vv6r'*^(.ì} MeV" {{)
Chú ý là đng thc th hai trong đnh nghĩa giá tr lung là h qu ca điu kin cân
bng lung.
Bài toán lung cực đi trong mng: Cho mng G= (V, E). Hãy tìm lung j* trong
mng vi giá tr lung val*) là ln nht. Lung như vy ta s gi là lung cc đi
trong mng.
Bài toán như vy có th xut hin trong rt nhiu ng dng thc tế. Chng hn khi
cn xác đnh cưng đ ln nht ca dòng vn ti gia 2 nút ca mt bn đ giao thông.
Trong ví d này li gii ca bài toán lung cc đi s ch cho ta các đon đưng đông
xe nht và chúng to thành "ch hp" tương ng vi dòng giao thông xét theo 2 nút
đưc chn. Mt ví d khác là nếu xét đ th tương ng vi mt h thng đưòfng ng dn
du. Trong đó các ng tương ng vi các cung, đim phát có th coi là tàu ch du,
đim thu là b cha, còn nhng đim ni gia các ng là các nút ca đ th. Kh năng
thông qua ca các cung cfng ng vi tiết din các ng. Cn phi tìm lung du ln
nht có th botn t tàu ch du vào b cha.
240
Chươnị^ 7. Bi íoúfi liiótìí cực di ĩroỉìí^ lììí
7.2. Lát ct. Đưng tăng lung. Đnh lý Ford - Fulkerson
Đ nh nghĩa 3. Ta gi lá! ct (X, X ) là mt cách phàn hoch tp đnh V ca mng ra
thành hai tp X và C = V \ X, iron^ dó s e X ĩ 6 X . Kd ncĩn !^ :hâng qua ca lái ct
(X, X ) là s
ve,V
U'fe.v"
Láĩ cĩ vi khá ììăn, ĩìiôììg qua nh nhái dưc í^i tủ áct hp nht.
B đ 1. Giá tr ca mi ỉuồnọ, f ĩroni mợỉìỉ^ liỏỉì nhô lìơn lìoc bng kh nâng thông
qua ca lát cí X ,X ) hĩ k trong nó: ya(f) < íX ,).
C h ng m inh. Cng các điu kin cân bng luns Dì\\{\') = 0 vi m i V G X Khi đó ta
c ó
z ( z z / ( ' >"')) = - v a l )
V e
.V
vt' e r (v) vt e r^(v;
tng này s gm các s hng dng /(/,v) với du cng hoc du tr m à trong đó có ít
nht mt trong hai đnh u, V phi thuc tp X. Nếu hai đinh u, V đu trong tp X thì
xut hin vi du cng trong Di\j{v) và với du tr trong D í V { u ) , v ì thế, chúng
trit tiêu ln nhau. Do đó, sau khi gin ước các sô hng như vy á v ê' trái, ta thu đưc
vgX V,V*
Ug.v H-A'
hay là
v a /{/)= ^ f { v , w ) - X /(v ,u -).
l-E.V i-e.v
u e .V .V
Mt khác, t điu kin 1 rõ ràng
^f(v,w )< ^c{v,w),
.v v e .\X.V
u-eA' ire.v'
Cổn
- ^ f{ v ,w ) <
0
.
V.v
U6.V
suy ra val) < cX, )C). B đ đưc chng minh.
241
Phn 2. Lý thuyết đ th
T b đ 1 suy ra
H q u 1. Giá tr lung cc đi trong mng không
VIÍ0
quá kh năng thôn^ qua ca lát
ct hp nht trong mng.
Ford và Fulkerson đã chng mitih rng giá tr lung cc đi trong m ng đúng bng
kh năng thông qua ca lát ct hp nht. Đ có th phát biu và chng minh kết qu này
chúng ta s cn thêm mt s khái nim.
Gi s / là mt lung trong mng G = (V, E). T mng G = (V, E) ta xây dng đ
th có trng s trên cung ơy. = (V, Ej), vi tp cung Ej và trng s trên các cung đưc xác
đnh theo quy tc sau:
1) Nếu e = (v,w) êí E vi/(v,w ) = 0, thì (v,H’) e vi trng s c(v,w);
2) Nếu e = (v,w) 6 E vi/(v,w ) = C( v ,w ), thì (w,v) e EVÔì trng sf{v,w)\
3) Nếu e - (\',w) e £ vi 0 < f(v,w) < c(v,w), thì (v,w) e Ef vi trng s -
fiy,w ) và ( w , v ) G Ef với trng s/(v,w).
Các cung ca Gf đng thi cũng là cung ca G đưc gi là cu ng th un, các cung còn li
đưc gi là cun g nghch. Đ th ơy^được gi là đ th tăng lung.
T h í d: Các s viết cnh các cung ca G hình 1 theo th t là kh năng thông qua và
lung trên cung.
3.0
G
H ình 1. M ng G và lu n g /. Đ th có trng s Gf tương ng.
242
Chương 7. Bci toán ung cực di ĩroiig niạng
Gi s p = {s ~ V,;, V /, v .. V. ~ t) là mt đưng đi l .V đến trên đ th tăng
lung Gj, Gi ô là giá tr nh nht ca các trng sô cúa các cung trên đưng đi p . Xây
dng lu n g /' trên mng G theo quy tc sau:
f (w, v) + , nếu {ii,v) e p ¡à cung íhun,
f {u, v) - s, nếu (u,v) & p ỉà cung nghch,
/( m , v ) , nêĩi{u,v)íP.
D dàng kim tra đưc r n g /' đưc xáy dng như trên là lung trong mng và v a l ') =
val(f) + 5. Ta s gi th tc biến đi lung va nêu là tăng lung dc theo dưng p.
Đ n h nghĩa 4. Ta gi đưig tăng lu n g / là mi dưng di t
s
đến t trên đ th tăng
lung G).
Đnh dưi đây cho mi liên h gia lung cc đi, đưng tăng lung và lát ct.
Đ nh lý 1. Các mnh đ dưi đây là tương đương:
(/) / là lung cc đi trong mng:
(ii) Không tim đưc đưcyng tãn^ lunqf:
(///) val) - c{X X ) yi m t lát ct {X, / ) nìio đó.
C h n g m inh.
(;) => (//). Gi s ngưc li, tìm đưc đưcmg tăng lung p. Khi đó ta có th tăng giá
tr lung bng cách tãng lung dc theo đưng F. Điu đó mâu thun vi tính cc đi
ca lung/.
(í7) => (Ui). Gi s không tìm đưc đưng tãng lung. Ký hiu X là tp tt c các
đnh có th đến đưc t đnh 5 trong đ th Gy, đt X* = V \ X Khi đó (X, X ) là lát ct,
và f{v,w ) = 0 vi mi V e )C,W e X nên
v a i{f)= ^ f( v ,w ) ~ ^ f { v ,w ) = ^ f{ v ,w )
veA' vgA'*
ueX' H'eA ue.Y*
Vi v e x ,w e )C, do (v, w) Gy, nén/(v, w) = c(v, vv). Vy
v /{ / ) = Y ^ f { v ,w ) = _^c(v,w) = c{X,X').
V X ve.V
ireA' u'eA
{Ui) => (/). Theo Bổ đ \ ,val{f) < c{X, X ) vi mi lu n g / và vi mi lát ct {X, )C).
Vì vy, t đng thc val(f) = cX ,){) suy ra lu n g / là lung cc đi trong mng.
Đnh lý đưc chng minh.
243
Phn 2. Lý ĩỉĩuì d tỉì
7.3. Thut toán tìm lung cc đi trong mng
Đnh 1 là cơ s đ xây dng thut toán lp sau đây đ tìm lung cc đi trong mng:
Bt đu t lung vi lung trên tt c các cung bng 0 (ta s gi lung như vy là lung
không), và lp li bưc lp sau đây cho đến khi thu đưc lung mà đi vi nó không còn
đưng tăng:
Bưc lp tăng lu n g (Ford - Fulkerson): Tim đưng tăng p đi vi lung hin có. Tăng
lung dc theo đưng p .
Khi đã có lung cc đi, lát ct hp nht có th tìm theo th tc mô t trong chng minh
đnh 1. Sơ đ ca thut toán Ford - Fulkerson có th mô t trong th tc sau đây:
p ro c e d u re M ax Flow ;
(* T h u t toán F ord - F ulkerson *)
begin
(* Khi to: Bt đu t lung vi giá tr 0 *)
for u e V do
for V e V do f(u,v);=0;
Stop:=false;
while not Stop do
if <Tìm đưc đưng tání> lung p> then <Tăní lung dc theo p>
else Stop:=true;
end;
Đ tìm đưng tăng lung trong ơy có th s dng thut toán tìm kiếm theo chiu
rng (hay tìm kiếm theo chiu sâu) bt đu t đnh trong đó không cn xây dng
tưng m inh đ th Gf. Ford - Fulkerson đ ngh thut toán gán nhãn chi tiết sau đây đ
gii bài toán lung cc đi trong mng. Thut toán bt đu t lung chp nhn đưc nào
đó trong m ng (có th bt đu t lung không), sau đó ta s tăng lung bng cách tìm
các đưng tăng lung. Đ tìm đưng tăng lung ta s áp dng phương pháp gán nhãn
cho các đnh. M i đnh trong quá trình thc hin thut toán s mt trong 3 trng thái;
chưa có nhãn, có nhãn chưa xét, có nhãn
đ ã xét. Nhãn ca mt đnh V gm 2 phn và có
m t trong 2 dng sau: [+p(v),£(v')] hoc [-/?(v),£(v)]. Phn th nht +p{v) (hoc -p{v))
ch ra là cn tăng (hoc gim) lung theo cung Qy{v), I) (cung (v, p{v)) còn phn th hai
£(v) ch ra lưng ln nht có th tăng hoc gim lung theo cung này. Đu tiên ch có
đnh 5 đưc khi to nhãn và nhãn ca nó là chưa xét, còn tt c các đnh còn li đu
chưa có nhãn. T 5 ta gán nhãn cho tt c các đnh kế vi nó và nhãn ca đnh 5 s tr
thành đ ã xét. Tiếp theo, t mi đnh V có nhãn chưa xét ta li gán nhãn cho tt c các
244
Chươììi 7. Bcìi oán uììs> cực di íroìí^ ỉnọỉĩí
đnh chưa có nhàn k vi nó nhãn ca đinh V tr ihành đã xét. Quá trình sè đưc lp
lại cho đến khi hoc đnh ĩ trở ihành có nhàn hoc nhãn ca tất c các đnh có nhàn
đu đã xét nhưng đnh t vẫn không có nhãn. Trong trưng hp th nht ta tìm đưc
đưng tăng lung, còn trong trưng hp thứ hai di vi lung đang xét khng ln ti
đưng tăng lung (tc lung đã cc đi). Mi khi tìm đưc đưng tăng lung, ta lại
tăng lung theo đưng tìm đưc, sau đó xoá tấl cá các nhãn và đi vi lung mi thu
đưc lại s dng phép gán nhãn các đnh đ tìm đưng tăng lung. Thut toán s kết
ihúc khi nào đi vi lung đang có trong mng không tìm đưc đưng tăng lung.
Hai th tc Tim đưng táng iUng và Táng luong có th mô l như sau.
procedure F ind P ath;
(* Th tc gán nhãn tìm đưng tăng lung
p[v], e[v] nhãn ca đnh v;
Vj - danh sách các đnh có nhãn nhưng chưa xét;
c[u,vj - kh năng thông qua ca cung (u, v), u, V G V;
f[u,v] - lung írên cung (u, v), (u, V V)
begin
p[s] ;= s;
e[s]:=: +co;
Vt = V \s ;
PathFound:=true;
while
0
do
begin
uc= V t ; (* Lày u luV.,-'-')
for V e v \ Vx do
begin
if (c[u, vj > 0) and (l'[u, v] < c[u,vj) then
begin
p[v]:= u;
£[v]:- min e[u]. cfu,vj - f[u,vj;
V j = V-, u j v; (* Np V vào danh sách đnh có nhãn *)
if V = t then exit;
end;
if (c[v,u] > 0) and (f[v, u] > 0) then
begin
p[v]:= -u;
e[v]:= m in e[u], f[v,u] ;
Wj = V,. u IVI; (* Np V vào danh sách đinh có nhãn *)
245
Phn 2. Lý thuyết đ th
if V = t then exit;
end;
end;
PathFound:=false;
end;
procedure Inc_Flow;
(* Tăng lung theo đưng tăng *)
begin
V := p[t]; u:=t; tang:= e[t];
while u s do
begin
if V > 0 then f[v, u] := f[v, u] + tang
esle
begin
v:= -v;
f[u,v]:= f[u,v] - tang;
end;
u:=v; v;==p[u];
end;
end;
Thut toán Ford - Fulkerson đưc thc hin nh th tc:
procedure M ax Flow;
(* Thu t toán F ord - Fulkerson *)
begin
(* Khi to: Bt đu t lung vi giá tr 0 *)
for u 6 V do
for V e V do f[u,v]:=0;
Stop:=false;
while not Stop do
begin
Find_Path;
if PathFound then Inc_Flow
else Stop:=true;
end;
< Lung cc đi trong m ng làf[u,vj, u ,v e V >
< Lát ct hp nht là (Vj, V\Vj) >
end;
246
Cỉìtỉ'i//n^ 7. Bài oán iion^^ C'(' (ĩi ìroir^ lìi'^
Gia s là khá năne tliôna qua cúa tát ca các cuim cúa d ih là các s nguyên. Khi đó
sau mi lần Vnz lunu. uiá tr luổni: sò tãne lên ít nhăì là 1. T đó suy ra thuật toán
Ford - Fuikerson s dừrm sau khng quá vcil) lán nu uim và cho ta lune cc đại
tronu ninu. Đim rhời. r ràne f{t,v) sè !à s nmiyên đói với mi cuns (//. V) G E. T
đó ta có các kết qu sau:
Đ nh 2 (Đnh lý vế liing cc di trong mng vcì lát ct hp nhát), Litìv^ cc di
tron<i nìny hn^ khá năny ĩhông qua Cìa láĩ cá hp nìiĩ.
Đnh 3. (Đnh vé tính nguyên). Nếu ĩấĩ cúc khà năng thông qua lâ ràr
l Liyén íí ì luôn ĩìrn diíc ¡lióììg cc d vi iiìg riì í - ú c cung l à c s nguycn.
Hai đnh va nêu đưc s dune iroỉiu vic niì dnu iune cc đại vào vic siáí quyêì
nhiu bài toán trons t hp.
Tuy nhiên, nếu các khá nãne thnu qua các s râì lóìì thì giá tr cúa lung cc
đi cũne có thế rt ỉớn và khi dó thuật toán mõ tã trn s clòi hi thc hin rt nhiu
bưc tăng lune. Thí d ĩroni; hình 2 sẽ minh ho cho điu này. Hình 2(a) m tá mne
cn xét vi các kh năim ĩhõ n e qua (rên các CLiim. Hình 2(b) m rá ung trên các cung
(s thứ hai bèn cnh cung) sau khi thực hin lang luón dc theo đươim nu lung (s,
a, h, í). Hình 2(c) m ò t L i n a trên các ciiriií sau khi thực hin tănu lunu dc theo
đươnư tãim lunií [s, h, í/, ỉ). Rõ ràne. sau 2AƠ' láii tãnu lung theo đườriiỉ (.V, a. h. /)
(s, b. CL ĩ) mt cách luân phien ta ihu đưc luni> cc đi.
5 5
IC/Mr
\iO^O iCM /
\iO M
/ 1. 1 \
/ 1.0
a \ / b
i0^.1 \ / W
. 0
i o m X j/ lOM
(a) (b)
Hình 2. Ví du tồi t đi với thuật toán Ford " Fulkerson.
(C)
Hơn thế nũ’a, nếu các kh nãnu thông qua là các s vô , ngưi ta còn xây drm
đưc ví d đ cho thut toán khône dừỉìg, và tệ hoTì là nếu dãy các giá tr lung xây
dự theo thut toán hi tụ thi nó còn không hi t đến íziá tr luns cc đại. Như vy.
247
Phún 2. Ly Ịhuyẽí d u
iiìLiòn liLià toán lànì vic hiu qua. vic la chn ờne lăna luóim cn dưc liên liànli
hêt sc cân thn.
Edmonds và Karp clìi ra rániz nếu đưim lãnu lun đưc chn là duniz nuan nliái
ù r .V đến ĩ i r i ì đ th (j . Đu đ có thế thc hin, nếu Iron^ thú IL C tìm dirne UÌIÌ1>
Find_Path mò tá trên, danh sáci \ 'y đưc t clul'c dưi dạna QUEUE (nulìĩa là la llmc
hin tìm đưnn lane bi thú tc ĩìm kiếm theo chiéu rnu) llìì thut loán s kếl thúc sau
khim quá ìii/2 láii s dri đưna íanu liiĩm. Nêìi ci ý rànu, tìm kiếm theo clìiéu
rne Irn đ ĩh clòt hoi llìi man 0(//+///), thì Ihui loáiì íhii đưc s có đ phc tp línli
toán à ()(///// ).
Nli cácì l chúv lìm duoim tănu khéo léo hơn, nuưi la đã xãv dnu dưc llìiti
loán vi đ phc tp tínlì toán tt hơn như; 0(//"//í) (Dinic, 1970), 0(//') (Kai/,i.!iiov.
1974), 0(/Ví/') (Cherkasky, I977j, 0(///7/ loa f) (Sleaior -Tarjan, 1980).
Ta kêì thúc mục này boi ví d minh ho cho tluit toán Ford - Fulkerson sau dây.
Hình 3 (u) cho mạne G CÙHR vi khá nănii ihònii qua của các cuiiíi va luónu iiá t 10
iron nó. Hai s viết bên cnh mi CLinu là khá nãnu thim qua cúa CLiim (s tronu
neoặc) và kin Irên cung. Đường tãnu UÓIÌU c dạne (s. v_,. 1\-. r^,. Vt. t). la tính
đtrc ¿t) = , aiá tr luổne lãng t 10 ln 1 1. Hình 3 (b) cho lunc thu đưc sau khi lăng
kinu iheo đườnu tăne ùm đưc.
Luiig iroim hình 3 (b) đã là cc đi. Lát cl hp nht
|.v. v_,. \\],X^{ ì',. / .
Giá tri lun^ cưc dai là 1 1.
(a)
6 (6.)
0(2) 0(2) '"'-..v,
:4N
Chương 7. Bài toán uí cực di ỉro/ìịĩ ìní^
(b)
(6)
V, /'-'"0(2) V, 0(2)
V3 10(10) V3 4(4) V,
H ình 3. Tăng lung dc theo đưng tăng
7.4. Mt s bài toán lung tng quát
Trong phn này la nêu ra mt sô dng bài toán về lung tng quát mà vic gii chúng
có th dn v bài toán lung cc đi trình bày trên.
a) M ng vi nhiu đim phát và điếm thu.
Xét mng G vi p đim phát s ,
.....và t/ đim thu /|, Gi s rng lung có
th đi t mt đim phát bt kv đến taì c các đim ihu. Bài toán tìm lung cc đi t các
đim phái đến các đim thu có th đưa v bài loán với mt đim phát và mt đim thu
bng cách đưa vào mt đim phát gi .V mt đim thu gi t và các cnh ni s vi tt c
các đim phát và các cnh ni các đim thu với t.
Hình 4 minh ho cho cách đưa mng với nhiu dim phát và nhiu đim thu v
inng ch có mt đim phát và mt đim thu. Kh năng thông qua ca cung ni i vi
đim phát S; s bng +00 nếu không có hn chế vể lưng phát ca đim phát Sị., và nếu
lưng phát ca b hn chế bi h thì cung {s, s^) có kh năng thông qua là h.. Cũng
như vy, đi vi các cung ni t/. với đim thu l, giá tr kh năng thông qua ca {t/., t) s
là gii hn hoc không gii hn tu theo lưng thu ca đim thu này có b gii hn hay
không.
TRR - 17
249
Phn 2. Lý ĩhuyết đ th
L
............
.
Các đim phát Các đim thu
H ình 4. M ng vi nhiu đim phát và thu
Trưng hp mt s đim thu ch nhn "hàng" t mt s đim phát ta có bài toán nhiu
lung là mt bài toán phc tp hơn rt nhiu so V I bài toán lung cc đi gia đim
phát s và đim thu /,
b) Bài toán vi kh năng thòng qua câ các cung và các đnh.
Gi s trong đ th G, ngoài kh năng thông qua ca các cung c{u, v), mi đnh V e V
còn có kh nãng thông qua ca đnh là ¿/(v), và đòi hi tng lung đi vào đnh V không
đưc crt quá ¿(v), tc là
s /(w,v) < d{y).
vve V
Cn phi tìm lung cc đi gia 5 và f trong mng như vy.
Xây dng mt mng G' sao cho: mi đnh V ca G tương ng vi 2 đnh v^, V' trong
G', mi cung (u, v) trong G ng vi cung («', v^) trong G , mi cung (v,w) trong G ng
vi cung (v', vv'*^) trong G'. Ngoài ra, mi cung (v^, v ) trong G' có kh năng thông qua là
d(v), tc là bng kh năng thông qua ca đnh V trong G.
t d,
Hình 5a. M ng G vi kh năng thông qua cung và đnh.
250
Chương 7. Bài toán lung cực di troní mng
u* í!., ư
Hình 5.b. M ng G' tương ng ch có kh năng thông qua trên các cung.
Hình 5. Mng vi kh năng thông qua Irên các đnh và các cung.
Do lung đi vào đnh v"" phi đi qua cung (v"^, I) vi kh năng thông qua í/(v), nên
lung cc đi trong G' s bng lung cc đi trong G vi kh năng thông qua ca các
cung và các đnh.
c) M ng trong đó kh năng thông qua ca mi cung bchn hai phía.
Xét m ng G mà trong đ ó mi cung (u, V) có kh năng thông qua (cn trên ca lung
trên cung) c{it, v) và cn dưi ca lung là d{i( , V). Bài toán đt ra là liu có tn ti
lung tLng thích t .5 đến t, tc là lung {/(«, V& v} tho mãn thêm ràng buc
d{u, V) < f{u, v) < cu, v ) , V {u, V) e £ .
hay không?
Đưa vào mng G đnh phát gi và đnh thu gi và xây dng mng theo qui tc:
Mi cung {u, v) m à d{u, v) 0 s tưcfng ng vi 2 cung (.5,,, v) và {u, t j vi kh nãng
thông qua là d{u, v). Gim c{u, v) đi d{u, v) tc là thay kh năng thông qua ca cung (w,
v) bi c{u, v) - d{u, v) còn cn dưi cu nó đt bng 0. Ngoài ra thêm vào cung (í, s) vi
c, í) =
0 0
.
Hình 6a cho ví d mng G vi kh năng thông qua ca các cung b chn c hai
phía. Đ th G tương ng đưc cho trong Hình (b).
u
Hình 6a
251
Phn 2. Lý thuyết đ th
Hình 6b
H ình 6. M ng vi kh năng thông qua b chn hai phía.
Ký hiu
c/* = ^ d(u,v).
Ta có kết qu sau đây.
Đ nh lý 4. N ếu lung ln nht trong rnng t đến bng cí ĩhì tn ti lung
tương í hích ĩ rong G.
2) Nu lung ln nht roĩí mng t đến r, Ic) khác (f ĩhì khôn^ ĩn ti un^
tương thích trong G.
7.5. Mt s ng dng trong t hợp
Bài toán lung cc đi có rt nhiu ng dng trong vic gii nhiu bài toán t hp. Khó
khăn chính đây là phi xây dng mng tương ng sao cho vic tìm lung cc đi trong
nó s tương đương vi vic gii bài toán t hp đt ra. Mc này s gii thiu mt s bài
toán như vy.
a) B ài toán đám cưi vùng quê, Có m chàng trai mt làng quê n. Đi vi mi chàng
trai ta biết các cô gái mà anh ta va ý. Hi khi nào thì có th t chc các đám cưi trong
đó chàng trai nào cQng sánh duyên vi cô gái mà mình va ý.
252
hiừ/nìị 7. Bíii toán luống cực đi íroii^ miĩ
Ta có íhè xây dng đ th với các đnh biu th các chàng trai và các cô gái, còn
các cung biu th s va ý ca các chàng trai đi với các cô gái. Khi đó ta thu đưc mt
đ th hai phía.
T hí d. Có 4 chàng trai 7|, r ,, r ,, 7'. 5 cô gái |G |, G\, G Ơ4, ơ ,} . S va ý cho
trong bng sau
Chàng trai Các cô gái mà chàng trai unig ý
Ty
Ơ2, ơ Ơ4
T,,
Ơ2, Ơ4
Đ th tương ng đưc cho trong hình 7.
G,
H ình 7. M ng tương 1,'mg vrt Rài toán dám nnt vùng quê
Đưa vào đim phát s và đim thu t. Ni .V với tt c các đình biu th các chàng trai,
và ni t vi tt c các đnh biu th các cô gái. Tt c các cung ca đ th đu có kh
năng thông qua bng 1. Bt đu từ lung 0, ta tìm lung cc đi trong mng xây dng
đưc theo thut toán Ford - Fulkerson. T đnh v tính nguyên, lung trên các cung
là các s 0 hoc 1. Rõ ràng là nếu lung cc đi trong đ th có giá tr = m, thì bài
toán có li gii, và các cung vi lung bng 1 s ch ra cách t chc đám cưi tho mãn
điu kin đt ra. Ngưc li, nếu bài toán có lời gii thì = m. Bài toán v các đm
cưi vùng quê là m t trưng hp riêng ca bài toán v cp ghép trên đ th hai phía mà
đ gii nó có th xây dng thut toán hiu qu hơn.
b) Bài toán v h th ng đi din chung.
Cho tp m phn tx= {Z|, Zj,..., Z,J. Gi s <A, A> và <fi|, B> là hai dãy
các tp con ca tp X. Dãy gm n phn t khác nhau ca X: <|, a
2
,.:, a> đưc gi là h
253
Phn 2. Lý thuyết đ th
thng các đi din chung ca hai day đã cho nếu như tìm đưc mt hoán v ơ ca tp1 1,
2...., n ] sao cho <£/|, Û
2
.....
„> là h thng các đi din phân bit ca hai dãy </\|, Aj,,..,
A> và <5ơ(i), ßa()>> tc là điu kin sau đưc tho mãn: a, e A , n ß„„i , i = 1,
2...., n. Xây dng mng G - {V, E) vi tp đnh
\ / = {5, /) u {X,,X
2
......
x] u {«,, «
2
,..., M,
V2
.....
v,|u {3;,,>-2,...,>'„Ị,
trong đó đnh X cfng l'mg vi tp A, đnh V, tương ng vi tp Bị, các phn t Uj, Vj
cmg ng vi phn t Zj. Tp các cung ca mng G đưc xác đnh như sau
E = { {s,x,): 1 < ; < /í u {{XMj)'. vi Zj e A, 1 </<«, l <y < /r; ¡U
u {(Uj, Vj): ì < j < m \ KJ
{{Vj, y i): v i Zj e ß < i < n, ì < j < m / ) : 1 < / < / ; } .
Kh năng thông qua ca tt c các cung đưc đt bng 1. D dàng thy rng h thng
đi din chung ca hai dãy <A, A
2
,.... A„> và <B¡, B,..., B> tn ti khi và ch khi
trong mng G = {V, E) tìm đưc lung vi giá tr n. Đ xét s tn ti ca lung như vy
có th s dng thut toán tìm lung cc đi t s đến t trong mng G = (V, E).
c) V mt bài toán ti ưu ri rc.
Trong mc này ta s trình bày thut toán đưc xây dng da trên thut toán tìm lung
cc đi đ gii m t bài toán ti ưu ri rc là mô hình toán hc cho m t s bài toán ti
ưu t hp.
Xét bài toán ti ưu ri rc:
= max X y ^ m in (1)
vi điu kin
. / = 1
Xy = 0 hoc 1, 1,2,..., « (3)
trong đó a,jE {0,1}, / = 1, 2 , m\j= ì, 2 , n, Pi -nguyên dương, /=1,2, m.
Bài toán (l)-(3) là mô hình toán hc cho nhiu bài toán ti ưu t hp thc tế. Dưi
đây ta dn ra mt vài ví d đin hình.
Bài toán phán nh óm sinh hot. Có m sinh viên và n nhóm sinh hot chuyên đ. Vi
mi sinh viên biết
a¡j = 1, nếu sinh viên i có nguyn vng tham gia vào nhóm j,
a,= 0, nếu ngưc li,
(2)
254
Chương 7. B¿ii loan ìuón cực đi trong mng
và P là sõ lưng nhóm chuyên đ mà sinh viên i phi tham d, ì = 1,2, m',j- 1,2,
n.
Trong s các cách phân các sinh viên vào các nhóm chuyên đ mà h có nguyn
vng tham gia và đm bo mi sinh viên / phi tham gia đúng P nhóm, hãy tìm cách
phân phi vói sô' ngưi trong nhóm có nhiu sinh viên tham gia nht là nh nht có th
đưc.
Đưa vào biến s
= 1, nếu s'nh \ iên tham gia v ài n h ón j,
X j~ 0, nếu ngưc li,
i = 1, 2 , m,j= 1 , 2 ,/, khi đó d thy mô hình toán hc cho bài toán đt ra chính
là bài toán (!) - (3).
B ài toán lp lch cho hi ngh. Mt hi ngh có m tiu ban, mi tiu ban cn sinh hot
trong mt ngày ti phòng hp phù hp với nó. Có n phòng hp dành cho vic sinh hot
ca các tiu ban. Biết
= 1, nếu phòng hp i là thích hp vi tiu ban j,
a¡j= 0, nếu ngưc li,
i - 1,2, m \ j - 1,2
......
/. Hãy ' trí các phòng hp cho các tiu ban sao cho hi ngh
kết thúc sau ít ngày làm vic nht.
Đưa vào biến s
Xj = 1, nếu b trí tiu ban / làm vic phòng j,
x¡j~ 0, nếu ngưc li,
/ = 1,2, 777, y =1,2, /ỉ, khi đó d thy mô hình toán hc cho bài toán đt ra chính
là bài toán (1) - (3), trong dó p, = 1, / = 1, 2,..., m.
B đ 2. Bài toán (I)-(3) c phương áìì ti ưu khi ch khi
i = (4)
=i
C h n g m inh, Điu kin cn ca b đ là hin nhiên vì t s tn ti phương án ca bài
toán suy ra các bt đng thc trong (4) đưc thc hin ít nht dưi dng du đng thc.
Đ chng minh điu kin đ, ch cn ch ra rng nếu điu kin (4) đưc thc hin thì bài
toán luôn có phương án. Thc vy, gi s điu kin (4) đưc thc hin. Khi đó nếu ký
hiu
l,, =
thì I I+i I > p , , / = 1, 2
......
m. Do đó nếu gi
255
Phn 2. L thuyết đ th
I, c; I l = P i, ; = 1 , 2 , m ,
thì X* = {x*ịj) ,x vi các thành phn đưc xác đnh theo công thc
= 1 , 6 I| , X*i^ = 0 , j I , , / = 1 , 2 , m, (5)
là phương án ca bài toán (1) - (3). B đ đưc chng minh.
Do (4) là điu kin cn đ bài toán (l)-(3) có phương án, nén trong trong phn tiếp
theo ta r. luôn gi thiết rng điu kin này đưc thc hin.
Bây gi ta s ch ra rng vic gii bài toán (l)-(3) có th dn v vic gii mt s
hu hn bài toán lung cc đi trong mng. Trưc hết, vi nii sô' nguyên dương k. xây
dng mng G(k) - (V,E) vi tp đnh
V = {í ư { «,: / = 1,2, m I u ( Wj-.j = 1,2,..., n I u r},
trong đó s là đim phát, t là đim thu, và tp cung
E = {(s,u,) : /-1,2
.....
m] u {(Uị,Wj) : /=1, 2,..., m: j = 1,2,..., n
: =1, 2,..., n .
Mi cung e G E đưc gán vi kh nãng thông qua q{e) theo qui tc sau:
qis.Ui) =Pi. i=
q{U;,Wj) = ũ:j , i = 1, 2 ,..., m ;j = 1, 2 ,..., n;
q{Wj, t) = k,j = 1, 2 ,,.., n.
Hình 8 ch ra cách xây dng mng G(k).
Ký hiu: ơ = ^Pi-
B đ sau đây cho thy mi liên h gia lung cc đi trong mng G{k) và phương án
ca bài toán (l)-(3).
Chương 7. Bài OCÌỈÌ Ỉiỉồỉìi’ cực di íroni nui^
B đ 3. Gi s đi vi sníiiyêìì clirní k nào dó, lnì cc di nguyên tronu, mng
G(k) có ^ i á t r i là ơ. Khi đó X* = (-V*,,),x yi các tlìànli phn đưc xác đnh theo C/Ỉ.
thc
.v*,^ = ' { U , w ^ ) , i = 1 , 2
..........m : , / = 1 . 2
.............
n .
là phươií án ca bài toán (l)-(3).
Chn«, m inh. Thc vy, do lung cc đai trong mang có giá trị ơ và là lung
nguyên nên
= Pi , i - 1 ,2 ......m,
'{u,,Wj) e jO, 1 ị, / = 1,2,..., m; j = 1, 2
......
n.
t đó suy ra
= Pn i =
y = l y = l
Vy )C là phương án ca bài toán (l)-(3). B đ đưc chng minh.
B đ 4. Gi sC -- {x',,) là phương án ti lũi và k' là giá tr ti lũi ca hài toán (1 )-(3).
Khi đ lung cc đi trong mng G{k*) có giá tr là ơ.
C h n g m inh. Do giá tr ca lung cc đi trong mng G(k*) không vưt quá ơ, nên đ
chng minh b đ ta ch cn chí ra lung với giá tr ơ trong mng G{k'). Xây dng
lung * theo công thc sau;
\s M i) = Pi, \u W j) = .x*^j,
ni
i = ì,2 ,-,m , j = 1,2,.,.,/7.
/=!
D dàng kim tra đưc rng là lung trong mng G{m) có giá tr ơ. B đ đưc
chng minh.
B đ 5. Nếu k = m thì lung cc đi trong mng G{m) có giá tr là ơ .
C hng m inh. Lp lun tương t như trong B đ 4, ta ch cn ch ra lung vi giá tr ơ
trong m ng G{m). Thc vy, gi sx* = là phương án ca bài toán (l)-(3 ) xây
dng theo công thc (5). Xây dng lung theo công thc ging như trong chng
minh b đ 4, ta có lung vófi giá tr ơ. B đ đưc chng minh.
257
Phn 2. Lv thuyết đ th
T b đ 3 và 4 suy ra vic gii bài toán (1) - (3) dn vế vic tìm g il-tr k* nguyên
dương nh nht sao cho lung cc đi trong mng Ơ(:) có giá tr ơ. B đ 5 cho thy
giá tr k* e [1, m]. Vì vy đ gii bài toán (1) - (3) ta có th áp dng phương pháp tìm
kiếm nh phân trên đon [1, m] đ tìm giá tr k \ trong đó mi bưc cn gii m t bài
toán lung cc đi. Đ gii bài toán tìm lung cc đi trong mng có th s dng các
thut toán đa thc như đã nói trên. T đó suy ra kết qu sau
Đ nh lý 5. Bài ĩoán (l)-(3) gii đưc nh thut toán đa thc vi ĩhi gian tính là Ì
0
g
2
m
X , trong đó Of^. là thòi gian ĩínl ca ĩhut toán gii bài toán tìm luong cc đi
íroig mnG{k)
258
Chương 7. Bài toán ung cực đi trong mng
Bài tp
1. Xét mng cho trong hình v sau. các s bên cạnh các cung là khá năng thòng qua ca
Thc hin thut toán Ford-Fukerson tìm lun g cc đi trên m ng đã cho bt đu t lu ng 0.
Trình bày các kết qu tính toán trong m i bưc lp bao gm :
Đ th lãng lung,
Đ ư ng tăng lu ng tìm đưc theo tìm k iếm theo ch iu rng và kh năng thôn g qua ca
nó (G i thiết khi duy t các đnh k ca m t đnh ta duyt theo th t tăng dn c a ch
số),
M ng cù ng lung thu đưc sau khi tăng lu ng.
Kết qu cu i cùng; Cn đưa ra g iá tr ca lung cc đi và lát ct hp nht
2. Cho G - (V, E) đ th có hưng trong đó không có cung {s, t). Chng minh rng s
đưng đi cơ bn ni hai đnh và t là bng s ít nht các đnh ca đ th cn loi b đ
trong đ th không còn đưng đi ni 5 vi ĩ.
3. Xây dng thut toán tìm tp E tt c các cung ca đ th mà vic tăng kh năng
thông qua ca bt k cung nào trong E đu dn đến tăng giá tr ca lung cc đi trong
mng.
4. Cho hai dãy s nguyên dương {P, /-1 , 2,..., m\ và qj, j= l, 2,..., n\. Hãy xây dng
ma trn A = aj : /=1, 2,..., m; j= l, 2,..., n] vi các phn t ãj G jO, 1 ì có tng các phn
t trên dòng i là /?,, tng các phn t trên ct j là cj.
5. Có m chàng trai, n cô gái và k bà mi. Mi bà mi p {p= ì, 2,..., k) có mt danh sách
mt s chàng trai và cô gái trong s các chàng trai và cô gái nói trên là khách hàng
ca bà ta. Bà mi p có th se duyên cho bt c cp trai-gái nào là khách hàng ca bà ta,
nhưng không đ sc t chc quá đám cưi. Hãy xây dng thut toán căn c vào danh
sách p = 1, 2,..,, k, đưa ra cách t chc nhiu nht các đám cưi gia m chàng trai
và n cô gái vi s giúp đ ca các bà mi.
259
Phn 2. Lý thuyết đ th
6. B à ijo à n ph đnh nh nht: Cho đ th vô hưng G = (V', E) vi trng s trên các
đnh c(v), V V. Mt tp con các đnh ca đ th s đưc gi là ph đnh nếu như mi
cnh ca đ th có ít nht m t đu m út trong s. Trng lưng ca ph đnh s là tng các
trng s ca các đnh trong nó. Bài toán đt ra là tìm ph đnh có trng lưng nh nht
(mà ta s gi là ph đnh nh nht). Hãy ch ra cách qui dn bài toán tìm ph đnh nh
nht trên đ th hai phía v bài toán lung cc đi.
7. Cho đơn đ th vô hưng G = (V', E). Gi s 5, t là hai đnh ca đ th. S dng
thuvết lung cc đi trong mng chng minh khng đnh sau: "S lưng ln nht các
đưng đi đôi mt không có cnh chung ni hai đinh s và t là bưng s cnh ít nht cn
¡oi b khi đ th G đ không còn đưng đi ni s và f \
8. Bài toán ghép cp trên đ th hai phía: Cho đ th hai phía G = (XuY, E). Mt tp con
các cnh ca đ th đưc gi là mt cp ghép nếu như hai cnh bt k trong nó không
có đnh chung. Bài toán đt ra là tìm cp ghép có lc lưng ln nht ca G. Hãy ch ra
cách qui dn bài toán đt ra v bài toán lung cc đi trong mng.
9. X ây dng hình ch nht latinh. Hãy ch ra cách xây dng hình ch nht la tinh cp
m xn {m < n) nh s dng thut toán tìm cp ghép ln nht trên đ ih hai phía.
260
PHN III
HÀM ĐI S LOGIC
Chương . M dầu
1
M ĐU
1.1. MÔ hình x lí thòng tin và hàm đại s lôgic
Trong nhiu vn đ, ta thưòìig gp mt mô hình x thông tin dng đơn gin, gm mt
đu vào và môt đu ra:
Vào
X thông tin
Ra
Đu vào và đu ra ly giá tr từ nhng tp hu hn X và Y. Ta xem mô hình hot đng
trên mt trc thi gian đưc phân chia thành nhng thi đim ri rc. Ti thi đim t,
tín hiu vào là ,r, e X và tín hiu ra là y, G Y. Gi thiết rng mô hình hot đng không
nh, tc là tín hiu ra ti thi đim t ch ph thuc vào tín hiu vào ti thi đim đó.
Như vy, có th mô t s hot đng ca mô hình bng mt hàm f:X^Y, trong đó J =
f{x) là tín hiu ra tương ng với tín hiu vào X.
Trong k thut điu khin tự đng, các tín hiu thưng đưc truyn đi và chế biến
dưi dng ch có 2 giá tr, mà ta s ký hiu là 0 và 1. Vì vy có th xem X như tp hp
E" và Y như tp hp E"', trong âó E = {0, 1 (vi n và m đưc chn thích hp). Mi
263
Plĩn 3. Hàm đi sô'ỉõgic:
phn t.v e X có dng X = Gr,, Xj, A') và mi phn t>'e Y có dng V = {}[ v,,..., v,)
trong đó ,v,, >, e E.
Mt h àm /: X ^ Y đưc phân tích thành mt h m hàm
>'l = / l U |.-^'2
............
o
>2 '^2. 'O
y,=L,i-^u^2' -O
Mi hàm =/(.V|, A'jr --, x) có các đi s nhn giá tr 0. 1 và hàm cũng nhân các giá tr
0, l . M t hàm như thế đưc si là mt hàm đi s logic.
Đ nh nghĩa. M t hàm đi sô 'logic ca n đi sô'là m t ánh x E" E.
M t hàm đi sô' logic thưng đưc xác đnh bng bng giá Ir ca nó, nghĩa là Irong
đó lit kê tt c các nh ca các b đi sô' có th có. Thí d bng dưi đày xác đnh mt
hàm đi sô' logic 3 đi s:
Xi
^'^2
f(Xi,X
2
,Xj)
0 0 0 0
0 0
1
0
0 1 0 1
0 1 1 1
1
0
0 1
1
0
1 1
I 1
0 0
1 1
1
1
H ình 1
Vì I £" I = 2" và I £ I = 2 nên s các hàm đi s logic ca n đi s là 2^ , chng hn
vi /7 = 3, con s này là 2** = 256.
M t hàm đi sô' lôgic J = x) đưc gi là ph thuc thc s vào đi s X, nếu
có 2 b giá tr ca đi s ch khác nhau mt thành phn th ; m à giá tr ca hàm ti 2 b
này là khác nhau.
Không phi mi hàm đi s logic ca n đi s đu ph thuc thc s vào c n đi s
ca nó. Chng hn các hàm hng y = 0 hay y = không ph thuc thc s vào đi sô'
nào c. Gi A là s tt c các hàm đi s logic ph thuc thc s vào n đi SG. Khi đó
d dàng tính đưc /4 theo h thc truy hi dưi đây:
264
Chương 1. M đâu
Ao = 2 ,
A = 2^"
Thông thưng, vic mã hoá nh phân tp X b dư tha, nghĩa là có mt s phn t ca
X ti đó hàm / không xác đnh (chng hn nếu X có 6 phn t thì khi mã hoá nó bng
tp E \ ta tha 2 phn t). Mt hàm / : M -> £ , với M là mt tp con thc s ca E"
đưc gi là mt hàm đi s logic không đy đ và tp con M đưc gi là m in xác đnh
ca nó. Rõ ràng ti nhng nơi m à / không xác đnh, ta có th cho nó mt giá tr (0 hoc
1) tu ý đ dưc mt hàrn đi sô' lôgic dy o. Nói cácn khác, VI mi hàin đi s logic
không đy đ /c ó min xác đnh M , luôn xâv dna đưc mt hàm đi s lôgic đy đ F
đ =/CV|,...,a') vi mi (x
.....
,A') G M. Hàm F như vy đưc gi là hàm phu
ca h àm /. D thy rng, s lưng các hàm ph / bng 2*, trong đó : = 2" - 1 M I.
1.2. Các hàm đi s logic sơ cp
Dưi đây ta s xét c th các hàm đi s logic ph thuc thc s vào n đi ' vi n < 2.
Các hàm này đưc gi là các hàm sơ cp.
a) n = 0: có 2 hàm là hàm hng 0 và hàm hng 1.
b) n - \'.C
2
hàm cho bi bng
' 1
X
f, L
0
0
1
1
1
0
H àm / 2(A) đưc gi là ph đnh ca X và đưc ký hiu là 1 X hay X
c) « = 2: có 10 hàm cho bi bng
X
81 '2 84
85
&
c?7 &
89 810
0 0 0 0 0
1
1 1
1 1
0
0
0 1 0 1
1
1 0 0 1
0
1 0
1 0 0 1 1 0 0 0 1
1
0
1
1 1 1 I
0
1 1
0 0
1
0
0
trong đó có mt s hàm thông dng như sau:
hàm gix, y) đưc gi là hi (hay tích) ca X y, ký hiu là X & J hay x., xy
hàm gjix, y) đưc gi là tuyn ca .V và y, ký hiu XV y
hàm gjCr, >>) đưc gi là tng (theo modun 2) ca X và y, ký hiu là X + y
hàm gx, y) đưc gi là hàm kéo theo, ký hiu X -^y
TRR - 18
265
Phán 3. Hàm đi slôqic
hàm y) đưc gi là hàm tương đương, ký hiu A' <=>
hàm gf,{x, y) đưc gi là hàmVebb, ký h iu x o
hàm gy{x, y) đưc gi là hàm Sheffer, ký hiu X I y
Quan trng nht là các hàm tuyn, hi và ph đnh. Chúng tương ng vi các phép
toán "hoc", "và", "khng" trong đi s mnh đ, trong đó giá tr 1 ng vi "đúng" và
giá tr 0 ng vi "sai". D thy rng các tính cht dưi đây ca các hàrn tuyn, hi ph
đnh đưc suy t các tính cht quen thuc ca đi s mnh đ (hoc cũng có th suy
t bng giá tr):
Kết hp
XV iy V z) = ( x v y) V z - X V >' V z,
X & (v & 7.) = {.X & y) & z = X &. y &. z.
Giao hoán
X V y = y \/ X,
X & V = y & X.
Phân hô'
x v {y & z) - (x\/ y) & { x v z),
X & V z ) = (Jt & _y) V (x & z).
Đ i ngu
X v y = X & y.
X & = X V y.
Trong k thut, các hàm tuyn, hi, ph đnh đưc thc hin nh nhng linh kin
đon gin. M c trình bày dưi đây khng đnh rng, mi hàm đi s lôgic đu có th
đưc xây dng t nhng linh kin đcm gin này.
1.3. Biu din các hàm đi s logic
qua h tuyến, hi và phú đnh
Đ tin trình bày, ta đưa vào quy ưc sau đây: gi s X là m t biến và ơ- e {0, 1 Ị. Khi
đó
X, nếu ơ= 1,
X, nếu cr= 0.
T đnh nghĩa trên d thy
266
Ch ươn 1. M đầu
,y'^= 1 .x-=ơ-.
Gi s I / ; / / là mt h các hàm đi s logic. Ta s dùng ký hiu
V / và & /;
i e E
đ ch tuyn và hi ca tt c các hàm này, nói riếng nếu / = {/, 2,..., m }, thì ta s dùng
các ký hiu
nì m
V ' / & /
Í = 1 í' = 1
đ thay thế. Ta cũng quy ưc ràng nếu / là tp rng thì
V / = 0 và & / = 1.
; e / / e /
Vi mi hàm fix,,..., x j , ký hiu Tf là tp
Tj-= |(.v
.
Vje£":/(A-...............A-) = 1
và gi nó là tp đc trưng ca /. D dàng chng minh tương ng gia hàm đi s logic
vi tp đc trưng ca nó là tương ng 1-1 và có các tính cht:
T j = , 7 } u 7 ^ ,, = 7 } n
Điu này cho phép chuyn các chng minh trên đi s logic sang các chng minh tương
ng trên đi s tp hp.
Định lý. M i hàm đi sô' lôíÌc f{.\
.......
x) đéii có th đưc biu din dưi dng:
f u
......
-O = V /(cr,,cr,,...,ơ ,,x,.^,,...,x )
(CT|
.....
ơ) G E'
trong đ i là s t nhiên bt k, < i < n.
Chng minh. Gi s (X|,...,.vJ e Tj^, khi đó s hng ng vi b giá tr Ơ-, = X, ơị =
x¡ trong tuyn vế phi
x ' . . .
s bng 1, điu này kéo theo toàn b vế phi s bng 1. Ngưc li, nếu vế phi bng 1,
thì phi xy ra bng 1 ti mt sô' hng nào đó, chng hn ti s hng ng vi b giá tr
(ơi,...,o;), Khi đó X| = ơ|,X, = ơ; và (x
......
x) e 7}. Đnh lý đưc chng minh.
Cho / = 1 trong đnh và nhn xét rng vai trò ca các biến X là như nhau, ta đưc:
267
Phn 3. Hàm đi slôgìc
H qu 1, H àm đi s logic có th đưc khai trin theo m t đi s x,:
V x , / ( x . . . , x ,, 1,
.....
x)
Cho / = n trong đnh lý và b đi các nhân t bng I trong mt tích, ta đưc:
H q u 2, Hàm đi s ¡ôgicf{x,...,x) có th đưc khai trin dưi dní:
fix
......
x) V x p . . . x ; "
(ơ ,
.....
ơ ) e T
Công thc khai trin này còn đưc gi là dng tuyn chun íc hoàn loàn ca / và
mi s hng ca nó đưc gi là m t cu to đơn vị c a/.
T h í d . Dng tuyn chun tc hoàn toàn ca h à m /c h o bi bng hình 1 là
X3) = X X2 X3 V X| X-, V X X2 X V X X2 X3 V .V, X2 -'^ .v
T h qu 2, ta nhn đưc khng đnh sau đây: M i hàm đi sô' logic đu có th xy
dng t các hiến nh các hàm tuyn, hi và ph đnh.
Bng lut đi ngu, ta có th chng minh mt kết qu tương t bng cách thay phép
tuyn bng phép hi và ngưc li, t đó dn đến vic biu d i n / qua mt hi các tuyn.
Biu din này đưc gi là dng hi chun tc hoàn toàn c a/. Chng hn, trong thí d
va nêu, dng hi chun tc hoàn toàn ca/ là
/ ( x , , X2, X3) = (X |V ^2 V ^3 ) & (X |V X2 V X3 ) & ( X, V ^2 V X3 ).
Ngoài hê tuyn, hi và ph đnh, tn ti nhiu h khác cũng có tính cht mi hàm
đi s lôgic đu đưc biu din qua các thành viên ca h. M t h hàm như vy đưc
gi là m t h đy đ. Chng hn có th chng minh các h
{0, l , x + y,X&};}, {x,xv j} , {jr, {xl}'), jto
đu là nhng h hàm đy đ.
Vic nghiên cu tính đy đ ca m t h hàm có m t ý nghĩa thc tin quan trng, nó
tr li câu hi có th xây dng m i hàm lôgic t m t s hàm đơn gin chn trưc hay
không? V vn đ này. Post đã thc hin mt cách h thng t năm 1921, bn đc có
th tìm hiu mt cách chi tiết qua cun sách tiếng Nga "Hàm đi s logic và các lp
Post" xut bn năm 1966 ca các tác gi S.B.Iablonski, G.p. Gavrilov, V.B.Kudriavcev.
268
Chương !. Mà đu
1.4. Biu din ti thiu ca hàm đại sô logic
Biu dir. m t hàm đi s logic / qua m t h hàm đy đ H là không duy nht. Thí
d hàm Sheffer, khi biu din qua h tuyn, hi và ph đnh, có th có các cách
XI > - x y v x y v x y = XV .
Mi mt biu din / tương ng vi mt cách "ghép" các thành viên ca H (m à ta gi là
cic yếu ' cơ bn) đ th'1 đư c/. Hin nhiên, mt vn đ có ý nghĩa thc tế qu?.n trng
là, cn ĩìm mt biu din sao cho vic ghép như thế là !n ít yếu tô' cơ bn nht. Theo
mt nghĩa nào đó, điu này dn v vic tìm mt công thc trên h H biu din hàm /
vi s ký hiu các yếu t này là ít nht. Mt công thc như vy, dưc gi là mt biu
din ti thiu ca h à m / trong h H.
V nguyên tc, s công thc biu din / là hu hn, nên bng cách duyt tt c các
kh năng, ta luôn tìm đưc biu din ti thiu c a /. Tuy nhiên, s kh năng này là rt
ln và vic duyt nó đòi hi mt khi lưng tính toán khng l, do đó trên thc tế khó
mà thc hin đưc dù rng ngay c vi nhng siêu rnáy tính.
Vic xây dng nhng thut toán hu hiu tìm biu din ti thiu ca các hàm đi s
logic, thế càng tr nên cp bách nhưng đng thi nó cũng là bài toán rt khó. Cho
đến nay, bài toán này vn chưa đưc gii quyết tho đáng ngay c trong mt s trưng
hp đcm gin và còn đang đưc tiếp tc nghiên cu.
Mt h đy đ đưc nghiên cu nhiu nht là h tuyn, hi và ph đnh. Bài toán tìm
biu din ti thiu ca các hàm đi s lôgic trong h này đã đưc nghiên cu nhiu
trong vài chc năm gn đây. Tuy nhiên, các kết qu đt đưc thưng mi ch đ cp
đến mt dng biéu din riêng bit trong h, đó là dng tuyn chun tc ca các hàm đi
s logic m à ta s xét k trong chương sau.
269
Phan 3. Ham dgi so logic
Bai tap
1. Xet cac ham dai so I6gic 3 d6'i s
, 6
f{x, y, z). Cho t^p dac trung 7} . Xac dinh dang
tuyen chuin tac hoan loan ciia/:
a)T ^= ((0, 1 1),(1,0,0),(1, l,0)i
b) T^= 1(0, 0, 1), (0, 1, 1), (1. 0, 0), (1, 0, 1), (1,1,1)}
c)7>= {(0, 0, 0 ),(1 , 1, 1), (0, 1, 1),(1,0, 0)1
2. Co bao nhieu ham dai so logic 3 ddi so ma tap dac trung T^cua no c6 5 phan ti!r? Khai
quat hoa; c6 bao nhieu ham dai so logic n doi so ma iap dac trung T^CLia no c6 k (k <
2
")
phan til?
3. Tim dang tuyen chuan tac hoan toan ciia cac ham dudi day:
a) fix , }>) = .r + J (ham cong modun 2)
b)/(.v, y) = x o y (ham Vebb)
c)/(.v, y) = x \ y (ham Sheffer)
d)/(.r,>', z) = (XV j ) & z
e)/(x, y,z)^x\/ yw z
f)f{x, y, z) = (x & j ) V (x & z) V (y & z)
g)/(x , y,z) = (x\y)oz
4. Ham dai so logic /(x, y, z) nhan gia tri 0 tai (0, 0, 0). Neu thay doi gia tri bat cii doi so
nao cua no thi gia tri cua ham cung thay doi (so v6i gia tri truoc da'y). Tim dang tuyen
chu^n tac hoan toan ciia/.
5. X et xem cac ham /, g du6i day khac nhau hay bang nhau;
a)f(x,y,z) = ix&y)v z
g{x, y,z)-{ x\/ yw z)& (xv y\/ z)& (xv> ’v z)
b)/(x, y,z) = ix\y)oz
g(x, y,z) = x&(y + z)
6. Chung minh cac he ham sau day la he day dii:
{0, 1,X+ J,X&)'), { x,xv>>},{ x,x& j}, (xlj), ¡xoj}
7. Bieu di6n ham /(x, y) = x v y qua cac he ham:
a) { x,x&y)
b) {xl>>)
c){xo>}
270
Chương 2. Dng tuyn chun ĩc ca hàm đi sgic
2
DNG TUYN CHUn TC
CA HÀM ĐAI S LÔGIC
2.1. Các khái nim c bn
Gi s cho n biến X. X
2
,x. Mt biu thc dng
cr, Ơ-J cr,
X.. 'x ,. ^ ..x . '
/,
trong đó CT|,..., Ơ J e |0, 1), 1 < /|, ij < n va i, nếu t às đưc gi là m t hi sơ
cp ca n biến X|, x.
S các biến xut hin trong mt hi sơ cp đưc gi là hng ca hi sơ cp đó.
Chng hn, hi sơ cp ,V| X, X4 có hng 3 , hi s ơ cp X
2
X x , x-j c ó hng 4 .
Gi s /(.V,,..., x) là mt hàm đi s lôgic. M t công thc biu d i n /d ư i dng
tuyn ca mt s hi sơ cp khác nhau ca các biến A'|, x đưc gi là mt dng
tuyn chun tc ca hàm đó.
271
Phn 3. Hàm đi ' logic
Thí d 1.
x y V X y là m t dng tuyn chun tc ca hàm X + y.
x v y va x y \ / x y v x là các dng tuyn chun tc ca hàm Sheffer .V I V.
D thy rng, dng tuyn chun tc hoàn toàn c a / là dng chun tc duy nht ca
/ mà trong đó mi hi sư cp đu có hng n. Mõi hi sơ cp (hng n) trong dng luyn
chun tc hoàn toàn c a / đưc gi là mt cu to đcíri v c a/.
Ta gi đ phc tp ca mi dng chun tc là sô' các ký hiu biến xut hin trong
dng chun tc đó.
Thí d 2.
X y V XV V X y có đ phc tp là 6,
X V y có đ phc tap là 2.
Dng tuyn chun tc ca / có đ phc tp bé nht đưc gi là dng tuyn chun
tc ti thiu ca/. Dng tuyn chun tc ti thiu, theo mt nghĩa nào đó, tương ng vi
m t sơ đ ti thiu (thuc mt loi nht đnh) thc hin /. Nhng phn tiếp theo ca
chưcmg này, gii thiu mt s phương pháp tìm dng tuyn chun tc ti thiu ca mt
hàm đi s logic.
Ta đưa thêm mt khái nim quan trng sau đây.
Gi s x) là mt hàm đi s logic. M t hàm g{X,..., x„) đưc gi là mt
nguyên nhân (implicant) c a / nếu là tp con ca 7jr, nói cách khác, nếu ig ->f)= I
(vì th ế có tên gi là nguyên nhân).
D dàng thy rng mi hi sơ cp trong mt dng tuyn chun tc ca / là mt
nguyên nhân ca /.
Xét mt hi sơ cp A. Vic xoá bt mt biến trong nó làm tp đc trưng ca nó
"n" ra. Điu đó khiến cho, nếu trưc đó A là mt nguyên nhân c a /, thì sau khi xoá
mt biến, A có th không phi là nguyên nhân c a / na. M t hi sơ cp A đưc gi là
mt nguyên nhân nguyên t c a/, nếu A là mt nguyên nhân c a /, sao cho không th
xoá đi bt c biến nào trong nó (cùng vi du ph đnh nếu có) đ A vn còn là nguyên
nhân c a/.
Thí d 3.
xy \. X y là các nguyên nhân nguyên t ca hàm X + y.
X M. y là các nguyên nhân nguyên t ca h à m X 1 y nhưng các hi X , xy ,
X y không phi là các nguyên nhân nguyên t ca nó.
772
Chương 2. Dọỉìiị ỉuvểỉì chun tc ca ìàì đi slôíÌc
2.2. Dng tuyn chun tc thu gn
Đ nh lý 1. Tuyn ca mĩ s hcít k cúc n^uén ìluvì ca hàm f cung là mĩ nguyên
nhân ca hàm đó,
C h ng m inh . Tp đc trưng ca tuyn này là hp cúa các tp đc trưng ca các nguyên
nhân đang xét, vì thế nó cũng là tp con ca tp đc trưng ca hàm /
Đnh !ý đirc chn;y minh.
Gi s 5 là mt h các nguyên nhân c a/. Ta nói rng h s ià đy đ nếu vi mi
giá tr ơ e luôn tìm đưc ưit nguyên nhân i thuc h đ ơ e T^.
Đ nh lý 2. Gi s S m t h dy đ các nguyên nìán ca hàmf. Khi đó tuyn ca ĩt
c các nguyên nlĩán trong s s trùng v if (ta cùng ni ĩuyn này thc hinf).
C hng m inh. T đnh nghĩa ca n đy đ, ta nhn đưc
^ T. = Tf
nhưng vế trái ca đng thc trên chính là tp đc trung ca tuyn -iHng xét. T đó nhn
đưc đnh lý.
Đ nh lý 3. Tuyn ca tt c các nguyên nhân nguyên t ca hàm f là thc lìin f. Nói
khác đi, h các nguyên nhân nguyên tô'ca f Ici mt h đy d.
C hng m inh. Đ chng minh đnh lý, ta s chng minh răng
U 7 , = r ,
g e S
trong đó 5 là h các nguyên nhân nguyên tô' ca/.
Vì s gm các nguyên nhàn ca /n ê n vế trái ca đng thc trên là tp con ca vế
phi. Ta ch cn chng t điu ngưc li. Tht vy, gi S' là h các cu to đơn v c a/,
ta có (dng luyn chun tc hoàn toàn của/):
u T , = T,
g '^ S '
Xét g' e s \ nếu ' không phi là nguyên nhân nguyên t ca /, thì bng cách xoá
bt mt s biến (cùng vi du ph đnh nếu có) trong g \ ta thu đưc mt nguyên nhân
nguyên t c a /. Gi nguyên nhân này là g ( G 5). Rõ ràng T^. là tp con ca T^. T đó
nhn đưc
u T , = T, c u r ,
273
Phân 3. Hàm di so logic
g 'e S ' g e S
hay
<?e s
và đnh đưc chng minh.
Tuyn ca tt c céic nguyên nhân nguyên t ca/'đư c gi là dng tuyn chun tc
thu gn c a /. Vì tp hp các nguyên nhân nguyên t ca/là hoàn toàn xác đnh, nên
dng tuyn chun tc thu gn ca nó là duy nht.
Chú ý rng, dng tuyn chun tc thu gn ca mt hàm đi s lôgic, nói chung còn
khác xa vi dng tuyn chun tc ti thiu ca hàm đó. Chng hn, hàm (x + }0 V z (.V
V y) có dng tuyn chun tc thu gn là
X y X y V X z V y z ,
nhưng m i dng chun tc ti thiu ca nó
X V X y V A' z.
Mc dù dng tuyn chun tác thu gn chưa phi là ti thiu, nhưng vic tìm nó,
như trong nhng phương pháp trình bày dưi đây, là m t bưc trung gian quan trng
trong quá trình tìm dng tuyn chun tc ti thiu.
2.3. Dng tuyến chun tc nghn
và dng tuyên chun tc tô1 thiu
Mt h nguyên nhân nguyên t ca h à m /đ ư c gi là mt h nghn, nếu nó đy đ và
không mt h con thc s nào ca nó là đy đ. Nếu s là m t h nghn ca/ thì tuyn
ca các thành viên trong s s thc h in /. Tuyn này đưc gi là dng tuyn chun tc
nghn c a/. Nói khác đi dng tuyn chun tc nghn c a / là m t dng tuyn chun tc
gm các nguyên nhân nguyên t c a /, thc hin/mà không th b bt đi mt s hng
nào đ vn thc hin đưc/.
Chú ý rng, dng tuyn chun tc nghn ca mt hàm đi s lôgic là không duy
nht, chng hn hàm
f{x, y, z) = x vxyvxzvyz
có hai dng tuyn chun tc nghn
X y V X y V X z và X y V X y V y
274
Chương 2. Dng tuyn chun tc ca hàm đi sôgic
Đ nh lý 4. M/ dng tuyn chiỉcỉn ĩc ti tììiii ca m t hàm đi s logic f đu Ic mt
dng íityn chun tc nghn ca hàm đó.
C h ng m inh. Đ chng m inh đnh lý, ta ch cn chng t rng nếu p là mt hi sơ cp
ca mt dng tuyn chun tc ti thiu c a /, thì p phi là mt nguyên nhân nguyên t
c a/.
Gi s p không phi là nguyên nhân nguyên t c a /. Khi đó, bng cách b đi mt
s DÌến (cùng vi du ph đnh nếu có), ta luôn lìm đươc mt phn con thc sư q ca
p, đ C là mt nguyên nhân nguyn t c a/. Gi p w p là dng tuyn chun tc ti thiu
c a / {P là m t tuyn ca mt s hi sơ cp nào đó). Thay p bi q trong tuyn này, ta
nhn đưc q \/ p cũng là m t dng tuyn chun tc c a /. Điu này mâu thun vi tính
ti thiu ca p V p , và đnh lý đưc chng minh.
Chú ý rng, điu ngưc li ca đnh lý 4 là không đúng: có nhng dng tuyn
chun tc nghn m à không phi là dns tuyn chun tc ti thiu, thí d hàm
fix, y, z) = (x + y) V ( x + z )
CÓ m t d n g c h u n tc n g h n là
X z V .V _y V .V 3^ V .V z ,
nhưng đó không phi là ti thiu, mt dng như thế c a / là
X z V A' y V y z.
Đnh 4 cho thy rng, đ tìm dng tuyn chun tc ti thiu, ta ch cn xét các
dng tuyn chun tc nghn. M à d tìm các dng tuyn chun lc nghn ihì cn biết
dng tuyn chun tc thu gn, Đó cũng là cơ s cho cách tìm dng tuyn chun tc ti
thiu trình bày trong chương sau.
275
Phán 3. Hàm đi s logic
Bài tp
1. Cho hàm đi s lôgic/Or, z) xác đnh bi bng:
y
z
f(x, y, z)
0
0
0 0
0
0 1
0
0
1
0
1
0 1 1 1
1
0
0
1
1
0
1
0
1 1 0
0
1 1 1 0
a) Lit kê tt c các nguyên nhân c a /, trong đó mi nguyên nhân đưc viết
dưi dng tuyn ca m t s hi sơ cp. Sô' lưng ca chúng là bao nhiêu (k c tuyn
rng và tuyn chun tc hoàn toàn)?
b) Xác đnh các nguyên nhân nguyên t trong các nguyên nhân đã tìm.
2. Cho hàm đi s lôgic n đi s. Biết dng tuyn chun tc hoàn toàn ca nó gm k hi
sơ cp. Đếm tt c các nguyên nhân ca hàm đã cho.
276
Chương 3. Thut toán lìm dng tiivển cìuỉẩỉì tắc ĩối thiu
3
THUT TOÁN M DNG TUYN
CHUN TC TI THlu
3.1. Chú ý m đu
T nhng cơ s lý thuyết đã trình bày trong chương 2, ta có th chia quá trình tìrn
dng tuyn chun tc ti thiu ca mt hàm đi s lôgic /(.V ,, x ) thành 2 giai đon:
a) Xut phát t dng tuyn chun tc hoàn toàn ca/, tìm dng tuyn chun tc thu
gn ca/.
b) Xut phát t dng tuyn chun tc thu gn c a /, tìm các dng tuyn chun tc
nghn c a / và la chn t các dng này đ đưc các dng tuyn chun tc ti thiu ca
/
Vì dng tuyn chun tc thu gn ca/là duy nht, nên giai đon a) hoàn toàn xác
đnh. Trái li, giai đon b) cn phi xây dng các dng nghn t dng rút gn, sau đó
la chn trong chúng đ đưc dng ti thiu. S các dng nghn ca mt hàm đi sô'
277
Phn 3. Hàm đi slôgc
lôgic có th rt ln, điu này làm cho vic la chn tr nên khó khăn, nhiu khi không
khác my so vi vic "la chn toàn b". lablonski đã xây dng đưc nhng hàm đi s
lôgic/(X |,..., X,) m à s các nguyên nhân nguyên t ca nó ln gp 2"^^ ln s các hi sơ
cp trong dng tuyn chun tc hoàn toàn c a/. Glagolev chng minh rng, đi vi hu
hết các hàm đi s
gic/của n đi s, s các dng tuyn chun tc nghn ca / là
2
^{\-e)
vưt quá 2 , trong đó 6^ -> khi n 00, luravliev đưa ra mt thí d đcm gin
sau đây: khi /7 > 3, hàm
/ u ,
......
-v„) = [(.r, + x,) V (X2 + -r,)] (x, + ... + .v)
4
có 5 dng tuyn chun tc nqhn.
Như vy, v nguyên tc, vic tìm dng tuyn chun tc ti Thiểu l dng tuyn
chun tc thu gn đòi hi phi tiến hành nhng s la chn phc tp. Tuy nhiên, các
phương pháp đưc trình bàv dưi đây, mc dù nói chung, chúng không tránh đưc
nhng khó khăn và phc tp nói trên, trong nhiu trưng hp c th, chúng cũng t ra
có hiu qu.
Dưi đây là m t s phép toán m à ta s dùng nhiu ln trong quá trình biến đi
(i) phép nut sơ cp
A B V A = A
(ii) plìép dán
A X V A X = A
(iii) phép dán không đy đ
A X V A X = A V A XV A X
(iv) phép dán m rng
A C V B C = A C w B C V A B
Trong các phép toán đó A, B v c là các biu thc bt k, X là biến.
3.2. Tìm dng tuyn chun tc thu gn
M i hi sơ cp hng k
ơ, ơ , ơ
J
X, ' X, - ... X, ^
/, /2 /;.
đưc gi là m t nguyên nhân hng k ca hà m /, nếu nó là m t nguyên nhân c a /. Mt
cu to đơn vca / là mt nguyên nhân hng n ca nó.
278
Chương 3. Tmĩ toán m dng tuyn chun tc ti thiu
Đnh lý 1,
a) M ĩ nguyên nhn hng k ca hàmf k < n) à kết qu ca phép dán hai nguyên
nlìăn hn^ k + 1 ca hàm f đó.
h) M t nquên nhân hng k ca h à rn f k <n) là nguyên nhân nguvên t ca f nếu
khôĩìí th dán đưc vi bt k mĩ nguyên nhân hng k nào caf.
C hn^ m inh.
a) Gi s A là m t nguyên nhân hng k (k < n) c a /. Tun đưc biên A' không có
mt trong A. Khi đó các hi A X v A X s là các nguyên nhân hng :-f 1 c a /, và A
nhn đưc t phép dán hai nguyên nhân này.
b) Gi s >4 là mt nguyên nhân hng k {k < n) c a /. Nếu A không phi là nguyên
nhân nguyên t thì luôn tìm đưc mt biến X trong A đ sau khi xoá nó (cùng vi du
ph đnh nếu có) khi A, ta đưc phn con B là mt nguyên nhân c a/. Có th gi thiết
Á = B X. Khi đó A ' = B X cũng là mt nguyên nhân hng k ca/ và A có th dán vi
T đnh lý 1, ta có Ihut toán Quine sau đây đ tìm dng tuyn chun tc thu gn
ca hàm đi s lôgic /(.Vp...,
Bitóc y. T ìm dng tuyn chun tc hoàn toàn c a/, ký h iu /j.
Bưc 2. T f xây dmg/^,^ bng cách trong/, thc hin tt c các phép dán không
đy đ đi vi các hi sơ cp hng n-i, sau đó xoá b tt c các hi sơ cp hng n-i
có th đưc bng phép nut sơ cp.
Bưc 3. Lp li bưc 2 cho đến khi thu đưc /^.,1 = /¿ . Khi ãóf\ s là dng tuyn
chun tc thu gn c a/.
T cách xây dng f, có th chĩìg minh quy np điu khng đnh: trongmi f, có
mt tt c các nguyên nhân nguvên t hng không nh hơn 1 và tt c các nguyên
nhân hng n-k c a/ , và ch có chúng.
Nếu /^^1 = f. thì theo phn b) ca đnh lý 1, mi nguyên nhân hng n-k c a /tro n g
f đu là nguyên t và như vy/^. cha tt c các nguyên nhân nguyên t c a/ , do đó nó
là dng tuyn chun tc thu gn c a/.
T h í d 1. Tim dng tuyn chun tc thu gn ca hàm
f=xyzvxyz vxyzvxy zvxyz.
Ta có fo = /. Dùng các phép dán không đy đ đi vi các hi sơ cp hng 3, ta đưc
y z V X z V X y V xy z V X z V X z V X z W X y z .
2 7 9
Phân 3. Hàm di so logic
Sau đó dùng các phép nut sơ cp ta đưc
f = y z V .V z V .V V V X z .
Đến đây các hi sơ cp hng 2 không dán đưc vi nhau, tc l à /2 = /1 và f là dng
tuyn chun tc thu gn c a/.
Thut toán Quine không ch rõ vic tìm cho hết các phép dán có th có. Vì ihế
M cCluskey đ ngh b sung thut toán Quine mt th tc hình thc như trình bày dưi
đây.
Gi s / là hàm ca n biến Xp..., Mi hi sơ cp ca n biến đó đươc biu din
bng mt dãy n ký hiu trong bng {0 , 1, -} theo quy ưc: ký t th / à 1 hay 0 nếu
X có mt trong hi là bình thưòng hay vói du ph đnh, còn nếu A', không có mt thì
ký l này Chng hn hi sơ cp ca 5 biến A'^: X3 A*5 đưc biu din bi
1-0-1. Hai hi sơ cp đưc gi là lân cn nhau, nếu các biu din nói trên ca chúng ch
khác nhau mt vị trí. Rõ ràng các hi sơ cp chi có th dán đưc vi nhau nếu chúng
là lân cn nhau.
T hu t toán Q uine - M cC luskey,
Thut toán Quine, theo th tc M cCluskey, đưc tiến hành như sau: Lp mt bng
gm nhiu ct đ ghi kết qu các phép dán. Sau đó ln lưt thc hin các bưc:
Bưc 1. Viết vào ct th nht, các biu din ca các nguyên nhân hng n (tc là các
cu to đơn v) ca hàm /. Các biu din đưc chia thành tng nhóm , các biu din
trong mi nhóm có s các ký hiu 1 bng nhau và các nhóm xếp theo th t s các
ký hiu 1 tăng dn (các nhóm đưc đánh s t 1).
Bưc 2. Ln lưt thc hin tt c các phép dán các biu din trong nhóm i vi các
biu din trong nhóm /+1 (/ = 1,2,...). Biu din nào tham gia ít nht mt phép dán
s đưc ghi nhn mt du * bên cnh. Kết qu dán đưc ghi vào ct tiếp theo.
Bưc 3. Lp li bưc 2 cho ct k ế tiếp cho đến khi không thu thêm đưc ct nào mi
(tc là ti ct hin hành, không thc hin đưc mt phép dán nào c). Khi đó, tí c
các biu din không có du * s cho ta tt c các nguyên nhân nguyên t ca/.
T h í d 2. Tim dng tuyn chun tc thu gn ca hàm
/ = X Z u V x y Z u v x y z u v x y z u
V xzu V xyzu V xyzu,
Th lc M cCluskey đưc tiến hành bi bng sau đây
280
Chương 3. Thut toán tìm dtĩ tuyn chuẩn tắc ti thiu
0001 *
0-01 * 0 -1
0101 *
00-1 * - 0-1
0011 *
-001 * -1 1
1001 * -011 *
1011 * 10-1 *
0111 * 01-1 *
1111 * 0-11 *
1-11 *
-ll
Dng tuyn chun tc thu gn ca h àm / là
f = X u V y u V z u.
T hí d 3. Tim dng tuyn chun tc thu gn ca hàm
f - X2 X3 Xị V ~X Xj X V X X2 X X4 V ,V| ^2 ,^3
V XịX2 X3X4 V A', V x,x-,x-,x.
I ^ 2 -^3 ''-4
Th tc M cCluskey đưc tiến hành bi bng sau đây.
0 0 1 0 *
001-
11-
0011 *
-011
1100*
110-*
1011 *
11-0 *
1101 *
1-11
1110*
11-1 *
1111 *
11!-*
Dng tuyn chun tc thu gn ca h à m / là
f = X X
2
V JC| ^2 Xj V Xj X3 X4 V X X2 X .
Thut toán Q uine cùng vi s ci tiến ca McCluskey gi chung là thut toán
Quine -McCluskey. Tliut toán này cho phép tìm dng tuyn chun tc thu gn t dng
tuyn chun tc hoàn toàn.
Dưi đây trình bày thêm phưcmg pháp Blake - Poreski, cho phép tìm dng tuyn
chun tc thu gn t m t dng tuyn chun tc tu ý. Cơ s ca phương pháp này là
đnh lý sau đây:
281
Phn 3. Hàm đi slôgic
Đ nh lý 2. Nếu trong mt dng tuyn chun tc tu ý ca hàm đi sô'lôgic f{X, .... x j
ta liên tiếp thc hin tt c các phép dán m rng có th có đưc ri sau đó thc hin
tt c các phép nut sơ cp, thì s thu đưc dng tuyn chun tc thu gn ca hàm f.
Có th chng minh đnh lý này bng quy np theo s các đi s ca h à m /. Tuy
nhiên chúng tôi không trình bày chi tiết đây.
T h í d 4. Tim dng tuyn chun tc thu gn ca hàm
f=xyzvzxv xy.
Thc hin liên tiếp các phép dán m rng và các phép nut sơ cp ta đưc
f=xyzvzxv xy
= x y z V z x W x y v x y v y z v y z
= xz w xy xy \/ y z \/ y z w y
= xz w y.
Vy X z V y là dng tuyn chun tc thu gn ca hàm /.
T h í d 5. Tim dng tuyn chun tc thu gn ca hàm
f= + y)s/{ + z).
Ta có
/ = xyvxyvyzvyz
= xyvxyvyzvyzvxzvxz
Đó là dng tuyn chun tc thu gn ca hàm /. Thí d 5 chng t rng, dng tuyn
chun tc thu gn ca m t h à m / có th "dài" hcfn dng nguyên thu ca nó.
3.3. Tìm dng tuyn chun tc ti thiu
Sau khi tìm đưc dng tuyn chun tc thu gn ca /, nghĩa là tìm đưc tt c các
nguyên nhân nguyên t ca nó, ta tiếp tc phưcmg pháp Q uine tìm dng tuyn chun tc
ti thiu ca f như sau; Lp mt bng ch nht, mi ct ng vi m t cu to đơn v ca
/ và mi dòng ng vi mt nguyên nhân nguyên t c a/. Ti ô ,j), ta đánh du + nếu
nguyên nhân nguyên ' dòng i là mt phn con ca cu to đơn v ct j. Ta cũng nói
rng khi đó, nguyên nhân nguyên t i là ph cu to đơn v j. M t h s các nguyên nhân
nguyên t c a / đưc gi là ph h à m /, nếu m i cu to đơn v c a / đu đưc ph ít
282
Chươ/ĩg 3. Thuật tn tìm dng tuyn chun tắc ti thiu
nht bi mt thành viên thuc h. D thy rng, nếu h s là ph hàm/ thì nó là đy
đ, nghĩa là tuyn ca các thành viên trong
s
là thc hin /.
Mt nguyên nhân nguyên tô' đưc gi là ct yếu, nếu thiếu nó thì mt h các
nguyên nhân nguyên t không th ph hàm /. Các nguyên nhân nguyên tô' ct yếu đưc
tìm như sau: ti nhng ct ch có duy nht mt du +, xem du + đó thuc dòng nào thì
dòng đó ng vi mt nguyên nhân nguyên t ct yếu.
Vic lưa chn các nguyên nhân nguvên t trên bne đã đánh du, đ đưc mt
dng tuyn chun tc ti thiu, có Ih tiến hành theo các bưc sau đây;
Bưc 1. Phát hin tt c các nguyên nhân nguyên t ct yếu.
Bưc 2. Xoá tt c các ct đưc ph bi các nguyên nhân nguyên tô' ct yếu, tc là
tt c các ct có ít nht mt du + ti nhng dòng ng vi các nguyên nhân nguyên
t ct yếu.
Bưc 3. Trong bng còn lại, xoá nt nhng dòng không còn du + và sau đó nếu có
hai ct ging nhau thì xoá bt mt ct.
Bưc 4. Sau các bưc trên, tìm mt h
s
các nguyên nhân nguyên t vi s biến ít
nht ph tt c các ct còn lại.
Tuyn ca các nguyên nhân nguyên t ct yếu và các nguyên nhân trong h
s
s là
dng tuyn chun tc ti thiu ca hàm/.
Các bưc 1,2,3 có tác dng rút gn bng trưc khi la chn. Đ phc tp ch yếu
nm bưc 4. Tinh hung tt nht là mi nguyên nhâii nguyên t đu là ct yếu.
Trưng hp này không phi la chn gì và hàm / có duy nht mt dng tuyn chun
tc ti thiu cũng chính là dng tuyn chun tc thu gn. Tinh hung xu nht là không
có nguyên nhân nguyên t nào là ct yếu. Trưng hp này ta phi la chn toàn b
bng. Các thí d sau đây minh ho các tình hung có th xy ra.
Thí d 1. Tim dng tuyn chun tc ti thiu ca h à m /c h o trong thí d 1, mc 2. Bng
sau khi đã đánh du + có dng
x y z
x y 1
X y z x y 1
X y 1
+ +
x z
+
y z
+
+
X z
+
283
Pìin 3. Hàm dai slôgic
Trong trưng hp này mi nguyên nhân nguyên t đu là ct yếu. H à m / có m t dng
tuyn chun tc ti thiu, đng thòi cũng là dng tuyn chun tc thu gn:
f = x y v x z v y z v X z .
T hí d 2. Tim dng tuyn chun tc ti thiu ca h à m /c h o trong thí d 3, mc 2. Sau
khi đánh du + , bng có dng
A 'j X2
X 3 X ,
X3X4
X, ^2
X3 X4
X, ^2
+ + +
X, ^ 2-^3
+
+
^2 X3 X4
+
X3 X4
+
Có hai nguyên nhân nguyên t ct yếu nm dòng 1 và 2. Sau khi rút gn, bng
còn hai dòng 3, 4 và mt ct 3. Vic chn s khá đcm gin: có th chn mt trong hai
nguyên nhân nguyên ' còn li. Vì vy ta đưc hai dng tuyn chun tc ti thiu là
f = X X2 V X X2 X3 V X j X X4 ,
f = X X2 V X X2 V X2 Xy .
T h í d 3. Tiếp tc thí d 5, m c 2. Dng tuyn chun tc hoàn toàn ca h àm / là
/ = xy2 vxyzvxyzvxyzvxyzvxyz.
Ta lp bng
X y z xy
1
xyi X y z
X yz
xy 2
+ +
X
+ +
z
+ +
y ĩ
+
xz
+
X 2
+ +
284
Chương 3. Thut toán tim dạng tuyn chun tắc ti ihiu
Không có nguyên nhân nào là nguyên nhân nguyên t ct yếu. Trưng hp này phi la
chn toàn b. Có hai h ph hàm / vi sô' biến ít nht, chúng tương ng vi hai dng
tuyn chun tc ti thiu:
f = xy V yz x ,
f = x y v y ĩ v x z .
H ( X V, X y, y z, y z } ph / không tha, nó chơ ta mòt dng tuyn chun tc
nghn
/ = xy V X V z -V y ĩ
nhưng không phi là ti thiu.
3.4. đ ti thiu
Dng tuyn chun tc ca mt hàm đi sô' logic là mt loi biu din đơn gin, nó tương
ng vi m t loi sơ đ nào đó thc hin hàm đã cho. Trong ng dng k thut, vn đ là
vi mt hàm đi s lôgic cho trưc, làm thế nào đ xây dng m t sơ đ thc hin đưc
hàm đó, vi ít yếu tô' cơ bn nht. Sơ đ như vy đưc gi là sơ đ ti thiu ca hàm
đang xét. Nói chung, sơ đ ng vi dng tuyn chun tc ti thiu mà ta tìm trong mc
trưc, chưa phi đã là sơ đ ti thiu.
Thí d. Sơ đ thc hin hàm / theo dng tuyn chun tc tối thiu
f = x y \ /x z v y z v x y z
cn dùng 8 yếu t & (hi) và V (tuyn), trong khi đó sơ đ theo biu din
/ = x ( y v z ) V y z \y X Z
tn tt c là 7 yếu ' & và V.
Vân d tìm sơ đ ti ihiii (không nht thiết dng tuyn chun tc) ca mt hàm
đi s logic (trong h V, &, -) là mt \'n đ phc tap. Hin nay chưa có mt thut toán
283
Phn 3. Hám di s logic
hu hiu nào đ gii quyết vn đ này. Thông thưng, ngưi ta tìm dng tuyn chun
tc ti tiiiu, ri sau đó dùng các lut phân b đ rút bt s các ch biến. Làm như vy,
tuy chưa hn đt đưc mt biu din ti thiu, nhưng nói chung, cũng thu đưc mt
biu din cho phép xây dng mt sơ đ tương đi tiết kim.
Rõ ràng là vn đ còn tr nên phc tp hơn nhiu, nếu xét vic biu din trên mt
h đy đ bt k. Ngoài ra, trên thc tế, ta thưng gp vic xây dng mt sư đ thc
hin đng thi mt h hàm đi s lôgic. Có th xây dng riêng r sơ đ ti thiu cho
tng hàm, ri ghép chúng li, vi chú ý là có th li dng nhng phn chung trong
chúng. Tuy nhiên, cn xét vn đ này mt cách căn bn và có h thng hơn.
Mt vn đ na là, trên thc tế, ta li hay gp nhng hàm đi s logic xác đnh
không đy đ (do vic mã hoá nh phân các ìín hiu r rc). Vic chn nhng ciá tr
cho hàm ti nhng nơi không xác đnh, càng làm tâng thêm các kh năng đưc xét.
Tóm li, đi vi vic tng hp các sơ đ thc hin các hàm đi s logic còn rt
nhiếu bài toán khó khăn và lý thú. Giáo trình này ch đ cp đến mt vài khía cnh cơ
bn nht. Bn đc nào quan tâm, cn tham kho thêm các tài liu khác.
286
Chương 3. Thiií toán tìm dng tiivến chun lác ti ĩhiu
Bài tp
1. Tim tt c các nguyên nhân nguyên t ca các hàm dưi đây theo thut toán Qui ne -
McCluskey:
a.)f(x,y,z)= xy z V X y z V xyz V X V z
b)f(x,y,z)= x z V X V z V .Xy z V X V- V X y z
V, z) = X y z V X z V A V z V A' y r V ,Y _v 2
d ) / U ) ,r ) = (xl>)iz
e)/(x, J, z) = .VI 0^ + z)
f)f{x, y, z) = xo(y\ z)
g)f(x, y, z) = (xo j) I z
h ) / u y, z) = (x + y) o z
2. Tìm dng tuyn chun tc thu gn ca các hàm cho trong bài 1.
3. Viết chương trình tìm dng tuyn chun tc thu gn ca m t hàm đi s lôgic /? đi
s da trên dng tuyn chun tc hoàn toàn ca nó.
D liu vào là file văn bn có dng:
dòng đu ghi giá tr n (là s đi s ca hàm)
dòng sau ghi giá tr k (là s hi sơ cp trong dng tuyn chun tc hoàn toàn ca
hàm)
k dòng tiếp, mi dòng ghi mt hi sơ cp tương ng dưi dng mt dãy n ký t
viết lin nhau, trong đó ký t th í mô t trng thái ca đi th / theo quy ưc; 0
nếu đi có du ph đnh, 1 nếu đi không có du ph đnh.
Kết qu ghi ra file văn bn có dng (nếu có nhiu dng ti thiu thì ch ghi mt):
dòng đu ghi giá tr m (là sô' hi sơ cp trong dng tuyn chun tc ti thiu ca
hàm)
m dòng sau, mi dòng ghi mt hi sơ cp tương ng dưi dng m t dãy n ký t
viết lin nhau, trong đó ký t th i mô t trng thái ca đi th / theo quy ưc: -
nếu đi không có mt, 0 nếu đi có du ph đnh, 1 nếu đi không có du ph
đnh.
Thí d: File d liu vào cho hàm (thí d 3, mc 3)
f{x, y,z) = X y z V Xy z V xy z V A' J z V X y z \/ xy z .
và file kết qu tưcmg ng vi dng tuyn chun tc ti thiu xy \J y z \/ X z có ni
dung:
287
Phn 3. Hàm đi sô'logic
4. H thng cnh báo t đng.
Ngưi ta cn thiết kế mt mch logic điu khin h thng cnh báo t đng trong mt
ngôi nhà. Trong h thng cnh báo này ngưi ta s dng hai dng b cm biến (sensor);
tích cc và th đng. B cm biến tích cc s phát tín hiu 1 khi mi vic đu bình
thưng và tín hiu 0 nếu phát hin có s c (ca ra vào hoc ca s b m). B cm biến
th đng s phát tín hiu 0 nếu mi vic bình thưng và tín hiu 1 nếu phát hin s c
(làm chuyn đng hoc va đp vào nó). Ngôi nhà có 4 phòng R |, R2, R3, R4. Trong mi
phòng Rj có mt b cm biến tích cc phát tín hiu X và mt b cm biến th đng phát
tín hiu y¡. Sơ đ ca ngôi nhà đưc mô t trong hình 1 (các đon đt là các ca thông
phòng hoc ra vào).
Hình 1
Mch logic điu khin phi phát ra tín hiu 0 khi không có s c nào xy ra và phát tín
hiu 1 đ kích còi báo đng. Ta cn kích còi báo đng nếu xy ra ít nht mt trong các
tình hung sau đây:
Trong phòng R| có ít nht mt trong hai b cm biến X| hoc phát hin s c;
Trong bt c phòng R,, > 1, c hai b cm biến X và y đéu phát hin s c;
Trong hai phòng có ca thông nhau có hai b cm biến phát hin s c.
a) Hãy xây dng biu thc cho hàm biến bunnhn giá tr 1
khi và ch khi cn kích còi báo đng.
b) Tim dng tuyn chun tc hoàn toàn c a/;
c) Áp dng thut toán Quine-M cCluskey tìm dng tuyn chun tc thu gn c a/.
^88
TOAN Rdl RAC
Tài liêu tham kho
1. Hall M. Comh'matonal Theory. Blaisdeil Publishing Company, London, 1967.
2. Kaufman A. Introduction a la combinatorique en vue des applications. Dunod,
Paris, 1968.
3. Aho A.W ., Hopcroft J.E., Ultman J.D. The design and analysis o f computer
algorithms. Addison - W esley Publishing Co., Inc., 1974.
4. Reingold E.M., Nievergelt J., Deo N. Combinatorial Algorithms. Theory and
Practice. Prentice-Hall Inc. Englewood Cliff, New Jersey, 1977.
5. Papadm itriou C.H., Steiglitz K. Combinatorial Optimization. Prentice Hall Inc.,
N. J., 1982.
6. Rubnikov K.A. Introduction in combinatorial analysis. Nauka, Moscow, 1972.
(in Russ.)
7. Sachkov V.N. C om binatorial M ethods o f Discrete M athematics. Nauka,
M oscow, 1977. (in Russ.)
8. Conway R.W ., M axwell W.L., M iller L.W. Theory o f Scheduling. Addison -
W esley Reading, M ass., 1967.
9. Tanaev V.C., Skurba V.V. Introduction to Scheduling Theory. N auka, Moscow,
1975. (in Russ.)
10. Kovaliev M.M . D iscrete O ptimization. Izd.BGU, M insk, 1977 (in Russ.)
11. Berg C. Theorie des Graphes et ses Applications. Dunod, Paris, 1958.
12. Ore O. Theory o f Graphs. A merican M athematical Society, 1962.
13. Ford L.R., Fulkerson D.R. Flows in Networks. Princeton Univ. Press, Princeton,
N.J., 1962.
14. Busacker R.G., Saaty T.L. Finite Graphs and Networks. An Introduction with
Application. M cGraw Hill, N.Y., 1965.
15. Harary F. Graph Theory. Addison W esley Publishing Academic Press, N.Y.,
1973.
289
Tài liu í ham kho
16. Christofides N. Graph Theory. An algorithmic approach. Academ ic Press,
N.Y ., 1975.
17. lablonski s.v . Introduction to D iscrete M athematics. N auka, M oscow, 1979. (in
Russ.).
18. Liu C L . Elements o f D iscrete Mathematics. McGraw - Hill Book Company,
1985.
19. Rosen K.H. Discrete M athematics and its Applications. M cGraw - Hill Book
Company, 1991.
20. Johnsonbaugh R. Discrete M athematics. Prentice Hall Inc., N. J., 1997.
21. Hoàng Tu. D th hu hn và các ng dng trong vn trù hc, NXB Khoa hc,
H à ni, 1964.
22. Phan đình Diu. Lý thuyết tôniat hu hn và thut toán. NXB ĐHTHCN, Hà
ni, 1977.
290
NHA XUT ÍRN ĐỌI HC u c Gin H^ NI
16 Hàng Chui - Hai Bà Trưng - Ni
Điên thoai: Biên tãp -Chê' bn: (04) 39714896:
Hành chính: (04) 39714899: Tng Biên tp: (04) 39714897:
Fax: (04) 39714899
Chiu trá ch n h iêm x u á t bn:
Giam đc: PG S. TS. PHÙNG Qưc BO
Tng biên tp: TS. PH M TH TRÀM
Biên táp: PH M PH Ú TRIÊM
Biên t p tái bn: Đ H U PH Ú
H ĐNC
T rinh bày bìa: VĂN SÁNC
Đ i tác liên kết x u t hãn:
H Đ N (
| 1/298