You are on page 1of 198

HC VIN CNG NGH BU CHNH VIN THNG

------- -------

SCH HNG DN HC TP

TON RI RC
Bin son : Ths. NGUYN DUY PHNG

Lu hnh ni b

H NI - 2006

LI GII THIU
Ton ri rc l mt lnh vc nghin cu v x l cc i tng ri rc dng m cc i
tng, v nghin cu mi quan h gia cc tp ri rc. Mt trong nhng yu t lm Ton ri rc
tr nn quan trng l vic lu tr, x l thng tin trong cc h thng my tnh v bn cht l ri
rc. Chnh v l do , Ton hc ri rc l mt mn hc bt buc mang tnh cht kinh in ca cc
ngnh Cng ngh thng tin v in t Vin thng. Ti liu hng dn mn hc Ton hc ri rc
c xy dng cho h o to t xa Hc vin Cng ngh Bu chnh Vin thng c xy dng
da trn c s kinh nghim ging dy mn hc v k tha t gio trnh Ton hc ri rc ng
dng trong tin hc ca Kenneth Rossen. Ti liu c trnh by thnh hai phn:
Phn I trnh by nhng kin thc c bn v l thuyt t hp thng qua vic gii quyt bn
bi ton c bn l: Bi ton m, Bi ton tn ti, Bi ton lit k v Bi ton ti u.
Phn II trnh by nhng kin thc c bn v L thuyt th: khi nim, nh ngha, cc
thut ton trn th, th Euler, th Hamilton. Mt s bi ton c ng dng thc tin quan
trng khc ca l thuyt th cng c ch trng gii quyt l Bi ton t mu th, Bi
ton tm ng i ngn nht v Bi ton lung cc i trong mng.
Trong mi phn ca ti liu, chng ti c gng trnh by ngn gn trc tip vo bn cht
ca vn , ng thi ci t hu ht cc thut ton bng ngn ng lp trnh C nhm t c hai
mc tiu chnh cho ngi hc: Nng cao t duy ton hc trong phn tch, thit k thut ton v
rn luyn k nng lp trnh vi nhng thut ton phc tp. Mc d rt cn trng trong qu trnh
bin son, tuy nhin ti liu khng trnh khi nhng thiu st v hn ch. Chng ti rt mong
c s gp qu bu ca tt c c gi v cc bn ng nghip. Mi gp xin gi v: Khoa
Cng ngh Thng tin - Hc vin Cng ngh Bu chnh Vin thng.

H Ni, thng 05 nm 2006

Chng 1: Nhng kin thc c bn

PHN I: L THUYT T HP
CHNG I: NHNG KIN THC C BN
Ni dung chnh ca chng ny cp n nhng kin thc c bn v logic mnh v l
thuyt tp hp. Bao gm:
9

Gii thiu tng quan v l thuyt t hp.

Nhng kin thc c bn v logic.

Nhng kin thc c bn v l thuyt tp hp.

Mt s ng dng ca logic v l thuyt tp hp trong tin hc.

Bn c c th tm thy nhng kin thc su hn v chi tit hn trong cc ti liu [1] v [2]
ca ti liu tham kho.

1.1. GII THIU CHUNG


T hp l mt lnh vc quan trng ca ton hc ri rc cp ti nhiu vn khc nhau
ca ton hc. L thuyt T hp nghin cu vic phn b cc phn t vo cc tp hp. Thng
thng cc phn t ca tp hp l hu hn v vic phn b chng phi tho mn nhng iu kin
nht nh no tu theo yu cu ca bi ton nghin cu. Mi cch phn b c coi l mt
cu hnh ca t hp. Nguyn l chung gii quyt bi ton t hp c da trn nhng
nguyn l c s l nguyn l cng, nguyn l nhn v mt s nguyn l khc, nhng mt c
th khng th tch ri ca ton hc t hp l vic chng minh v kim chng cc phng php
gii quyt bi ton khng th tch ri my tnh.
Nhng dng bi ton quan trng m l thuyt t hp cp l bi ton m, bi ton lit
k, bi ton tn ti v bi ton ti u.
Bi ton m: y l dng bi ton nhm tr li cu hi c bao nhiu cu hnh tho mn
iu kin nu?. Bi ton m c p dng c hiu qu vo nhng cng vic mang tnh cht
nh gi nh xc sut ca mt s kin, phc tp thut ton.
Bi ton lit k: bi ton lit k quan tm n tt c cc cu hnh c th c c, v vy li
gii ca n c biu din di dng thut ton vt cn tt c cc cu hnh. Bi ton lit k
thng c lm nn cho nhiu bi ton khc. Hin nay, mt s bi ton tn ti, bi ton ti u,
bi ton m vn cha c cch no gii quyt ngoi phng php lit k. Phng php lit k
cng tr nn quan trng hn khi n c h tr bi cc h thng my tnh.
5

Chng 1: Nhng kin thc c bn


Bi ton ti u: khc vi bi ton lit k, bi ton ti u ch quan tm ti cu hnh tt
nht theo mt ngha no . y l mt bi ton c nhiu ng dng thc tin v l thuyt t hp
ng gp mt phn ng k trong vic xy dng cc thut ton a ra c nhng m hnh
ti u.
Bi ton tn ti: nu nh bi ton m thc hin m bao nhiu cu hnh c th c, bi
ton lit k: lit k tt c cc cu hnh c th c, bi ton ti u ch ra mt cu hnh tt nht th bi
ton tn ti gii quyt nhng vn cn nghi vn ngha l ngay k c vn c hay khng mt
cu hnh cng cha bit. Nhng bi ton ny thng l nhng bi ton kh, vic s dng my tnh
chng t bi ton tn ti hay khng tn ti t nht (hoc khng) mt cu hnh cng tr nn
ht sc quan trng.

1.2. NHNG KIN THC C BN V LOGIC


Cc qui tc c bn ca Logic cho ta ngha chnh xc ca cc mnh . Nhng qui tc ny
c s dng gia cc lp lun ton hc ng v khng ng. V mc tiu c bn ca gio trnh
ny l trang b cho sinh vin hiu v xy dng c nhng phng php lp lun ton hc ng
n, nn chng ta s bt u nghin cu ton hc ri rc bng nhng kin thc c bn ca mn
logic hc.
Hiu c phng php lp lun ton hc c ngha ht sc quan trng trong tin hc.
Nhng qui tc ca logic chnh l cng c c s chng ta c th xy dng nn cc ngn ng lp
trnh, cc mng my tnh, kim chng tnh ng n ca chng trnh v nhiu ng dng quan
trng khc.

1.2.1. nh ngha & php ton


i tng nghin cu ca logic hc l nhng mnh . Mt mnh c hiu l mt cu
khng nh hoc ng hoc sai ch khng th va ng va sai.
V d: Nhng cu khng nh sau y l mt mnh :
H Ni l th ca Vit Nam.
1+1=2
2+2=3
Cc mnh H Ni l th ca Vit Nam, 1 +1 =2 l nhng mnh ng, mnh
2 +2 =3 l sai. Nhng nhng cu trong v d sau s khng phi l mt mnh v n nhng
cu khng cho ta khng nh ng cng chng cho ta khng nh sai.
By gi l my gi ?
Hy suy ngh iu ny cho k lng
x +1 =2
x+y=z
6

Chng 1: Nhng kin thc c bn


Ta k hiu nhng ch ci A, B, C, D, p, q, r, s . . . l nhng mnh . Gi tr ca mt mnh
ng c k hiu l T, gi tr mnh sai c k hiu l F. Tp gi tr { T, F } cn c gi
l gi tr chn l ca mt mnh .
nh ngha 1. Mnh p tuyn vi mnh q (k hiu p p) l mt mnh m n ch nhn
gi tr T khi v ch khi t nht mt trong hai mnh p, q nhn gi tr T. Mnh p q nhn gi
tr F khi v ch khi c p, q u nhn gi tr F.
nh ngha 2. Mnh p hi mnh q (k hiu p q ) l mt mnh m n ch nhn
gi tr T khi v ch khi p, q nhn gi tr T. Mnh p q nhn gi tr F khi v ch khi hoc p, q,
hoc c hai nhn gi tr F.
nh ngha 3. Ph nh mnh p (k hiu p) l mt mnh nhn gi tr F khi v ch khi
mnh p nhn gi tr T, nhn gi tr F khi v ch khi p nhn gi tr T.
nh ngha 4. Mnh tuyn loi ca p v q, c k hiu l pq, l mt mnh ch
ng khi mt trong p hoc q l ng v sai trong cc trng hp khc cn li.
nh ngha 5. Mnh p suy ra mnh q (k hiu p q) nhn gi T khi v ch khi p
nhn gi tr F hoc p v q cng nhn gi tr T. Mnh pq nhn gi tr F khi v ch khi p nhn
gi tr T v q nhn gi tr F.
nh ngha 6. Hai mnh p, q c gi l ko theo nhau (k hiu: p q) c gi tr ng
khi p v q c cng gi tr chn l v sai trong cc trng hp khc cn li.
Cc php ton: , , , , , c th c nh ngha thng qua bng gi tr chn l sau:
Bng 1.1: Bng gi tr chn l ca cc php ton , , , , ,
p

pq

pq

pq

pq

pq

1.2.2. S tng ng gia cc mnh


Mt vn ht sc quan trng trong lp lun ton hc l vic thay th ny bng mt mnh
khc c cng gi tr chn l. Hai mnh c cng mt gi tr chn l chng ta c th hiu theo
cch thng thng l chng tng ng nhau v ng ngha. Do vy, ta s tip cn v phn loi
cc mnh phc hp thng qua cc gi tr chn l ca chng.
nh ngha 1. Mt mnh phc hp m lun lun ng vi bt k cc gi tr chn l ca
cc mnh thnh phn ca n c gi l hng ng (tautology). Mt mnh lun lun sai vi
mi gi tr chn l ca cc mnh thnh phn ca n c gi l mu thun.
7

Chng 1: Nhng kin thc c bn


V d: mnh phc hp p q l hng ng, p q l mu thun v gi tr chn l ca
cc mnh trn lun lun ng, hoc lun lun sai nh c ch ra trong bng 1.2.
Bng 1.2. V d v mnh hng ng & mnh mu thun
p

p q

pq

nh ngha 2. Hai mnh p, q c gi l tng ng logic vi nhau (k hiu: p q)


khi v ch khi cc ct cho gi tr chn l ca chng ging nhau. Hay mnh pq l hng ng.
V d: hai mnh (p q) v p q l tng ng logic v cc ct gi tr chn l ca
chng c th hin qua bng sau:

Bng 1.3. Bng gi tr chn l i vi (p q) v pq


p

pq

(pq)

pq

Dng bng gi tr chn l chng minh tnh tng ng logic gia hai mnh phc
hp cho ta mt phng php trc quan d hiu. Tuy nhin, vi nhng mnh logic phc hp c
k mnh th cn ti 2k gi tr chn l biu din bng gi tr chn l. Trong nhiu trng hp
chng ta c th chng minh tnh tng logic bng vic thay th mt mnh phc hp bng
nhng tng ng logic c trc.
Bng phng php bng chn l, d dng chng minh c s tng ng ca cc cng
thc di y:

p q

p q

pq

(pq)(qp)

(p)

Chng 1: Nhng kin thc c bn


Bng 1.4. Bng cc tng ng logic
TNG NG

TN GI

pTp

Lut ng nht

pFp
pTT

Lut nut

pFF
ppp

Lut lu ng

ppp
(p) p

Lut ph nh kp

pqqp

Lut giao hon

pqqp
(p q) r p ( q r)

Lut kt hp

(p q) r p ( q r)
p ( q r) (p q ) (p r)

Lut phn phi

p ( q r) (p q) (p r)
(p q ) p q

Lut De Morgan

(p q ) p q
V d: Chng minh rng ( p (q q ) l tng ng logic vi p q.
Chng minh:

( p (q q ) p (p q )

theo lut De Morgan th 2

p [ (p) q

theo lut De Morgan th 2

p [ p q ]

theo lut ph nh kp

(p p ) (p q)

theo lut phn phi

F (p q)

v p p F

p q

Mnh c chng minh.

1.2.3. Dng chun tc


Cc cng thc (mnh ) tng ng c xem nh cc biu din khc nhau ca cng
mt mnh . d dng vit cc chng trnh my tnh thao tc trn cc cng thc, chng ta cn
9

Chng 1: Nhng kin thc c bn


chun ha cc cng thc, a chng v dng biu din chun c gi l dng chun hi. Mt
cng thc c gi l dng chun hi nu n l hi ca cc mnh tuyn.
Phng php bin i mt cng thc bt k v dng chun hi bng cch p dng cc
th tc sau:

B cc php ko theo () bng cch thay (pq) bi (pq).

Chuyn cc php ph nh () vo st cc k hiu mnh bng cch p dng lut


De Morgan v thay (p) bi p.

p dng lut phn phi thay cc cng thc c dng (p(qr)) bi (pq)(pr).

V d: Ta chun ha cng thc (pq)(rs):


(pq)(rs) (pq) (rs)
((pq)r) ((pq)s)
(pqr)(pqs)
Nh vy cng thc (pq)(rs) c a v dng chun hi (pqr)(pqs)

1.3. V T V LNG T
Trong ton hc hay trong cc chng trnh my tnh chng ta rt hay gp nhng khng
nh cha phi l mt mnh . Nhng khng nh u c lin quan n cc bin. Chng hn
khng nh:
P(x) = x > 3 khng phi l mt mnh nhng ti nhng gi tr c th ca x = x0 no
th P(x0) li l mt mnh . Hoc trong nhng on chng trnh gp cu lnh:
if ( x > 3 ) then x:= x +1;

th chng trnh s t gi tr c th ca bin x vo P(x), nu mnh P(x) cho gi tr ng x s


c tng ln 1 bi cu lnh x:=x+1, P(x) c gi tr sai gi tr ca x c gi nguyn sau khi thc
hin cu lnh if.
Chng ta c th phn tch mi khng nh thnh hai phn ch ng v v ng (hay v t),
trong cu x ln hn 3 ta c th coi x l ch ng, ln hn 3 l v ng, hm P(x) c gi l
hm mnh . Mt hm mnh c th c mt hoc nhiu bin, gi tr chn l ca hm mnh
ti nhng gi tr c th ca bin c xc nh nh nhng mnh thng thng.
V d: Cho Q(x, y, z) l hm mnh xc nh cu x2 = y2 +z2 hy xc nh gi tr chn l
ca cc mnh Q (3, 2, 1), Q ( 5, 4, 3).
Gii:
t gi tr c th ca x , y , z vo Q(x,y,z) ta c:
Q(3,2,1) l mnh 32 = 22 + 12 l sai do Q(3,2,1) l mnh sai. Trong , Q (5, 4, 3)
l mnh 52 = 42 + 32 ng, do Q(5,4,3) l mnh ng.
10

Chng 1: Nhng kin thc c bn


Tng qut, gi s M l mt tp hp cc phn t no . M thng c gi l trng hay
min xc nh ca cc phn t thuc M. Khi , biu thc P(x) gi l v t xc nh trn trng
M nu khi thay x bi mt phn t bt k ca trng M th P(x) s tr thnh mt mnh trn
trng M.
Khi tt c cc bin ca hm mnh u c gn nhng gi tr c th, th mnh to ra
s xc nh gi tr chn l. Tuy nhin, c mt phng php quan trng khc bin mt hm
mnh thnh mt mnh m khng cn phi kim chng mi gi tr chn l ca hm mnh
tng ng vi cc gi tr ca bin thuc trng ang xt. Phng php gi l s lng ho hay
lng t. Chng ta xt hai lng t quan trng l lng t vi mi (k hiu:), lng t tn ti
(k hiu: ).
nh ngha 1. Lng t vi mi ca P(x) k hiu l x P(x) l mt mnh P(x) ng
vi mi phn t x thuc trng ang xt.
V d: Cho hm mnh P(x) = X2 + X + 41 l nguyn t. Xc nh gi tr chn l ca
mnh P(x) vi x thuc khng gian bao gm cc s t nhin [0..39].
Gii: v P(x) ng vi mi gi tr ca x [0..39] P(x) l ng.
V d: Cho P(x) l hm mnh x + 1 > x. Xc nh gi tr chn l ca mnh x
P(x), trong khng gian cc s thc.
Gii: v P(x) ng vi mi s thc x nn x P(x) l ng.
nh ngha 2. Lng t tn ti ca hm mnh P(x) (c k hiu l: x P(x) ) l mt
mnh Tn ti mt phn t x trong khng gian sao cho P(x) l ng .
V d: Cho P(x) l hm mnh x > 3. Hy tm gi tr chn l ca mnh x P(x)
trong khng gian cc s thc.
Gii: v P(4) l 4 > 3 ng nn x P(x) l ng.
V d: Cho Q(x) l x + 1 > x. Hy tm gi tr chn l ca mnh x Q(x) trong khng
gian cc s thc.
Gii: v Q(x) sai vi mi x R nn mnh x Q(x) l sai.
Bng 1.5: Gi tr chn l ca lng t ,
x P(x)

P(x) ng vi mi x

C mt gi tr ca x P(x) sai

x P(x)

C mt gi tr ca x P(x) ng

P(x) sai vi mi x

Dch nhng cu thng thng thnh biu thc logic: Dch mt cu c pht biu bng
ngn ng t nhin (cu hi thng thng) thnh mt biu thc logic c vai tr ht sc quan trng
trong xy dng cc ngn ng lp trnh, chng trnh dch v x l ngn ng t nhin. Qu trnh
dch mt cu t ngn ng t nhin thnh mt biu thc s lm mt i tnh t nhin ca ngn ng
11

Chng 1: Nhng kin thc c bn


v a s cc ngn ng u khng r rng, nhng mt biu thc logic li rt r rng cht ch t c
php th hin n ng ngha ca cu. iu ny dn n phi c mt tp hp cc gi thit hp l
da trn mt hm xc nh ng ngha cu cu . Mt khi cu c chuyn dch thnh biu
thc logic, chng ta c th xc nh c gi tr chn l ca biu thc logic, thao tc trn biu
thc logic, bin i tng ng trn biu thc logic.
Chng ta s minh ho vic dch mt cu thng thng thnh biu thc logic thng qua
nhng sau.
V d dch cu Bn khng c li xe my nu bn cao di 1.5 mt tr phi bn trn 18
tui thnh biu thc logic.
Gii:
Ta gi p l cu : Bn c li xe my.
q l cu

: Bn cao di 1.5m.

r l cu

: Bn trn 18 tui.

Khi : Cu hi trn c dch l:

(q r) p

V d: Dch cu Tt c cc sinh vin hc tin hc u hc mn ton hc ri rc


Gii: Gi P(x) l cu x cn hc mn ton hc ri rc v x c xc nh trong khng
gian ca cc sinh vin hc tin hc. Khi chng ta c th pht biu: x P(x)
V d: Dch cu C mt sinh vin lp ny t nht tt c cc phng ca t nht mt
nh trong k tc x.
Gii: Gi tp sinh vin trong lp l khng gian xc nh sinh vin x, tp cc nh trong k
tc x l khng gian xc nh cn nh y, tp cc phng l khng gian xc nh phng z. Ta gi
P(z,y) l z thuc y, Q(x,z) l x z. Khi ta c th pht biu:
x y z (P(z,y) Q(x,z));

1.4. MT S NG DNG TRN MY TNH


Cc php ton bt: Cc h thng my tnh thng dng cc bit (binary digit) biu din
thng tin. Mt bt c hai gi tr chn l hoc 0 hoc 1. V gi tr chn l ca mt biu thc logic
cng c hai gi tr hoc ng (T) hoc sai (F). Nu ta coi gi tr ng c gi tr 1 v gi tr sai l 0
th cc php ton vi cc bt trong my tnh c tng ng vi cc lin t logic.
Mt xu bt (hoc xu nh phn) l dy khng hoc nhiu bt. Chiu di ca xu l s cc bt
trong xu .
V d:
Xu nh 101010011 c di l 9.
Mt s nguyn uc biu din nh mt xu nh phn c di 16 bt.
12

Chng 1: Nhng kin thc c bn


Cc php ton vi bt c xy dng trn cc xu bt c cng di, bao gm: AND bt
(php v cp bt), OR (php hoc cp bt), XOR (php tuyn loi tr cp bt). V d: cho hai xu
bt 01101 10110 v 11000 11101 hy tm xu AND bt, OR bt, XOR bt.
Php AND
01101 10110
11000 11101
01000 10100
Php OR
01101 10110
11000 11101
11101 11111
Php XOR
01101 10110
11000 11101
10101 01011

Thut ton cc php tnh s nguyn: Cc thut ton thc hin cc php tnh vi cc
s nguyn khi dng khai trin nh phn l ht sc quan trng trong b x l s hc ca my
tnh. Nh chng ta bit, thc cht cc s nguyn c biu din trong my tnh l cc
xu bt nh phn, do vy chng ta c th s dng biu din nh phn ca cc s thc hin
cc php tnh.
Gi s khai trin nh phn ca cc s nguyn a v b tng ng l:
a = (an-1an-2 . . .a1a0)2 , b = (bn-1bn-2 . . .b1b0)2 . Khai trin ca a v b c ng n bt (chp nhn
nhng bt 0 u lm c n bt).
Xt bi ton cng hai s nguyn vit dng nh phn. Th tc thc hin vic cng cng
ging nh lm trn giy thng thng. Phng php ny tin hnh bng cch cng cc bt nh
phn tng ng c nh tnh tng hai s nguyn. Sau y l m t chi tit cho qu trnh cng
hai xu bt nh phn.
cng a vi b, trc ht ta cng hai bt phi nht, ngha l:
a0 + b0 = c0*2 + s0; trong s0 l bt phi nht ca s nguyn tng a + b, c0 l s cn nh
n c th bng 0 hoc 1. Sau ta cng hai bt tip theo v s nh:
a1 + b1 + c0 = c1*2 + s1; s1 l bt tip theo ca s a + b, c1 l s nh. Tip tc qu trnh ny
bng cch cng cc bt tng ng trong khai trin nh phn v s nh, giai on cui cng: an-1
13

Chng 1: Nhng kin thc c bn


+ bn-1 + cn-2 = cn-1 * 2 + sn-1. Bt cui cng ca tng l cn-1. Khi khai trin nh phn ca tng a +
b l (snan-1 . . .s1s0)2.
V d: cng a =(1110)2, b = (1011)2
Gii:
Trc ht ly:
a0 + b0 = 0 + 1 = 0 * 2 + 1 c0=0, s0 = 1
Tip tc:
a1 + b1 + c0 = 1 + 1 + 0 = 1 * 2 + 0 c1=1, s1 = 0
a2 + b2 + c1 = 1 + 0 + 1 = 1 * 2 + 0 c2=1, s2 = 0
a3 + b3 + c2 = 1 + 1 + 1 = 1 * 2 + 1 c3=1, s3 = 1
Cui cng:
s4 = c3 = 1 a + b = (11001)2
Thut ton cng:
void Cong(a , b: positive integer)
{
/*a = (an-1an-2 . . .a1a0)2 , b = (bn-1bn-2 . . .b1b0)2 */
c=0;
for (j=0 ; j n-1; j++) {
d= [( aj + bj + c)/ 2];
sj = aj + bj + c 2d;
c = d;
}
sn = c;
/*khai trin nh phn ca tng l (snan-1 . . .s1s0)2;
}

Thut ton nhn: nhn hai s nguyn n bt a, b ta bt u t vic phn tch:


a = (an-1an-2. . .a1a0), b = (bn-1bn-2. . .b1b0)
ab = a

n 1

j =
j=0 b j 2

n 1

a (b j 2

j=0

Ta c th tnh a.b t phng trnh trn. Trc ht, ta nhn thy abj = a nu bj=1, abj=0 nu
bj=0. Mi ln tnh ta nhn vi 2j hay dch chuyn sang tri j bt 0 bng cch thm j bt 0 vo bn
14

Chng 1: Nhng kin thc c bn


tri kt qu nhn c. Cui cng, cng n s nguyn abj 2j (j=0..n-1) ta nhn c a.b. V d sau
y s minh ho cho thut ton nhn:
V d: Tm tch ca a = (110)2, b= (101)2
Gii: Ta nhn thy:
ab020 = (110)2*1*20 = (110)2
ab121 = (110)2*0*21 = (0000)2
ab222 = (110)2*1*22 = (11000)2
S dng thut ton tnh tng hai s nguyn a, b c biu din n bt ta nhn c(ta c th
thm s 0 vo u mi ton hng):
(0110)2 + (0000)2 = (0110)2 ;
(00110)2 + (11000)2 = (11110)2 = ab.
Thut ton nhn hai s nguyn n bt c th c m phng nh sau:
void Nhan( a, b: Positive integer){
/* khai trin nh phn tng ng ca a = (an-1an-2. . .a1a0),
b = (bn-1bn-2. . .b1b0) */
for (j=0; j n-1; j++) {
if ( ( bj==1)
cj = a * 2j; /* a c dch tri j bt 0 */
else cj =0;
}
/*c0, c1.., cn-1 l nhng tch ring ca abj 2j(j=0..n-1 */
p=0;
for ( j=0 ; j n-1; j++)
p= p + cj;
/* p l gi tr ca tch ab */
}

1.5. NHNG KIN THC C BN V L THUYT TP HP


1.5.1. Khi nim & nh ngha
Cc tp hp dng nhm cc i tng li vi nhau. Thng thng, cc i tng trong
tp hp c cc tnh cht tng t nhau. V d, tt c sinh vin mi nhp trng to nn mt tp
hp, tt c sinh vin thuc khoa Cng ngh thng tin l mt tp hp, cc s t nhin, cc s thc..
15

Chng 1: Nhng kin thc c bn


. cng to nn cc tp hp. Ch rng, thut ng i tng c dng y khng ch r c th
mt i tng no, s m t mt tp hp no hon ton mang tnh trc gic v cc i tng.
nh ngha 1. Tp cc i tng trong mt tp hp c gi l cc phn t ca tp hp.
Cc tp hp thng c k hiu bi nhng ch ci in hoa m nh A, B, X, Y..., cc phn t
thuc tp hp hay c k hiu bi cc ch ci in thng nh a, b, c, u, v... ch a l phn t
ca tp hp A ta vit a A, tri li nu a khng thuc A ta vit a A.
Tp hp khng cha bt k mt phn t no c gi l tp rng (k hiu l hoc { })
Tp hp A c gi l bng tp hp B khi v ch khi chng c cng chung cc phn t v
c k hiu l A=B. V d tp A={ 1, 3, 5 } s bng tp B = { 3, 5, 1 }.
nh ngha 2. Tp A c gi l mt tp con ca tp hp B v k hiu l AB khi v ch
khi mi phn t ca A l mt phn t ca B. Hay A B khi v ch khi lng t:
x (x A x B) cho ta gi tr ng.
T nh ngha trn chng ta rt ra mt s h qu sau:

Tp rng l tp con ca mi tp hp.

Mi tp hp l tp con ca chnh n.

Nu A B v B A th A=B hay mnh :


x (x A xB ) x (xB x A) cho ta gi tr ng.

Nu A B v AB th ta ni A l tp con thc s ca B v k hiu l AB.

nh ngha 3. Cho S l mt tp hp. Nu S c chnh xc n phn t phn bit trong S, vi n


l s nguyn khng m th ta ni S l mt tp hu hn v n c gi l bn s ca S. Bn s ca S
c k hiu l |S |.
nh ngha 4. Cho tp hp S. Tp lu tha ca S k hiu l P(S) l tp tt c cc tp con
ca S.
V d S = { 0, 1, 2 } P(S) ={ , {0}, {1}, {2}, {0,1}, {0, 2}, {1, 2} {0, 1, 2}}.
nh ngha 5. Dy sp th t (a1, a2,.., an) l mt tp hp sp th t c a1 l phn t th
nht, a2 l phn t th 2, .., an l phn t th n.
Chng ta ni hai dy sp th t l bng nhau khi v ch khi cc phn t tng ng ca
chng l bng nhau. Ni cch khc (a1, a2,.., an) bng (b1, b2,.., bn) khi v ch khi ai = bi vi mi i
=1, 2, ..n.
nh ngha 6. Cho A v B l hai tp hp. Tch cc ca A v B c k hiu l AB, l
tp hp ca tt c cc cp (a,b) vi aA, b B. Hay c th biu din bng biu thc:
A B = { (a, b) | a A b B }

16

Chng 1: Nhng kin thc c bn


nh ngha 7. Tch cc ca cc tp A1, A2, . ., An c k hiu l A1A2..An l tp
hp ca dy sp th t (a1, a2,.., an) trong aiAi vi i = 1, 2,..n. Ni cch khc:
A1A2..An = { (a1, a2,.., an) | aiAi vi i = 1, 2,..n }

1.5.2. Cc php ton trn tp hp


Cc tp hp c th c t hp vi nhau theo nhiu cch khc nhau thng qua cc php
ton trn tp hp. Cc php ton trn tp hp bao gm: Php hp (Union), php giao
(Intersection), php tr (Minus).
nh ngha 1. Cho A v B l hai tp hp. Hp ca A v B c k hiu l AB, l tp
cha tt c cc phn t hoc thuc tp hp A hoc thuc tp hp B. Ni cch khc:
AB = { x | x A x B }
nh ngha 2. Cho A v B l hai tp hp. Giao ca A v B c k hiu l AB, l tp
cha tt c cc phn t thuc A v thuc B. Ni cch khc:
AB = { x | x A x B }
nh ngha 3. Hai tp hp A v B c gi l ri nhau nu giao ca chng l tp rng
(AB = ).
nh ngha 4. Cho A v B l hai tp hp. Hiu ca A v B l tp hp uc k hiu l A-B,
c cc phn t thuc tp hp A nhng khng thuc tp hp B. Hiu ca A v B cn c gi l
phn b ca B i vi A. Ni cch khc:
A B = { x | x A x B }
nh ngha 5. Cho tp hp A. Ta gi A l phn b ca A l mt tp hp bao gm nhng
phn t khng thuc A. Hay:

A = {x | x A}
nh ngha 6. Cho cc tp hp A1, A2, . ., An. Hp ca cc tp hp l tp hp cha tt c
cc phn t thuc t nht mt trong s cc tp hp Ai ( i=1, 2, . ., n). K hiu:

n
= 1 2
i =1

nh ngha 7: Cho cc tp hp A1, A2, . ., An. Giao ca cc tp hp l tp hp cha cc


phn t thuc tt c n tp hp Ai ( i=1, 2, . ., n).

n
Ai = A1 A 2 .. A n
i =1

17

Chng 1: Nhng kin thc c bn

1.5.3. Cc hng ng thc trn tp hp


Mi tp con ca tp hp tng ng vi mt tnh cht xc nh trn tp hp cho c gi
l mnh . Vi tng ng ny, cc php ton trn tp hp c chuyn sang cc php ton ca
logic mnh :

Ph nh ca A, k hiu A (hay NOT A) tng ng vi phn b A

Tuyn ca A v B, k hiu A B (hay A or B) tng ng vi A B

Hi ca A v B, k hiu A B (hay A and B) tng ng vi A B

Cc mnh cng vi cc php ton trn n lp thnh mt i s mnh (hay i s logic).


Nh th, i s tp hp v i s logic l hai i s ng cu vi nhau (nhng mnh pht biu
trn i s logic tng ng vi mnh pht biu trn i s tp hp). Vi nhng trng hp c
th, tu theo tnh hung, mt bi ton c th c pht biu bng ngn ng ca i s logic hay
ngn ng ca i s tp hp. Bng 1.5 th hin mt s hng ng thc ca i s tp hp.
Ta gi U l tp hp v tr hay tp hp ca tt c cc tp hp.

Bng 1.5: Mt s hng ng thc trn tp hp


HNG NG THC
A=A
A U = A (U l tp v tr)
AU=U
A=A
AA = A
AA=A

A =A
AB=BA
AB=BA
A (B C) = (A B)C
A (B C) = (AB) C
A (B C) = (A B) (A C )
A (B C) = (A B) (A C)

A B = A B
A B = A B

18

TN GI
Lut ng nht
Lut nut
Lut lu ng
Lut b
Lut giao hon
Lut kt hp
Lut phn phi

Lut De Morgan

Chng 1: Nhng kin thc c bn

1.6. BIU DIN TP HP TRN MY TNH


C nhiu cch khc nhau biu din tp hp trn my tnh, phng php ph bin l lu
tr cc phn t ca tp hp khng sp th t. Vi vic lu tr bng phng php ny, ngoi
nhng lng ph b nh khng cn thit, th qu trnh tnh hp, giao, hiu cc tp hp gp nhiu
kh khn v mt nhiu thi gian v mi php tnh i hi nhiu thao tc tm kim trn cc phn
t. Mt phng php lu tr cc phn t bng cch biu din c th t ca cc phn t ca mt
tp v tr t ra hiu qu hn rt nhiu trong qu trnh tnh ton.
Gi s tp v tr U l hu hn gm n phn t(hu hn c hiu theo ngha cc phn t ca
U lu tr c trong b nh my tnh). Gi s ta mun biu din tp hp A U. Trc ht ta
chn mt th t tu no i vi cc phn t ca tp v tr U, gi s ta c b c th t
a1,a2, . ., an. Sau xy dng mt xu bt nh phn c di n, sao cho nu bt th i c gi tr 1 th
phn t aiA, nu ai =0 th aiA (i=1,2..,n). V d sau s minh ha k thut biu din tp hp
bng xu bt nh phn.
V d: Gi s U = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }. Hy biu din tp hp A U l
1. Tp cc s nguyn l A U.
2. Tp cc s nguyn chn B U.
3. Tp cc s nguyn nh hn 5 C U.
4. Tm A B
5. Tm AC . . .
Gii: Trc ht ta coi th t cc phn t c sp xp theo th t tng dn tc ai=i
(i=1,2,..,10). Khi :
1- Xu bt biu din cc s l trong U ( {1, 3, 5, 7, 9 } ) l xu c di n = 10 trong cc
bt v tr th 1, 3, 5, 7, 9 c gi tr l 1, cc bt cn li c gi tr l 0. T ta c xu bt biu
din tp hp A l: 1 0 1 0 1 0 1 0 1 0.
2- Xu bt biu din cc s chn trong U ( {2, 4, 6, 8, 10 } ) l xu c di n = 10 trong
cc bt v tr th 2, 4, 6, 8, 10 c gi tr l 1, cc bt cn li c gi tr l 0. T ta c xu bt
biu din tp hp B l: 0 1 0 1 0 1 0 1 0 1.
3- Xu bt biu din cc s nh hn 5 trong U ( {1, 2, 3, 4 } ) l xu c di n = 10 trong
cc bt v tr th 1, 2, 3, 4 c gi tr l 1, cc bt cn li c gi tr l 0. T ta c xu bt biu
din tp hp C l: 1 1 1 1 0 0 0 0 0 0.
4- Xu bt biu din tp hp A B l: (1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1) l xu 1 1 1
1 1 1 1 1 1 1. Nh vy, A B = U.
5- Tng t nh vy vi A C (1 0 1 0 1 0 1 0 1 0 1 1 1 1 0 0 0 0 0 0) l xu: 1 0 1 0
0 0 0 0 0 0. Nh vy A C = { 1, 3 }
19

Chng 1: Nhng kin thc c bn

NHNG NI DUNG CN GHI NH


Cn hiu v nm vng c nhng ni dung sau:
9

Cc php ton hi, tuyn, tuyn loi, suy ra, ko theo ca logic mnh .

Cc phng php chng minh nh l dng bng chn l v cc tng ng


locgic.

Phng php biu din cc cu hi thng thng bng logic v t.

nh ngha v cc php ton trn tp hp.

Phng php biu din tp hp trn my tnh

BI TP CHNG 1
Bi 1. Lp bng gi tr chn l cho cc mnh phc hp sau:
a) (p q) (qp)

b) (p q) (q p)

c) (p q) (p q)

d) (p q) (p q)

e) (p q) (p q)

f) (p q) (pq)

g) ( p q) r

h) (p q) r

i) (p q) (q r)

j) (p q) (qr)

Bi 2. Dng bng chn l chng minh lut giao hon:


pqqp
pqqp
Bi 3. Dng bng chn l chng minh lut kt hp:
(p q) r p ( q r)
( p q) r p (q r)
Bi 4. Dng bng chn l chng minh lut phn phi:
p (q r) (p q) (p r)
Bi 5. Chng minh cc cng thc sau y l ng nht ng bng cch lp bng gi tr chn l:
a) ( X(YZ)) ((X Y)(XZ));
b) (XY)((XZ)(X(YZ)));
c) (XZ) ((YZ)((XY)Z)).
Bi 6. Chng minh cc cng thc sau y l tng ng logic:

20

Chng 1: Nhng kin thc c bn

a)

X (Y1 Y2 ... Yn ( X Y1 ) ( X Y2 ) ... ( X Yn )

b)

X (Y1 Y2 ... Yn ( X Y1 ) ( X Y2 ) ... ( X Yn )

c) ( X 1 X 2

Xn

X1 X1

Xn

X1 X 2

Xn

X1 X 2

Xn

d)

Bi 7. Cho A, B, C l cc tp hp. Chng minh rng:

( A B) C = ( A C ) ( B C )
Bi 8. Cho A, B, C l cc tp hp. Chng minh rng:

( B A) (C A) = ( B C ) A
Bi 9. Chng minh rng nu A, B l cc tp hp th:

( A B) ( A B ) = A
Bi 10. Cho A, B, C l cc tp hp. Chng minh rng:

a) A B C = A B C
b) ( A B C ) ( A B )
c) ( A B) C ( A C )
d ) ( A C ) (C B ) =
e) ( B A) (C A) = ( B C ) A
f)

A B = A B

g ) ( A B) ( A B = A

21

Chng 2: Bi ton m v bi ton tn ti

CHNG II: BI TON M V BI TON TN TI

m cc i tng c nhng tnh cht no l mt bi ton quan trng ca l thuyt t


hp. Gii quyt tt bi ton m gip ta gii nhiu bi ton khc nhau trong nh gi phc tp
tnh ton ca cc thut ton v tm xc sut ri rc cc bin c. Phng php chung gii bi
ton m c da trn cc nguyn l m c bn (nguyn l cng, nguyn l nhn). Mt s bi
ton m phc tp hn c gii bng cch qui v cc bi ton con s dng c cc nguyn
l m c bn hoc tm ra h thc truy hi tng qut.
Ni dung chnh c cp trong chng ny bao gm:
9

Cc nguyn l m c bn

Nguyn l b tr

Hon v v t hp

H thc truy hi

Qui v cc bi ton con

Gii thiu bi ton tn ti

Phng php phn chng gii quyt bi ton tn ti.

Nguyn l Dirichlet gii quyt bi ton tn ti.

Bn c c th tm hiu nhiu k thut m cao cp hn trong ti liu [1], [2] trong phn
tham kho ca ti liu ny.

2.1. NHNG NGUYN L M C BN


2.1.1. Nguyn l cng
Gi s c hai cng vic. Vic th nht c th tin hnh bng n1 cch, vic th hai c th tin
hnh bng n2 cch v nu hai vic ny khng th tin hnh ng thi. Khi s c n1 + n2 cch
gii gii quyt mt trong hai vic trn.
Chng ta c th m rng qui tc cng cho trng hp nhiu hn hai cng vic. Gi s cc
vic T1, T2,.., Tm c th lm tng ng bng n1, n2,.., nm cch v gi s khng c hai vic Ti, Tj
no lm vic ng thi (i,j = 1, 2,.., m ; i j ). Khi , c n1 + n2 +.. +nm cch thc hin mt trong
cc cng vic T1, T2,.., Tm.
Qui tc cng c pht biu di dng ca ngn ng tp hp nh sau:

22

Nu A v B l hai tp ri nhau (A B = ) th: N(AB) = N(A) + N(B).

Chng 2: Bi ton m v bi ton tn ti

Nu A1, A2,.., An l nhng tp hp ri nhau th:


N(A1 A2 .. An ) = N(A1) + N(A2) +..+ N(An).

V d 1. Gi s cn chn hoc mt cn b hoc mt sinh vin tham gia mt hi ng ca


mt trng i hc. Hi c bao nhiu cch chn v i biu ny nu nh c 37 cn b v 63
sinh vin.
Gii: Gi vic th nht l chn mt cn b t tp cn b ta c 37 cch. Gi vic th hai l
chn mt sinh vin t tp sinh vin ta c 63 cch. V tp cn b v tp sinh vin l ri nhau, theo
nguyn l cng ta c tng s cch chn v i biu ny l 37 + 63 = 100 cch chn.
V d 2. Mt on vn ng vin gm mn bn sng v bi c c i thi u nc
ngoi. S vn ng vin nam l 10 ngi. S vn ng vin thi bn sng k c nam v n l 14
ngi. S n vn ng vin thi bi bng s vn ng vin nam thi bn sng. Hi on c bao
nhiu ngi.
Gii: Chia on thnh hai tp, tp cc vn ng vin nam v tp cc vn ng vin n. Ta
nhn thy tp n li c chia thnh hai: thi bn sng v thi bi. Thay s n thi bi bng s nam
thi bn sng, ta c s n bng tng s vn ng vin thi bn sng. T theo nguyn l cng
ton on c 14 + 10 = 24 ngi.
V d 3. gi tr ca bin k s bng bao nhiu sau khi thc hin on chng trnh sau:
k:= 0
for i1:= 1 to n1
k:=k+1
for i2:= 1 to n2
k:=k+1
..........
..........
for im:= 1 to nm
k:=k+1

Gii: Coi mi vng for l mt cng vic, do ta c m cng vic T1, T2,.., Tm. Trong Ti
thc hin bi ni cch (i= 1, 2,.., m). V cc vng for khng lng nhau hay cc cng vic khng
thc hin ng thi nn theo nguyn l cng tng tt c cc cch hon thnh T1, T2,.., Tm l k=
n1 + n2 +.. + nm.

2.1.2. Nguyn l nhn


Gi s mt nhim v no c tch ra hai cng vic. Vic th nht c thc hin bng
n1 cch, vic th hai c thc hin bng n2 cch sau khi vic th nht c lm, khi s c
n1.n2 cch thc hin nhim v ny.
Nguyn l nhn c th c pht biu tng qut bng ngn ng tp hp nh sau:
23

Chng 2: Bi ton m v bi ton tn ti


Nu A1, A2,.., Am l nhng tp hp hu hn, khi s phn t ca tch cc cc tp ny
bng tch s cc phn t ca mi tp thnh phn. Hay ng thc:
N (A1 A2.. Am ) = N (A1) N (A2)... N (Am).
Nu A1 = A2 =.. Am th N(Ak) = N(A)k
V d 1. Gi tr ca k s bng bao nhiu sau khi ta thc hin on chng trnh sau:
k:=0
for i1 = 1 to n1
for i2 = 1 to n2

for in =1 to nm
k:=k +1

Gii: Gi tr khi to k=0. Mi vng lp kng nhau i qua gi tr ca k c tng ln 1 n


v. Gi Ti l vic thi hnh vng lp th i. Khi , s ln vng lp l s cch thc hin cng vic.
S cch thc hin cng vic Tj l nj (j=1,2,.., n). Theo qui tc nhn ta vng lp kp c duyt qua
n1 +n2 +..+nm ln v chnh l gi tr ca k.
V d 2. Ngi ta c th ghi nhn cho nhng chic gh ca mt ging ng bng mt ch
ci v sau l mt s nguyn nh hn 100. Bng cch nh vy hi c nhiu nht bao nhiu
chic gh c th ghi nhn khc nhau.
Gii: C nhiu nht l 26 x 100 = 2600 gh c ghi nhn. V k t gn nhn u tin l
mt ch ci vy c 26 cch chn cc ch ci khc nhau ghi k t u tin, tip theo sau l mt
s nguyn dng nh hn 100 do vy c 100 cch chn cc s nguyn gn tip sau ca mt
nhn. Theo qui tc nhn ta nhn c 26 x 100 = 2600 nhn khc nhau.
V d 3. C bao nhiu xu nh phn c di 7.
Gii: mt xu nh phn c di 7 gm 7 bt, mi bt c hai cch chn (hoc gi tr 0 hoc
gi tr 1), theo qui tc nhn ta c 2.2.2.2.2.2.2 = 27 = 128 xu bt nh phn di 7.
V d 4. C bao nhiu hm n nh xc nh t mt tp A c m phn t nhn gi tr trn tp
B c n phn t.
Gii: Trc tin ta nhn thy, nu m >n th tn ti t nht hai phn t khc nhau ca A cng
nhn mt gi tr trn B, nh vy vi m>n th s cc hm n nh t AB l 0. Nu m<=n, khi
phn t u tin ca A c n cch chn, phn t th hai c n-1 cch chn,.., phn t th k c n-k+1
cch chn. Theo qui tc nhn ta c n(n-1) (n-2)...(n-m+1) hm n nh t tp A sang tp B.
V d 5. Dng ca s in thoi Bc M c qui nh nh sau: s in thoi gm 10 ch
s c tch ra thnh mt nhm m vng gm 3 ch s, nhm m chi nhnh gm 3 ch s v
nhm m my gm 4 ch s. V nhng nguyn nhn k thut nn c mt s hn ch i vi mt
24

Chng 2: Bi ton m v bi ton tn ti


s con s. Ta gi s, X biu th mt s c th nhn cc gi tr t 0..9, N l s c th nhn cc ch
s t 2..9, Y l cc s c th nhn cc ch s 0 hoc 1.
Hi theo hai d n nh s NYX NNX XXXX v NXX NXX XXXX c bao nhiu s in
thoi c nh s khc nhau Bc M.
Gii: nh s theo d n NYX NNX XXXX c nhiu nht l:
8 x 2 x 10 x 8 x 8 x10 x10 x10 x 10 x 10 x10 = 2 x 83 x 106 = 1 024. 106
nh s theo d n NXX NXX XXXX c nhiu nht l:
8 x 10 x 10 x 8 x 10 x10 x10 x10 x 10 x 10 x10 = 82 x 108 = 64. 108
V d 6. Dng qui tc nhn hy ch ra rng s tp con ca mt tp S hu hn l 2N(S).
Gii: Ta lit k cc phn t ca tp S l s1, s2,.., sN(S). Xy dng mt xu bt nh phn di
N(S) bt, trong nu bt th i c gi tr 0 th phn t si S, nu bt th i c gi tr 1 th phn t
siS (i=1, 2,.., N(S) ). Nh vy, theo nguyn l nhn, s tp con ca tp hp S chnh l s xu bt
nh phn c di N(S). Theo v d 3, chng ta c 2N(S) xu bt nh phn di N(S).

2.2. NGUYN L B TR
Trong mt s bi ton m phc tp hn. Nu khng c gi thit g v s ri nhau gia hai
tp A v B th N(AB) = N(A) + N(B) N(AB).

AB

V d 1. lp ton hc ri rc c 25 sinh vin gii tin hc, 13 sinh vin gii ton v 8 sinh
vin gii c ton v tin hc. Hi lp c bao nhiu sinh vin nu mi sinh vin hoc gii ton hoc
hc gii tin hc hoc gii c hai mn?
Gii: Gi A tp l tp cc sinh vin gii Tin hc, B l tp cc sinh vin gii ton. Khi
AB l tp sinh vin gii c ton hc v tin hc. V mi sinh vin trong lp hoc gii ton, hoc
gii tin hc hoc gii c hai nn ta c tng s sinh vin trong lp l N(AB). Do vy ta c:
N(AB) = N(A) + N(B) N(AB) = 25 + 13 8 = 30.
V d 2. C bao nhiu s nguyn khng ln hn 1000 chia ht cho 7 hoc 11.
Gii: Gi A l tp cc s nguyn khng ln hn 1000 chia ht cho 7, B l tp cc s nguyn
khng ln hn 1000 chia ht cho 11. Khi tp s nguyn khng ln hn 1000 hoc chia ht cho
7 hoc chia ht cho 11 l N(AB). Theo cng thc 1 ta c:
25

Chng 2: Bi ton m v bi ton tn ti


N(AB) = N(A) + N(B) N(AB) = 1000/7+ 1000/11 - 1000/7.11
= 142 + 90 12 = 220.
Trc khi a ra cng thc tng qut cho n tp hp hu hn. Chng ta a ra cng thc
tnh s phn t ca hp 3 tp A, B, C.
Ta nhn thy N(A) + N(B) + N(C) m mt ln nhng phn t ch thuc mt trong ba tp
hp. Nh vy, s phn t ca A B, AC, BC c m hai ln v bng N(AB), N(AC),
N(BC), c m ba ln l nhng phn t thuc ABC. Nh vy, biu thc:
N(ABC) N(AB)- N(AC) N(BC) ch m cc phn t ch thuc mt trong ba
tp hp v loi b i nhng phn t c m hai ln. Nh vy, s phn t c m ba ln cha
c m, nn ta phi cng thm vi giao ca c ba tp hp. T ta c cng thc i vi 3 tp
khng ri nhau:
N(ABC) = N(A) + N(B) + N(C) N(AB) N(AC) N(BC) + N(ABC)
nh l. Nguyn l b tr. Gi s A1, A2,.., Am l nhng tp hu hn. Khi :
N(A1A2 ...Am) = N1- N2 +.. +(-1)m-1Nm, (2)
trong Nk l tng phn t ca tt c cc giao ca k tp ly t m tp cho. (ni ring N1=N(A1)
+ N(A2) +..+ N(Am), Nm = N(A1 A2 ...Am ). Ni cch khc:
N ( A1 A2 ... An ) =

N(A )

1 i n

1 i , j n

N ( Ai A j ) +

N(A

1 i < j < k n

A j Ak ... + ( 1) n +1 N ( A1 A2 .. An )

nh l c chng minh bng cch ch ra mi phn t ca hp n tp hp c m ng


mt ln. Bn c c th tham kho cch chng minh trong ti liu [1].
V d 3. Tm cng thc tnh s phn t ca 4 tp hp.
Gii: T nguyn l b tr ta c:
N(A1A2A3A4) = N(A1) + N(A2) + N(A3) + N(A4) N(A1A2) N(A1A3)
N(A1A4) N(A2A3) N(A2A4) N(A3A4) + N(A1A2A3) + N(A1A2A4) +
N(A1A3A4) + N(A2A3A4) N(A1A2A3A4).
V d 4. Hi trong tp X = { 1, 2,.., 10000} c bao nhiu s khng chia ht cho bt c s
no trong cc s 3, 4, 7.
Gii: Gi A l tp cc s nh hn 10000 chia ht cho 3, B l tp cc s nh hn 10000 chia
ht cho 4, C l tp cc s nh hn 10000 chia ht cho 7. Theo nguyn l b tr ta c:
N(A B C) = N(A)+N(B) + N(C) N(AB N(AC) N(BC) + N(ABC)
trong :
N(A) + N(B) + N (C) = [10 000/3] + [10 000/4] + [10 000/7]
= 3333 + 2500 + 1428 = 7261
26

Chng 2: Bi ton m v bi ton tn ti


N(AB) = N(A) + N(B) N(AB) = 3333 + 2500 [10000/3x4] = 833
N(AC) = N(A) + N(C) N(AC) = 3333 + 1428 [10000/3x7] = 476
N(BC) = N(B) + N(C) N(BC) = 2500 + 1428 [10000/4x7] = 357
N(AB) + N(AC) + N(BC) = 833 + 476 + 357 = 1666
N(ABC) = [10000/3x4x7] = 119.
=>S cc s nh hn 10000 cn m l:
1000 - N(ABC) = 7261 1666 + 119 = 4286.
V d 5. C bao nhiu xu nh phn di 10 bt u bi 00 hoc kt thc bi 11.
Gii: Gi A l s xu nh phn di 10 bt u bi 00, B l s xu nh phn di 10 kt
thc bi 11. D rng nhn thy, N(A) = N(B) = 256, N(AB) = 26 = 64. Theo nguyn l b tr ta
c:
N(AB) = N(A) + N(B) N(AB)
= 256 + 256 64 = 448.
V d 6. Bi ton b th. C n l th v n phong b ghi sn a ch. B ngu nhin cc l
th vo cc phong b. Hi xc sut xy ra khng mt l th no b ng a ch l bao nhiu?
Gii: C tt c n! cch b th. Vn t ra l m s cch b th sao cho khng l th
no ng a ch. Gi X l tp hp tt c cc cch b th v Ak l tnh cht l th k b ng a
ch. Khi theo nguyn l b tr ta c:

N = N N 1 + N 2 ... + ( 1) n N n
Trong N l s cn tm, N = n!, Nk l s tt c cc cch b th sao cho c k l th ng
a ch. Nhn xt rng, Nk l mi cch ly k l th t n l, vi mi cch ly k l th, c (n-k )!
cch b k l th ny ng a ch, t ta nhn c.

n!
1 1
N k = C (n, k )(n k )!=
v N = n!(1 +
k!
1! 2!

(1) n
+
n!

T ta c xc xut cn tm l:

1 1
1 +
1! 2!

(1) n
+
= e 1
n!

S c tnh nh trn c gi l s mt th t v c k hiu l Dn. Di y l mt vi


gi tr ca Dn, s tng nhanh ca Dn mt ln na cho ta thy r s bng n t hp.
N

10

11

Dn

44

265

1845

14833

133496

1334961

4890741
27

Chng 2: Bi ton m v bi ton tn ti

2.3. M CC HON V T HP
2.3.1. Chnh hp lp
nh ngha 1. Mt chnh hp lp chp k ca n phn t l b c th t gm k thnh phn ly
t n phn t ca tp cho.
Nh vy, mt chnh hp lp chp k ca n phn t c th xem l phn t ca tch cc Ak
vi A l tp cho. Theo nguyn l nhn, s cc tt c cc chnh hp lp chp k ca n s l nk.
V d 1. Tnh s hm t tp c k phn t vo tp c n phn t.
Gii: Biu din mi hm bng mt b k thnh phn, trong thnh phn th i l nh ca
phn t th i (1<=i<=k). Mi thnh phn c ly ra t mt trong n gi tr. T suy ra s hm l
s b k thnh phn ly t n thnh phn bng nk.
V d 2. T bng ch ci ting Anh c th to ra c bao nhiu xu c di n.
Gii: Bng ch ci ting Anh gm 26 k t [A..Z], s cc xu c di n c chn t
26 ch ci chnh l chnh hp lp n ca 26 phn t v bng 26n.
V d 3. Tnh xc xut ly ra lin tip c 3 qu bng ra khi bnh kn cha 5 qu , 7
qu xanh nu sau mi ln ly mt qu bng ra li b n tr li bnh.
Gii: S kt cc c li ta ly ra lin tip 3 qu bng l 53 v c 5 qu ta phi ly 3
qu (ch v c hon li). Ton b kt cc c th ly ra ba qu bng bt k trong 12 qu bng
l 123. Nh vy, xc sut c th ly ra 3 qu bng lin tip l 53/123.

2.3.2. Chnh hp khng lp


nh ngha 2. Chnh hp khng lp chp k ca n phn t l b c th t gm k thnh phn
ly ra t n phn t cho. Cc phn t khng c lp li.
xy dng mt chnh hp khng lp, ta xy dng t thnh phn u tin. Thnh phn ny
c n kh nng chn. Mi thnh phn tip theo nhng kh nng chn gim i 1 (v khng c ly
lp li). Ti thnh phn th k c n-k + 1 kh nng chn. Theo nguyn l nhn ta c s chnh hp
lp k ca tp hp n phn t k hiu l P(n, k) c tnh theo cng thc:

P(n, k ) = n(n 1)..(n k + 1) =

n!
(n k )!

V d 1. Tm s hm n nh c th xy dng c t tp k phn t sang tp n phn t.


Gii: S hm n nh t tp k phn t sang tp n phn t chnh l P(n,k).
V d 2. Gi s c tm vn ng vin chy thi. Ngi v nht s c nhn huy chng
vng, ngi v nh nhn huy chng bc, ngi v ba nhn huy chng ng. Hi c bao nhiu
cch trao huy chng nu tt c cc kt cc u c th xy ra.
Gii: S cch trao huy chng chnh l s chnh hp chp 3 ca tp hp 8 phn t. V th
c P(8,3) = 8.7.6 = 336 cch trao huy chng.
28

Chng 2: Bi ton m v bi ton tn ti


V d 3. C bao nhiu cch chn 4 cu th khc nhau trong i bng gm 10 cu th
tham gia cc trn u n.
Gii: C P(10,4) = 10.9.8.7 = 5040 cch chn.

2.3.3. Hon v
nh ngha 3. Ta gi cc hon v ca n phn t l mt cch xp c th t cc phn t .
S cc hon v ca tp n phn t c th coi l trng hp ring ca chnh hp khng lp vi k = n.
Ta cng c th ng nht mt hon v vi mt song nh t tp n phn t ln chnh n. Nh
vy, s hon v ca tp gm n phn t l P(n, n) = n!.
V d 1. C 6 ngi xp thnh hng chp nh. Hi c th b tr chp c bao nhiu
kiu khc nhau.
Gii: Mi kiu nh l mt hon v ca 6 ngi. Do c 6! = 720 kiu nh khc nhau c
th chp.
V d 2. Cn b tr thc hin n chng trnh trn mt my tnh. Hi c bao nhiu cch b tr
khc nhau.
Gii: S chng trnh c nh s t 1, 2,.., n. Nh vy, s chng trnh cn thc hin
trn mt my tnh l s hon v ca 1, 2,.., n.
V d 3. Mt thng nhn i bn hng ti tm thnh ph. Ch ta c th bt u hnh trnh
ca mnh ti mt thnh ph no nhng phi qua 7 thnh ph kia theo bt k th t no m ch
ta mun. Hi c bao nhiu l trnh khc nhau m ch ta c th i.
Gii: V thnh ph xut pht c xc nh. Do vy thng nhn c th chn tu 7
thnh ph cn li hnh trnh. Nh vy, tt c s hnh trnh ca thng nhn c th i qua l 7!
= 5040 cch.

2.3.4. T hp
nh ngha 4. Mt t hp chp k ca n phn t l mt b khng k th t gm k thnh
phn khc nhau ly t n phn t cho. Ni cch khc, ta c th coi mt t hp chp k ca n phn
t l mt tp con k phn t ly trong n phn t. S t hp chp k ca n phn t k hiu l C(n,k).
Ta c th tnh c trc tip s cc t hp chp k ca tp n phn t thng qua chnh hp
khng lp ca k phn t.
Xt tp hp tt c cc chnh hp khng lp chp k ca n phn t. Sp xp chng thnh
nhng lp sao cho hai chnh hp thuc cng mt lp ch khc nhau v th t. R rng mi lp
nh vy l mt t hp chp k ca n phn t(P(n,k)). S chnh hp trong mi lp u bng nhau
v bng k! (s hon v k phn t: P(k,k) ). S cc lp bng s t hp chp k ca n (P(n,k)). T
ta c:

P(n, k ) = C (n, k ).P(k , k ) C (n, k ) =

P(n, k )
n!
=
(1)
k!
k!(n k )!
29

Chng 2: Bi ton m v bi ton tn ti


V d 1. Cho S = { a, b, c, d } tm C(4,2).
Gii. R rng C(4,2) = 6 tng ng vi 6 tp con {a, b}, {a, c}, {a, d}, {b,c}, {b, d} {c,d}.
V d 2. C n i bng thi u vng trn. Hi phi t chc bao nhiu trn u.
Gii: C hai i bng th c mt trn. T suy ra s trn u s bng s cch chn 2
trong n i, ngha l bng C(n, 2) = n! / 2!(n-2)! = n(n-1)/2 trn u.
V d 3. Chng minh
a. C(n,k) = C(n, n-k)

(2)

b. C(n, 0) = C(n,n)= 1

(3)

c. C(n,k) = C(n-1,k-1) + C(n-1,k)

(4)

Gii:
a. C(n,n-k) = n!/(n-k)! (n-n+k)! = n!/k!(n-k)! = C(n,k).
Hoc C(n, k) = n!/k!(n-k)! = n!/ (n-k)! (n-(n-k))! = C(n, n-k);
b. Ch 0!=1 => b hin nhin ng
c. C(n,k) = C(n-1,k-1) + C(n-1,k)

C (n 1, k 1) + C (n 1, k ) =

(n 1)!
(n 1)!
+
(k 1)!(n 1 k + 1)! k!(n k 1)!

(n 1)!
1
(n 1)!.n
1
+ =

(k 1)!(n k 1)! n k k (k 1)!k (n k 1)!(n k )


n!
=
= C (n.k )
k!(n k )!
=

T nhng tnh cht trn, ta c th tnh tt c cc h s t hp ch bng php cng. Cc h s


ny c tnh v vit ln lt theo dng, trn mi dng ta tnh v thc hin theo ct. Bng c
dng tam gic chnh l tam gic Pascal.
Cc h s t hp c lin quan cht ch ti vic khai trin lu tha ca mt nh thc. Thc
vy, trong tch:
(x+y)n = (x+y)(x+y)...(x+y) h s ca xkyk-n s l s cch chn k phn t (x+y) m t ly
ra x v ng thi (n-k) nhn t cn li ly ra y, ngha l:

( x + y ) n = C (n,0) x n + C (n,1) x n 1 y + ... + C (n, n 1) xy n 1 + C (n,0) y n = k =0 C (n, k ) x n k y k (5)


n

Cng thc (5) cn c gi l khai trin nh thc Newton, cc h s t hp cn c gi l


h s nh thc. Chng hn lu tha bc 8 ca nh thc (x+y)8 c khai trin nh sau:

( x + y ) 8 = x 8 + 8 x 7 y + 28x 6 y 2 + 56 x 5 y 3 + 70 x 4 y 4 + 56 x 3 y 5 + 28x 2 y 6 + 8 xy 7 + y 8
30

Chng 2: Bi ton m v bi ton tn ti


Trong trng hp y=1, tc khai trin (x+1)n ta c:

( x + 1) n = C (n,0) x n + C (n,1) x n 1 + ... + C (n, n 1) x + C (n, n)


Hoc ng thc sau s c rt ra t khai trin nh thc Newton:

2 n = (1 + 1) n = C (n,0) + C (n,1) + ... + C (n, n 1) + C (n, n)


C th ni rt nhiu ng thc v h s t hp s c suy ra. Nh tnh cc tp l, o hm

2.4. H THC TRUY HI


2.4.1. nh ngha v v d
Thng thng ngi ta thng quan tm ti nhng bi ton m trong kt qu m ph
thuc vo mt tham s u vo (m ta k hiu l n), chng hn nh cc s mt th t Dn. Vic
biu din kt qu ny nh mt hm ca n bng mt s hu hn cc php ton khng phi l n
gin. Trong nhiu trung hp, vic tm ra mt cng thc trc tip gia kt qu m v n l ht sc
kh khn v nhiu khi khng gii quyt c, trong khi cng thc lin h gia kt qu m
ng vi gi tr n vi cc kt qu b hn n li n gin v d tm. Thng qua cng thc ny v mt
vi gi tr ban u, ta c th tnh mi gi tr cn li khc. Cng thc gi l cng thc truy hi
hay cng thc qui. c bit, cng thc truy hi rt thch hp vi lp trnh trn my tnh. N
cng cho php gim ng k phc tp cng nh gia tng n nh ca qu trnh tnh ton.
nh ngha 1. H thc truy hi i vi dy s {an} l cng thc biu din an qua mt hay
nhiu s hng i trc ca dy, c th l a1, a2,.., an-1 vi mi nn0 nguyn dng. Dy s c
gi l li gii hay nghim ca h thc truy hi nu cc s hng ca n tho mn h thc truy hi.
V d 1. Li kp. Gi s mt ngi gi 10000 la vo ti khon ca mnh ti mt ngn hng
vi li xut kp 11% mi nm. Hi sau 30 nm anh ta c bao nhiu tin trong ti khon ca mnh?
Gii: Gi Pn l tng s tin c trong ti khon sau n nm. V s tin c trong ti khon sau n
nm bng s tin c c trong n-1 nm cng vi li xut nm th n. Nn dy {Pn} tho mn h
thc truy hi:
Pn = Pn-1 + 0.11Pn-1 = 1.11Pn-1
Chng ta c th dng phng php lp tm cng thc trn cho Pn. D nhn thy rng:
P0 = 10000
P1 = 1.11P0
P2 = 1.11P1 = (1.11)2P0
.....................
Pn = 1.11Pn-1 = (1.11)n-1P0
Ta c th chng minh tnh ng n ca cng thc truy hi bng qui np.
31

Chng 2: Bi ton m v bi ton tn ti


Thay P0= 10000, v n = 30 ta c:
P30 = (1.11)3010000 = 228922,97 $
V d 2. H nh th v s Fibonaci. Mt cp th sinh i (mt con c v mt con ci)
c th ln mt hn o. Gi s rng cp th s cha sinh sn c trc khi y hai thng tui.
T khi chng y hai thng tui, mi thng chng sinh thm c mt cp th. Tm cng thc
truy hi tnh s cp th trn o sau n thng vi gi s cc cp th l trng th.
S thng

S cp sinh sn

S cp th con

Tng s cp th

..

..

..

..

Gii: Gi s fn l s cp th sau n thng. Ta s ch ra rng f1, f2,.., fn (n=1, 2,.., n) l cc s


ca dy fibonaci.
Cui thng th nht s cp th trn o l f1 = 1. V thng th hai cp th vn cha n tui
sinh sn c nn trong thng th hai f2 =1. V mi cp th ch c sinh sn sau t nht hai thng
tui, nn ta tm s cp th sau thng th n bng cch cng s cp th sau thng n-2 v thng n-1
hay fn = fn-1 + fn-2. Do vy, dy { fn} tho mn h thc truy hi:
fn = fn-1 + fn- 2 vi n>=3 v f1 = 1, f2 = 1.
V d 3: Tnh s mt th t Dn.
Gii: nh s th v phong b th t 1 n n (th i gi ng a ch nu b vo phong b i).
Mt cch b th uc ng nht vi hon v (a1, a2,.., an) ca { 1, 2,.., n }. Mt mt th t c
nh ngha l l mt hon v (a1, a2,.., an) sao cho aii vi mi i. Thnh phn a1 c th chp nhn
mi gi tr ngoi 1. Vi mi gi tr k (k1) ca a1, xt hai trng hp:
1. ak =1, khi cc thnh phn cn li c xc nh nh mt mt th t ca n-2 phn t,
tc l s mt th t loi ny bng Dn-2.
2. ak1, khi cc thnh phn t 2 n n c xc nh nh mt mt th t ca n-1 phn t
cn li, tc l s mt th t ny thuc loi Dn-1.
T ta nhn c cng thc:
Dn = (n-1) (Dn-1 + Dn-2), n>=3 vi D1 = 0, D2 =1.
32

Chng 2: Bi ton m v bi ton tn ti


Mi gi tr cn li c tnh n gin nh lut k tha:
D3 = (3 1) (0 +1)

=2

D4 = (4 1 )( 1 + 2)

=9

D5 = (5 1 )( 9 + 2)

= 44

D6 = (6 1 )(9 + 44)

= 265

D7 = (7 1 )( 44 + 265) = 1854
D8 = (8 1 )( 265 + 1854)

= 14833

.............................
cng thc ng vi n = 2, ta coi D0 = 1
C th nhn c s mt th t thng qua cng thc truy hi trn v:

Dn = (n 1)( Dn1 + Dn 2 ) Dn nDn 1 = ( Dn1 (n 1) Dn 2 )


t Vn = Dn nDn1 ta c:

Dn nDn 1 = Vn = Vn 1 =

= (1) n 1V1 = (1) n . Hay ta c th vit:

Dn
Dn 1
(1) n
=

. Cng cc h thc trn vi n = 1, 2,.., n ta c:


n! (n 1)!
n!
Dn
1 1
= 1 +
n!
1! 2!
Dn = n!(1

1 1
+
1! 2!

(1) n
+
. T thu li c cng thc c:
n!
+

(1) n
)
n!

V d 3. Tnh h s t hp C(n,k).
Gii: Chn phn t c nh a trong n phn t ang xt. Chia s cch chn tp con k phn t
ny thnh hai lp (lp cha a v lp khng cha a). Nu a c chn th ta cn b xung k-1 phn
t t n-1 phn t cn li, t lp cha a gm C(n-1, k-1) cch. Nu a khng c chn, th ta
phi chn k phn t t n-1 phn t cn li, t lp khng cha a gm C(n-1, k) cch. Theo
nguyn l cng ta c cng thc truy hi:
C(n, k) = C(n-1, k-1) + C(n-1,k) vi cc gi tr bin c suy ra trc tip:
C(n,0) = C(n,n) = 1.
Phng php ny c gi l phng php kh. Khng phi lc no cng d dng kh
c cng thc truy hi a v cng thc trc tip. Tuy nhin, trong mt s trng hp c
bit ta c th a ra phng php tng qut gii cng thc truy hi.
33

Chng 2: Bi ton m v bi ton tn ti

2.4.2. Gii cng thc truy hi tuyn tnh thun nht vi h s hng s
nh ngha 1. Mt h thc truy hi tuyn tnh thun nht bc k vi h s hng s l h thc
truy hi c dng:

a n = c1 a n1 + c1 a n2 +

+ c k a n k (1), trong c1,c2,.., ck l cc s thc v ck 0

Ta cn tm cng thc trc tip cho s hng an ca dy s {an} tho mn cng thc (1). Theo
nguyn l th hai ca qui np ton hc th dy s tho mn nh ngha trn c xc nh duy
nht nu nh n tho mn k iu kin u:
a0 = C0, a1 = C1,.., ak-1 = Ck-1, trong C1, C2,.., Ck-1 l cc hng s.
V d 1. H thc truy hi Pn=(1.11)Pn-1 l h thc truy hi tuyn tnh thun nht bc 1. H
thc truy hi fn = fn-1 + fn-2 l h thc truy hi tuyn tnh thun nht bc 2. H thc truy hi an = an5 l h thc truy hi tuyn tnh thun nht bc 5. H thc truy hi Bn=nBn-1 khng phi l h thc
truy hi tuyn tnh thun nht v n khng c h s hng s.
Phng php c bn gii h thc truy hi tuyn tnh thun nht l tm nghim di
dng an = rn, trong r l hng s. Cng cn ch rng an = rn l nghim ca h thc truy hi an =
c1an-1 + c2 an-2 +..+ ckan-k nu v ch nu:
an = c1rn-1 + c2rn-2 +..+ ckrn-k.
Chia c hai v cho rn-k ta nhn c:
rk c1rk-1 c2rk-2 -.. ck-1r ck =0

(2)

Vy dy {an} vi an=rn l nghim nu v ch nu r l nghim ca (2). Phng trnh 2 cn


c gi l phng trnh c trng ca h thc truy hi, nghim ca n l nghim c trng ca
h thc truy hi. Nghim ca phng trnh c trng dng biu din cng thc tt c cc
nghim ca h thc truy hi.
Chng ta s trnh by cc kt qu vi h thc truy hi tuyn tnh thun nht bc hai. Sau
ta s nu ra nhng kt qu tng t cho trng hp tng qut khi bc ln hn hai.
nh l 1. Cho c1, c2 l cc hng s thc. Gi s r2 c1r + c2 =0 c hai nghim phn bit r1,
r2. Khi dy {an} l nghim ca h thc truy hi an = c1an-1 + c2an-2 khi v ch khi an = 1r1n +
2rn2 vi n =1, 2,..., 1, 2 l cc hng s.
Chng minh: chng minh nh l ny ta cn thc hin hai vic. u tin ta cn ch ra
rng nu r1, r2 l hai nghim ca phng trnh c trng v 1, 2 l hai hng s th dy {an} vi

a n = 1 r1n + 2 r2n l nghim ca h thc truy hi. Ngc li, cn phi chng minh rng nu {an}
l nghim th a n = 1 r1n + 2 r2n vi 1, 2 l cc hng s no .
(): Gi s r1 v r2 l hai nghim phn bit ca r2 c1r + c2=0, khi

r12 = c12 r1 + c 2 ; r22 = c1 r2 + c2 ng thi ta thc hin dy cc php bin i sau:


34

Chng 2: Bi ton m v bi ton tn ti

c1 a n 1 + c 2 a n 2

= c1 ( 1 r1n 1 + 2 r2n 2 ) + c 2 ( 1 r1n 2 + 2 r2n 2 )


= 1 r1n 1 (c1 r1 + c 2 ) + 2 r2n 2 (c1 r2 + c 2 )
= 1 r1n 2 r12 + 2 r2n 2 r22
= 1 r1n + 2 r2n = a n

iu ny chng t dy {an} vi a n = 1 r1n + 2 r2n l nghim ca h thc truy hi cho.


(): chng minh ngc li, ta gi s dy {an} l mt nghim bt k ca h thc truy hi.
Ta chn 1, 2 sao cho dy {an} vi a n = 1 r1n + 2 r2n tho mn cc iu kin u a0 =C0, a1 = C1.
Thc vy,

a0 = C0 = 1 + 2
a1 = C1 = 1 r1 + 2 r2
T phng trnh u ta c 2 = C0 - 1 th vo phng trnh th hai ta c:

C1 = 1 r1 + (C0 1 )r2 = 1 (r1 r2 ) + C0 r2 ; T y suy ra:

1 =

(C1 C 0 r2 )
(C C 0 r2 ) (C 0 r1 C1 )
=
; 2 = C 0 1 = C 0 1
.
r1 r2
r1 r2
r1 r2

Nh vy, khi chn nhng gi tr trn cho 1, 2 dy {an} vi a n = 1 r1n + 2 r2n tho mn
cc iu kin u. V h thc truy hi v cc iu kin u c xc nh duy nht nn

a n = 1 r1n + 2 r2n . nh l c chng minh.


V d 1. Tm nghim ca h thc truy hi an = an-1 +2an-2 vi a0 = 2, a1 = 7.
Gii: Phng trnh c trng ca h thc truy hi c dng r2 - r - 2 =0. Nghim ca n l
r=2 v r = -1. Theo nh l 1, dy {an } l nghim ca h thc truy hi nu v ch nu:
an = 12n +2(-1)n vi 1, 2 l cc hng s no . T cc iu kin u suy ra:
a0 = 2 = 1 +2
a1 = 7 = 12 +2(-1)
Gii ra ta c 1=3, 2=-1. Vy nghim ca biu thc truy hi vi iu kin u l dy
{an} vi an = 3.2n (-1)n.
V d 2. Tm cng thc hin ca cc s fibonaci.
Gii: Cc s fibonaci tho mn h thc fn = fn-1 + fn-2 v cc iu kin u f0 = 0, f1=1. Cc
nghim ca phng trnh c trng l:

35

Chng 2: Bi ton m v bi ton tn ti

1 5
1+ 5

; r2 =
r1 =
2 theo nh l 1 ta suy ra s fibonaci c cho bi cng

2
thc sau:
n

1+ 5
1 5
+2

f n = 1

2 vi 1, 2 l hai hng s. Cc iu kin u f0=0, f1=1


2

c dng xc nh cc hng s 1, 2.
f 0 = 1 + 2 = 0
1 5
1+ 5

+2
f1 = 1
2 =1

T hai phng trnh ny ta suy ra 1 =

1
5

; 2 =

1
5

do cc s fibonaci c cho

bng cng thc dng hin nh sau:


n

1 1+ 5
1 1 5

fn =
5 2
5 2

nh l 1 khng dng c trong trng hp nghim ca phng trnh c trng l nghim


bi. Khi phng trnh c trng c nghim bi ta s dng nh l sau.
nh l 2. Cho c1, c2 l cc hng s thc, c20. Gi s r2 c1r c2 = 0 ch c mt nghim r0.
Dy {an} l nghim ca h thc truy hi an = c1an-1 + c2an-2 khi v ch khi a n = 1 r0n + 2 nr0n vi
n = 1, 2,.. trong 1, 2 l nhng hng s.
Chng minh tng t nh nh l 1.
V d 3. Tm nghim ca cng thc truy hi an = 6an-1 9an-2 vi cc iu kin u a0=1,
a1 = 6.
Gii: Phng trnh c trng r2 6r 9 =0 c nghim kp r=3. Do nghim ca h thc
truy hi c dng:

a n = 1 3 n + 2 n3 n vi 1, 2 l cc hng s no . T cc iu kin u ta suy ra:


a0 = 1=1
a1 = 6 = 13+23 1 =1, 2=1 vy nghim ca h thc truy hi v cc iu kin u
cho l:
an = 3n+n3n
By gi ta pht biu kt qu tng qut v nghim cc h thc truy hi tuyn tnh thun nht
vi cc h s hng s.
36

Chng 2: Bi ton m v bi ton tn ti


nh l 3. Cho c1, c2,.., ck l cc s thc. Gii s phng trnh c trng:
rk c1rk-1-..-ck = 0 c k nghim phn bit r1, r2,.., rk. Khi dy {an} l nghim ca h thc
truy hi:

a n = c1a n 1 + c 2 a n 2 +

+ ck ank

khi v ch khi

a n = 1 r1n + 2 r2n +

+ k rkn vi

n=0,1,2,.., trong 1, 2,.., k l cc hng s.


V d 4. Tm nghim ca h thc truy hi an = 6an-1 11an-2+6an-3 vi iu kin u a0=2, a1
=5, a2=15.
Gii: a thc c trng ca h thc truy hi l:
r3 6r2 + 11r 6 c cc nghim l r1=1, r2 = 2, r3 = 3. Do vy nghim ca h thc truy hi
c dng: a n = 11n + 2 2 n + 3 3 n .
tm cc hng s 1, 2, 3 ta da vo nhng iu kin ban u:
a0 = 2 = 1 + 2 + 3
a1 = 5 = 1 + 22 +33
a2 = 15=1 + 24 +39
Gii: h phng trnh ny ta nhn c 1 = 1, 2 =-1, 3=2. V vy nghim duy nht ca
h thc truy hi ny v cc iu u cho l dy {an} vi:

a n = 1 2 n + 2.3 n

2.5. QUI TC V CC BI TON N GIN


Mt trong nhng phng php gii quyt bi ton m phc tp l qui bi ton ang xt v
nhng bi ton nh hn. S phn chia ny c thc hin mt cch lin tip cho ti khi nhn
c li gii ca bi ton nh mt cch d dng. Tuy nhin iu ny khng phi lc no cng
thc hin c v n i hi mt s phn tch su sc cu hnh cn m.
Gi s rng c mt thut ton phn chia bi ton c n thnh a bi ton nh, trong mi bi
ton nh c c n/b( n gin ta gi s n chia ht cho b); trong thc t cc bi ton nh thng
c c l s nguyn gn nht vi n/b. Gi s tng cc php ton thm vo khi thc hin phn chia
bi ton c n thnh cc bi ton c nh hn l g(n). Khi nu f(n) l s cc php ton cn thit
gii bi ton cho th f tho mn h thc truy hi sau:

n
f (n) = af + g (n) ; h thc ny c tn l h thc chia tr.
b
V d 1. Xt thut ton nhn hai s nguyn kch c 2n bt. K thut ny gi l thut ton
nhn nhanh c dng k thut chia tr.
37

Chng 2: Bi ton m v bi ton tn ti


Gii: Gi s a v b l cc s nguyn c biu din nh phn l 2n bt (c th thm cc bt 0
vo u chng c th di bng nhau).

a = (a 2 n1 a 2 n2

a1 a0 ) 2 v b = (b2 n 1b2 n 2

b1b0 ) 2

Gi s a = 2nA1 +A0, b = 2nB1 +B0


B

trong

A1 = (a2 n1 a2 n2

a n1a n ) 2 ; A0 = (a n1a n 2

B1 = (b2 n 1b2 n 2

bn 1bn ) 2 ; bA 0 = ( a n 1 a n 2

a1 a0 ) 2

a1a 0 ) 2

Thut ton nhn nhanh c da trn ng thc:

ab = (2 2 n + 2 n ) A1 B1 + 2 n ( A1 A0 )( B0 B1 ) + (2 n + 1) A0 B0
iu ny ch ra rng php nhn hai s nguyn 2n bt c th thc hin bng cch dng 3
php nhn cc s nguyn n bt v cc php cng, tr dch chuyn. Nh vy, nu f(n) l tng cc
php ton nh phn cn thit nhn hai s n bt th:

f (2n) = 3 f (n)+ Cn
Ba php nhn cc s nh phn n bt cn 3f(n) php ton nh phn. Mi mt php ton cng,
tr, dch chuyn dng mt hng s nhn vi n ln chnh l Cn.
V d 2. Bi ton xp khch ca Lucas. C mt bn trn, xung quanh c 2n gh. Cn sp
ch cho n cp v chng sao cho cc ng ngi sen k cc b v khng c hai cp v chng no
ngi cnh nhau. Hi c tt c bao nhiu cch xp?
Gii: Gi s phi tm l Mn. Xp cho cc b trc(c xp mt gh th mt gh trng
dnh cho cc ng), s cch xp cho cc b l 2n! cch. Gi s cch xp cho cc ng ng vi mt
cch xp cc b l Un ta c s cch xp l:
Mn = 2n! x Un.Vn cn li l tnh s Un.
nh s cc b ( xp) t 1 n n, nh s cc ng tng ng vi cc b (ng i l chng
b i), sau nh s cc gh trng theo nguyn tc: gh s i nm gia b i v b i+1 (cc php
cng c hiu ly modul n ngha l n +1 = 1). Mi cch xp cc ng c biu din bng mt
php th trn tp {1, 2,.., n } vi qui c (i) = j c ngha l gh i c xp cho ng j. Theo gi
thit phi tho mn:
(i) i v (i)i+1

(*)

Nh vy, Un l s tt c cc php th tho mn iu kin (*). Trong ton hc gi Un l s


phn b.
Xt tp hp tt c cc php th ca { 1, 2,.., n }. Trn tp ny ta gi Pi l tnh cht (i) = i,
Qi l tnh cht (i) = i+1. t Pn+i = Qi, theo nguyn l b tr tng ng vi 2n tnh cht Pi ta c:
38

Chng 2: Bi ton m v bi ton tn ti

U n = N = n! N 1 + N 2 + ... trong Nk l tng s tt c cc php th tho mn k tnh cht


ly t 2n tnh cht ang xt. Cn ch rng, khng th xy ra ng thi tho mn Pi v Qi. Do
trong cc php ly ra k tnh cht t 2n tnh cht ang xt cn thm vo iu kin: Pi v Qi hoc
Pi+1 v Qi khng c ng thi c mt. Gi s cc cch ny l g(2n, k) ( ni ring g(2n,k)=0 khi
k>n). Vi mi cch ly ra k tnh cht nh vy (k<=n) ta c (n-k)! php th tho mn chng. T
ta nhn c Nk = g(2n, k) (n-k)! v:

U n = n! g (2n,1)(n 1)!+ g (2n 2)(n 2)!

+ (1) n g (2n, n)

By gi chng ta phi tnh cc h s g(2n,k), k = 1, 2,.., n.


Xp 2n tnh cht ang xt trn cng trn theo th t P1, Q1, P2, Q2,.., Pn, Qn, ta thy rng
g(2n,k) chnh l s cch ly k phn t trong 2n phn t xp thnh vng trn sao cho khng c hai
phn t no k nhau cng c ly ra. tnh g(2n,k) ta gii hai bi ton con sau:
Bi ton 1. C bao nhiu cch ly ra k phn t trong n phn t xp trn ng thng sao
cho khng c hai phn t no k nhau cng c ly ra.
Gii: Khi ly k phn t, ta cn n-k phn t. Gia n-k phn t cn li c n-k+1 khong trng
(k c hai u). Mi cch ly ra k khong t cc khong ny s tng ng vi mt cch chn k
phn t tho mn yu cu nu. Vy s cch chn cn tm l C(n-k+1, k).
Bi ton 2. Ging nh bi ton 1 nhng n phn t xp trn vng trn.
Gii: C nh phn t a c chn chia cc cch ly thnh 2 lp
1. Cc cch m a c chn khi 2 phn t k a s khng c chn v phi ly k-1 phn
t t n-3 phn t cn li. Cc phn t ny xem nh kt qu ca bi ton 1. Theo bi ton
1, s cch thuc lp kiu ny l C(n-k-1, k-1).
2. Cc cch m a khng c chn, khi b a i v bi ton tr v bi ton 1 chn k phn
t t n-1 phn t xp trn ng thng. Theo bi ton 1 s cch xp kiu ny l C(nk,k).
Vy theo nguyn l cng s cch cn tm l:

C (n k 1, k 1) + C (n k , k ) =

n
C (n k , k )
nk

T kt qu ca hai bi ton trn ta nhn c:

g (2n, k ) =
U n = n!

2n
C (2n k , k ) v s phn b Un c tnh bng:
2n k

2n
2n
C (2n 1,1)(n 1)!+
C (2n 2,2)(n 2)!
2n 1
2n 2

+ (1) n

2n
C (2n, n)
n

Di y l mt s gi tr ca Un, mt ln na chng ta li c quan st hin tng bng


n t hp.
39

Chng 2: Bi ton m v bi ton tn ti


n

10

Un

13

80

579

4783

43387

439792

2.6. PHNG PHP LIT K


Vic tm mt cng thc cho kt qu m ngay c trong trng hp cng thc truy hi
khng phi d dng v lc no cng thc hin c. Cho n nay cn nhiu bi ton m cha c
li gii di dng mt cng thc. i vi nhng bi ton nh vy, ngi ta ch cn cch ch ra
mt phng php lit k, theo c th i qua c tt c cc cu hnh cn m. R rng bn
thn phng php lit k khng ch ra c mt kt qu c th no nhng qua ngi ta c th
lp trnh cho my tnh in t m h.
minh ho cho phng php lit k, ta xt mt cu hnh t hp ni ting l cc hnh
ch nht la tinh.
Gi s S l tp gm n phn t. Khng mt tnh tng qut ta gi s S = {1, 2,.., n} Mt
hnh ch nht la tinh trn S l mt bng gm p dng, q ct sao cho mi dng ca n l mt chnh
hp khng lp chp q ca S v mi ct ca n l mt chnh hp khng lp chp p ca S.
Theo nh ngha ta c pn, qn. c bit trong trng hp q = n, mi dng ca hnh ch
nht la tinh l mt hon v ca S, sao cho khng c ct no cha hai phn t lp li. Hnh ch nht
la tinh dng ny c gi l chun nu dng u ca n l hon v 1, 2,.., n.
Th d:
1

l mt hnh la tinh chun trn tp S = {1, 2, 3, 4, 5, 6, 7 }


Gi L(p,n) l s hnh ch nht la tinh p x n, cn K(p,n) l s hnh ch nht la tinh chun p x
n ta c:
L(p,n) = n! K(p,n)
D dng nhn thy rng, s mt Dn l s hnh la tinh chun 2 x n, s phn b Un l s hnh
ch nht la tinh chun 3 x n vi hai dng u l:
1

...

n-1

...

Riodan J(1946) chng minh cng thc:

K (3, n) = k =0 C (n, k ) Dn k Dk U n 2 k trong m= [n/2], U0 = 1.


m

Bi ton m vi s dng nhiu hn n nay vn cha c gii quyt. Ngi ta mi ch


a ra c mt vi dng tim cn ca L(p,n).
40

Chng 2: Bi ton m v bi ton tn ti


Nu p=q=n, th hnh ch nht la tinh c gi l hnh vung la tinh. Mt hnh vung la tinh
cp n c gi l chun nu c dng u v ct u l hon v 1, 2,..n. Th d mt hnh vung la
tinh chun cp 7.
1

Gi ln l s cc hnh vung nh th ta c L(n,n) = n!(n-1)!ln


Vic tm mt cng thc cho ln n nay vn b ng. Tuy nhin ta c th nh my tnh lit k
tt c cc hnh vung chun cp n. Di y l mt vi gi tr tnh c:
N

ln

56

9408

16942080

2.7. BI TON TN TI
Chng ta gii quyt bi ton m s cc cu hnh t hp tho mn mt tnh cht no ,
chng hn nh m s t hp, s chnh hp, hoc s hon v. Trong nhng bi ton s tn ti
ca cc cu hnh l hin nhin v cng vic chnh l chng ta cn m s cc cu hnh t hp tho
mn tnh cht t ra. Tuy nhin, trong nhiu bi ton t hp, vic ch ra s tn ti ca mt cu
hnh tho mn cc tnh cht cho trc l mt vic lm ht sc kh khn. Dng bi ton nh vy
c gi l bi ton tn ti.

2.7.1. Gii thiu bi ton


Mt bi ton tn ti t hp c xem nh gii xong nu hoc ch ra mt cch xy dng cu
hnh, hoc chng minh rng chng khng tn ti. Mi kh nng u khng d dng. Di y l
mt s bi ton tn ti t hp ni ting.
Bi ton 1. Bi ton v 36 s quan
Bi ton ny c Euler ngh vi ni dung nh sau.
C mt ln ngi ta triu tp t 6 trung on, mi trung on 6 s quan thuc 6 cp bc
khc nhau: thiu u, trung u, thng u, i u, thiu t, trung t v tham gia duyt binh s
on b. Hi rng, c th xp 36 s quan ny thnh mt i ng hnh vung sao cho trong mi
hng ngang cng nh mi hng dc u c i din ca c su trung on v ca 6 cp bc.
41

Chng 2: Bi ton m v bi ton tn ti


n gin ta s dng cc ch ci in hoa A, B, C, D, E, F ch phin hiu ca cc trung
on, cc ch ci in thng a, b, c, d, e, f ch cp bc. Bi ton ny c th tng qut ho nu
thay 6 bi n. Trong trng hp n = 4 mt li gii ca bi ton 16 s quan l:
Ab

Dd

Ba

Cc

Bc

Ca

Ad

Db

Cd

Bb

Dc

Aa

Da

Ac

Cb

Bd

Mt li gii vi n = 5 l:
Aa

Bb

Cc

Dd

Ee

Cd

De

Bd

Ab

Bc

Eb

Ac

Bd

Ce

Da

Be

Ca

Db

Ec

Ad

Dc

Ed

Ae

Ba

Cb

Do li gii bi ton c th biu din bi hai hnh vung vi cc ch ci la tinh hoa v la tinh
thng nn bi ton tng qut t ra cn c bit vi tn gi hnh vung la tinh trc giao.
Trong hai v d trn ta c hnh vung la tinh trc giao cp 4 v 5.
Euler mt rt nhiu cng sc tm ra li gii cho bi ton 36 s quan th nhng ng
khng thnh cng. V vy, ng gi thuyt l cch sp xp nh vy khng tn ti. Gi thuyt ny
c nh ton hc php Tarri chng minh nm 1901 bng cch duyt tt c mi kh nng xp.
Euler cn c vo s khng tn ti li gii khi n=2 v n = 6 cn ra gi thuyt tng qut hn l
khng tn ti hnh vung trc giao cp 4n + 2. Gi thuyt ny tn ti hai th k, mi n nm
1960 ba nh ton hc M l Bore, Parker, Srikanda mi ch ra c mt li gii vi n = 10 v sau
ch ra phng php xy dng hnh vung trc giao cho mi n = 4k + 2 vi k > 1.
Tng chng bi ton ch mang ngha th thch tr tu con ngi thun tu nh mt bi
ton . Nhng gn y, ngi ta pht hin nhng ng dng quan trng ca vn trn vo qui
hoch, thc nghim v hnh hc x nh.
Bi ton 2. Bi ton 4 mu
C nhiu bi ton m ni dung ca n c th gii thch c vi bt k ai, li gii ca n ai
cng c gng th tm nhng kh c th tm c. Ngoi nh l Fermat th bi ton bn mu cng
l mt bi ton nh vy. Bi ton c th c pht biu nh sau: Chng minh rng mi bn
u c th t bng 4 mu sao cho khng c hai nc lng ging no li b t bi cng mt mu.
Trong , mi nc trn bn c coi l mt vng lin thng, hai nc c gi l lng ging
nu chng c chung ng bin gii l mt ng lin tc.

42

Chng 2: Bi ton m v bi ton tn ti

4
Hnh 2.2. Bn t bi t nht bn mu
Con s bn mu khng phi l ngu nhin. Ngi ta chng minh c rng mi bn
u c t bi s mu ln hn 4, cn vi s mu t hn 4 th khng th t c, chng hn bn
gm 4 nc nh trn hnh 2.2 khng th t c vi s mu t hn 4.
Bi ton ny xut hin vo nhng nm 1850 t mt li bun ngi Anh l Gazri khi t bn
hnh chnh nc Anh c gng chng minh rng n c th t bng bn mu. Sau , nm
1852, ng vit th cho De Morgan thng bo v gi thuyt ny. Nm 1878, Keli trong mt
bi bo ng tuyn tp cc cng trnh nghin cu ca Hi ton hc Anh c hi rng bi ton ny
c gii quyt hay cha? T bi ton tr nn ni ting, trong xut hn mt th k qua,
nhiu nh ton hc c gng chng minh gi thuyt ny. Tuy vy, mi ti nm 1976 hai nh
ton hc M l K. Appel v W. Haken mi chng minh c n nh my tnh in t.
Bi ton 3. Hnh lc gic thn b
Nm 1890 Clifford Adams ra bi ton hnh lc gic thn b sau: trn 19 lc gic (nh
hnh 2.3) hy in cc s t 1 n 19 sao cho tng theo 6 hng ca lc gic l bng nhau (v u
bng 38). Sau 47 nm tri kin nhn cui cng Adams cng tm c li gii. Sau v s
nh mt bn tho ng tn thm 5 nm khi phc li. Nm 1962 Adams cng b li gii
. Nhng tht khng th ng c l li gii duy nht.
15
14
9

13
8

6
11

10
4

5
1

18

12
2

7
17

16
19

3
Hnh 2.3. Hnh lc gic thn b
43

Chng 2: Bi ton m v bi ton tn ti


Bi ton 4. Bi ton chn 2n im trn li n n im
Cho mt li gm n n im. Hi c th chn trong s chng 2n im sao cho khng c ba
im no c chn l thng hng? Hin nay ngi ta mi bit c li gii ca bi ton ny khi
n 15. Hnh 3.3 cho mt li gii vi n = 12.

Hnh 2.4. Mt li gii vi n = 12.

2.7.2. Phng php phn chng


Mt trong nhng cch gii bi ton tn ti l dng lp lun phn chng: gi thit iu chng
minh l sai, t dn n mu thun.
V d 1. Cho 7 on thng c di ln hn 10 v nh hn 100. Chng minh rng ta lun
lun tm c 3 on c th ghp li thnh mt tam gic.
Gii: iu kin cn v 3 on l cnh ca mt tam gic l tng ca hai cnh phi ln
hn mt cnh. Ta sp cc on thng theo th t tng dn ca di a1, a2,..., a7 v chng minh
rng dy xp lun tm c 3 on m tng ca hai on u ln hn on cui. chng
minh, ta gi s khng tm c ba on no m tng ca hai on nh hn mt on, ngha l cc
bt ng thc sau ng thi xy ra:
a1 + a2 a3

a3 20 (v a1, a2 10 )

a2 + a3 a4

a4 30 (v a2 10, a3 20)

a3 + a4 a5

a5 50 (v a3 20, a 4 30 )

a4 + a5 a6

a6 80 (v a4 30, a5 50)

a5 + a6 a7

a7 130 (v a5 50, a6 80)

Mu thun (bi ton c gii quyt).


44

Chng 2: Bi ton m v bi ton tn ti


V d 2. Cc nh ca mt thp gic u c nh s bi cc s nguyn 0, 1,.., 9 mt cch
tu . Chng minh rng lun tm c ba nh lin tip c tng cc s l ln hn 13.
Gii: Gi x1, x2,.., x10 l cc s gn cho cc nh ca thp gic u. Gi s ngc li ta
khng tm c 3 nh lin tip no tho mn khng nh trn. Khi ta c:
k1 = x1 + x2 + x3 13
k2 = x2 + x3 + x4 13
k3 = x3 + x4 + x5 13
k4 = x4 + x5 + x6 13
k5 = x5 + x6 + x7 13
k6 = x6 + x7 + x8 13
k7 = x7 + x8 + x9 13
k8 = x8 + x9 + x10 13
k9 = x9 + x10 + x1 13
k10 = x10 + x1 + x2 13
130 k1 + k2 +... + k10

= 3 (x1+ + x2 +...+ x10)


= 3 ( 0 + 1 + 2 +... + 9)
= 135 Mu thun v mt s bng 135 khng th hn
130. Khng nh chng minh.

2.7.3. Nguyn l Dirichlet


Trong rt nhiu bi ton t hp, chng minh s tn ti ca mt cu hnh vi nhng tnh
cht cho trc, ngi ta s dng nguyn l n gin sau gi l nguyn l Dirichlet.
Nguyn l Dirichlet. Nu em xp nhiu hn n i tng vo n hp th lun tm c mt
ci hp cha khng t hn 2 i tng.
Chng minh. Vic chng minh nguyn l trn ch cn s dng mt lp lun phn chng
n gin. Gi s khng tm c mt hp no cha khng t hn hai i tng. iu ngha l
mi hp khng cha qu mt i tng. T suy ra tng cc i tng khng vt qu n tri
vi gi thit bi ton l c nhiu hn n i tng c xp vo chng.
V d 1. Trong bt k mt nhm c 367 ngi th no cng c t nht hai ngi c cng
ngy sinh.
Gii: V mt nm c nhiu nht 366 ngy. Nh vy, theo nguyn l Dirichlet th c t nht
mt ngy c hai ngi cng mt ngy sinh.
45

Chng 2: Bi ton m v bi ton tn ti


V d 2. Trong bt k 27 t ting Anh no cng u c t nht hai t cng bt u bng mt
ch ci.
Gii: V bng ch ci ting Anh ch c 26 ch ci. Nn theo nguyn l Dirichlet tn ti t
nht 2 t s bt u bi cng mt ch ci.
V d 3. Bi thi cc mn hc cho sinh vin c chm theo thang im 100. Hi lp phi
c t nht bao nhiu sinh vin c t nht hai sinh vin c nhn cng mt im.
Gii: Cn c t nht 102 sinh vin v thang im tnh t 0.. 100 gm 101 s. Do vy, theo
nguyn l Diriclet mun c 2 sinh vin nhn cng mt im th lp phi c t nht l 101 +1 =
102 sinh vin.
Nguyn l Dirichlet tng qut. Nu em xp n i tng vo k hp th lun tm c mt
hp cha t nht n/k i tng.
Nguyn l trn c nh ton hc ngi c Dirichlet xut t th k 19 v ng p
dng gii nhiu bi ton t hp.
V d 4. Trong 100 ngi c t nht 9 ngi sinh nht cng mt thng.
Gii: Mt nm c 12 thng. Xp tt c nhng ngi sinh nht vo cng mt nhm. Theo
nguyn l Dirichlet ta c t nht 100/12 = 9 ngi cng sinh nht mt thng.
V d 5. C nm loi hc bng khc nhau pht cho sinh vin. Hi phi c t nht bao
nhiu sinh vin chc chn c 5 ngi c nhn hc bng nh nhau.
Gii. S sinh vin t nht c 5 sinh vin cng c nhn mt loi hc bng l s n tho
mn n/5 > 5. S nguyn b nht tho mn iu kin trn l n = 25 + 1 = 26. Nh vy phi c t
nht 26 sinh vin c t nht 5 sinh vin cng c nhn mt loi hc bng.
V d 6. Trong mt thng c 30 ngy mt i bng chy chi t nht mi ngy mt trn,
nhng c thng chi khng qu 45 trn. Hy ch ra rng phi tm c mt giai on gm mt s
ngy lin tc no trong thng sao cho trong giai on i chi ng 14 trn.
Gii: Gi s aj l s trn thi u cho ti ngy th j ca i. Khi :
a1, a2,..., a30
l dy tng ca cc s nguyn dng v 1 aj 45. Suy ra dy:
a1 + 14, a2 + 14,..., a30 + 14 cng l dy tng cc s nguyn dng v 15 aj 59
Nh vy, dy 60 s nguyn dng
a1, a2,.., a30, a1 + 14, a2 + 14,..., a30 + 14 trong tt c cc s u nh hn hoc bng 59.
Theo nguyn l Dirichlet th phi tn ti t nht hai s trong s hai s nguyn ny bng nhau. V
cc s a1, a2,..., a30 l i mt khc nhau v a1 + 14, a2 + 14,..., a30 + 14 cng i mt khc nhau.
Nn ta suy ra phi tn ti ch s i v j sao cho ai=aj + 14. iu c ngha l c ng 14 trn u
trong giai on t ngy j + 1 n ngy th i.

46

Chng 2: Bi ton m v bi ton tn ti

NHNG NI DUNG CN GHI NH


Bn c cn ghi nh mt s kin thc quan trng sau:
9

Nhng nguyn l m c bn: nguyn l cng, nguyn l nhn & nguyn l b tr.

S dng nhng nguyn l c bn trong m cc hon v, t hp.

Hiu phng php cch gii quyt bi ton m bng h thc truy hi.

Nm vng cch thc qui mt bi ton m v nhng bi ton con.

Cch gii ph bin cho bi ton tn ti l s dng phng php phn chng hoc
s dng nguyn l Dirichlet.

BI TP CHNG 2
Bi 1. Xu thun nghch c l mt xu khi vit theo th t ngc li cng bng chnh n. Hy
m s xu nh phn c di n l thun nghch c.
Bi 2. C du v ch r mi bn bn ng thnh mt hng chp nh. Hi c bao nhiu cch
xp hng nu:
a) C du ng cnh ch r
b) C du khng ng cnh ch r
c) C du ng pha bn phi ch r
Bi 3. C bao nhiu xu nh phn di 10 c nm s 0 lin nhau hoc nm s 1 lin nhau.
Bi 4. C bao nhiu xu nh phn di bng 8 c 3 s 0 lin nhau hoc 4 s 1 lin nhau.
Bi 5. Mi sinh vin lp ton hc ri rc hoc gii ton hoc gii tin hc hoc gii c hai mn
ny. Trong lp c bao nhiu sinh vin nu 38 ngi gii tin (k c ngi gii c hai mn),
23 ngi gii ton (k c ngi gii c hai mn), v 7 ngi gii c hai mn.
Bi 6. Chng t rng, trong n+1 s nguyn dng khng vt qu 2n tn ti t nht mt s chia
ht cho mt s khc.
Bi 7. Chng minh rng, trong dy gm n2 + 1 s thc phn bit u c mt dy con di n+1
hoc thc s tng, hoc thc s gim.
Bi 8. Gi s trong mt nhm 6 ngi mi cp hai hoc l bn, hoc l th. Chng t rng trong
nhm c ba ngi l bn ca nhau hoc l k th ca nhau.
Bi 9. Hy ch ra rng, trong 102 ngi c chiu cao khc nhau ng thnh mt hng c th tm
c 11 ngi c chiu cao tng dn hoc gim dn m khng cn thay i th t ca h
trong hng.
Bi 10. Mt vt tay tham gia thi u ginh chc v ch trong 75 gi. Mi gi anh ta thi u t
nht mt trn, nhng ton b anh ta khng thi u qu 125 trn. Chng t rng, c nhng
gi lin tip anh ta thi u 24 trn.
Bi 11. Mt nhn vin bt u lm vic ti cng ty t nm 1987 vi mc lng khi im l
50000 la. Hng nm anh ta c nhn thm 1000 la v 5% lng ca nm trc.
47

Chng 2: Bi ton m v bi ton tn ti


a) Hy thit lp h thc truy hi tnh lng ca nhn vin n nm sau nm 1987.
b) Lng vo nm 1995 ca anh ta l bao nhiu?
c) Hy tm cng thc tng minh tnh lng ca nhn vin ny n nm sau nm 1987.
Bi 12. Tm h thc truy hi cho s hon v ca tp n phn t. Dng h thc truy hi tnh hon
v ca tp n phn t.
Bi 13. Mt my bn tem t ng ch nhn cc ng xu mt la v cc loi t tin 1 la v 5
la.
a) Hy tm h thc truy hi tnh s cch t n la vo trong my bn hng, trong th
t cc ng xu, cc t tin l quan trng.
b) Tm cc iu kin u.
c) C bao nhiu cch t 10 la vo my mua mt b tem.
Bi 14. Gii cc h thc truy hi vi cc iu u sau:
a) an = an-1 + 6an-2

vi n 2, a0 = 3, a1 = 6.

b) an = 7an-1 - 6an-2

vi n 2, a0 = 2, a1 = 1.

c) an = 6an-1 - 8an-2

vi n 2, a0 = 4, a1 = 10.

d) an = 2an-1 - an-2

vi n 2, a0 = 4, a1 = 1.

e) an = an-2

vi n 2, a0 = 5, a1 = -1.

f) an = -6an-1 - 9an-2

vi n 2, a0 = 3, a1 = -3.

g) an+2 = -4an+1 + 5an

vi n 0, a0 = 2, a1 = 8.

Bi 15. Tm cc nghim c trng ca h thc truy hi tuyn tnh thun nht:


a) an = 2an-1 - 2an-2
b) Tm nghim tho mn h thc truy hi trn v cc iu kin u a0 =1, a1 =2.
Bi 16. a) Tm nghim c trng ca h thc truy hi tuyn tnh thun nht an = an-4
b) Tm nghim tho mn h thc truy hi trn v cc iu kin u a0=1, a1=0, a2=-1, a3=1.
Bi 17. Mt bo co v th trng my tnh c nhn cho bit c 65000 ngi s mua modem cho
my tnh ca h trong nm ti, 1 250 000 ngi s mua t nht mt sn phm phn mm.
Nu bo co ny ni rng 1.450.000 ngi s mua hoc l modem hoc l t nht mt sn
phm phn mm th s c bao nhiu ngi s mua c modem v mua t nht mt sn phm
phn mm.
Bi 18. Mt trung tm my tnh c 151 my vi tnh. Cc my ca trung tm c t tn bi mt
s nguyn dng t 1 n 300 sao cho khng c hai my no c t tn trng nhau.
Chng minh rng lun tm c hai my c tn l cc s nguyn lin tip.
Bi 19. Chng minh rng trong s 10 ngi bt k bao gi cng tm c hoc hai ngi c tng
s tui chia ht cho 16, hoc hai ngi m hiu s tui ca h chia ht cho 16.
Bi 20. C 12 cu th bng r eo o vi s t 1 n 12 ng tp chung thnh mt vng trn
gia sn. Chng minh rng lun tm c 3 ngi lin tip c tng cc s trn o l ln
hn hoc bng 20.
48

Chng 3: Bi ton lit k

CHNG III: BI TON LIT K


i vi mt bi ton, khi cha tm c gii thut tt gii th lit k l bin php cui
cng thc hin vi s h tr ca my tnh. C th ni, lit k l phng php ph dng nht
gii quyt mt bi ton trn my tnh. Tri li, bi ton tn ti ch cn ch ra c bi ton c
nghim hay khng c nghim v thng l nhng bi ton kh. Nhiu bi ton tn ti c
pht biu trong nhiu thp k nhng vn cha c gii quyt.Gii quyt c chng s thc y
s pht trin ca nhiu ngnh ton hc. Ni dung chnh ca chng ny tp chung gii quyt
nhng vn c bn sau:
9

Gii thiu bi ton lit k.

Gii quyt bi ton lit k bng phng php sinh.

Gii quyt bi ton lit k bng phng php quay lui da trn gii thut qui.

Bn c c th tm thy cch gii nhiu bi ton lit k v bi ton tn ti hay trong cc ti


liu [1] v [2] trong ti liu tham kho.

3.1. GII THIU BI TON


Bi ton a ra danh sch tt c cc cu hnh t hp c th c c gi l bi ton lit k t
hp. Khc vi bi ton m l tm kim mt cng thc cho li gii, bi ton lit k li cn xc
nh mt thut ton theo c th xy dng c ln lt tt c cc cu hnh cn quan tm.
Mt thut ton lit k phi m bo hai nguyn tc:

Khng c lp li mt cu hnh

Khng c b xt mt cu hnh

V d 1. Cho tp hp cc s a1, a2,.., an v s M. Hy tm tt c cc tp con k phn t ca


dy s {an} sao cho tng s cc phn t trong tp con ng bng M.
Gii: Nh chng ta bit, s cc tp con k phn t ca tp gm n phn t l C(n,k). Nh
vy chng ta cn phi duyt trong s C(n,k) tp k phn t ly ra nhng tp c tng cc phn t
ng bng M. V khng th xc nh c c bao nhiu tp k phn t t tp n phn t c tng cc
phn t ng bng M nn chng ta ch cn cch lit k cc cu hnh tho mn iu kin cho.
V d 2. Mt thng nhn i bn hng ti tm thnh ph. Ch ta c th bt u hnh trnh
ca mnh ti mt thnh ph no nhng phi qua 7 thnh ph kia theo bt k th t no m ch
ta mun. Hy ch ra l trnh ngn nht m ch ta c th i.
Gii: V thnh ph xut pht c xc nh. Do vy thng nhn c th chn tu 7
thnh ph cn li hnh trnh. Nh vy, tt c s hnh trnh ca thng nhn c th i qua l 7!
49

Chng 3: Bi ton lit k


= 5040 cch. Tuy nhin trong 5040 cch chng ta phi duyt ton b ch ra mt hnh trnh l
ngn nht.
C th ni phng php lit k l bin php cui cng nhng cng l bin php ph dng
nht gii quyt cc bi ton t hp. Kh khn chnh ca phng php ny l s bng n t hp.
xy dng chng 1 t cu hnh (con s ny khng phi l ln i vi cc bi ton t hp nh s
mt th t Dn, s phn b Un, s hnh vung la tinh ln), ta gi s cn 1 giy lit k mt cu
hnh th chng ta cng cn 31 nm mi gii quyt xong. Tuy nhin vi s pht trin nhanh chng
ca my tnh, bng phng php lit k, nhiu bi ton kh ca l thuyt t hp c gii
quyt v gp phn thc y s pht trin ca nhiu ngnh ton hc.

3.2. QUI
3.2.1. nh ngha bng qui
Trong thc t, chng ta gp rt nhiu i tng m kh c th nh ngha n mt cch
tng minh, nhng li d dng nh ngha i tng qua chnh n. K thut nh ngha i tng
qua chnh n c gi l k thut qui (recursion). qui c s dng rng ri trong khoa hc
my tnh v l thuyt tnh ton. Cc gii thut qui u c xy dng thng qua hai bc:
bc phn tch v bc thay th ngc li.
V d 1. tnh tng S(n) = 1 + 2 +...+ n, chng ta c th thc hin thng qua hai bc
nh sau:
Bc phn tch:

tnh ton c S(n) trc tin ta phi tnh ton trc S(n-1) sau tnh S(n) =
S(n-1) +n.

tnh ton c S(n-1), ta phi tnh ton trc S(n-2) sau tnh S(n-1) = S(n-2)
+ n-1.

......................................................

tnh ton c S(2), ta phi tnh ton trc S(1) sau tnh S(2) = S(1) + 2.

V cui cng S(1) chng ta c ngay kt qu l 1.

Bc thay th ngc li:


Xut pht t S(1) thay th ngc li chng ta xc nh S(n):

50

S(1) = 1

S(2) = S(1) + 2

S(3) = S(2) + 3

............

S(n) = S(n - 1) + n

Chng 3: Bi ton lit k


V d 2. nh ngha hm bng qui:
Hm f(n) = n!
D thy f(0) = 1.
V (n+1) ! = 1. 2.3... n(n+1) = n! (n+1), nn ta c:
f(n+1) = ( n+1). f(n) vi mi n nguyn dng.
V d 3. Tp hp nh ngha bng qui:
nh ngha qui tp cc xu: Gi s * l tp cc xu trn b ch ci . Khi * c
nh ngha bng qui nh sau:

*, trong l xu rng

wx * nu w * v x *

3.2.2. Gii thut qui


Mt thut ton c gi l qui nu n gii bi ton bng cch rt gn bi ton ban u
thnh bi ton tng t nh vy sau mt s hu hn ln thc hin. Trong mi ln thc hin, d
liu u vo tim cn ti tp d liu dng.
V d: gii quyt bi ton tm c s chung ln nht ca hai s nguyn dng a v b vi
b> a, ta c th rt gn v bi ton tm c s chung ln nht ca (b mod a) v a v USCLN(b mod
a, a) = USCLN(a,b). Dy cc rt gn lin tip c th t c cho ti khi t iu kin dng
USCLN(0, a) = USCLN(a, b) = a. Di y l v d v mt s thut ton qui thng dng.
Thut ton 1: Tnh an bng gii thut qui, vi mi s thc a v s t nhin n.
double power( float a, int n ){
if ( n ==0)
return(1);
return(a *power(a,n-1));
}

Thut ton 2: Thut ton qui tnh c s chung ln nht ca hai s nguyn dng a v b.
int USCLN( int a, int b){
if (a == 0)
return(b);
return(USCLN( b % a, a));
}

Thut ton 3: Thut ton qui tnh n!


long factorial( int n){

51

Chng 3: Bi ton lit k


if (n ==1)
return(1);
return(n * factorial(n-1));
}

Thut ton 4: Thut ton qui tnh s fibonacci th n


int fibonacci( int n) {
if (n==0) return(0);
else if (n ==1) return(1);
return(fibonacci(n-1) + fibonacci(n-2));
}

3.3. PHNG PHP SINH


Phng php sinh c th p dng gii cc bi ton lit k t hp t ra nu nh hai iu
kin sau c thc hin:
i. C th xc nh c mt th t trn tp cc cu hnh t hp cn lit k. T c th
xc nh c cu hnh t hp u tin v cui cng trong th t c xc nh.
ii. Xy dng c thut ton t cu hnh cha phi l cui cng ang c a ra cu
hnh k tip sau n.
Ta gi thut ton trong iu kin (ii) l thut ton sinh k tip. R rng thut ton ny ch
thc hin c khi c mt cu hnh c xc nh theo iu kin (i). Gi s mt bi ton u tho
mn cc iu kin trn, khi phng php sinh k tip c th c m t bng th tc nh sau:
void Generate(void){
<Xy dng cu hnh ban u>;
stop =false
while (not stop) {
<a ra cu hnh ang c>;
Sinh_K_Tip;
}
}

Trong Sinh_K_Tip l th tc sinh cu hnh k tip t cu hnh ban u. Nu cu hnh


l cu hnh cui cng, th tc ny cn gn gi tr True cho stop, ngc li th tc ny s xy dng
cu hnh k tip ca cu hnh ang c trong th t xc nh.
Di y l mt s v d in hnh m t thut ton sinh k tip.
52

Chng 3: Bi ton lit k


V d 1. Lit k tt c cc dy nh phn di n.
Gii: Vit dy nh phn di dng b1b2..bn, trong bi{0, 1 }. Xem mi dy nh phn
b=b1b2..bn l biu din nh phn ca mt s nguyn p(b). Khi th t hin nhin nht c th xc
nh trn tp cc dy nh phn l th t t in c xc nh nh sau:
Ta ni dy nh phn b = b1b2..bn i trc dy nh phn b = b1b2..bn theo th t t in v
k hiu b<bnu p(b) <p(b).
V d vi n=4, cc xu nh phn di 4 c lit k theo th t t in l:
b

p(b)

p(b)

0000

1000

0001

1001

0010

1010

10

0011

1011

11

0100

1100

12

0101

1101

13

0110

1110

14

0111

1111

15

Nh vy, dy u tin l 0000 dy cui cng l 1111. Nhn xt rng, nu xu nh phn cha
ton bt 1 th qu trnh lit k kt thc, tri li dy k tip s nhn c bng cch cng thm 1
(theo modul 2 c nh) vo dy hin ti. T ta nhn c qui tc sinh k tip nh sau:

Tm i u tin t phi xang tri (i=n, n-1,..,1) tho mn bi =0.

Gn li bi =1 v bj=0 vi tt c j>i. Dy thu c l dy cn tm.

V d ta c xu nh phn di 10: 1100111011. Ta c i = 8, ta t b8 =1, b9,b10 =0 ta c


xu nh phn k tip: 1100111100.
Thut ton sinh k tip c m t trong th tc sau:
void Next_Bit_String( int *B, int n ){
i = n;
while (bi ==1 ) {
bi = 0
i = i-1;
}
bi = 1;
}

53

Chng 3: Bi ton lit k


Di y l chng trnh lit k cc xu nh phn c di n.
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 100
#define TRUE

#define FALSE

int Stop, count;


void Init(int *B, int n){
int i;
for(i=1; i<=n ;i++)
B[i]=0;
count =0;
}
void Result(int *B, int n){
int i;count++;
printf("\n Xau nhi phan thu %d:",count);
for(i=1; i<=n;i++)
printf("%3d", B[i]);
}
void Next_Bits_String(int *B, int n){
int i = n;
while(i>0 && B[i]){
B[i]=0; i--;
}
if(i==0 )
Stop=TRUE;
else
B[i]=1;
}
void Generate(int *B, int n){

54

Chng 3: Bi ton lit k


int i;
Stop = FALSE;
while (!Stop) {
Result(B,n);
Next_Bits_String(B,n);
}
}
void main(void){
int i, *B, n;clrscr();
printf("\n Nhap n=");scanf("%d",&n);
B =(int *) malloc(n*sizeof(int));
Init(B,n);Generate(B,n);free(B);getch();
}

V d 2. Lit k tp con m phn t ca tp n phn t. Cho X = { 1, 2,.., n }. Hy lit k tt


c cc tp con k phn t ca X (k n).
Gii: Mi tp con ca tp hp X c th biu din bng b c th t gm k thnh phn a
=(a1a2..ak) tho mn 1 a1 a2 .. ak n.
Trn tp cc tp con k phn t ca X c th xc nh nhiu th t khc nhau. Th t d nhn
thy nht l th t t in c nh ngha nh sau:
Ta ni tp con a = a1a2... ak i trc tp con a = a1a2...ak trong th t t in v k hiu l
a<a, nu tm c ch s j ( 1 j k ) sao cho:
a1 = a1, a2 = a2,..., aj-1 = aj-1, aj < aj.
Chng hn X = { 1, 2, 3, 4, 5 }, k = 3. Cc tp con 3 phn t ca X c lit k theo th t
t in nh sau:
1

5
55

Chng 3: Bi ton lit k


2

Nh vy, tp con u tin trong th t t in l (1, 2,.., k) v tp con cui cng l (n-k+1,
n-k+2,.., n). Gi s a = (a1, a2,.., ak) l tp con hin ti v cha phi l cui cng, khi c th
chng minh c rng tp con k tip trong th t t in c th c xy dng bng cch thc
hin cc qui tc bin i sau i vi tp con ang c.

Tm t bn phi dy a1, a2,.., ak phn t ain k + i

Thay ai bi ai +1,

Thay aj bi ai + j i, vi j:= i+1, i + 2,..., k

Chng hn vi n = 6, k =4. Gi s ta ang c tp con (1, 2, 5, 6), cn xy dng tp con k


tip n trong th t t in. Duyt t bn phi ta nhn c i =2, thay a2 bi a2 + 1 = 2 + 1 =3.
Duyt j t i + 1 = 3 cho n k, ta thay th a3 = a2 + 3 2 = 3 + 3 - 2 = 4, a4 = a2 + 4 - 2 = 3 + 4 2
= 5 ta nhn c tp con k tip l ( 1, 3, 4, 5).
Vi qui tc sinh nh trn, chng ta c th m t bng thut ton sau:
Thut ton lit k tp con k tip m phn t ca tp n phn t:
void Next_Combination( int *A, int m){
i = m;
while ( ai == m-n+i)
i = i -1;
ai = ai + 1;
for ( j = i+1; j <=m; j++)
aj = ai + j - i;
}

Vn bn chng trnh lit k tp cc tp con m phn t ca tp n phn t c th hin nh sau:


#include <stdio.h>
#include <conio.h>
#define TRUE 1
#define FALSE 0
#define MAX 100
int n, k, count, C[MAX], Stop;
void Init(void){
int i;
printf("\n Nhap n="); scanf("%d", &n);

56

Chng 3: Bi ton lit k


printf("\n Nhap k="); scanf("%d", &k);
for(i=1; i<=k; i++)
C[i]=i;
}
void Result(void){
int i;count++;
printf("\n Tap con thu %d:", count);
for(i=1; i<=k; i++)
printf("%3d", C[i]);
}
void Next_Combination(void){
int i,j;
i = k;
while(i>0 && C[i]==n-k+i)
i--;
if(i>0) {
C[i]= C[i]+1;
for(j=i+1; j<=k; j++)
C[j]=C[i]+j-i;
}
else Stop = TRUE;
}
void Combination(void){
Stop=FALSE;
while (!Stop){
Result(); Next_Combination();
}
}
void main(void){
clrscr(); Init();Combination();getch();
}

57

Chng 3: Bi ton lit k


V d 3. Lit k cc hon v ca tp n phn t. Cho X = { 1, 2,.., n }. Hy lit k cc hon v
t n phn t ca X.
Gii: Mi hon v t n phn t ca X c th biu din bi b c th t n thnh phn:
a = (a1, a2,.., an) tho mn ai X, i = 1, 2,.., n, ap aq, p q.
Trn tp cc hon v t n phn t ca X c th xc nh nhiu th t khc nhau. Tuy nhin,
th t d thy nht l th t t in c nh ngha nh sau:
Ta ni hon v a = a1a2... an i trc hon v a = a1a2...an trong th t t in v k hiu
l a<a, nu tm c ch s k ( 1 k n ) sao cho:
a1 = a1, a2 = a2,..., ak-1 = ak-1, ak < ak.
Chng hn X = { 1, 2, 3, 4}. Cc hon v cc phn t ca X c lit k theo th t t in
nh sau:
1

Nh vy, hon v u tin trong th t t in l (1, 2, , n) v hon v cui cng l (n, n1,..., 1). Gi s a = a1a2... an l mt hon v cha phi l cui cng. Khi ta c th chng minh
c rng, hon v k tip trong th t t in c th xy dng bng cch thc hin cc qui tc
bin i sau i vi hon v hin ti:

Tm t phi qua tri hon v c ch s j u tin tho mn aj <aj+1(hay j l ch s ln


nht aj <aj+1);

Tm ak l s nh nht cn ln hn aj trong cc s bn phi aj;

i ch aj vi ak

Lt ngc on t aj+1 n an.

Chng hn ta ang c hon v (3, 6, 2, 5, 4, 1), cn xy dng hon v k tip theo th t t


in. Ta duyt t j = n-1 sang bn tri tm j u tin tho mn aj < aj+1 ta nhn c j = 3
58

Chng 3: Bi ton lit k


( a3=2<a4=5). S nh nht cn ln hn a3 trong cc s bn phi a3 l a5 (a5=4). i ch a3 cho a5 ta
thu c (3, 6, 4, 5, 2, 1), lt ngc on t a4 n a6 ta nhn c (3,6,4,1,2,5).
T thut ton sinh k tip c th c m t bng th tc sau:
Thut ton sinh hon v k tip:
void Next_Permutation( int *A, int n){
int j, k, r, s, temp;
j = n;
while (aj > aj +1 )
j = j -1;
k = n;
while (aj > ak )
k= k - 1;
temp =aj; aj = ak; ak = temp;
r = j + 1; s = n;
while ( r < s) {
temp = ar; ar = as; as = temp;
r = r +1;

s = s - 1;

}
}

Vn bn chng trnh lit k cc hon v ca tp hp gm n phn t nh sau:


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX

20

#define TRUE

#define

FALSE 0

int P[MAX], n, count, Stop;


void Init(void){
int i;count =0;
printf("\n Nhap n=");scanf("%d", &n);
for(i=1; i<=n; i++)
P[i]=i;

59

Chng 3: Bi ton lit k


}
void Result(void){
int i;count++;
printf("\n Hoan vi %d:",count);
for(i=1; i<=n;i++)
printf("%3d",P[i]);
}
void Next_Permutaion(void){
int j, k, r, s, temp;
j = n-1;
while(j>0 && P[j]>P[j+1])
j--;
if(j==0)
Stop=TRUE;
else {
k=n;
while(P[j]>P[k]) k--;
temp = P[j]; P[j]=P[k]; P[k]=temp;
r=j+1; s=n;
while(r<s){
temp=P[r];P[r]=P[s]; P[s]=temp;
r++; s--;
}
}
}
void Permutation(void){
Stop = FALSE;
while (!Stop){
Result();
Next_Permutaion();
}
}

60

Chng 3: Bi ton lit k


void main(void){
Init();clrscr(); Permutation();getch();
}

V d 4. Bi ton: Cho n l s nguyn dng. Mt cch phn chia s n l biu din n thnh
tng cc s t nhin khng ln hn n. Chng hn 8 = 2 + 3 + 2.
Gii. Hai cch chia c gi l ng nht nu chng c cng cc s hng v ch khc nhau
v th t sp xp. Bi ton c t ra l, cho s t nhin n, hy duyt mi cch phn chia s n.
Chn cch phn chia s n = b1 + b2 +...+bk vi b1 > b2 >...> bk, v duyt theo trnh t t in
ngc. Chng hn vi n = 7, chng ta c th t t in ngc ca cc cch phn chia nh sau:
7
6

Nh vy, cch chia u tin chnh l n. Cch chia cui cng l dy n s 1. By gi chng ta
ch cn xy dng thut ton sinh k tip cho mi cch phn chia cha phi l cui cng.
Thut ton sinh cch phn chia k tip:
void Next_Division(void){
int i, j, R, S, D;
i = k;
while(i>0 && C[i]==1)
i--;

61

Chng 3: Bi ton lit k


if(i>0){
C[i] = C[i]-1;
D = k - i +1;
R = D / C[i];
S = D % C[i];
k = i;
if(R>0){
for(j=i+1; j<=i+R; j++)
C[j] = C[i];
k = k+R;
}
if(S>0){
k=k+1; C[k] = S;
}
}
else Stop=TRUE;
}

Vn bn chng trnh c th hin nh sau:


#include

<stdio.h>

#include

<conio.h>

#include

<stdlib.h>

#define MAX 100


#define TRUE 1
#define FALSE 0
int n, C[MAX], k, count, Stop;
void Init(void){
printf("\n Nhap n="); scanf("%d", &n);
k=1;count=0; C[k]=n;
}
void Result(void){
int i; count++;
printf("\n Cach chia %d:", count);

62

Chng 3: Bi ton lit k


for(i=1; i<=k; i++)
printf("%3d", C[i]);
}
void Next_Division(void){
int i, j, R, S, D;
i = k;
while(i>0 && C[i]==1)
i--;
if(i>0){
C[i] = C[i]-1;
D = k - i +1;
R = D / C[i];
S = D % C[i];
k = i;
if(R>0){
for(j=i+1; j<=i+R; j++)
C[j] = C[i];
k = k+R;
}
if(S>0){
k=k+1; C[k] = S;
}
}
else Stop=TRUE;
}
void Division(void){
Stop = FALSE;
while (!Stop){
Result();
Next_Division();
}
}

63

Chng 3: Bi ton lit k


void main(void){
clrscr(); Init(); Division(); getch();
}

3.4. THUT TON QUAY LUI (BACK TRACK)


Phng php sinh k tip c th gii quyt c cc bi ton lit k khi ta nhn bit c
cu hnh u tin & cu hnh cui cng ca bi ton. Tuy nhin, khng phi cu hnh sinh k tip
no cng c sinh mt cch n gin t cu hnh hin ti, ngay k c vic pht hin cu hnh ban
u cng khng phi d tm v nhiu khi chng ta phi chng minh s tn ti ca cu hnh. Do
vy, thut ton sinh k tip ch gii quyt c nhng bi ton lit k n gin. gii quyt
nhng bi ton t hp phc tp, ngi ta thng dng thut ton quay lui (Back Track) s c
trnh by di y.
Ni dung chnh ca thut ton ny l xy dng dn cc thnh phn ca cu hnh bng cch
th tt c cc kh nng. Gi s cn phi tm mt cu hnh ca bi ton x = (x1, x2,.., xn) m i-1
thnh phn x1, x2,.., xi-1 c xc nh, by gi ta xc nh thnh phn th i ca cu hnh bng
cch duyt tt c cc kh nng c th c v nh s cc kh nng t 1..ni. Vi mi kh nng j,
kim tra xem j c chp nhn c hay khng. Khi c th xy ra hai trng hp:

Nu chp nhn j th xc nh xi theo j, nu i=n th ta c mt cu hnh cn tm,


ngc li xc nh tip thnh phn xi+1.

Nu th tt c cc kh nng m khng c kh nng no c chp nhn th quay li


bc trc xc nh li xi-1.

im quan trng nht ca thut ton l phi ghi nh li mi bc i qua, nhng kh


nng no c th trnh s trng lp. nh li nhng bc duyt trc , chng trnh
cn phi c t chc theo c ch ngn xp (Last in first out). V vy, thut ton quay lui rt ph
hp vi nhng php gi qui. Thut ton quay lui xc nh thnh phn th i c th c m t
bng th tc Try(i) nh sau:
void Try( int i ) {
int

j;

for ( j = 1; j < ni; j ++) {


if ( <Chp nhn j >) {
<Xc nh xi theo j>
if (i==n)
<Ghi nhn cu hnh>;
else

Try(i+1);

}
}
}

C th m t qu trnh tm kim li gii theo thut ton quay lui bng cy tm kim li gii sau:
64

Chng 3: Bi ton lit k

Gc
Kh nng chn x1

Kh nng chn x2
vi x1 chn
Kh nng chn x3 vi
x1, x2 chn

Hnh 3.1. Cy lit k li gii theo thut ton quay lui.

Di y l mt s v d in hnh s dng thut ton quay lui.


V d 1. Lit k cc xu nh phn di n.
Biu din cc xu nh phn di dng b1, b2,..., bn, trong bi{0, 1 }. Th tc qui
Try(i) xc nh bi vi cc gi tr c cho bi l 0 v 1. Cc gi tr ny mc nhin c chp nhn
m khng cn phi tho mn iu kin g (do bi ton khng cn n bin trng thi). Th tc
Init khi to gi tr n v bin m count. Th tc kt qu in ra dy nh phn tm c. Chng hn
vi n =3, cy tm kim li gii c th hin nh hnh 3.2.
Gc
0

0
0
000

1
1
001 010

0
1

011

0
100

1
1

101 110

1
111

Hnh 3.2. Cy tm kim li gii lit k dy nh phn di 3

65

Chng 3: Bi ton lit k


Vn bn chng trnh lit k cc xu nh phn c di n s dng thut ton quay lui c
thc hin nh sau:
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
#include <stdlib.h>
void Result(int *B, int n){
int i;
printf("\n ");
for(i=1;i<=n;i++)
printf("%3d",B[i]);
}
void Init(int *B, int n){
int i;
for(i=1;i<=n;i++)
B[i]=0;
}
void Try(int i, int *B, int n){
int j;
for(j=0; j<=1;j++){
B[i]=j;
if(i==n) {
Result(B,n);
}
else Try(i+1, B, n);
}
}
void main(void){
int *B,n;clrscr();
printf("\n Nhap n=");scanf("%d",&n);
B=(int *) malloc(n*sizeof(int));
Init(B,n); Try(1,B,n);free(B);

66

Chng 3: Bi ton lit k


getch();
}

V d 2. Lit k cc tp con k phn t ca tp n phn t.


Gii. Biu din tp con k phn t di dng c1, c2,.., ck, trong 1< c1<c2..n. T suy ra
cc gi tr c cho ci l t ci-1 + 1 cho n n - k + i. Cn thm vo c0 = 0. Cc gi tr c ny
mc nhin c chp nhn m khng cn phi thm iu kin g. Cc th tc Init, Result c
xy dng nh nhng v d trn.
Cy tm kim li gii bi ton lit k tp con k phn t ca tp n phn t vi n=5, k=3 c
th hin nh trong hnh 3.3.
Gc
1

123 124

124 134

135

145

234

235

245

345

Hnh 3.3. Cy lit k t hp chp 3 t {1, 2, 3, 4, 5 }


Chng trnh lit k cc tp con k phn t trong tp n phn t c th hin nh sau:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX

100

int B[MAX], n, k, count=0;


void Init(void){
printf("\n Nhap n="); scanf("%d", &n);
printf("\n Nhap k="); scanf("%d", &k);
B[0]=0;
}
void Result(void){
int i;count++;
printf("\n Tap thu %d:",count);

67

Chng 3: Bi ton lit k


for(i=1; i<=k; i++){
printf("%3d", B[i]);
}
getch();
}
void Try(int i){
int j;
for(j=B[i-1]+1;j<=(n-k+i); j++){
B[i]=j;
if(i==k) Result();
else Try(i+1);
}
}
void main(void){
clrscr();Init();Try(1);
}

V d 3. Lit k cc hon v ca tp n phn t.


Gii. Biu din hon v di dng p1, p2,.., pn, trong pi nhn gi tr t 1 n n v pipj vi
ij. Cc gi tr t 1 n n ln lt c c cho pi, trong gi tr j c chp nhn nu n cha
c dng. V vy, cn phi ghi nh vi mi gi tr j xem n c dng hay cha. iu ny
c thc hin nh mt dy cc bin logic bj, trong bj = true nu j cha c dng. Cc bin
ny phi c khi u gi tr true trong th tc Init. Sau khi gn j cho pi, cn ghi nhn false cho
bj v phi gn true khi thc hin xong Result hay Try(i+1). Cc th tc cn li ging nh v d 1,
2. Hnh 3.4 m t cy tm kim li gii bi ton lit k hon v ca 1, 2,.., n vi n = 3.
Gc
1
2
3
1,2,3

3
2 3
1,3, 2 2,1,3

2
1

3
3

2,3,1 3,1,2

3,2,1

Hnh 3.4. Cy tm kim li gii bi ton lit k hon v ca {1,2,3}


68

Chng 3: Bi ton lit k


Sau y l chng trnh gii quyt bi ton lit k cc hon v ca 1, 2,.., n.
#include

<stdio.h>

#include

<conio.h>

#include

<stdlib.h>

#define MAX 100


#define TRUE 1
#define FALSE 0
int P[MAX],B[MAX], n, count=0;
void Init(void){
int i;
printf("\n Nhap n="); scanf("%d", &n);
for(i=1; i<=n; i++)
B[i]=TRUE;
}
void Result(void){
int i; count++;
printf("\n Hoan vi thu %d:",count);
for (i=1; i<=n; i++)
printf("%3d",P[i]);
getch();
}
void Try(int i){
int j;
for(j=1; j<=n;j++){
if(B[j]) {
P[i]=j;
B[j]=FALSE;
if(i==n) Result();
else Try(i+1);
B[j]=TRUE;
}
}

69

Chng 3: Bi ton lit k


}
void main(void){
Init(); Try(1);
}

V d 4. Bi ton Xp Hu. Lit k tt c cc cch xp n qun hu trn bn c n x n sao cho


chng khng n c nhau.
Gii. Bn c c n hng c nh s t 0 n n-1, n ct c nh s t 0 n n-1; Bn c
c n*2 -1 ng cho xui c nh s t 0 n 2*n -2, 2 *n -1 ng cho ngc c nh s
t 2*n -2. V d: vi bn c 8 x 8, chng ta c 8 hng c nh s t 0 n 7, 8 ct c nh s
t 0 n 7, 15 ng cho xui, 15 ng cho ngc c nh s t 0..15.
V trn mi hng ch xp c ng mt qun hu, nn chng ta ch cn quan tm n qun
hu c xp ct no. T dn n vic xc nh b n thnh phn x1, x2,.., xn, trong xi = j
c hiu l qun hu ti dng i xp vo ct th j. Gi tr ca i c nhn t 0 n n-1; gi tr ca
j cng c nhn t 0 n n-1, nhng tho mn iu kin (i,j) cha b qun hu khc chiu n
theo ct, ng cho xui, ng cho ngc.
Vic kim sot theo hng ngang l khng cn thit v trn mi hng ch xp ng mt qun
hu. Vic kim sot theo ct c ghi nhn nh dy bin logic aj vi qui c aj=1 nu ct j cn
trng, ct aj=0 nu ct j khng cn trng. ghi nhn ng cho xui v ng cho ngc c
chiu ti (i,j) hay khng, ta s dng phng trnh i + j = const v i - j = const, ng cho th
nht c ghi nhn bi dy bin bj, ng cho th 2 c ghi nhn bi dy bin cj vi qui c
nu ng cho no cn trng th gi tr tng ng ca n l 1 ngc li l 0. Nh vy, ct j c
chp nhn khi c 3 bin aj, bi+j, ci+j u c gi tr 1. Cc bin ny phi c khi u gi tr 1 trc
, gn li gi tr 0 khi xp xong qun hu th i v tr li gi tr 1 khi a ra kt qu.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#define N 8
#define

(2*N-1)

#define

SG

(N-1)

#define

TRUE

#define

FALSE 0

void hoanghau(int);
void inloigiai(int

loigiai[]);FILE *fp;

int A[N], B[D], C[D], loigiai[N];

70

Chng 3: Bi ton lit k


int soloigiai =0;
void hoanghau(int i){
int j;
for (j=0; j<N;j++){
if (A[j] && B[i-j+SG] && C[i+j] ) {
loigiai[i]=j;
A[j]=FALSE;
B[i-j+SG]=FALSE;
C[i+j]=FALSE;
if (i==N-1){
soloigiai++;
inloigiai(loigiai);
delay(500);
}
else
hoanghau(i+1);
A[j]=TRUE;
B[i-j+SG]=TRUE;
C[i+j]=TRUE;
}
}
}
void inloigiai(int *loigiai){
int j;
printf("\n Li gii %3d:",soloigiai);
fprintf(fp,"\n Li gii %3d:",soloigiai);
for (j=0;j<N;j++){
printf("%3d",loigiai[j]);
fprintf(fp,"%3d",loigiai[j]);
}
}
void main(void){

71

Chng 3: Bi ton lit k


int i;clrscr();fp=fopen("loigiai.txt","w");
for (i=0;i<N;i++)
A[i]=TRUE;
for(i=0;i<D; i++){
B[i]=TRUE;
C[i]=TRUE;
}
hoanghau(0);fclose(fp);
}

Di y l s cch xp hu ng vi n.
n

10

11

12

13

14

Hn

40

92

352

724

2680

14200

73712

365596

Nghim u tin m chng trnh tm c ng vi n =8 l x =(1, 5, 8, 6, 3, 7, 2, 4) n


tng ng vi cch xp trn hnh 5.

NHNG NI DUNG CN GHI NH


9

Th no l bi ton lit k?

Nhng iu kin bt buc ca mt thut ton lit k.

Hiu v nm vng lp cc bi ton c th gii c bng phng php sinh.

Hiu v nm vng nhng yu t cn thit thc hin gii thut quay lui.

BI TP CHNG 3
Bi 1. Lit k tt c cc tp con ca tp 1, 2,..,n.
Bi 2. Lit k tt c cc xu nh phn di n c tng cc bt 1 ng bng kn.
Bi 3. Lit k tt c cc xu nh phn di 5 khng cha hai s 0 lin tip.
Bi 4. Lit k tt c cc phn t ca tp:
n

D = {x = ( x1 , x 2 ,", x n } : a j x j = b, x j {0,1}, j = 1,2,", n


j =1

Trong a1,a2,..,an, b l cc s nguyn dng.


Bi 5. Lit k tt c cc phn t ca tp:

72

Chng 3: Bi ton lit k


n

D = {x = ( x1 , x 2 ,", x n } : a j x j = b, x j Z + , j = 1,2, ", n


j =1

Trong a1,a2,..,an, b l cc s nguyn dng.


Bi 6. Hnh vung thn b ma phng bc n l ma trn vung cp n vi cc phn t l cc s
t nhin t 1 n n2 tha mn cc tnh cht: Tng cc phn t trn mi dng, mi ct v mi
mt trong hai ng cho c cng mt gi tr. Hy lit k tt c cc ma phng bc 3, 4
khng sai khc nhau bi cc php bin hnh n gin (quay, i xng).
V d di y l mt ma phng bc 3 tha mn tnh cht tng hng, ct, ng cho u
l 15.

8 1 6
3 5 7
4 9 2
Bi 7. Tam gic thn b. Cho mt li vung gm n x n v s nguyn dng k. Tm cch
in cc s t nhin t 1 n 3n-3 vo cc ct u tin, dng cui cng v ng cho
chnh sao cho tng cc s in trong ct u tin, dng cui cng v ng cho chnh ca
li u bng k. V d n = 5, k = 35 ta c cch in sau:
11
10

1
4

7
5

12

Pht trin thut ton da trn thut ton quay lui ch ra vi gi tr ca n, k cho trc bi
ton c li gii hay khng. Nu c cu tr li ch cn a ra mt li gii.
Bi 8. Tm tp con di nht c th t tng dn, gim dn. Cho dy s a1, a2,..., an. Hy tm
dy con di nht c sp xp theo th t tng hoc gim dn. D liu vo cho bi file
tapcon.in, dng u tin ghi li s t nhin n (n100), dng k tip ghi li n s, mi s c
phn bit vi nhau bi mt hoc vi k t rng. Kt qu ghi li trong file tapcon.out. V d
sau s minh ha cho file tapcon.in v tapcon.out.
tapcon.in

tapcon.out

7 1 3 8 9 6 12

1 3 8 9 12

73

Chng 3: Bi ton lit k


Bi 9. Duyt cc tp con tho mn iu kin. Cho dy s a1, a2,..., an v s M. Hy tm tt c
cc dy con dy con trong dy s a1, a2,..., an sao cho tng cc phn t trong dy con ng
bng M. D liu vo cho bi file tapcon.in, dng u tin ghi li hai s t nhin N v s M
(N100), dng k tip ghi li N s mi s c phn bit vi nhau bi mt v du trng.
Kt qu ghi li trong file tapcon.out. V d sau s minh ha cho file tapcon.in v tapcon.out
tapcon.in
7

50

10

15

20

25

30

35

tapcon.out
20

30

15

35

10

15

25

20

25

15

30

10

35

10

15

20

Bi 10. Cho li hnh ch nht gm (nm) hnh vung n v. Hy lit k tt c cc ng i t


im c ta (0, 0) n im c ta (nm). Bit rng, im (0, 0) c coi l nh di
ca hnh vung di nht gc bn tri, mi bc i ch c php thc hin hoc ln trn
hoc xung di theo cnh ca hnh vung n v. D liu vo cho bi file bai10.inp, kt
qu ghi li trong file bai10.out. V d sau s minh ha cho file bai8.in v bai8.out.
Bai10.in
2

bai10.out
0

Bi 11. Tm b gi tr ri rc hm mc tiu sin(x1+x2 +...+ xk) t gi tr ln nht. D liu vo


cho bi file bai11.inp, kt qu ghi li trong file bai11.out.
74

Chng 3: Bi ton lit k


Bi 12. Duyt mi php ton trong tnh ton gi tr biu thc. Vit chng trnh nhp t bn phm
hai s nguyn M, N. Hy tm cch thay cc du ? trong biu thc sau bi cc php ton +, -,
*, %, / (chia nguyn) sao cho gi tr ca biu thc nhn c bng ng N:
( (((M?M) ?M)?M)?M)?M)?M
Nu khng c hy a ra thng bo l khng th c.

75

Chng 4: Bi ton ti u

CHNG IV: BI TON TI U


Ni dung chnh ca chng ny l gii thiu cc phng php gii quyt bi ton ti u
ng thi gii quyt mt s bi ton c vai tr quan trng ca l thuyt t hp. Nhng ni dung
c cp bao gm:
9

Gii thiu bi ton v pht biu bi ton ti u cho cc m hnh thc t.

Phn tch phng php lit k gii quyt bi ton ti u.

Phng php nhnh cn gii quyt bi ton ti u.

Phng php rt gn gii quyt bi ton ti u.

Bn c c th tm thy phng php gii chi tit cho nhiu bi ton ti u quan trng trong
cc ti liu [1], [2].

4.1. GII THIU BI TON


Trong nhiu bi ton thc t, cc cu hnh t hp cn c gn mt gi tr bng s nh gi
gi tr s dng ca cu hnh i vi mt mc ch s dng c th no . Khi xut hin bi
ton: Hy la chn trong s tt c cc cu hnh t hp chp nhn c cu hnh c gi tr s dng
tt nht. Cc bi ton nh vy c gi l bi ton ti u t hp. Chng ta c th pht biu bi
ton ti u t hp di dng tng qut nh sau:
Tm cc tiu (hay cc i) ca phim hm f(x) = min(max) vi iu kin x D, trong D
l tp hu hn cc phn t.
Hm f(x) c gi l hm mc tiu ca bi ton, mi phn t x D c gi l mt phng
n cn tp D gi l tp cc phng n ca bi ton. Thng thng tp D c m t nh l tp
cc cu hnh t hp tho mn mt s tnh cht no cho trc no .
Phng n x* D em li gi tr nh nht (ln nht) cho hm mc tiu c gi l phng
n ti u, khi gi tr f* = f(x*) c gi l gi tr ti u ca bi ton.
Di y chng ta s gii thiu mt s bi ton ti u t hp kinh in. Cc bi ton ny l
nhng m hnh c nhiu ng dng thc t v gi vai tr quan trng trong vic nghin cu v pht
trin l thuyt ti u ho t hp.
Bi ton Ngi du lch: Mt ngi du lch mun i thm quan n thnh ph T1, T2, , Tn.
Xut pht t mt thnh ph no , ngi du lch mun i qua tt c cc thnh ph cn li, mi
thnh ph i qua ng mt ln, ri quay tr li thnh ph xut pht. Bit cij l chi ph i t thnh
ph Ti n thnh ph Tj (i,j = 1, 2,.., n), hy tm hnh trnh vi tng chi ph l nh nht (mt hnh
trnh l mt cch i tho mn iu kin).
76

Chng 4: Bi ton ti u

T (1)

R rng, ta c th thit lp c mt tng ng 1-1 gia hnh trnh


T ( 2) ...T ( n ) T (1) ) vi mt hon v = ((1), (2),.., (n)) ca n s t nhin 1,2,..., n.

t:

f ( ) = C (1), ( 2) + C ( 2), (3) +

+ C ( n 1), ( n ) + C ( n ), (1) ,

k hiu l tp tt c cc hon v =((1), (2),..., (n)) ca n s t nhin 1, 2,.., n. Khi bi


ton ngi du lch c th pht biu di dng bi ton ti u t hp sau:
min { f(): }
C th thy rng tng s hnh trnh ca ngi du lch l n!, trong ch c (n-1)! hnh trnh
thc s khc nhau (bi v c th xut pht t mt thnh ph bt k nn c th c nh mt thnh
ph no lm im xut pht).
Bi ton ci ti: Mt nh thm him cn em theo mt ci ti c trng lng khng qu b.
C n vt c th em theo. vt th j c trng lng aj v gi tr s dng cj (j =1, 2,.., n). Hi
nh thm him cn em theo nhng vt no cho tng gi tr s dng l ln nht ?
Mt phng n ca nh thm him c th biu din nh mt vector nh phn di n: x =
(x1,x2,.., xn ), trong xi = 1 c ngha l vt th i c em theo, xi = 0 c ngha tri li. Vi
phng n em theo x, gi tr s dng cc vt em theo l:

f ( x) = i =1 ci xi , tng trng lng vt em theo l g ( x) = i =1 ai xi , nh vy bi ton


n

ci ti c pht biu di dng bi ton ti u t hp sau:


Trong s cc vetor nh phn di n tho mn iu kin g(x) b, hy tm vector x* hm
mc tiu f(x) t gi tr nh nht. Ni cch khc:
min { f(x): g(x) b }
Bi ton cho thu my: Mt ng ch c mt ci my cho thu. u thng ng ta nhn
c yu cu thu my ca m khch hng. Mi khch hng i s cho bit tp Ni cc ngy trong
thng cn s dng my ( i = 1, 2,.., m). ng ch ch c quyn hoc t chi yu cu ca khch
hng i, hoc nu nhn th phi b tr my phc v khch hng i ng nhng ngy m khch hng
ny yu cu. Hi rng ng ch phi tip nhn cc yu cu ca khch th no cho tng s ngy
s dng my l ln nht.
K hiu, I = { 1, 2,.., m } l tp ch s khch hng, S l tp hp cc tp con ca I. Khi ,
tp hp tt c cc phng n cho thu my l:

D = {J S : N k N p = , k p J

}. Vi mi phng n J D

f ( j) = | N j |
jJ

s l tng s ngy s dng my theo phng n . Bi ton t ra c th pht biu di dng bi


ton ti u t hp sau:

max{ f ( j ) : j D} .
77

Chng 4: Bi ton ti u
Bi ton phn cng: C n cng vic v n th. Bit cij l chi ph cn tr th i hon thnh
cng vic th j (i, j = 1, 2,..., n ). Cn phi thu th sao cho cc cng vic u hon thnh v mi
th ch thc hin mt cng vic, mi cng vic ch do mt th thc hin. Hy tm cch thu n
nhn cng sao cho tng chi ph thu th l nh nht.
R rng, mi phng n b tr th thc hin cc cng vic tng ng vi mt hon v =
((1), (2),..., (n)) ca n s t nhin { 1, 2,.., n }. Chi ph theo phng n trn l
f ( ) = C (1),1 + C ( 2 ), 2 + + C ( n ),n .
Cng vic

Th thc hin

(1)

(2)

...

...

(n)

Bi ton t ra c dn v bi ton ti u t hp: min{ f ( ) : }.


Bi ton lp lch: Mi mt chi tit trong s n chi tit D1, D2,.., Dn cn phi ln lt c
gia cng trn m my M1, M2,.., Mm. Thi gian gia cng chi tit Di trn my Mj l tij. Hy tm lch
(trnh t gia cng ) cc chi tit trn cc my sao cho vic hon thnh gia cng tt c cc chi tit l
sm nht c th c. Bit rng, cc chi tit c gia cng mt cch lin tc, ngha l qu trnh
gia cng ca mi mt chi tit phi c tin hnh mt cch lin tc ht my ny sang my khc
khng cho php c khong thi gian dng khi chuyn t my ny sang my khc.
R rng, mi mt lch gia cng cc chi tit trn cc my s tng ng vi mt hon v =
((1), (2),.., (n) ) ca n s t nhin 1, 2,.., n. Thi gian hon thnh theo cc lch trn c xc
nh bi hm s:
n 1

f ( ) = C ( j ), ( j +1) + k =1 t k , ( n ) , trong cij = Sj Si, Sj l thi im bt u thc hin


m

j =1

vic gia cng chi tit j (i, j = 1, 2,..., n). ngha ca h s cij c th c gii thch nh sau: n l
tng thi gian gin on (c tnh t khi bt u gia cng chi tit i) gy ra bi chi tit j khi n
c gia cng sau chi tit i trong lch gia cng. V vy, cij c th tnh theo cng thc:
k 1
k

cij = max t lj t lj , i, j = 1, 2,..., n. V vy bi ton t ra dn v bi ton ti u t


1 k m l =1
l =1

hp sau:

min { f(): }.
Trong thc t, lch gia cng cn phi tho mn thm nhiu iu kin khc na. V nhng
ng dng quan trng ca nhng bi ton loi ny m trong ti u ho t hp hnh thnh mt
lnh vc l thuyt ring v cc bi ton lp lch gi l l thuyt lp lch hay qui hoch lch.
78

Chng 4: Bi ton ti u

4.2. DUYT TON B


Mt trong nhng phng php hin nhin nht gii bi ton ti u t hp t ra l: Trn
c s cc thut ton lt k t hp ta tin hnh duyt tng phng n ca bi ton, i vi mi
phng n, ta u tnh gi tr hm mc tiu cho phng n , sau so snh gi tr ca hm mc
tiu ti tt c cc phng n c lit k tm ra phng n ti u. Phng php xy dng
theo nguyn tc nh vy c gi l phng php duyt ton b.
Hn ch ca phng php duyt ton b l s bng n ca cc cu hnh t hp. Chng hn
duyt c 15! = 1 307 674 368 000 cu hnh, trn my c tc 1 t php tnh giy, nu mi
hon v cn lit k mt khong 100 php tnh, th ta cn khong thi gian l 130767 giy ( ln hn
36 ting ng h). V vy, cn phi c bin php hn ch vic kim tra hoc tm kim trn cc cu
hnh t hp th mi c hy vng gii c cc bi ton ti u t hp thc t. Tt nhin, a ra
c mt thut ton cn phi nghin cu k tnh cht ca mi bi ton t hp c th. Chnh nh
nhng nghin cu , trong mt s trng hp c th ta c th xy dng c thut ton hiu qu
gii quyt bi ton t ra. Nhng chng ta cng cn phi ch rng, trong nhiu trng hp (
bi ton ngi du lch, bi ton ci ti, bi ton cho thu my) chng ta vn cha tm ra c mt
phng php hu hiu no ngoi phng php duyt ton b c cp trn.
hn ch vic duyt, trong qu trnh lit k cn tn dng trit nhng thng tin tm
loi b nhng phng n chc chn khng phi l ti u. Di y l mt bi ton ti u t
hp rt thng hay gp trong k thut.
V d. Duyt mi b gi tr trong tp cc gi tr ri rc.
Bi ton. Tm:

max{ f ( x1 , x2 ,..., xn ) : xi Di ; i = 1,2,..., n} hoc:


min{ f ( x1 , x2 ,..., xn ) : xi Di ; i = 1,2,..., n} .
Trong , Di l mt tp hu hn cc gi tr ri rc tha mn mt iu kin rng buc no .
Gii.
Gi s s cc phn t ca tp gi tr ri rc Di l ri ( i=1, 2,..., n). Gi R = r1 + r2 +... + rn l
s cc phn t thuc tt c cc tp Di (i=1, 2,..., n). Khi , ta c tt c C(R, n) b c th t cc
gi tr gm n phn t trong R phn t, y chnh l s cc phng n ta cn duyt. Trong s
C(R,n) cc b n phn t, ta cn lc ra cc b tho mn iu kin xiDi (i=1, 2,..., n) tnh gi tr
ca hm mc tiu f(x1, x2,..., xn). Nh vy, bi ton c a v bi ton duyt cc b gm n phn
t (x1, x2,..., xn) t tp hp gm R = r1 + r2 +.. + rn phn t tho mn iu kin xiDi.
V d: Vi tp D1 = (1, 2, 3),
D2 = (3, 4),
D3 = (5, 6, 7).
Khi chng ta cn duyt b cc gi tr ri rc sau:
79

Chng 4: Bi ton ti u
1
1
1
1
1
1
2
2
2

3
3
3
4
4
4
3
3
3

5
6
7
5
6
7
5
6
7

2
2
2
3
3
3
3
3
3

4
4
4
3
3
3
4
4
4

5
6
7
5
6
7
5
6
7

Vi cch phn tch nh trn, ta c th s dng thut ton quay lui duyt kt hp vi vic
kim tra thnh phn xiDi. Di y l ton vn chng trnh duyt cc b gi tr trong tp cc
gi tr ri rc.
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#include <conio.h>
#define MAX

2000000

#define TRUE 1
#define FALSE 0
int n, k, H[100]; float *B;int *C, count =0, m;
FILE *fp;
void Init(void){
int i,j;float x;C[0]=0;H[0]=0;
fp=fopen("roirac.in","r");
fscanf(fp,"%d",&n);
printf("\n So tap con roi rac n=%d",n);
for(i=1; i<=n; i++){
fscanf(fp,"%d",&H[i]);
printf("\n Hang %d co so phan tu la %d",i, H[i]);
}
H[0]=0;
for (i=1; i<=n; i++){
printf("\n");
for(j=1; j<=H[i]; j++){

80

Chng 4: Bi ton ti u
fscanf(fp,"%f",&x);
B[++k]=x;
}
}
printf("\n B=");
for(i=1; i<=k; i++){
printf("%8.2f", B[i]);
}
fclose(fp);
}
int In_Set(int i){
int canduoi=0, cantren=0,j;
for(j=1; j<=i; j++)
cantren = cantren + H[j];
canduoi=cantren-H[j-1];
if (C[i]> canduoi && C[i]<=cantren)
return(TRUE);
return(FALSE);
}
void Result(void){
int i;
count++; printf("\n Tap con thu count=%d:",count);
for(i=1; i<=n ; i++){
printf("%8.2f", B[C[i]]);
}
}
void Try(int i){
int j;
for(j = C[i-1]+1; j<=(k-n+i); j++){
C[i]=j;
if(In_Set(i)){
if (i==n ) Result();

81

Chng 4: Bi ton ti u
else Try(i+1);
}
}
}
void main(void){
clrscr();
B = (float *) malloc(MAX *sizeof(float));
C = (int *) malloc(MAX *sizeof(int));
Init();Try(1);free(B); free(C);getch();
}

4.3. THUT TON NHNH CN


Gi s chng ta cn gii quyt bi ton ti u t hp vi m hnh tng qut nh sau:

min{ f ( x) : x D} . Trong D l tp hu hn phn t. Ta gi thit D c m t nh sau:


D = { x =( x1, x2,..., xn) A1 A2 ... An ; x tho mn tnh cht P }, vi A1 A2 ... An l
cc tp hu hn, P l tnh cht cho trn tch xc A1 A2 ... An.
Nh vy, cc bi ton chng ta va trnh by trn u c th c m t di dng trn.
Vi gi thit v tp D nh trn, chng ta c th s dng thut ton quay lui lit k cc
phng n ca bi ton. Trong qu trnh lit k theo thut ton quay lui, ta s xy dng dn cc
thnh phn ca phng n. Ta gi, mt b phn gm k thnh phn (a1, a2,..., ak) xut hin trong
qu trnh thc hin thut ton s c gi l phng n b phn cp k.
Thut ton nhnh cn c th c p dng gii bi ton t ra nu nh c th tm c mt
hm g xc nh trn tp tt c cc phng n b phn ca bi ton tho mn bt ng thc sau:

g (a1 , a 2 ,.., a k ) min{ f ( x) : x D, xi = ai , i = 1,2,..., k }

(*)

vi mi li gii b phn (a1, a2,.., ak), v vi mi k = 1, 2,...


Bt ng thc (*) c ngha l gi tr ca hm ti phng n b phn (a1, a2,.., ak) khng
vt qu gi tr nh nht ca hm mc tiu bi ton trn tp con cc phng n.
D(a1, a2,.., ak) { x D: xi = ai, 1 = 1, 2,.., k },
ni cch khc, g(a1, a2,.., ak) l cn di ca tp D(a1, a2,.., ak). Do c th ng nht tp D(a1,
a2,..., ak) vi phng n b phn (a1, a2,.., ak), nn ta cng gi gi tr g(a1, a2,.., ak) l cn di ca
phng n b phn (a1, a2,.., ak).
Gi s ta c c hm g. Ta xt cch s dng hm ny hn ch khi lng duyt
trong qu trnh duyt tt c cc phng n theo thut ton quay lui. Trong qu trnh lit k cc
82

Chng 4: Bi ton ti u
phng n c th thu c mt s phng n ca bi ton. Gi

x l gi tr hm mc tiu nh

nht trong s cc phng n duyt, k hiu f = f ( x). Ta gi x l phng n tt nht hin c,


cn f l k lc. Gi s ta c c f , khi nu:
g(a1, a2,.., ak) > f th t bt ng thc (*) ta suy ra:

f < g(a1, a2,..., ak) min { f(x): x D, xi = ai, i=1, 2,..., k }, v th tp con cc phng n
ca bi ton D(a1, a2, , ak) chc chn khng cha phng n ti u. Trong trng hp ny ta
khng cn phi pht trin phng n b phn (a1, a2,..., ak), ni cch khc l ta c th loi b cc
phng n trong tp D(a1, a2,.., an) khi qu trnh tm kim.
Thut ton quay lui lit k cc phng n cn sa i li nh sau:
void Try(int k){
/*Pht trin phng n b phn (a1, a2,..., ak-1
theo thut ton quay lui c kim tra cn di
Trc khi tip tc pht trin phng n*/
for ( ak Ak ) {
if ( chp nhn ak ){
xk = ak;
if (k == n)
< cp nht k lc>;
else if (g(a1, a2,..., ak) f )
Try (k+1);
}
}
}

Khi , thut ton nhnh cn c thc hin nh th tc sau:


void Nhanh_Can(void) {

f = +;
/* Nu bit mt phng n x no th c th t f = f ( x ). */
Try(1);
if ( f + )
< f l gi tr ti u, x l phng n ti u >;

83

Chng 4: Bi ton ti u
else
< bi ton khng c phng n>;
}

Ch rng nu trong th tc Try ta thay th cu lnh:


if (k == n)
< cp nht k lc >;
else if (g(a1, a2,.., ak) f )
Try(k+1);
bi
if (k == n)
< cp nht k lc >;
else Try(k+1);

th th tc Try s lit k ton b cc phng n ca bi ton, v ta li thu c thut ton duyt


ton b. Vic xy dng hm g ph thuc vo tng bi ton ti u t hp c th. Nhng chng ta
c gng xy dng sao cho t c nhng iu kin di y:

Vic tnh gi tr ca g phi n gin hn vic gii bi ton t hp trong v phi ca (*).

Gi tr ca g(a1, a2,.., ak) phi st vi gi tr v phi ca (*).

Rt tic, hai yu cu ny trong thc t thng i lp nhau.


V d 1. Bi ton ci ti. Chng ta s xt bi ton ci ti tng qut hn m hnh c
trnh by trong mc 4.1. Thay v c n vt, y ta gi thit rng c n loi vt v s lng
vt mi loi l khng hn ch. Khi , ta c m hnh bi ton ci ti bin nguyn sau y: C n
loi vt, vt th j c trng lng aj v gi tr s dng cj ( j =1, 2,.., n). Cn cht cc vt
ny vo mt ci ti c trng lng l b sao cho tng gi tr s dng ca cc vt ng trong ti
l ln nht.
M hnh ton hc ca bi ton c dng sau tm:
n
n

f = max f ( x) = c j x j : a j x j b, x j Z + , j = 1,2,..., n , (1) .


j =1
j =1

trong Z+ l tp cc s nguyn khng m.


K hiu D l tp cc phng n ca bi ton (1):

D = x = ( x1 , x 2 ,

84

, x n : a j x j b, x j Z + , j = 1,2,
j =1

, n .

Chng 4: Bi ton ti u
Khng gim tnh tng qut ta gi thit rng, cc vt c nh s sao cho bt ng thc
sau c tho mn

c1 c 2

a1 a 2

cn
an

(2)

xy dng hm tnh cn di, cng vi bi ton ci ti (1) ta xt bi ton ci ti bin lin


tc sau:
Tm:

n
n
g * = max c j x j : a j x j b, x j 0, j = 1,2,
j =1
j =1

, n .

(3)

Mnh . Phng n ti u ca bi ton (3) l vector x = ( x1 , x 2 , , x n ) vi cc thnh


phn c xc nh bi cng thc:

x1 =

b
, x 2 = x3 =
a1

= x n = 0 v gi tr ti u l g * =

c1b1
.
a1

Chng minh. Thc vy, xt x = ( x1, x2,.., xn) l mt phng n tu ca bi ton (3). Khi
t bt ng thc (3) v do xj 0, ta suy ra:

c j x j (c1 / a1 )a j x j , j = 1, 2,

n.

suy ra:
n

j =1

j =1

c j xj (

c1
c n
c
)a j x j = ( 1 ) a j x j 1 b = g * . Mnh c chng minh.
a1
a1 j =1
a1

By gi ta gi s c phng n b phn cp k: (u1, u2,.., uk). Khi gi tr s dng ca cc


vt ang c trong ti l:

k = c1u1 + c2 u 2 +

+ ck u k , v trng lng cn li ca ti l:

bk = b c1u1 + c2 u 2 +

+ ck u k ,

ta c:

max{f ( x) : x D, x j = u j , j = 1,2,

= max k +

j = k +1

xj :

j = k +1

n}

x j bk , x j Z + , j = k + 1, k + 2,

n
n
k + max c j x j : a j x j bk , x j 0, j = k + 1, k + 2,
j = k +1
j = k +1
c b
= k + k +1 k
a k +1

, n

, n

85

Chng 4: Bi ton ti u
(Theo mnh gi tr s hng th hai l

c k +1bk
)
a k +1

Vy ta c th tnh cn trn cho phng n b phn (u1, u2,..., uk) theo cng thc:

g (u1 , u 2 ,

, uk ) = k +

c k +1bk
a k +1

Ch : Khi tip tc xy dng thnh phn th k+1 ca li gii, cc gi tr c cho xk+1 s l


0, 1,..., [bk /ak+1]. Do c kt qu ca mnh , khi chn gi tr cho xk+1 ta s duyt cc gi tr c
theo th t gim dn.
V d. Gii bi ton ci ti sau theo thut ton nhnh cn trnh by trn.

f ( x) = 10 x1 + 5 x 2 + 3 x3 + 6 x 4 max
5 x1 + 3 x 2 + 2 x3 + 4 x 4 8
x j Z + , j = 1,2,3,4.
Gii. Qu trnh gii bi ton c m t trong cy tm kim trong hnh 4.1. Thng tin v
mt phng n b phn trn cy c ghi trong cc trn hnh v tng ng theo th t sau: u
tin l cc thnh phn ca phng n, tip n l gi tr ca cc vt cht trong ti, w l trng
lng cn li ca ti v g l cn trn.
Kt thc thut ton, ta thu c phng n ti u l x* =(1, 1, 0, 1), gi tr ti u f*= 15.

86

Chng 4: Bi ton ti u
Gc f = +
x1=1

x1=0
(0) =0;
w=8; g=40/3

=10;
w=3; g=15
x1=1

x2=0

(1,1) =15;

(1, 0) =10;

w=0; g=15

w=3; g=14.5
Loi v cn trn <k lc

x3=0
(1,1,0) =15;
w=0; g=15
x4=0

x = (1,1,0,0);
f = 15;
Hnh 4.1. Gii bi ton ci ti theo thut ton nhnh cn.

Chng trnh gii bi ton ci ti theo thut ton nhnh cn c th hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define TRUE

#define FALSE

#define MAX

100

int x[MAX], xopt[MAX];


float

fopt, cost, weight;

87

Chng 4: Bi ton ti u
void Init(float *C, float *A, int *n, float *w){
int i;FILE *fp;
fopt=0; weight=0;
fp=fopen("caitui.in","r");
if(fp==NULL){
printf("\n Khong co file input");
delay(2000); return;
}
fscanf(fp,"%d %f", n,w);
for(i=1; i<=*n;i++) xopt[i]=0;
printf("\n So luong do vat %d:", *n);
printf("\n Gioi han tui %8.2f:", *w);
printf("\n Vecto gia tri:");
for(i=1; i<=*n; i++) {
fscanf(fp,"%f", &C[i]);
printf("%8.2f", C[i]);
}
printf("\n Vector trong luong:");
for(i=1; i<=*n; i++){
fscanf(fp,"%f", &A[i]);
printf("%8.2f", A[i]);
}
fclose(fp);
}
void swap(int n){
int i;
for(i=1; i<=n; i++)
xopt[i]=x[i];
}
void Update_Kyluc(int n){
if(cost>fopt){
swap(n);

88

Chng 4: Bi ton ti u
fopt=cost;
}
}
void Try(float *A, float *C, int n, float w, int i){
int j, t=(w-weight)/A[i];
for(j=t; j>=0;j--){
x[i]=j;
cost = cost + C[i]*x[i];
weight = weight + x[i]*A[i];
if(i==n) Update_Kyluc(n);
else if(cost + C[i+1]*(w-weight)/A[i+1]> fopt){
Try(A, C, n, w, i+1);
}
weight = weight-A[i]*x[i];
cost = cost-C[i]*x[i];

}
}
void Result(int n){
int i;
printf("\n Gia tri do vat %8.2f:", fopt);
printf("\n Phuong an toi uu:");
for(i=1; i<=n; i++)
printf("%3d", xopt[i]);
}
void main(void){
int

n;

float

A[MAX], C[MAX], w;

clrscr();Init(C, A, &n, &w);


Try(C, A, n, w,1);Result(n);
getch();
}

89

Chng 4: Bi ton ti u
V d 2. Bi ton Ngi du lch. Mt ngi du lch mun i thm quan n thnh ph T1, T2, ,
Tn. Xut pht t mt thnh ph no , ngi du lch mun i qua tt c cc thnh ph cn li,
mi thnh ph i qua ng mt ln, ri quay tr li thnh ph xut pht. Bit cij l chi ph i t
thnh ph Ti n thnh ph Tj (i = 1, 2,.., n), hy tm hnh trnh vi tng chi ph l nh nht (mt
hnh trnh l mt cch i tho mn iu kin).
Gii. C nh thnh ph xut pht l T1. Bi ton Ngi du lch c a v bi ton: Tm
cc tiu ca phim hm:

f ( x1 , x2 ,

, xn ) = c[1, x 2 ] + c[ x2 , x3 ] +

+ c[ x n1 , x n ] + c[ xn , x1 ] min

vi iu kin

c min = min{c[i, j ], i, j = 1,2,

, n; i j} l chi ph i li gia cc thnh ph.

Gi s ta ang c phng n b phn (u1, u2,..., uk). Phng n tng ng vi hnh trnh b
phn qua k thnh ph:

T1 T (u 2 )

T (u k 1 ) T (u k )

V vy, chi ph phi tr theo hnh trnh b phn ny s l tng cc chi ph theo tng node
ca hnh trnh b phn.

=c[1,u2] + c[u2,u3] +... + c[uk-1, uk].


pht trin hnh trnh b phn ny thnh hnh trnh y , ta cn phi i qua n-k thnh
ph cn li ri quay tr v thnh ph T1, tc l cn phi i qua n-k+1 on ng na. Do chi ph
phi tr cho vic i qua mi trong n-k+1 on ng cn li u khng nhiu hn cmin, nn cn
di cho phng n b phn (u1, u2,..., uk) c th c tnh theo cng thc
g(u1, u2,..., uk) = +(n - k +1) cmin.
Chng hn ta gii bi ton ngi du lch vi ma trn chi ph nh sau

C=

0
3
17

3 14 18 15
0 4 22 20
9 0 16 4

6 2 7
9 15 11

0
5

12
0

Ta c cmin = 2. Qu trnh thc hin thut ton c m t bi cy tm kim li gii c th


hin trong hnh 4.2.
Thng tin v mt phng n b phn trn cy c ghi trong cc trn hnh v tng ng
theo th t sau:

90

u tin l cc thnh phn ca phng n

Tip n l chi ph theo hnh trnh b phn

Chng 4: Bi ton ti u

g l cn di

Kt thc thut ton, ta thu c phng n ti u ( 1, 2, 3, 5, 4, 1) tng ng vi phng n


ti u vi hnh trnh:

T1 T2 T3 T5 T4 T1 v chi ph nh nht l 22
f = +

(2) =3; g=15

(2,3) =7; g=16

(2,4) =25; g=34

(2,3,4) =23;
g=29

(2,3,5) =11;
g=17

(3) =14; g=26

(4) =18; g=30

(5) =15; g=27

(2,5) =23; g=32

Cc nhnh ny b loi v c cn
di g> f = 22
(2,3,4,5) =41;
g=44

(2,3,5,4) =16;
g=19

Hnh trnh ( 1, 2, 3,4, 5,1)


chi ph 53. t f = 53

Hnh trnh ( 1, 2, 3, 5,4, 1)


chi ph 25(K lc mi). t

f = 22

Hnh 4.2. Cy tm kim li gii bi ton ngi du lch.


Chng trnh gii bi ton theo thut ton nhnh cn c th hin nh sau:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

91

Chng 4: Bi ton ti u
#include <io.h>
#define MAX 20
int n, P[MAX], B[MAX], C[20][20], count=0;
int A[MAX], XOPT[MAX];
int can, cmin, fopt;
void Read_Data(void){
int i, j;FILE *fp;
fp = fopen("dulich.in","r");
fscanf(fp,"%d", &n);
printf("\n So thanh pho: %d", n);
printf("\n Ma tran chi phi:");
for (i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp,"%d",&C[i][j]);
printf("%5d", C[i][j]);
}
}
}
int Min_Matrix(void){
int min=1000, i, j;
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
if (i!=j && min>C[i][j])
min=C[i][j];
}
}
return(min);
}
void Init(void){
int i;
cmin=Min_Matrix();

92

Chng 4: Bi ton ti u
fopt=32000;can=0; A[1]=1;
for (i=1;i<=n; i++)
B[i]=1;
}
void Result(void){
int i;
printf("\n Hanh trinh toi uu %d:", fopt);
printf("\n Hanh trinh:");
for(i=1; i<=n; i++)
printf("%3d->", XOPT[i]);
printf("%d",1);
}
void Swap(void){
int i;
for(i=1; i<=n;i++)
XOPT[i]=A[i];
}
void Update_Kyluc(void){
int sum;
sum=can+C[A[n]][A[1]];
if(sum<fopt) {
Swap();
fopt=sum;
}
}
void Try(int i){
int j;
for(j=2; j<=n;j++){
if(B[j]){
A[i]=j; B[j]=0;
can=can+C[A[i-1]][A[i]];
if (i==n) Update_Kyluc();

93

Chng 4: Bi ton ti u
else if( can + (n-i+1)*cmin< fopt){
count++;
Try(i+1);
}
B[j]=1;can=can-C[A[i-1]][A[i]];
}
}
}
void main(void){
clrscr();Read_Data();Init();
Try(2);Result(); getch();
}

4.4. K THUT RT GN GII QUYT BI TON NGI DU LCH


Thut ton nhnh cn l phng php ch yu gii cc bi ton ti u t hp. T tng
c bn ca thut ton l trong qu trnh tm kim li gii, ta s phn hoch tp cc phng n ca
bi ton thnh hai hay nhiu tp con biu din nh mt node ca cy tm kim v c gng bng
php nh gi cn cc node, tm cch loi b nhng nhnh cy (nhng tp con cc phng n ca
bi ton) m ta bit chc chn khng phng n ti u. Mc d trong trng hp ti nht thut
ton s tr thnh duyt ton b, nhng trong nhng trng hp c th n c th rt ngn ng k
thi gian tm kim. Mc ny s th hin khc nhng t tng ca thut ton nhnh cn vo vic
gii quyt bi ton ngi du lch.
Xt bi ton ngi du lch nh c pht biu. Gi C = { cij: i, j = 1, 2,...n} l ma trn
chi ph. Mi hnh trnh ca ngi du lch:
T(1)T(2)...T(n)T(1) c th vit li di dng:
((1), (2), (2), (3),..., (n-1), (n), (n), (1), trong mi thnh phn:

(j-1), (j) s c gi l mt cnh ca hnh trnh.


Khi tin hnh tm kim li gii bi ton ngi du lch chng ta phn tp cc hnh trnh
thnh 2 tp con: Tp nhng hnh trnh cha mt cp cnh (i, j) no cn tp kia gm nhng
hnh trnh khng cha cnh ny. Ta gi vic lm l s phn nhnh, mi tp con nh vy c
gi l mt nhnh hay mt node ca cy tm kim. Qu trnh phn nhnh c minh ho bi cy
tm kim nh trong hnh 4.3.

94

Chng 4: Bi ton ti u

Tp tt c cc hnh trnh

Hnh trnh
khng cha (i,j)

Hnh trnh cha


(i,j)

(Hnh 4.3)
Vic phn nhnh s c thc hin da trn mt qui tc heuristic no cho php ta rt ngn
qu trnh tm kim phng n ti u. Sau khi phn nhnh v tnh cn di gi tr hm mc tiu trn
mi tp con. Vic tm kim s tip tc trn tp con c gi tr cn di nh hn. Th tc ny c
tip tc cho n khi ta nhn c mt hnh trnh y tc l mt phng n cu bi ton. Khi
ta ch cn xt nhng tp con cc phng n no c cn di nh hn gi tr ca hm mc tiu ti
phng n tm c. Qu trnh phn nhnh v tnh cn trn tp cc phng n ca bi ton thng
thng cho php rt ngn mt cch ng k qu trnh tm kim do ta loi c rt nhiu tp con
chc chn khng cha phng n ti u. Sau y, l mt k thut na ca thut ton.

4.4.1.Th tc rt gn
R rng tng chi ph ca mt hnh trnh ca ngi du lch s cha ng mt phn t ca
mi dng v ng mt phn t ca mi ct trong ma trn chi ph C. Do , nu ta cng hay tr
bt mi phn t ca mt dng (hay ct) ca ma trn C i cng mt s th di ca tt c cc
hnh trnh u gim i v th hnh trnh ti u cng s khng b thay i. V vy, nu ta tin
hnh bt i cc phn t ca mi dng v mi ct i mt hng s sao cho ta thu c mt ma trn
gm cc phn t khng m m trn mi dng, mi ct u c t nht mt s 0, th tng cc s tr
cho ta cn di ca mi hnh trnh. Th tc bt ny c gi l th tc rt gn, cc hng s
tr mi dng (ct) s c gi l hng s rt gn theo dng(ct), ma trn thu c c gi l
ma trn rt gn. Th tc sau cho php rt gn ma trn mt ma trn A kch thc k k ng thi
tnh tng cc hng s rt gn.
float Reduce( float A[][max], int k) {
sum =0;
for (i = 1; ik; i++){
r[i] = < phn t nh nht ca dng i >;
if (r[i] > 0 ) {
<Bt mi phn t ca dng i i r[i] >;
sum = sum + r[i];
}
}

95

Chng 4: Bi ton ti u
for (j=1; j k; j++) {
s[j]:= <Phn t nh nht ca ct j>;
if (s[j] > 0 )
sum = sum + S[j];
}
return(sum);
}

V d. Gi s ta c ma trn chi ph vi n= 6 thnh ph sau:


1

6 | r[i]

93

13

33

77

42

21

16

45

17

36

16

28

16

39

90

80

56

28

46

88

33

25

25

88

18

46

92

0
0
15
8
0
0
u tin tr bt mi phn t ca cc dng 1, 2, 3, 4, 5, 6 cho cc hng s rt gn tng ng
l ( 3, 4, 16, 7, 25, 3), sau trong ma trn thu c ta tm c phn t nh khc 0 ca ct 3 v 4
tng ng l (15, 8). Thc hin rt gn theo ct ta nhn c ma trn sau:

75

30

58

30

17

12

29

12

12

32

83

58

49

21

48

85

35

89

Tng cc hng s rt gn l 81, v vy cn di cho tt c cc hnh trnh l 81 (khng th


c hnh trnh c chi ph nh hn 81).
By gi ta xt cch phn tp cc phng n ra thnh hai tp. Gi s ta chn cnh (6, 3)
phn nhnh. Khi tp cc hnh trnh c phn thnh hai tp con, mt tp l cc hnh trnh cha
cnh (6,3), cn tp kia l cc hnh trnh khng cha cnh (6,3). V bit cnh (6, 3) khng tham gia
96

Chng 4: Bi ton ti u
vo hnh trnh nn ta cm hnh trnh i qua cnh ny bng cch t C[6, 3] = . Ma trn thu c
s c th rt gn bng cch bt i mi phn t ca ct 3 i 48 (hng 6 gi nguyn). Nh vy ta
thu c cn di ca hnh trnh khng cha cnh (6,3) l 81 + 48 = 129. Cn i vi tp cha
cnh (6, 3) ta phi loi dng 6, ct 3 khi ma trn tng ng vi n, bi v i theo cnh (6, 3)
th khng th i t 6 sang bt sang bt c ni no khc v cng khng c php i bt c u t
3. Kt qu nhn c l ma trn vi bc gim i 1. Ngoi ra, do i theo cnh (6, 3) nn khng
c php i t 3 n 6 na, v vy cn cm i theo cnh (3, 6) bng cch t C(3, 6) = . Cy
tm kim lc ny c dng nh trong hnh 4.4.

Tp tt c cc
hnh trnh

Tp hnh trnh
cha cnh
(6,3)

Cn di = 81

Tp hnh trnh
khng cha
cnh (6,3)

Hnh 4.4

Cn di =81

Cn di = 129

30

27

30

30

17

12

10

30

17

12

29

12

29

12

12

32

83

49

32

83

10

49

21

21

85

35

89

Cnh (6,3) c chn phn nhnh v phn nhnh theo n ta thu c cn di ca nhnh
bn phi l ln nht so vi vic phn nhnh theo cc cnh khc. Qui tc ny s c p dng
phn nhnh mi nh ca cy tm kim. Trong qu trnh tm kim chng ta lun i theo nhnh bn
tri trc. Nhnh bn tri s c ma trn rt gn vi bc gim i 1. Trong ma trn ca nhnh bn phi
ta thay mt s bi , v c th rt gn thm c ma trn ny khi tnh li cc hng s rt gn theo
dng v ct tng ng vi cnh phn nhnh, nhng kch thc ca ma trn vn gi nguyn.
97

Chng 4: Bi ton ti u
Do cnh chn phn nhnh phi l cnh lm tng cn di ca nhnh bn phi ln nhiu
nht, nn tm n ta s chn s khng no trong ma trn m khi thay n bi s cho ta tng
hng s rt gn theo dng v ct cha n l ln nht. Th tc c th c m t nh sau
chn cnh phn nhnh (r, c).

4.4.2.Th tc chn cnh phn nhnh (r,c)


void BestEdge(A, k, r, c, beta)
u vo: Ma trn rt gn A kch thc k k
Kt qu ra: Cnh phn nhnh (r,c) v tng hng s rt gn theo dng r ct c l beta.
{
beta = -;
for ( i = 1; i k; i++){
for (j = 1; j k; j++) {
if (A[i,j] == 0){
minr = <phn t nh nht trn dng i khc vi A[i,j];
minc = <phn t nh nht trn ct j khc vi A[i,j];
total = minr + minc;
if (total > beta ) {
beta = total;
r = i; /* Ch s dng tt nht*/
c = j; /* Ch s ct tt nht*/
}
}
}
}
}

Trong ma trn rt gn 5 5 ca nhnh bn tri hnh 5.4, s khng v tr (4, 6) s cho tng
hng s rt gn l 32 ( theo dng 4 l 32, ct 6 l 0). y l h s rt gn c gi tr ln nht i
vi cc s khng ca ma trn ny. Vic phn nhnh tip tc s da vo cnh (4, 6). Khi cn
di ca nhnh bn phi tng ng vi tp hnh trnh i qua cnh (6,3) nhng khng i qua cnh
(4, 6) s l 81 + 32 = 113. Cn nhnh bn tri s tng ng vi ma trn 4 4 (v ta phi loi b
dng 4 v ct 6). Tnh hung phn nhnh ny c m t trong hnh 4.5.
Nhn thy rng v cnh (4, 6) v (6, 3) nm trong hnh trnh nn cnh (3, 4) khng th i
qua c na (nu i qua ta s c mt hnh trnh con t nhng thnh ph ny). ngn cm vic
to thnh cc hnh trnh con ta s gn cho phn t v tr (3, 4) gi tr .
98

Chng 4: Bi ton ti u

Tp hnh trnh
qua cnh (6,3)

Hnh trnh cha


(6,3), (4,6)

Cn di = 81

Hnh trnh cha


(6,3) khng cha
(4,6)

Cn di = 81

Cn di = 113
Hnh 4.5

Ngn cm to thnh hnh trnh con:


Tng qut hn, khi phn nhnh da vo cnh (iu, iv) ta phi thm cnh ny vo danh sch
cc cnh ca node bn tri nht. Nu iu l nh cui ca mt ng i (i1, i2,.., iu) v jv l nh u
ca ng i (j1, j2,.., jk) th ngn nga kh nng to thnh hnh trnh con ta phi ngn nga
kh nng to thnh hnh hnh trnh con ta phi cm cnh (jk, i1). tm i1 ta i ngc t iu, tm
jk ta i xui t j1 theo danh sch cc cnh c kt np vo hnh trnh.

99

Chng 4: Bi ton ti u

Tp tt c cc
hnh trnh

Hnh trnh khng


cha cnh (6,3)

Cn di = 81

Cn di= 129

Tp cc hnh
trnh cha (6,3)

Hnh trnh khng


cha (4,6)

Cn di = 81

Cn di= 113

Tp cc hnh
trnh cha (4,6)

Hnh trnh khng


cha cnh (2,1)

Cn di = 81

Cn di= 101

Tp cc hnh
trnh cha (2,1)

Hnh trnh khng


cha cnh (1,4)

Cn di = 84
Tp cc hnh
trnh cha (1, 4)

Cn di= 112

Cn di = 84

Hnh trnh (1, 4, 6, 3, 5, 2, 1) di 104


Hnh 4.6 m t qu trnh tm kim gii php ti u

Tip tc phn nhnh t nh bn tri bng cch s dng cnh (2,1) v s khng v tr ny
c hng s rt gn ln nht l 17 + 3 = 20 ( theo dng 2 l 17, theo ct 1 l 3). Sau khi phn
nhnh theo cnh (2, 1) ma trn ca nhnh bn tri c kch thc l 3 3. V i qua (2, 1) nn ta
cm cnh (2, 1) bng cch t C[1, 2] = , ta thu c ma trn sau:

100

Chng 4: Bi ton ti u
2

30

21

Ma trn ny c th rt gn c bng cch bt 1 ti ct 1 v bt 2 i dng 1 nhn c


ma trn cp 3:
2

28

20

Ta c cn di ca nhnh tng ng l 81 + 1 + 2 = 84. Cy tm kim cho n bc ny


c th hin trong hnh 4.6.
Ch rng, sau khi chp nhn n-2 cnh vo hnh trnh th ma trn cn li s c kch
thc l 2 2. Hai cnh cn li ca hnh trnh s khng phi chn la na m c kt np ngay
vo chu trnh (v n ch cn s la chn duy nht). Trong v d trn sau khi c cc cnh (6, 3),
(4,6), (2, 1), (1,4) ma trn ca nhnh bn tri nht c dng:
2

50

V vy ta kt np nt cnh (3, 5), (5, 2) vo chu trnh v thu c hnh trnh:


1, 4, 6, 3, 5, 2, 1 vi chi ph l 104.
Trong qu trnh tm kim, mi node ca cy tm kim s tng ng vi mt ma trn chi ph
A. bc u tin ma trn chi ph tng ng vi gc chnh l ma trn C. Khi chuyn ng t gc
xung nhnh bn tri xung pha di, kch thc ca cc ma trn chi ph A s gim dn. Cui
cng khi ma trn A c kch thc 2 2 th ta chm dt vic phn nhnh v kt np hai cnh cn
li thu c hnh trnh ca ngi du lch. D dng nhn thy ma trn cui cng rt gn ch c
th mt trong hai dng sau:
w

v0

0
101

Chng 4: Bi ton ti u
Trong u, v, x, y c th l 4 nh khc nhau hoc 3 nh khc nhau. xc nh xem hai
cnh no cn c np vo hnh trnh ta ch cn xt mt phn t ca ma trn A:
if A[1, 1] = then
<Kt np cnh (u, x), (v, w)>
else
< Kt np cnh (u, w), ( v, x) >;

By gi tt c cc node c cn di ln hn 104 c th b loi b v chng khng cha hnh


trnh r hn 104. Trn hnh 4.6 chng ta thy ch c node c cn di l 101 < 104 l cn phi xt
tip. Node ny cha cc cnh (6, 3), (4, 6) v khng cha cnh (2, 1). Ma trn chi ph tng ng
vi nh ny c dng:
1

30

13

26

21

Vic phn nhnh s da vo cnh (5, 1) vi tng s rt gn l 26. Qu trnh r nhnh tip
theo c ch ra nh trong hnh 4.7.
Tp hnh trnh cha
(6,3), (4,6) khng
qua (2,1)

Cn di = 101

Hnh trnh khng


qua (5,1)

Tp hnh trnh qua


(5,1)
Cn di = 127

Cn di = 103
2

11

Hnh trnh
cha (1, 4)

Hnh trnh
khng cha
(1, 4)

Hnh 4.7. Duyt hnh trnh c cn di l 101.


102

Cn di = 114

Chng 4: Bi ton ti u
Hnh trnh 1, 4, 6, 3, 2, 5, 1 ; di 104.
Nh vy chng ta thu c hai hnh trnh ti u vi chi ph l 104. V d trn cho thy
bi ton ngi du lch c th c nhiu phng n ti u. Trong v d ny hnh trnh u tin
nhn c l ti u, tuy nhin iu ny khng th mong i i vi nhng trng hp tng
qut. Trong v d trn chng ta ch cn xt ti 13 node, trong khi tng s hnh trnh ca ngi
du lch l 120.

4.4.3.Thut ton nhnh cn gii bi ton ngi du lch


Cc bc chnh ca thut ton nhnh cn gii bi ton ngi du lch c th hin trong th
tc TSP. Th tc TSP xt hnh trnh b phn vi Edges l cnh c chn v tin hnh tm
kim tip theo. Cc bin c s dng trong th tc ny l:
Edges

- S cnh trong hnh trnh b phn;

- Ma trn chi ph tng ng vi kch thc (n-edges, n-edges)

cost

- Chi ph ca hnh trnh b phn.

Mincost - Chi ph ca hnh trnh tt nht tm c.


Hm Reduce(A, k), BestEgde(A, k, r, c,beta) c xy dng trn.
void TSP( Edges, cost, A) {

cost=cost + Reduce(A, n-Edges);


if (cost <MinCost){
if (edges == n-2){
<b xung nt hai cnh cn li>;
MinCost:=Cost;
}
else {
BestEdge(A, n-eges, r, c, beta);
LowerBound = Cost + beta;
<Ngn cm to thnh hnh trnh con>;
NewA = < A loi b dng r ct c>;
TSP(edges+1, cost, NewA);/*i theo nhnh tri*/
<Khi phc A bng cch b xung dng r ct c>;
if (LowerBound < MinCost){
/* i theo nhnh phi*/
A[r, c] =;

103

Chng 4: Bi ton ti u
TSP (edges, cost, A);
A[r,c]:=0;
}
}
< Khi phc ma trn A>;/* thm li cc hng s rt gn vo
cc dng v ct tng ng*/
}
}/* end of TSP*/;

NHNG NI DUNG CN GHI NH


Bn c cn ghi nh mt s ni dung quan trng di y:
9

Th no l mt bi ton ti u? ngha ca bi ton ti u trong cc m hnh


thc t.

Phn tch u im, nhc im ca phng php lit k.

Hiu phng php nhnh cn, phng php xy dng cn v nhng vn lin
quan.

Hiu phng php rt gn ma trn trong gii quyt bi ton ngi du lch.

BI TP CHNG 4
Bi 1. Gii bi ton ci ti sau:

5 x1 + x 2 + 9 x3 + 3 x 4 max,

4 x1 + 2 x 2 + 7 x3 + 3 x 4 10,
x 0 nguyn, j = 1,2,3,4.
j
Bi 2. Gii bi ton ci ti sau:

7 x1 + 3 x 2 + 2 x3 + x 4 max,

5 x1 + 3 x 2 + 6 x3 + 4 x 4 12,
x 0, nguyn, j = 1,2,3,4
j
Bi 3. Gii bi ton ci ti sau:

5 x1 + x 2 + 9 x3 + 3 x 4 max,

4 x1 + 2 x 2 + 7 x3 + 3 x 4 10,
x {0,1}, j = 1,2,3,4.
j
104

Chng 4: Bi ton ti u
Bi 4. Gii bi ton ci ti sau:

7 x1 + 3 x 2 + 2 x3 + x 4 max,

5 x1 + 3 x 2 + 6 x3 + 4 x 4 12,
x {0,1}, j = 1,2,3,4
j

Bi 5. Gii bi ton ci ti sau:

30 x1 + 19 x 2 + 13 x3 + 38 x 4 + 20 x5 + 6 x6 + 8 x7 + 19 x8 + 10 x9 + 11x10 max,

15 x1 + 12 x 2 + 9 x3 + 27 x 4 + 15 x5 + 5 x 6 + 8 x7 + 20 x8 + 12 x9 + 15 x10 62
x {0,1}, j = 1,2 ,10.
j

Bi 6. p dng thut ton nhnh cn gii bi ton ngi du lch vi ma trn chi ph sau:

00 08 05 22 11
04 00 09 17 27
15 07 00 12 35
05 27 17 00 29
23 21 19 07 00

Bi 7. p dng thut ton nhnh cn gii bi ton ngi du lch vi ma trn chi ph sau:

00 05 37 21 29
42 00 31 07 33
31 27 00 31 08
49 33 14 00 39
06 41 32 38 00

Bi 6. p dng thut ton nhnh cn gii bi ton ngi du lch vi ma trn chi ph sau:

00 08 05 22 11
04 00 09 17 27
15 07 00 12 35
05 27 17 00 29
23 21 19 07 00

105

Chng 4: Bi ton ti u
Bi 8. Gii bi ton ngi du lch vi ma trn chi ph nh sau:

16
34
15
16
18

31 15
24
03
20 33
10 32
20 13

23 10 17
07 12 12
25 54 25
50 40
03 23
28 21

Bi 9. Gii bi ton ngi du lch vi ma trn chi ph nh sau:

04
45
39
28
03

106

03 93
77
17
90 80
46 88
88 18

13 33 09
42 21 16
36 16 28
56 07
33 25
46 92

Chng 5: Nhng khi nim c bn ca th

PHN II. L THUYT TH


CHNG V: NHNG KHI NIM C BN CA TH

Ni dung chnh ca chng ny cp n nhng khi nim c bn nht ca th,


phng php biu din thi trn my tnh v mt s khi nim lin quan.
9

Cc loi th v hng, th c hng, a th

Khi nim v bc ca nh, ng i, chu trnh v tnh lin thng ca th.

Biu din th bng ma trn k.

Biu din th bng danh sch k.

Biu din th bng danh sch cnh.

Bn c c th tm thy nhng kin thc su hn v rng hn trong cc ti liu [1], [2], [3].

5.1. NH NGHA V KHI NIM


L thuyt th l lnh vc nghin cu tn ti t nhng nm u ca th k 18 nhng li
c nhng ng dng hin i. Nhng t tng c bn ca l thuyt th c nh ton hc ngi
Thu S Leonhard Euler xut v chnh ng l ngi dng l thuyt th gii quyt bi ton
ni ting Cu Konigsberg.
th c s dng gii quyt nhiu bi ton thuc cc lnh vc khc nhau. Chng hn,
ta c th dng th biu din nhng mch vng ca mt mch in, dng th biu din qu
trnh tng tc gia cc loi trong th gii ng thc vt, dng th biu din nhng ng phn
ca cc hp cht polyme hoc biu din mi lin h gia cc loi thng tin khc nhau. C th ni,
l thuyt th c ng dng rng ri trong tt c cc lnh vc khc nhau ca thc t cng nh
nhng lnh vc tru tng ca l thuyt tnh ton.
th (Graph) l mt cu trc d liu ri rc bao gm cc nh v cc cnh ni cc cp
nh ny. Chng ta phn bit th thng qua kiu v s lng cnh ni gia cc cp nh ca
th. minh chng cho cc loi th, chng ta xem xt mt s v d v cc loi mng my tnh
bao gm: mi my tnh l mt nh, mi cnh l nhng knh in thoi c ni gia hai my
tnh vi nhau. Hnh 5.1, l s ca mng my tnh loi 1.

107

Chng 5: Nhng khi nim c bn ca th


San Francisco

Detroit

Chicago

New York

Denver
Los Angeles

Washington

Hnh 5.1. Mng my tnh n knh thoi.


Trong mng my tnh ny, mi my tnh l mt nh ca th, mi cnh v hng biu
din cc nh ni hai nh phn bit, khng c hai cp nh no ni cng mt cp nh. Mng loi
ny c th biu din bng mt n th v hng.
nh ngha 1. n th v hng G = <V, E> bao gm V l tp cc nh, E l tp cc
cp c th t gm hai phn t khc nhau ca V gi l cc cnh.
Trong trng hp gia hai my tnh no thng xuyn truyn ti nhiu thng tin, ngi
ta ni hai my tnh bi nhiu knh thoi khc nhau. Mng my tnh a knh thoi c th c
biu din nh hnh 5.2.
San Francisco

Detroit

Chicago

New York

Denver
Los Angeles

Washington
Hnh 5.2. Mng my tnh a knh thoi.

Trn hnh 5.2, gia hai my tnh c th c ni vi nhau bi nhiu hn mt knh thoi.
Vi mng loi ny, chng ta khng th dng n th v hng biu din. th loi ny l
a th v hng.
nh ngha 2. a th v hng G = <V, E> bao gm V l tp cc nh, E l h cc cp
khng c th t gm hai phn t khc nhau ca V gi l tp cc cnh. e1, e2 c gi l cnh lp
nu chng cng tng ng vi mt cp nh.
R rng, mi n th u l a th, nhng khng phi a th no cng l n th
v gia hai nh c th c nhiu hn mt cnh ni gia chng vi nhau. Trong nhiu trng hp,
c my tnh c th ni nhiu knh thoi vi chnh n. Vi loi mng ny, ta khng th dng a
th biu din m phi dng gi th v hng. Gi th v hng c m t nh trong
hnh 5.3.
108

Chng 5: Nhng khi nim c bn ca th


nh ngha 3. Gi th v hng G = <V, E> bao gm V l tp nh, E l h cc cp
khng c th t gm hai phn t (hai phn t khng nht thit phi khc nhau) trong V c gi
l cc cnh. Cnh e c gi l khuyn nu c dng e =(u, u), trong u l nh no thuc V.
San Francisco

Detroit

Chicago

New York

Denver
Los Angeles

Washington
Hnh 5.3. Mng my tnh a knh thoi c khuyn.

Trong nhiu mng, cc knh thoi ni gia hai my tnh c th ch c php truyn tin
theo mt chiu. Chng hn my tnh t ti San Francisco c php truy nhp ti my tnh t
ti Los Angeles, nhng my tnh t ti Los Angeles khng c php truy nhp ngc li San
Francisco. Hoc my tnh t ti Denver c th truy nhp c ti my tnh t ti Chicago v
ngc li my tnh t ti Chicago cng c th truy nhp ngc li my tnh ti Denver. m t
mng loi ny, chng ta dng khi nim n th c hng. n th c hng c m t
nh trong hnh 5.4.
San Francisco

Detroit

Chicago

New York

Denver
Los Angeles

Washington
Hnh 5.4. Mng my tnh c hng.

nh ngha 4. n th c hng G = <V, E> bao gm V l tp cc nh, E l tp cc


cp c th t gm hai phn t ca V gi l cc cung.
th c hng trong hnh 5.4 khng cha cc cnh bi. Nn i vi cc mng a knh
thoi mt chiu, th c hng khng th m t c m ta dng khi nim a th c hng.
Mng c dng a th c hng c m t nh trong hnh 5.5.
109

Chng 5: Nhng khi nim c bn ca th


San Francisco

Detroit

Chicago

New York

Denver
Los Angeles

Washington

Hnh 5.5. Mng my tnh a knh thoi mt chiu.

nh ngha 5. a th c hng G = <V, E> bao gm V l tp nh, E l cp c th t


gm hai phn t ca V c gi l cc cung. Hai cung e1, e2 tng ng vi cng mt cp nh
c gi l cung lp.
T nhng dng khc nhau ca th k trn, chng ta thy s khc nhau gia cc loi th
c phn bit thng qua cc cnh ca th c th t hay khng c th t, cc cnh bi, khuyn
c c dng hay khng. Ta c th tng kt cc loi th thng qua bng 1.

Bng 1. Phn bit cc loi th


Loi th

Cnh

C cnh bi

C khuyn

n th v hng

V hng

Khng

Khng

a th v hng

V hng

Khng

Gi th v hng

V hng

th c hng

C hng

Khng

a th c hng

C hng

5.2. CC THUT NG C BN
nh ngha 1. Hai nh u v v ca th v hng G =<V, E> c gi l k nhau nu
(u,v) l cnh thuc th G. Nu e =(u, v) l cnh ca th G th ta ni cnh ny lin thuc vi
hai nh u v v, hoc ta ni cnh e ni nh u vi nh v, ng thi cc nh u v v s c gi l
nh u ca cnh (u,v).
nh ngha 2. Ta gi bc ca nh v trong th v hng l s cnh lin thuc vi n v
k hiu l deg(v).
110

Chng 5: Nhng khi nim c bn ca th

Hnh 5.6 th v hng G.

V d 1. Xt th trong hnh 6.6, ta c


deg(a) = 2, deg(b) =deg(c) = deg(f) = 4, deg(e) = 3, deg(d) = 1, deg(g)=0.
nh bc 0 c gi l nh c lp. nh bc 1 c gi l nh treo. Trong v d trn, nh
g l nh c lp, nh d l nh treo.
nh l 1. Gi s G = <V, E> l th v hng vi m cnh. Khi 2m = deg(v) .
vV

Chng minh. R rng mi cnh e=(u,v) bt k, c tnh mt ln trong deg(u) v mt ln


trong deg(v). T suy ra s tng tt c cc bc bng hai ln s cnh.
H qu. Trong th v hng G=<V, E>, s cc nh bc l l mt s chn.
Chng minh. Gi O l tp cc nh bc chn v V l tp cc nh bc l. T nh l 1 ta
suy ra:

2m = deg(v) = deg(v) + deg(v)


vV

vO

vU

Do deg(v) l chn vi v l nh trong O nn tng th hai trong v phi cng l mt s chn.


nh ngha 3. Nu e=(u,v) l cung ca th c hng G th ta ni hai nh u v v l k
nhau, v ni cung (u, v) ni nh u vi nh v hoc cng ni cung ny i ra khi nh u v i vo
nh v. nh u (v) s c gi l nh u (cui) ca cung (u,v).
nh ngha 4. Ta gi bn bc ra (bn bc vo) ca nh v trong th c hng l s cung
ca th i ra khi n (i vo n) v k hiu l deg+(v) v deg-(v).

Hnh 5.7. th c hng G.


111

Chng 5: Nhng khi nim c bn ca th


V d 2. Xt th c hng trong hnh 5.7, ta c
deg-(a) = 1, deg-(b) = 2, deg-(c) = 2, deg-(d) = 2, deg-(e) = 2.
deg+(a) = 3, deg+(b) = 1, deg+(c) = 1, deg+(d) = 2, deg+(e) = 2.
Do mi cung (u,v) c tnh mt ln trong bn bc vo ca nh v v mt ln trong bn bc
ra ca nh u nn ta c:
nh l 2. Gi s G = <V, E> l th c hng. Khi

deg

vV

(v) = deg (v) =| E |


vV

Rt nhiu tnh cht ca th c hng khng ph thuc vo hng trn cc cung ca n.


V vy, trong nhiu trng hp, ta b qua cc hng trn cung ca th. th v hng nhn
c bng cch b qua hng trn cc cung c gi l th v hng tng ng vi th c
hng cho.

5.3. NG I, CHU TRNH, TH LIN THNG


nh ngha 1. ng i di n t nh u n nh v trn th v hng G=<V,E> l dy:
x0, x1,..., xn-1, xn
trong n l s nguyn dng, x0=u, xn=v, (xi, xi+1)E, i =0, 1, 2,..., n-1
ng i nh trn cn c th biu din thnh dy cc cnh:
(x0, x1), (x1,x2),..., (xn-1, xn).
nh u l nh u, nh v l nh cui ca ng i. ng i c nh u trng vi nh
cui (u=v) c gi l chu trnh. ng i hay chu trnh c gi l n nu nh khng c cnh
no lp li.
V d 1. Tm cc ng i, chu trnh trong th v hng nh trong hnh 5.8.
a, d, c, f, e l ng i n di 4. d, e, c, a khng l ng i v (e,c) khng phi l cnh
ca th. Dy b, c, f, e, b l chu trnh di 4. ng i a, b, e, d, a, b c di 5 khng phi l
ng i n v cnh (a,b) c mt hai ln.
a

Hnh 5.8. ng i trn th.


Khi nim ng i v chu trnh trn th c hng c nh ngha hon ton tng t,
ch c iu khc bit duy nht l ta phi ch ti cc cung ca th.
nh ngha 2. ng i di n t nh u n nh v trong th c hng G=<V,A> l dy:
112

Chng 5: Nhng khi nim c bn ca th


x0, x1,..., xn
trong , n l s nguyn dng, u = x0, v = xn, (xi, xi+1) A.
ng i nh trn c th biu din thnh dy cc cung:
(x0, x1), (x1, x2),..., (xn-1, xn).
nh u c gi l nh u, nh v c gi l nh cui ca ng i. ng i c nh
u trng vi nh cui (u=v) c gi l mt chu trnh. ng i hay chu trnh c gi l n
nu nh khng c hai cnh no lp li.
nh ngha 3. th v hng c gi l lin thng nu lun tm c ng i gia hai
nh bt k ca n.
Trong trng hp th G=<V, E> khng lin thng, ta c th phn r G thnh mt s
th con lin thng m chng i mt khng c nh chung. Mi th con nh vy c gi l
mt thnh phn lin thng ca G.
V d 2. Tm cc thnh phn lin thng ca th 5.9 di y.
2

6
8
7

4
3

11

10
9

13
12
Hnh 5.9. th v hng G
S thnh phn lin thng ca G l 3. Thnh phn lin thng th nht gm cc nh 1, 2, 3,
4, 6, 7. Thnh phn lin thng th hai gm cc nh 5, 8, 9, 10. Thnh phn lin thng th ba gm
cc nh 11, 12, 13.

5.4. BIU DIN TH TRN MY TNH


5.4.1. Ma trn k, ma trn trng s
lu tr th v thc hin cc thut ton khc nhau, ta cn phi biu din th trn
my tnh, ng thi s dng nhng cu trc d liu thch hp m t th. Vic chn cu trc
d liu no biu din th c tc ng rt ln n hiu qu thut ton. V vy, la chn cu
trc d liu thch hp biu din th s ph thuc vo tng bi ton c th.
113

Chng 5: Nhng khi nim c bn ca th


Xt th n v hng G =<V, E>, vi tp nh V = {1, 2,..., n}, tp cnh E = {e1, e2,..,
em}. Ta gi ma trn k ca th G l ma trn c cc phn t hoc bng 0 hoc bng 1 theo qui
nh nh sau:
A = { aij: aij = 1 nu (i, j) E, aij = 0 nu (i,j) E; i, j =1, 2,..., n}.
V d 1. Biu din th trong hnh 5.10 di y bng ma trn k.
2

6
3

Hnh 5.10. th v hng G

Tnh cht ca ma trn k:


a. Ma trn k ca th v hng l ma trn i xng A[i,j] = A[j, i]; i, j = 1, 2,... n. Ngc
li, mi (0, 1) ma trn cp n ng cu vi mt n th v hng n nh;
b. Tng cc phn t theo dng i ( ct j) ca ma trn k chnh bng bc nh i (nh j);
c. Nu k hiu a ijp , i, j = 1,2,..., n l cc phn t ca ma trn. Khi :
Ap = A.A... A (p ln); a ijp , i, j = 1,2,..., n ,
cho ta s ng i khc nhau t nh i n nh j qua p-1 nh trung gian.
Ma trn k ca th c hng cng c nh ngha hon ton tng t, chng ta ch cn
lu ti hng ca cnh. Ma trn k ca th c hng l khng i xng.
V d 2. Tm ma trn k ca th c hng trong hnh 5.11.

5
3

Hnh 5.11. th c hng G


114

Chng 5: Nhng khi nim c bn ca th


Trong rt nhiu ng dng khc nhau ca l thuyt th, mi cnh e =(u,v) ca n c
gn bi mt s c(e) = c(u,v) gi l trng s ca cnh e. th trong trng hp nh vy gi l
th trng s. Trong trng hp , ma trn k ca th c thay bi ma trn trng s c= c[i,j],
i, j= 1, 2,..., n. c[i,j] = c(i,j) nu (i, j) E, c[i,j] = nu (i, j) E. Trong , nhn cc gi tr: 0,
, - tu theo tng tnh hung c th ca thut ton.
V d 3. Ma trn k ca th c trng s trong hnh 5.12.

2
3

6
6

4
8

6
7

9
3

Hnh 5.12. th trng s G.

u im ca phng php biu din th bng ma trn k (hoc ma trn trng s) l ta d


dng tr li c cu hi: Hai nh u, v c k nhau trn th hay khng v chng ta ch mt ng
mt php so snh. Nhc im ln nht ca n l bt k th c bao nhiu cnh ta u mt n2
n v b nh lu tr th.

5.4.2. Danh sch cnh (cung)


Trong trng hp th tha ( th c s cnh m 6n), ngi ta thng biu din th
di dng danh sch cnh. Trong php biu din ny, chng ta s lu tr danh sch tt c cc
cnh (cung) ca th v hng (c hng). Mi cnh (cung) e(x, y) c tng ng vi hai bin
dau[e], cuoi[e]. Nh vy, lu tr th, ta cn 2m n v b nh. Nhc im ln nht ca
phng php ny l nhn bit nhng cnh no k vi cnh no chng ta cn m php so snh
trong khi duyt qua tt c m cnh (cung) ca th. Nu l th c trng s, ta cn thm m n
v b nh lu tr trng s ca cc cnh.
V d 4. Danh sch cnh (cung) ca th v hng trong hnh 5.10, th c hng hnh
5.11, th trng s hnh 5.12.

115

Chng 5: Nhng khi nim c bn ca th


Dau

Cuoi

Dau

Cuoi

Dau

Cuoi

Trongso

Danh sch cnh cung hnh 5.10

Hnh 5.11

Danh sch trng s hnh 5.12

5.4.3. Danh sch k


Trong rt nhiu ng dng, cch biu din th di dng danh sch k thng c s
dng. Trong biu din ny, vi mi nh v ca th chng ta lu tr danh sch cc nh k vi
n m ta k hiu l Ke(v), ngha l
Ke(v) = { u V: (u, v)E},
Vi cch biu din ny, mi nh i ca th, ta lm tng ng vi mt danh sch tt c cc
nh k vi n v c k hiu l List(i). biu din List(i), ta c th dng cc kiu d liu kiu
tp hp, mng hoc danh sch lin kt.
V d 5. Danh sch k ca th v hng trong hnh 5.10, th c hng trong hnh 5.11
c biu din bng danh sch k nh sau:
List(i)

List(i)

nh 1

nh

NHNG NI DUNG CN GHI NH


9

116

Nm vng v phn bit r cc loi th: n th, a th, th v hng,


th c hng, th trng s.

Chng 5: Nhng khi nim c bn ca th


9

Nm vng nhng khi nim c bn v th: ng i, chu trnh, th lin


thng.

Hiu v nm r bn cht ca cc phng php biu din th trn my tnh. Phn


tch u, nhc im ca tng phng php biu din.

Chuyn i cc phng php biu din qua li ln nhau gip ta hiu c cch
biu din th trn my tnh.

BI TP CHNG 5
Bi 1. Trong mt bui gp mt, mi ngi u bt tay nhau. Hy ch ra rng s lt ngi
bt tay nhau l mt s chn.
Bi 2. Mt n th vi n nh c nhiu nht l bao nhiu cnh?
Bi 3. Hy biu din cc th G1, G2, G3 di y di dng ma trn k.

7 1

a. th v hng G1.
B
5
A

2
1
C

6
b. th c hng G2.

4
G
9
F

c. th trng s G3

Bi 4. Hy biu din cc th G1, G2, G3 trn di dng danh sch cnh.


Bi 5. Hy biu din cc th G1, G2, G3 trn di dng danh sch k.
117

Chng 5: Nhng khi nim c bn ca th


Bi 6. Xc nh bc ca cc nh ca cc th G1, G2, G3 trn.
Bi 7. Hy to mt file d liu theo khun dng nh sau:
-

Dng u tin l s t nhin n l s cc nh ca th.

N dng k tip l ma trn k ca th.

Vit chng trnh chuyn i file d liu trn thnh file d liu di dng danh sch cnh
ca th.
Bi 8. Hy to mt file d liu theo khun dng nh sau:
-

Dng u tin ghi li s t nhin n v m l s cc nh v cc cnh ca th.

- M dng k tip ghi li th t nh u, cui ca cc cnh.


Hy vit chng trnh chuyn i mt th cho di dng danh sch cnh thnh th
di dng ma trn k.
Bi 9. Mt bn c 88 c nh s theo cch sau:

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

Mi c th coi l mt nh ca th. Hai nh c coi l k nhau nu mt con vua t


ny c th nhy sang kia sau mt bc i. V d: 1 k vi 2, 9, 10, 11 k vi 2, 3, 4, 10,
12, 18, 19, 20. Hy vit chng trnh to ma trn k ca th, kt qu in ra file king.out.
Bi 10. Bn c 88 c nh s nh bi trn. Mi c th coi l mt nh ca th. Hai
nh c gi l k nhau nu mt con m t ny c th nhy sang kia sau mt nc i. V
d 1 k vi 11, 18, 11 k vi 1, 5, 17, 21, 26, 28. Hy vit chng trnh lp ma trn k ca
th, kt qu ghi vo file matran.out.

118

Chng 6: Cc thut ton tm kim trn th

CHNG VI: CC THUT TON TM KIM TRN TH

C nhiu thut ton trn th c xy dng duyt tt c cc nh ca th sao cho


mi nh c ving thm ng mt ln. Nhng thut ton nh vy c gi l thut ton tm
kim trn th. Chng ta cng s lm quen vi hai thut ton tm kim c bn, l duyt theo
chiu su DFS (Depth First Search) v duyt theo chiu rng BFS (Breath First Search). Trn c
s ca hai php duyt c bn, ta c th p dng chng gii quyt mt s bi ton quan trng
ca l thuyt th. Tm li, nhng ni dung chnh c cp trong chng ny bao gm:
9

Thut ton tm kim theo chiu su trn th.

Thut ton tm kim theo chiu rng trn th.

Tm cc thnh phn lin thng ca th.

Tm ng i gia hai nh bt k ca th.

Tm ng i v chu trnh Euler

Tm ng i v chu trnh Hamilton

Bn c c th tm hiu su hn v tnh ng n v phc tp ca cc thut ton trong


cc ti liu [1] v [2].

6.1. THUT TON TM KIM THEO CHIU SU (DFS)


T tng c bn ca thut ton tm kim theo chiu su l bt u ti mt nh v0 no ,
chn mt nh u bt k k vi v0 v ly n lm nh duyt tip theo. Cch duyt tip theo c
thc hin tng t nh i vi nh v0 vi nh bt u l u.
kim tra vic duyt mi nh ng mt ln, chng ta s dng mt mng chuaxet[] gm
n phn t (tng ng vi n nh), nu nh th i c duyt, phn t tng ng trong mng
chuaxet[] c gi tr FALSE. Ngc li, nu nh cha c duyt, phn t tng ng trong mng
c gi tr TRUE. Thut ton c th c m t bng th tc qui DFS () trong : chuaxet - l
mng cc gi tr logic c thit lp gi tr TRUE.
void DFS( int v){
Thm_nh(v); chuaxet[v]:= FALSE;
for ( u ke(v) ) {
if (chuaxet[u] ) DFS(u);
}
}

119

Chng 6: Cc thut ton tm kim trn th


Th tc DFS() s thm tt c cc nh cng thnh phn lin thng vi v mi nh ng mt
ln. m bo duyt tt c cc nh ca th (c th c nhiu thnh phn lin thng), chng ta
ch cn thc hin duyt nh sau:
{
for (i=1; i n ; i++)
chuaxet[i]:= TRUE; /* thit lp gi tr ban u cho mng chuaxet[]*/
for (i=1; i n ; i++)
if (chuaxet[i] )
DFS( i);
}

Ch : Thut ton tm kim theo chiu su d dng p dng cho th c hng. i vi


th c hng, chng ta ch cn thay cc cnh v hng bng cc cung ca th c hng.
V d. p dng thut ton tm kim theo chiu su vi th trong hnh sau:
2

6
8
7

10

11

13
12
Hnh 6.1. th v hng G.

nh bt u duyt
DFS(1)
DFS(2)
DFS(4)
DFS(3)
DFS(6)
DFS(7)
DFS(8)
DFS(10)
120

Cc nh duyt
1
1, 2
1, 2, 4
1,2,4, 3
1,2,4,3, 6
1,2,4,3, 6,7
1,2,4,3, 6,7,8
1,2,4,3, 6,7,8,10

Cc nh cha duyt
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
3, 5, 6, 7, 8, 9, 10, 11, 12, 13
5, 6, 7, 8, 9, 10, 11, 12, 13
5, 7, 8, 9, 10, 11, 12, 13
5, 8, 9, 10, 11, 12, 13
5, 9, 10, 11, 12, 13
5, 9, 11, 12, 13

Chng 6: Cc thut ton tm kim trn th


DFS(5)
DFS(9)
DFS(13)
DFS(11)
DFS(11)

1,2,4,3, 6,7,8,10,5
1,2,4,3, 6,7,8,10,5,9
1,2,4,3, 6,7,8,10,5,9,13
1,2,4,3, 6,7,8,10,5,9,13,11
1,2,4,3, 6,7,8,10,5,9,13,11,12

9, 11, 12, 13
11, 12, 13
11, 12
12

Kt qu duyt: 1, 2, 4, 3, 6, 7, 8, 10, 5, 9, 13, 11, 12


Di y l vn bn chng trnh. Trong cc hm:
void Init(int G[][MAX], int *n): dng c d liu l t tp DFS.IN l biu din ca
th di dng ma trn k nh cp trong bi tp 5.4. A l ma trn vung lu tr biu din ca
th
void DFS(int G[][MAX], int n, int v, int chuaxet[]): l thut ton duyt theo chiu su vi
th G gm n nh v nh bt u duyt l v.
#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <stdlib.h>
#include <dos.h>
#define MAX

100

#define TRUE 1
#define FALSE 0
/* Depth First Search */
void Init(int G[][MAX], int *n){
FILE *fp; int i, j;
fp=fopen("DFS.IN", "r");
if(fp==NULL){
printf("\n Khong co file input");
delay(2000);return;
}
fscanf(fp,"%d", n);
printf("\n So dinh do thi:%d",*n);
printf("\n Ma tran ke cua do thi:");
for(i=1; i<=*n;i++){

121

Chng 6: Cc thut ton tm kim trn th


printf("\n");
for(j=1; j<=*n;j++){
fscanf(fp,"%d", &G[i][j]);
printf("%3d", G[i][j]);
}
}
}
void DFS(int G[][MAX], int n, int v, int chuaxet[]){
int u;
printf("%3d",v);chuaxet[v]=FALSE;
for(u=1; u<=n; u++){
if(G[v][u]==1 && chuaxet[u])
DFS(G,n, u, chuaxet);
}
}
void main(void){
int G[MAX][MAX], n, chuaxet[MAX];
Init(G, &n);
for(int i=1; i<=n; i++)
chuaxet[i]=TRUE;
printf("\n\n");
for(i=1; i<=n;i++)
if(chuaxet[i])
DFS( G,n, i, chuaxet);
getch();
}

6.2. THUT TON TM KIM THEO CHIU RNG (Breadth First Search)
rng, vi thut ton tm kim theo chiu su, nh thm cng mun s tr thnh nh
sm c duyt xong. l kt qu tt yu v cc nh thm c np vo stack trong th tc
qui. Khc vi thut ton tm kim theo chiu su, thut ton tm kim theo chiu rng thay th
vic s dng stack bng hng i queue. Trong th tc ny, nh c np vo hng i u tin
l v, cc nh k vi v ( v1, v2,..., vk) c np vo queue k tip. Qu trnh duyt tip theo c
bt u t cc nh cn c mt trong hng i.
122

Chng 6: Cc thut ton tm kim trn th


ghi nhn trng thi duyt cc nh ca th, ta cng vn s dng mng chuaxet[] gm
n phn t thit lp gi tr ban u l TRUE. Nu nh i ca th c duyt, gi tr chuaxet[i]
s nhn gi tr FALSE. Thut ton dng khi hng i rng. Th tc BFS di y th hin qu
trnh thc hin ca thut ton:
void BFS(int u){
queue = ;
u <= queue; /*np u vo hng i*/
chuaxet[u] = false;/* i trng thi ca u*/
while (queue ) { /* duyt ti khi no hng i rng*/
queue<=p; /*ly p ra t khi hng i*/
Thm_nh(p); /* duyt xong nh p*/
for (v ke(p) ) {/* a cc nh v k vi p nhng cha c xt vo hng i*/
if (chuaxet[v] ) {
v<= queue; /*a v vo hng i*/
chuaxet[v] = false;/* i trng thi ca v*/
}
}
} /* end while*/
}/* end BFS*/

Th tc BFS s thm tt c cc nh dng thnh phn lin thng vi u. thm tt c cc


nh ca th, chng ta ch cn thc hin on chng trnh di y:
{
for (u=1; un; u++)
chuaxet[u] = TRUE;
for (uV )
if (chuaxet[u] )
BFS(u);
}

123

Chng 6: Cc thut ton tm kim trn th


V d. p dng thut ton tm kim theo chiu rng vi th trong hnh 6.2 sau:
2

6
8
7

10

11

12

13

Hnh 6.2. th v hng G=<V,E>

Cc nh duyt

Cc nh trong hng i

Cc nh cn li

1,2,3,4,5,6,7,8,9,10,11,12,13

2, 3, 11

4,5,6,7,8,9,10,12,13

1, 2

3, 11, 4, 6

5,7,8,9,10,12,13

1, 2, 3

11, 4, 6

5,7,8,9,10,12,13

1, 2, 3, 11

4, 6, 12, 13

5,7,8,9,10

1, 2, 3, 11, 4

6,12,13

5,7,8,9,10

1, 2, 3, 11, 4, 6

12,13, 7, 8

5,9,10

1, 2, 3, 11, 4, 6,12

13, 7, 8

5,9,10

1, 2, 3, 11, 4, 6,12, 13

7, 8, 9

5,10

1, 2, 3, 11, 4, 6,12, 13,7

8, 9

5, 10

1, 2, 3, 11, 4, 6,12, 13, 7, 8

9, 10

1, 2, 3, 11, 4, 6,12, 13, 7, 8, 9

10, 5

1,2,3,11, 4, 6,12, 13, 7, 8, 9,10

1,2,3,11,4,6,12,13,7, 8, 9,10, 5

Kt qu duyt: 1,2,3,11,4,6,12,13,7, 8, 9,10, 5.


Vn bn chng trnh ci t theo BFS c th hin nh sau:
#include <stdio.h>
#include <conio.h>

124

Chng 6: Cc thut ton tm kim trn th


#include <io.h>
#include <stdlib.h>
#include <dos.h>
#define MAX

100

#define TRUE 1
#dine FALSE 0
/* Breadth First Search */
void Init(int G[][MAX], int *n, int *chuaxet){
FILE *fp; int i, j;
fp=fopen("BFS.IN", "r");
if(fp==NULL){
printf("\n Khong co file input");
delay(2000);return;
}
fscanf(fp,"%d", n);
printf("\n So dinh do thi:%d",*n);
printf("\n Ma tran ke cua do thi:");
for(i=1; i<=*n;i++){
printf("\n");
for(j=1; j<=*n;j++){
fscanf(fp,"%d", &G[i][j]);
printf("%3d", G[i][j]);
}
}
for(i=1; i<=*n;i++)

chuaxet[i]=0;

}
void BFS(int G[][MAX], int n, int i, int chuaxet[], int QUEUE[MAX]){
int u, dauQ, cuoiQ, j;
dauQ=1; cuoiQ=1;QUEUE[cuoiQ]=i;chuaxet[i]=FALSE;
/* thit lp hng i vi nh u l i*/
while(dauQ<=cuoiQ){
u=QUEUE[dauQ];

125

Chng 6: Cc thut ton tm kim trn th


printf("%3d",u);dauQ=dauQ+1; /* duyt nh u hng i*/
for(j=1; j<=n;j++){
if(G[u][j]==1 && chuaxet[j] ){
cuoiQ=cuoiQ+1;
QUEUE[cuoiQ]=j;
chuaxet[j]=FALSE;
}
}
}
}
void main(void){
int G[MAX][MAX], n, chuaxet[MAX], QUEUE[MAX], i;
Init(G, &n, chuaxet);
printf("\n\n");
for(i=1; i<=n; i++)
chuaxet[i]= TRUE;
for(i=1; i<=n; i++)
if (chuaxet[i])

BFS(A, n, i, chuaxet, QUEUE);

getch();
}

6.3. DUYT CC THNH PHN LIN THNG CA TH


Mt th c th lin thng hoc khng lin thng. Nu th lin thng th s thnh phn
lin thng ca n l 1. iu ny tng ng vi php duyt theo th tc DFS() hoc BFS() c
gi n ng mt ln. Nu th khng lin thng (s thnh phn lin thng ln hn 1) chng ta
c th tch chng thnh nhng th con lin thng. iu ny cng c ngha l trong php duyt
th, s thnh phn lin thng ca n bng s ln gi ti th tc DFS() hoc BFS().
xc nh s cc thnh phn lin thng ca th, chng ta s dng bin mi solt nghi
nhn cc nh cng mt thnh phn lin thng trong mng chuaxet[] nh sau:
- Nu nh i cha c duyt, chuaxet[i] c gi tr 0;
- Nu nh i c duyt thuc thnh phn lin thng th j=solt, ta ghi nhn chuaxet[i]=solt;
- Cc nh cng thnh phn lin thng nu chng c cng gi tr trong mng chuaxet[].
Vi cch lm nh trn, th tc BFS() hoc DFS() c th c sa li nh sau:
126

Chng 6: Cc thut ton tm kim trn th


void BFS(int u){
queue = ;
u <= queue; /*np u vo hng i*/
solt = solt+1; chuaxet[u] = solt; /*solt l bin ton cc thit lp gi tr 0*/
while (queue ) {
queue<=p; /* ly p ra t stack*/
for v ke(p) {
if (chuaxet[v] ) {
v<= queue; /*np v vo hng i*/
chuaxet[v] = solt; /* v c cng thnh phn lin thng vi p*/
}
}
}
}

duyt ht tt c cc thnh phn lin thng ca th, ta ch cn gi ti th tc lienthong


nh di y:
void Lien_Thong(void){
for (i=1; i n; i++)
chuaxet[i] =0;
for(i=1; i<=n; i++)
if(chuaxet[i]==0){
solt=solt+1;
BFS(i);
}
}

ghi nhn tng nh ca th thuc thnh phn lin thng no, ta ch cn duyt cc nh
c cng chung gi tr trong mng chuaxet[] nh di y:
void Result( int solt){
if (solt==1){
< Do thi la lien thong>;
}
for( i=1; i<=solt;i++){

127

Chng 6: Cc thut ton tm kim trn th


/* a ra thnh phn lin thng th i*/
for( j=1; j<=n;j++){
if( chuaxet[j]==i)
<a ra nh j>;
}
}
}

V d. th v hng trong hnh 6.3 s cho ta kt qu trong mng chuaxet nh sau:


1

9
Hnh 6.3. th v hng G=<V,E>.

S thnh phn lin thng

Kt qu thc hin BFS

Gi tr trong mng chuaxet[]

Cha thc hin

Chuaxet[] = {0,0,0,0,0,0,0,0,0}

BFS(1): 1, 2, 4, 5

Chuaxet[] = {1,1,0,1,1,0,0,0,0}

BFS(3): 3, 6, 7

Chuaxet[] = {1,1,2,1,1,2,2,0,0}

BFS(8): 8, 9

Chuaxet[] ={ 1,1,2,1,1,2,2,3,3}

Nh vy, nh 1, 2, 4, 5 cng c gi tr 1 trong mng chuaxet[] thuc thnh phn lin thng
th 1;
nh 3, 6,7 cng c gi tr 2 trong mng chuaxet[] thuc thnh phn lin thng th 2;
nh 8, 9 cng c gi tr 3 trong mng chuaxet[] thuc thnh phn lin thng th 3.
Vn bn chng trnh c th hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <stdlib.h>
#include <dos.h>

128

Chng 6: Cc thut ton tm kim trn th


#define MAX

100

#define TRUE 1
#define FALSE 0
/* Breadth First Search */
void Init(int G[][MAX], int *n, int *solt, int *chuaxet){
FILE *fp; int i, j;
fp=fopen("lienth.IN", "r");
if(fp==NULL){
printf("\n Khong co file input");
delay(2000);return;
}
fscanf(fp,"%d", n);
printf("\n So dinh do thi:%d",*n);
printf("\n Ma tran ke cua do thi:");
for(i=1; i<=*n;i++){
printf("\n");
for(j=1; j<=*n;j++){
fscanf(fp,"%d", &G[i][j]);
printf("%3d", G[i][j]);
}
}
for(i=1; i<=*n;i++)
chuaxet[i]=0;
*solt=0;
}
void Result(int *chuaxet, int n, int solt){
printf("\n\n");
if(solt==1){
printf("\n Do thi la lien thong");
getch(); return;
}
for(int i=1; i<=solt;i++){

129

Chng 6: Cc thut ton tm kim trn th


printf("\n Thanh phan lien thong thu %d:",i);
for(int j=1; j<=n;j++){
if( chuaxet[j]==i)
printf("%3d", j);
}
}
}
void BFS(int G[][MAX], int n, int i, int *solt, int chuaxet[], int QUEUE[MAX]){
int u, dauQ, cuoiQ, j;
dauQ=1; cuoiQ=1;QUEUE[cuoiQ]=i;chuaxet[i]=*solt;
while(dauQ<=cuoiQ){
u=QUEUE[dauQ];printf("%3d",u);dauQ=dauQ+1;
for(j=1; j<=n;j++){
if(G[u][j]==1 && chuaxet[j]==0){
cuoiQ=cuoiQ+1;
QUEUE[cuoiQ]=j;
chuaxet[j]=*solt;
}
}
}
}
void Lien_Thong(void){
int G[MAX][MAX], n, chuaxet[MAX], QUEUE[MAX], solt,i;
clrscr();Init(G, &n,&solt, chuaxet);
printf("\n\n");
for(i=1; i<=n; i++)
if(chuaxet[i]==0){
solt=solt+1;
BFS(G, n, i, &solt, chuaxet, QUEUE);
}
Result(chuaxet, n, solt);
getch();

130

Chng 6: Cc thut ton tm kim trn th


}
void main(void){
Lien_Thong();
}

6.4. TM NG I GIA HAI NH BT K CA TH


Bi ton: Cho th G=(V, E). Trong V l tp nh, E l tp cnh ca th. Hy tm
ng i t nh sV ti nh tV.
Th tc BFS(s) hoc DFS(s) cho php ta duyt cc nh cng mt thnh phn lin thng vi
s. Nh vy, nu trong s cc nh lin thng vi s cha t th chc chn c ng i t s n t. Nu
trong s cc nh lin thng vi s khng cha t th khng tn ti ng i t s n t. Do vy,
chng ta ch cn gi ti th tc DFS(s) hoc BFS(s) v kim tra xem nh t c thuc thnh phn
lin thng vi s hay khng. iu ny c thc hin n gin thng qua mng trng thi
chuaxet[]. Nu chuaxet[t] = False th c ngha t cng thnh phn lin thng vi s. Ngc li
chuaxet[t] = True th t khng cng thnh phn lin thng vi s.
ghi nhn ng i t s n t, ta s dng mt mng truoc[] thit lp gi tr ban u l 0.
Trong qu trnh duyt, ta thay th gi tr ca truoc[v] ghi nhn nh i trc nh v trong ng
i tm kim t s n v. Khi , trong th tc DFS(v) ta ch cn thay i li nh sau:
void DFS( int v){
chuaxet[v]:= FALSE;
for ( u ke(v) ) {
if (chuaxet[u] ) {
truoc[u]=v;
DFS(u);
}
}
}

i vi th tc BFS(v) c thay i li nh sau:


void BFS(int u){
queue = ;
u <= queue; /*np u vo hng i*/
chuaxet[u] = false;/* i trng thi ca u*/
while (queue ) { /* duyt ti khi no hng i rng*/
queue<=p; /*ly p ra t khi hng i*/

131

Chng 6: Cc thut ton tm kim trn th


for (v ke(p) ) {/* a cc nh v k vi p nhng cha c xt vo hng i*/
if (chuaxet[v] ) {
v<= queue; /*a v vo hng i*/
chuaxet[v] = false;/* i trng thi ca v*/
truoc[v]=p;
}
}
} /* end while*/
}/* end BFS*/

Kt qu ng i c c ngc li thng qua th tc Result() nh sau:


void Result(void){
if(truoc[t]==0){
<Khng c ng i ts n t>;
return;
}
j = t;
while(truoc[j]!=s){
<thm nh j>;
j=truoc[j];
}
<thm nh s>;
}

V d. Tm ng i t nh 1 n nh 7 bng thut ton tm kim theo chiu rng vi


th trong hnh 6.4 di y
2

6
8
7

10

3
11

9
13

12
Hnh 6.4. th v hng G=<V,E>
132

Chng 6: Cc thut ton tm kim trn th


Ta c, BFS(1) = 1,2,3,11,4,6,12,13,7,8,9,10,5. R rng chuaxet[7] = True nn c ng i
t nh 1 n nh 7. By gi ta xc nh gi tr trong mng truoc[] c kt qu ng i c
theo chiu ngc li.
Truoc[7] = 6; truoc[6] = 2; truoc[2] =1 => ng i t nh 1 n nh 7 l 1
=>2=>6=>7.
Ton vn chng trnh c th hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <stdlib.h>
#include <dos.h>
#define MAX

100

#define TRUE

#define FALSE

0int n, truoc[MAX], chuaxet[MAX], queue[MAX];

int A[MAX][MAX]; int s, t;


/* Breadth First Search */
void Init(void){
FILE *fp; int i, j;
fp=fopen("lienth.IN", "r");
if(fp==NULL){
printf("\n Khong co file input");
delay(2000);return;
}
fscanf(fp,"%d", &n);
printf("\n So dinh do thi:%d",n);
printf("\n Ma tran ke cua do thi:");

for(i=1; i<=n;i++){
printf("\n");
for(j=1; j<=n;j++){
fscanf(fp,"%d", &A[i][j]);
printf("%3d", A[i][j]);
}

133

Chng 6: Cc thut ton tm kim trn th


}
for(i=1; i<=n;i++){
chuaxet[i]=TRUE;
truoc[i]=0;
}
}
void Result(void){
printf("\n\n");
if(truoc[t]==0){
printf("\n Khong co duong di tu %d den %d",s,t);
getch();
return;
}
printf("\n Duong di tu %d den %d la:",s,t);
int j = t;printf("%d<=", t);
while(truoc[j]!=s){
printf("%3d<=",truoc[j]);
j=truoc[j];
}
printf("%3d",s);
}
void In(void){
printf("\n\n");
for(int i=1; i<=n; i++)
printf("%3d", truoc[i]);
}
void BFS(int s) {
int dauQ, cuoiQ, p, u;printf("\n");
dauQ=1;cuoiQ=1; queue[dauQ]=s;chuaxet[s]=FALSE;
while (dauQ<=cuoiQ){
u=queue[dauQ]; dauQ=dauQ+1;
printf("%3d",u);

134

Chng 6: Cc thut ton tm kim trn th


for (p=1; p<=n;p++){
if(A[u][p] && chuaxet[p]){
cuoiQ=cuoiQ+1;queue[cuoiQ]=p;
chuaxet[p]=FALSE;truoc[p]=u;
}
}
}
}
void duongdi(void){
int chuaxet[MAX], truoc[MAX], queue[MAX];
Init();BFS(s);Result();
}
void main(void){
clrscr();
printf("\n Dinh dau:"); scanf("%d",&s);
printf("\n Dinh cuoi:"); scanf("%d",&t);
Init();printf("\n");BFS(s);
n();getch();
Result();getch();
}

6.5. NG I V CHU TRNH EULER


nh ngha. Chu trnh n trong th G i qua mi cnh ca th ng mt ln c gi
l chu trnh Euler. ng i n trong G i qua mi cnh ca n ng mt ln c gi l ng
i Euler. th c gi l th Euler nu n c chu trnh Euler. th c ng i Euler c
gi l na Euler.
R rng, mi th Euler u l na Euler nhng iu ngc li khng ng.
V d 1. Xt cc th G1, G2, G3 trong hnh 6.5.
a

c
G1

d
G2

G3

Hnh 6.5. th v hng G1, G2, G3.


135

Chng 6: Cc thut ton tm kim trn th


th G1 l th Euler v n c chu trnh Euler a, e, c, d, e, b, a. th G3 khng c chu
trnh Euler nhng cha ng i Euler a, c, d, e, b, d, a, b v th G3 l na Euler. G2 khng c
chu trnh Euler cng nh ng i Euler.
V d 2. Xt cc th c hng H1, H2, H3 trong hnh 6.6.
a

c
c

H1

d
H2

H3

Hnh 6.6. th c hng H1, H2, H3.

th H2 l th Euler v n cha chu trnh Euler a, b, c, d, e, a v vy n l th Euler.


th H3 khng c chu trnh Euler nhng c ng i Euler a, b, c, a, d, c nn n l th na
Euler. th H1 khng cha chu trnh Euler cng nh chu trnh Euler.
nh l. th v hng lin thng G=(V, E) l th Euler khi v ch khi mi nh ca G
u c bc chn. th v hng lin thng G=(V, E) l th na Euler khi v ch khi n khng
c qu hai nh bc l.
tm mt chu trnh Euler, ta thc hin theo thut ton sau:
* To mt mng CE ghi ng i v mt stack xp cc nh ta s xt. Xp vo mt
nh tu u no ca th, ngha l nh u s c xt u tin.
* Xt nh trn cng ca ngn xp, gi s nh l nh v; v thc hin:

Nu v l nh c lp th ly v khi ngn xp v a vo CE;

Nu v l lin thng vi nh x th xp x vo ngn xp sau xo b cnh (v, x);

* Quay li bc 2 cho ti khi ngn xp rng. Kt qu chu trnh Euler c cha trong CE
theo th t ngc li.
Th tc Euler_Cycle sau s cho php ta tm chu trnh Euler.
void

Euler_Cycle(void){

Stack:=; CE:=;
Chn u l nh no ca th;
u=>Stack; /* np u vo stack*/
while (Stack ) { /* duyt cho n khi stack rng*/
x= top(Stack); /* x l phn t u stack */

136

Chng 6: Cc thut ton tm kim trn th


if (ke(x) ) ) {
y = nh u trong danh sch ke(x);
Stack<=y; /* np y vo Stack*/
Ke(x) = Ke(x) \{y};
Ke(y) = Ke(y)\{x}; /*loi cnh (x,y) khi th}*/
}
else {
x<= Stack; /*ly x ra khi stack*/;
CE <=x; /* np x vo CE;*/
}
}

V d. Tm chu trnh Euler trong hnh 6.7.


a

b
4

5
9

10

Hnh 6.7. th v hng G.

Cc bc thc hin theo thut ton s cho ta kt qu sau:


Bc
1
2
3
4
5
6
7
8
9
10
11
12

Gi tr trong stack
F
f, a
f, a, c
f,a,c,f
f, a, c
f, a, c, b
f, a, c, b, d
f, a, c, b, d,c
f, a, c, b, d
f, a, c, b, d, e
f, a, c, b, d, e, b
f, a, c, b, d, e, b, a

Gi tr trong CE

f
f
f
f
f, c
f, c
f, c
f, c

Cnh cn li
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
2, 3, 4, 5, 6, 7, 8, 9, 10
3, 4, 5, 6, 7, 8, 9, 10
3, 4, 5, 6, 7, 9, 10
3, 4, 5, 6, 7, 9, 10
3, 4, 6, 7, 9, 10
3, 4, 7, 9, 10
3, 4, 7, 10
3, 4, 7, 10
3, 4, 7
3, 4
3
137

Chng 6: Cc thut ton tm kim trn th


13
14
15
16
17
18
19
20
21
22

f, a, c, b, d, e, b, a, d
f, a, c, b, d, e, b, a
f, a, c, b, d, e, b
f, a, c, b, d, e
f, a, c, b, d
f, a, c, b
f, a, c
f, a
f

f, c
f, c, d
f,c,d,a
f,c,d,a,b
f,c,d,a,b,e
f,c,d,a,b,e,d
f,c,d,a,b,e,d,b
f,c,d,a,b,e,d,b,c
f,c,d,a,b,e,d,b,c,a
f,c,d,a,b,e,d,b,c,a,f

Chng trnh tm chu trnh Euler c th hin nh sau:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define

TRUE

#define FALSE

1
0

int A[MAX][MAX], n, u=1;


void Init(void){
int i, j;FILE *fp;
fp = fopen("CTEULER.IN", "r");
fscanf(fp,"%d", &n);
printf("\n So dinh do thi:%d",n);
printf("\n Ma tran ke:");
for(i=1; i<=n;i++){
printf("\n");
for(j=1; j<=n;j++){
fscanf(fp,"%d", &A[i][j]);
printf("%3d", A[i][j]);
}

138

Chng 6: Cc thut ton tm kim trn th


}
fclose(fp);
}
int Kiemtra(void){
int i, j, s, d;
d=0;
for(i=1; i<=n;i++){
s=0;
for(j=1; j<=n;j++)
s+=A[i][j];
if(s%2) d++;
}
if(d>0) return(FALSE);
return(TRUE);
}
void Tim(void){
int v, x, top, dCE;
int stack[MAX], CE[MAX];
top=1; stack[top]=u;dCE=0;
do {
v = stack[top];x=1;
while (x<=n && A[v][x]==0)
x++;
if (x>n) {
dCE++; CE[dCE]=v; top--;
}
else {
top++; stack[top]=x;
A[v][x]=0; A[x][v]=0;
}
} while(top!=0);
printf("\n Co chu trinh Euler:");

139

Chng 6: Cc thut ton tm kim trn th


for(x=dCE; x>0; x--)
printf("%3d", CE[x]);
}
void main(void){
clrscr(); Init();
if(Kiemtra())
Tim();
else printf("\n Khong co chu trinh Euler");
getch();
}

Mt th khng c chu trnh Euler nhng vn c th c ng i Euler. Khi , th c


ng hai nh bc l, tc l tng cc s cnh xut pht t mt trong hai nh l s l. Mt
ng i Euler phi xut pht t mt trong hai nh v kt thc nh kia. Nh vy, thut ton
tm ng i Euler ch khc vi thut ton tm chu trnh Euler ch ta phi xc nh im xut
pht ca ng i t nh bc l ny v kt thc nh bc l khc. Chng trnh tm ng i
Euler c th hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define

TRUE

#define FALSE

1
0

void Init(int A[][MAX], int *n){


int i, j;FILE *fp;
fp = fopen("DDEULER.IN", "r");
fscanf(fp,"%d", n);
printf("\n So dinh do thi:%d",*n);
printf("\n Ma tran ke:");
for(i=1; i<=*n;i++){
printf("\n");
for(j=1; j<=*n;j++){

140

Chng 6: Cc thut ton tm kim trn th


fscanf(fp,"%d", &A[i][j]);
printf("%3d", A[i][j]);
}
}
fclose(fp);
}
int Kiemtra(int A[][MAX], int n, int *u){
int i, j, s, d;
d=0;
for(i=1; i<=n;i++){
s=0;
for(j=1; j<=n;j++)
s+=A[i][j];
if(s%2){
d++;*u=i;
}
}
if(d!=2) return(FALSE);
return(TRUE);
}
void DDEULER(int A[][MAX], int n, int u){
int v, x, top, dCE;
int stack[MAX], CE[MAX];
top=1; stack[top]=u;dCE=0;
do {
v = stack[top];x=1;
while (x<=n && A[v][x]==0)
x++;
if (x>n) {
dCE++; CE[dCE]=v; top--;
}
else {

141

Chng 6: Cc thut ton tm kim trn th


top++; stack[top]=x;
A[v][x]=0; A[x][v]=0;
}
} while(top!=0);
printf("\n Co duong di Euler:");
for(x=dCE; x>0; x--)
printf("%3d", CE[x]);
}
void main(void){
int A[MAX][MAX], n, u;
clrscr(); Init(A, &n);
if(Kiemtra(A,n,&u))
DDEULER(A,n,u);
else printf("\n Khong co duong di Euler");
getch();
}

tm tt c cc ng i Euler ca mt th n nh, m cnh, ta c th dng k thut


qui nh sau:
Bc 1. To mng b c di m + 1 nh mt ngn xp cha ng i. t b[0]=1, i=1
(xt nh th nht ca ng i);
Bc 2. Ln lt cho b[i] cc gi tr l nh k vi b[i-1] m cnh (b[i-1],b[i]) khng trng
vi nhng cnh dng t b[0] n b[i-1]. Vi mi gi tr ca b[i], ta kim tra:

Nu i<m th tng i ln 1 n v (xt nh tip theo) v quay li bc 2.

Nu i==m th dy b chnh l mt ng i Euler.

Chng trnh lit k tt c ng i Euler c th hin nh sau:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define

142

TRUE

Chng 6: Cc thut ton tm kim trn th


#define FALSE

int m, b[MAX], u, i, OK;


void Init(int A[][MAX], int *n){
int i, j, s, d;FILE *fp;
fp = fopen("DDEULER.IN", "r");
fscanf(fp,"%d", n);
printf("\n So dinh do thi:%d",*n);
printf("\n Ma tran ke:");
u=1; d=0; m=0;
for(i=1; i<=*n;i++){
printf("\n");s=0;
for(j=1; j<=*n;j++){
fscanf(fp,"%d", &A[i][j]);
printf("%3d", A[i][j]);
s+=A[i][j];
}
if (s%2) { d++;u=i; }
m=m+s;
}
m=m /2;
if (d!=2) OK=FALSE;
else OK=TRUE;
fclose(fp);
}
void Result(void){
int i;
printf("\n Co duong di Euler:");
for(i=0; i<=m; i++)
printf("%3d", b[i]);
}
void DDEULER(int *b, int A[][MAX], int n, int i){
int j, k;

143

Chng 6: Cc thut ton tm kim trn th


for(j=1; j<=n;j++){
if (A[b[i-1]][j]==1){
A[b[i-1]][j]=0; A[j][b[i-1]]=0;
b[i]=j;
if(i==m)

Result();

else DDEULER(b, A, n, i+1);


A[b[i-1]][j]=1; A[j][b[i-1]]=1;
}
}
}
void main(void){
int A[MAX][MAX], n;
clrscr(); Init(A, &n);
b[0]=u;i=1;
if(OK) DDEULER(b, A, n, i);
else printf("\n Khong co duong di Euler");
getch();
}

6.6. NG I V CHU TRNH HAMILTON


Vi th Euler, chng ta quan tm ti vic duyt cc cnh ca th mi cnh ng mt
ln, th trong mc ny, chng ta xt n mt bi ton tng t nhng ch khc nhau l ta ch quan
tm ti cc nh ca th, mi nh ng mt ln. S thay i ny tng nh khng ng k,
nhng thc t c nhiu s khc bit trong khi gii quyt bi ton.
nh ngha. ng i qua tt c cc nh ca th mi nh ng mt ln c gi l
ng i Hamilton. Chu trnh bt u ti mt nh v no qua tt c cc nh cn li mi nh
ng mt ln sau quay tr li v c gi l chu trnh Hamilton. th c gi l th
Hamilton nu n cha chu trnh Hamilton. th cha ng i Hamilton c gi l th na
Hamilton.
Nh vy, mt th Hamilton bao gi cng l th na Hamilton nhng iu ngc li
khng lun lun ng. V d sau s minh ha cho nhn xt ny.

144

Chng 6: Cc thut ton tm kim trn th


V d. th thi hamilton G3, na Hamilton G2 v G1.
a

G1
G2
Hnh 6.8. th thi hamilton G3, na Hamilton G2 v G1.

G3

Cho n nay, vic tm ra mt tiu chun nhn bit th Hamilton vn cn m, mc d


y l vn trung tm ca l thuyt th. Hn th na, cho n nay cng vn cha c thut
ton hiu qu kim tra mt th c phi l th Hamilton hay khng.
lit k tt c cc chu trnh Hamilton ca th, chng ta c th s dng thut ton sau:
void Hamilton( int k) {
/* Lit k cc chu trnh Hamilton ca th bng cch pht trin dy nh
(X[1], X[2],..., X[k-1] ) ca th G = (V, E) */
for y Ke(X[k-1]) {
if (k==n+1) and (y == v0) then
Ghinhan(X[1], X[2],..., X[n], v0);
else {
X[k]=y; chuaxet[y] = false;
Hamilton(k+1);
chuaxet[y] = true;
}
}
}

Chng trnh chnh c th hin nh sau:


{
for (vV ) chuaxet[v] = true; /*thit lp trng thi cc nh*/
X[1] = v0; (*v0 l mt nh no ca th*)
chuaxet[v0] = false;
Hamilton(2);
}

145

Chng 6: Cc thut ton tm kim trn th


Cy tm kim chu trnh Hamilton th hin thut ton trn c m t nh trong hnh 6.9.
2

G=(V,E)
1

5 3

5 4

3
4

2
31

5 2
5 2

3
3

Hnh 6.9. Cy tm kim chu trnh Hamilton.

Chng trnh lit k cc chu trnh Hamilton c th hin nh sau:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define

TRUE

#define FALSE

1
0

int A[MAX][MAX], C[MAX], B[MAX];


int n,i, d;
void Init(void){
int i, j;FILE *fp;
fp= fopen("CCHMTON.IN", "r");
if(fp==NULL){
printf("\n Khong co file input");
getch(); return;
}
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d", n);

146

Chng 6: Cc thut ton tm kim trn th


printf("\n Ma tran ke:");
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp, "%d", &A[i][j]);
printf("%3d", A[i][j]);
}
}
fclose(fp);
for (i=1; i<=n;i++)
C[i]=0;
}
void Result(void){
int i;
printf("\n ");
for(i=n; i>=0; i--)
printf("%3d", B[i]);
d++;
}
void Hamilton(int *B, int *C, int i){
int j, k;
for(j=1; j<=n; j++){
if(A[B[i-1]][j]==1 && C[j]==0){
B[i]=j; C[j]=1;
if(i<n) Hamilton(B, C, i+1);
else if(B[i]==B[0]) Result();
C[j]=0;
}
}
}
void main(void){
B[0]=1; i=1;d=0;

147

Chng 6: Cc thut ton tm kim trn th


Init();
Hamilton(B,C,i);
if(d==0)
printf("\n Khong co chu trinh Hamilton");
getch();
}

Chng trnh duyt tt c ng i Hamilton nh sau:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define

TRUE

#define FALSE

1
0

int A[MAX][MAX], C[MAX], B[MAX];


int n,i, d;
void Init(void){
int i, j;FILE *fp;
fp= fopen("DDHMTON.IN", "r");
if(fp==NULL){
printf("\n Khong co file input");
getch(); return;
}
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d", n);
printf("\n Ma tran ke:");
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp, "%d", &A[i][j]);
printf("%3d", A[i][j]);

148

Chng 6: Cc thut ton tm kim trn th


}
}
fclose(fp);
for (i=1; i<=n;i++)
C[i]=0;
}
void Result(void){
int i;
printf("\n ");
for(i=n; i>0; i--)
printf("%3d", B[i]);
d++;
}
void Hamilton(int *B, int *C, int i){
int j, k;
for(j=1; j<=n; j++){
if(A[B[i-1]][j]==1 && C[j]==0){
B[i]=j; C[j]=1;
if(i<n) Hamilton(B, C, i+1);
else Result();
C[j]=0;
}
}
}
void main(void){
B[0]=1; i=1;d=0;
Init();
Hamilton(B,C,i);
if(d==0)
printf("\n Khong co duong di Hamilton");
getch();
}

149

Chng 6: Cc thut ton tm kim trn th

NHNG NI DUNG CN GHI NH


9

Mt thut ton tm kim trn th l php ving thm cc nh ca n mi nh


ng mt ln.

Php duyt theo chiu su s dng cu trc d liu stack.

Php duyt theo chiu rng s dng cu trc d liu hng i.

Xc nh cc thnh phn lin thng v ng i gia hai nh bt k ca th


u c th s dng thut ton DFS() hoc BFS().

Nm vng v phn bit r s khc bit gia chu trnh (ng i) Euler v chu
trnh (ng i Hamilton).

Phng php hiu r bn cht nht ca thut ton l ci t v kim chng thut
ton bng cch vit chng trnh.

BI TP CHNG 6
Bi 1. Cho th G=<V, E> cho bi danh sch k. Hy vit th tc loi b cnh (u,v) thm
cnh (x,y) vo th.
Bi 2. p dng thut ton tm kim theo chiu su tm tt c cc cu trn th v
hng. (Cu l cnh m loi b n lm tng s thnh phn lin thng ca th).
Bi 3. p dng thut ton tm kim theo chiu su kim tra xem th c hng G=<V,
A> c chu trnh hay khng.
Bi 4. Cho mt bng vung m x n , nm trn dng i, ct j gi l (i, j): i=1,2,.., m;
j=1, 2,..,n. Trong mi (i, j) ta vit mt s a[i,j] {0, 1}. Hy vit chng trnh m s
min con ton 0 ca bng. V d s min con ton 0 ca bng kch thc 5x5 c ch ra
trong hnh di y:
1

Bi 5. Vit chng trnh kim tra xem mt th c l th Euler hay khng? Nu c cu


khng nh ng hy ch ra mt chu trnh Euler trong th.
Bi 6. Vit chng trnh kim tra xem mt th c l th na Euler hay khng? Nu c
cu khng nh ng hy ch ra mt ng i Euler trong th.
Bi 7. Vit chng trnh kim tra xem mt th c phi l th Hamilton hay khng.
150

Chng 6: Cc thut ton tm kim trn th


Bi 8. Mt lp hc c 40 hc sinh v ngh h. Bit rng mi em c a ch t nht 20 bn, v
nu bn ny bit a ch ca bn kia th bn kia cng bit a ch ca bn ny. Chng minh rng
bt c hai em no trong lp cng c th nhn tin cho nhau.
Bi 9. Chng minh rng, i vi th lin thng G ty c n cnh lun lun c th nh
s cc cnh ca G bng cc s 1, 2,.., n, sao cho ti mi nh m c t nht 2 cnh ca th
th USCLN ca cc s nguyn vit trn cc cnh thuc nh ny bng 1.
Bi 10. Trn bn c c 4x4 vung. Chng minh rng con m khng th i qua tt c cc
, mi ng mt ln ri tr v ban u.

151

Chng 7: Cy (Tree)

CHNG VII: CY (TREE)

Ni dung chnh ca chng ny cp n mt loi th n gin nht l cy. Cy


c ng dng rng ri trong nhiu lnh vc khc nhau ca tin hc nh t chc cc th mc, lu
tr d liu, biu din tnh ton, biu din quyt nh v t chc truyn tin. Nhng ni dung c
trnh by bao gm:
9

Cy v cc tnh cht c bn ca cy.

Mt s ng dng quan trng ca cy trong tin hc.

Cy khung ca th & cc thut ton c bn xy dng cy khung ca th.

Bi ton tm cy khung nh nht & cc thut ton tm cy khung nh nht.

Thut ton Kruskal tm cy bao trm nh nht.

Thut ton Prim tm cy bao trm nh nht.

Bn c c th tm thy nhng chng minh c th cho cc nh l, tnh ng n v


phc tp cc thut ton thng qua cc ti liu [1], [2].

7.1. CY V MT S TNH CHT C BN


nh ngha 1. Ta gi cy l th v hng lin thng khng c chu trnh. th khng
lin thng, khng c chu trnh c gi l rng.
Nh vy, rng l th m mi thnh phn lin thng ca n l mt cy.
V d. Rng gm 3 cy trong hnh 7.1.

T1

T2

T3

Hnh 7.1. Rng gm 3 cy T1, T2, T3.

152

Chng 7: Cy (Tree)
Cy c coi l dng th n gin nht ca th. nh l sau y cho ta mt s tnh
cht ca cy.
nh l. Gi s T= <V, E> l th v hng n nh. Khi nhng khng nh sau l
tng ng:
a) T l mt cy;
b) T khng c chu trnh v c n-1 cnh;
c) T lin thng v c ng n-1 cnh;
d) T lin thng v mi cnh ca n u l cu;
e) Gia hai nh bt k ca T c ni vi nhau bi ng mt ng i n;
f) T khng cha chu trnh nhng h c thm vo n mt cnh ta thu c ng mt chu trnh;
Chng minh. nh l c chng minh nh l thng qua cc bc (a) =>(b) =>(c) => (d)
=>(e) => (f) => (a). Nhng bc c th ca qu trnh chng minh bn c c th tm thy trong
cc ti liu [1], [2].

7.2. MT S NG DNG QUAN TRNG CA CY


7.2.1. Cy nh phn tm kim
nh ngha. Cy nh phn tm kim T l cy nh phn c sp, trong mi nh c
gn bi mt gi tr kha sao cho gi tr kha ca cc nh thuc nhnh cy con bn tri nh hn
gi tr kha ti nh gc, gi tr kha thuc nhnh cy con bn phi ln hn gi tr kha ti nh
gc v mi nhnh cy con bn tri, bn phi cng t hnh thnh nn mt cy nh phn tm kim.
Nh vy, mt cy nh phn tm kim ch c cc nh con bn tri s to thnh mt cy lch
tri hay sp xp theo th t gim dn ca kha. Mt cy nh phn tm kim ch c cc nh con
bn phi s to nn mt cy lch phi hay sp xp theo th t tng dn ca kha.
V d. T1, T2, T3 l cc cy nh phn tm kim lch tri, lch phi v cy nh phn tm kim.
10

10

10
6

4
8

13

20

20
3

15

15

12

14

25

25

30

T1. Cy tm kim lch tri. T2. Cy tm kim lch phi.


Hnh 7.2.

T3. Cy tm kim
153

Chng 7: Cy (Tree)
Cy nh phn tm kim rt thun tin trong t chc lu tr v tm kim thng tin. Di y
ta xt cc thao tc in hnh trn cy nh phn tm kim.
Thao tc thm nh mi vo cy nh phn tm kim: thm nh x vo cy nh phn
tm kim, ta thc hin nh sau:

Nu gi tr kha ca nh x trng vi gi tr kha ti nh gc th khng th thm


node.

Nu gi tr kha ca nh x nh hn gi tr kha ti nh gc v cha c l con bn


tri th thc hin thm node vo nhnh bn tri.

Nu gi tr kha ca nh x ln hn gi tr kha ti nh gc v cha c l con bn


phi th thc hin thm node vo nhnh bn phi.

Thao tc tm kim nh trn cy nh phn tm kim: Gi s ta cn tm kim kha c gi


tr x trn cy nh phn tm kim, trc ht ta bt u t gc:

Nu cy rng: php tm kim khng tho mn;

Nu x trng vi kho gc: php tm kim tho mn;

Nu x nh hn kho gc th tm sang cy bn tri;

Nu x ln hn kho gc th tm sang cy bn phi;

Thao tc loi b nh (Remove): Vic loi b nh trn cy nh phn tm kim kh phc


tp. V sau khi loi b ta phi iu chnh li cy n vn l cy nh phn tm kim. Khi loi b
nh trn cy nh phn tm kim th nh cn loi b c th mt trong 3 trng hp sau:

Nu nh p cn loi l nh treo th vic loi b c thc hin ngay.

Nu node p cn xo c mt cy con th ta phi ly node con ca node p thay th cho p.

Nu nh p cn xo c cy con th ta xt: Nu nh cn xo pha cy con bn tri


th nh bn tri nht s c chn lm nh th mng, nu nh cn xo pha cy
con bn phi th nh bn phi nht s c chn lm node th mng.

7.2.2. Cy quyt nh
nh ngha. Cy quyt nh l cy c gc trong mi nh tng ng vi mt quyt nh;
mi cy con thuc nh ny tng ng vi mt kt cc hoc quyt nh c th c. Nhng li gii
c th c tng ng vi cc ng i t gc ti l ca n. Li gii ng vi mt trong cc ng
i ny.
V d 1. C 4 ng xu trong c 1 ng xu gi nh hn ng xu tht. Xc nh s ln cn
(thng bng) cn thit xc nh ng xu gi.
Gii. R rng ta ch cn hai ln cn xc nh ng xu gi v khi ta t bn ng xu ln
bn cn th ch c th xy ra hai kt cc: ng s 1,2 nh hn hoc nng hn ng s 3, 4. Thc
154

Chng 7: Cy (Tree)
hin quyt nh cn li ging nh trn cho hai ng xu nh hn ta xc nh c ng xu no l
gi. Hnh 7.3 di y s m t cy quyt nh gii quyt bi ton.
1

<
1

>

<

>
2

<

>

Hnh 7.3. Cy quyt nh gii quyt bi ton

V d 2. C tm ng xu trong c mt ng xu gi vi trng lng nh hn so vi 7


ng xu cn li. Nu s dng cn thng bng th cn mt t nht bao nhiu ln cn xc nh
ng xu gi.
Gii. Ta mt t nht hai ln cn xc nh ng xu gi. V nu ta t ln bn cn mi bn
cn ba ng xu th c ba kt cc c th xy ra. Hoc ba ng xu bn tri nh hn ba ng xu bn
phi, hoc ba ng xu bn tri nng hn ba ng xu bn phi hoc l chng thng bng. Kt cc
th nht cho ta xc nh chnh xc ng xu gi nm trong s ba ng xu bn tri v ta ch cn mt
mt ln cn tip theo xc nh ng xu no l ng xu gi. Kt cc th hai cho ta bit chnh
xc c ba ng xu bn phi l tht. Kt cc cn li cho ta bit chnh xc hai ng xu cn li c
mt ng xu gi v ta ch cn thc hin mt ln cn thng bng tip theo xc nh ng xu no
l gi. Hnh 7.4 di y cho ta cy quyt nh gii quyt bi ton.
1

<

<
4

>
4

>

<

>

=
6

>
5

<

Hnh 7.4. Cy quyt nh gii quyt bi ton.


7

155

Chng 7: Cy (Tree)

7.2.3. M tin t
Gi s ta cn m ha cc ch ci Latin vit hoa A, B,.., Z. Thng thng ngi ta dng 26
xu nh phn, mi xu 8 bt m ha mt ch ci. Do ch c 6 ch ci, nn ta ch cn dng 5 bt
m ha cho cc ch ci l . Vi cch lm ny, bng m y cc ch ci c cho nh
di y:
A

00000

01001

10010

00001

01010

10011

00010

01011

10100

00011

01100

10101

00100

01101

10110

00101

01110

10111

00110

01111

11000

00111

10000

11001

01000

10001

Theo bng m ny, xu k t S =BACBARA tng ng vi dy nh phn


S* =00001 00000 00010 00001 00000 10001 00000. Tng s bt cn m ha l 35.
Trong xu k t S =BACBARA ch ci A, B xut hin nhiu ln hn so vi C v R.
Trong vn bn, cc ch ci khc nhau xut hin vi tn xut khng ging nhau. Bng m v d
trn phn b di xu cho mi ch ci l ging nhau. Vn t ra l c th thay i bng m
sao cho ch ci no xut hin nhiu hn th dng s bt t hn khng?
Bng m vi di m thay i khng th xy dng mt cch ty tin. Chng hn, nu m
ha A bi 0, B bi 1, C bi 01, R bi 10, khi y xu BACBARA c m ha thnh
100110100. Nhng xu bt ny vi cng b m trn cng c th tng ng vi RABBCAA
hoc RCRRA.
Nu m ha A bi 0, B bi 10, R bi 110 v C bi 111, khi y xu k t S =BACBARA
c m ha thnh S* = 101111001100 s c mt cch duy nht gii m.
M c tnh cht m bo mi xu k t tng ng duy nht vi mt dy nh phn gi l m
tin t. M tin t c th biu din bng dy nh phn, trong
a. Cc k t l kha ca l trn cy.
b. Cnh d ti con bn tri c gn nhn 0.
c. Cnh dn n con bn phi c gn nhn 1.
Dy nh phn m ha mt k t l dy cc nhn ca cnh thuc ng i duy nht t gc ti
l tng ng.
156

Chng 7: Cy (Tree)
Qu trnh gii m c thc hin nh sau: i chiu dy nh phn S* v cy nh phn T lu
tr bng m, ln lt i t gc T theo ch th ca cc ch s trong dy nh phn S*, i theo cnh
phi nu bit ang xt c gi tr 1, i theo cnh tri nu bt ang xt c gi tr 0. Khi gp l th dng
li xc nh mt k t l kha ca l. Vic tm kim cc kha tip theo c lp li nh trn.
V d. Cy nh phn tng ng trong hnh 7.5 biu din bng m: A:0 C:111 B: 10 R: 110

A
0

Hnh 7.5. Cy m ha tin t cc k t ABRC

7.2.4. M Huffman
Bng m tin t m bo tnh duy nht khi m v gii m nhng khng hn tit kim.
Cn t chc li cy sao cho k t no xut hin nhiu ln hn th ng gn gc hn qu trnh
m ha ngn hn. Nhng vn ny c gii quyt trong m Huffman.
Thut ton xy dng bng m Huffman c thc hin nh sau: Tnh tn s xut hin ca cc
k t trong tp tin cn m ha. To cy nh phn c cc l l cc k t sao cho l mc cng ln th
k t cng t xut hin. Ni cch khc l ng i ti cc k t thng xuyn xut hin ngn. Khi
s bit ca xu m ha tng ng cng ngn. C th qu trnh c thc hin nh sau:
a. t cc k t trong vn bn S thnh cc l. Bc khi u, t cc nh l ny ngang
cp nhau. Gi tr ti mi nh l tn xut ca k t trong vn bn S.
b. Tm hai nh c gi tr nh nht, to mt nh mi c gi tr bng tng hai nh kia.
Loi hai phn t ng vi hai nh nh ra khi S v a phn t ng vi nh mi vo S.
Xem hai nh nh l hai nhnh con ca nh mi c khi to.
c. Lp li th tc b cho n khi trong danh sch S ch cn mt phn t.
d. Thay cc kha l bi cc k t tng ng.
V d. Xt xu k t S = heretherearetheorytheoretictheoreticaltheyare
a. Tnh s ln xut hin ca cc k t

157

Chng 7: Cy (Tree)
K t

S ln xut hin

12

b. Bc lp

Thay c v l bi mt k t #1 vi s ln xut hin l 3

K t

#1

S ln xut hin

12

Thay y v i bi mt k t #2 vi s ln xut hin l 4.

K t

#2

#1

S ln xut hin

12

Thay a v o bi mt k t #3 vi s ln xut hin l 6

K t

#3

#2

#1

S ln xut hin

12

Thay #1 v #2 bi mt k t #4 vi s ln xut hin l 7

K t

#3

#4

S ln xut hin

12

Thay h v 3 bi mt k t #5 vi s ln xut hin l 12

K t

#5

#4

S ln xut hin

12

12

Thay r v 7 bi mt k t #6 vi s ln xut hin l 14

K t

#6

#5

#4

S ln xut hin

12

14

12

Thay #4 v #5 bi mt k t #7 vi s ln xut hin l 19

K t

#6

#7

S ln xut hin

12

14

19

Thay #6 v e bi mt k t #8 vi s ln xut hin l 26

K t

#8

#7

S ln xut hin

26

19

158

Thay #7 v #8 bi mt k t #9 vi s ln xut hin l 45

Chng 7: Cy (Tree)
K t

#9

S ln xut hin

45

Cy nh phn m t bng m ca xu k t S c th hin nh trong hnh 7.6.


45
#9

0
26

19

#8

0
14

1
12

#6

#7

0
12

1
#4

#5

3
#1

7
0

6
a

#3

#2

6
0

4
i

0
1

Hnh 7.6. Cy nh phn m t bng m cho xu k t S


Bng m tng ng l
e:

01

a:

1000

i:

1101

r:

000

0:

1001

c:

1110

t:

001

y:

1100

l:

1111

h:

101

7.3. CY BAO TRM


nh ngha. Cho G l th v hng lin thng. Ta gi th con T ca G l mt cy bao
trm hay cy khung nu T tho mn hai iu kin:
a. T l mt cy;
b. Tp nh ca T bng tp nh ca G.
tm mt cy bao trm trn th v hng lin thng, c th s dng k thut tm kim
theo chiu rng hoc tm kim theo chiu su thc hin. Gi s ta cn xy dng mt cy bao
trm xut pht ti nh u no . Trong c hai trng hp, mi khi ta n c nh v tc
(chuaxet[v] = true) t nh u th cnh (u,v) c kt np vo cy bao trm. Hai k thut ny c
th hin trong hai th tc STREE_DFS(u) v STREE_BFS(v) nh sau:
void STREE_DFS( int u){

159

Chng 7: Cy (Tree)
/* Tm kim theo chiu su, p dng cho bi ton xy dng cy bao trm ca th v
hng lin thng G=<V, E>; cc bin chuaxet, Ke, T l ton cc */
chuaxet[u] = true;
for ( v Ke(u) ) {
if (chuaxet[v] ) {
T:= T (u,v);
STREE_DFS(v);
}
}
}
/* main program */
{
for ( uV )
chuaxet[u]:= true;
T = ;
STREE_DFS(root); /* root l mt nh no ca th*/
}
void STREE_BFS(int u){
QUUE=;
QUEUE<= u; /* a u vo hng i*/
chuaxet[u] = false;
while (QUEUE ) {
v<= QUEUE; /* ly v khi hng i */
for ( p Ke(v) ) {
if (chuaxet[u]) {
QUEUE<= u; chuaxet[u]:= false;
T = T(v, p);
}
}
}
}
/* Main program */

160

Chng 7: Cy (Tree)
{
for ( u V )
chuaxet[u] = true;
T = ;
STREE_BFS(root);
}

Chng trnh xy dng mt cy bao trm c th hin nh sau:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define

TRUE

#define FALSE

1
0

int CBT[MAX][2], n, A[MAX][MAX], chuaxet[MAX], sc, QUEUE[MAX];


void Init(void){
int i, j;FILE *fp;
fp= fopen("BAOTRUM1.IN", "r");
if(fp==NULL){
printf("\n Khong co file input");
getch(); return;
}
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d", n);
printf("\n Ma tran ke:");
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp, "%d", &A[i][j]);
printf("%3d", A[i][j]);
}

161

Chng 7: Cy (Tree)
}
fclose(fp);
for (i=1; i<=n;i++)
chuaxet[i]=TRUE;
}
void STREE_DFS(int i){
int j;
if(sc==n-1) return;
for(j=1; j<=n; j++){
if (chuaxet[j] && A[i][j]){
chuaxet[j]=FALSE; sc++;
CBT[sc][1]=i; CBT[sc][2]=j;
if(sc==n-1) return;
STREE_DFS(j);
}
}
}
void Result(void){
int i, j;
for(i=1; i<=sc; i++){
printf("\n Canh %d:", i);
for(j=1; j<=2; j++)
printf("%3d", CBT[i][j]);
}
getch();
}
void STREE_BFS(int u){
int dauQ, cuoiQ, v, p;
dauQ=1; cuoiQ=1; QUEUE[dauQ]=u;chuaxet[u]=FALSE;
while(dauQ<=cuoiQ){
v= QUEUE[dauQ]; dauQ=dauQ+1;
for(p=1; p<=n; p++){

162

Chng 7: Cy (Tree)
if(chuaxet[p] && A[v][p]){
chuaxet[p]=FALSE; sc++;
CBT[sc][1]=v; CBT[sc][2]=p;
cuoiQ=cuoiQ+1;
QUEUE[cuoiQ]=p;
if(sc==n-1) return;
}
}
}
}
void main(void){
int i; Init(); sc=0; i=1; chuaxet[i]=FALSE; /* xy dng cy bao trm ti nh 1*/
STREE_BFS(i); /* STREE_DFS(i) */
Result(); getch();
}

7.4. TM CY BAO TRM NGN NHT


Bi ton tm cy bao trm nh nht l mt trong nhng bi ton ti u trn th c ng
dng trong nhiu lnh vc khc nhau ca thc t. Bi ton c pht biu nh sau:
Cho G=<V, E> l th v hng lin thng vi tp nh V = {1, 2,..., n } v tp cnh E
gm m cnh. Mi cnh e ca th c gn vi mt s khng m c(e) c gi l di ca n.
Gi s H=<V, T> l mt cy bao trm ca th G. Ta gi di c(H) ca cy bao trm H l
tng di cc cnh: c( H ) = c(e) . Bi ton c t ra l, trong s cc cy khung ca th
eT

hy tm cy khung c di nh nht ca th.


minh ha cho nhng ng dng ca bi ton ny, chng ta c th tham kho hai m hnh
thc t ca bi ton.
Bi ton ni mng my tnh. Mt mng my tnh gm n my tnh c nh s t 1, 2,...,
n. Bit chi ph ni my i vi my j l c[i, j], i, j = 1, 2,..., n. Hy tm cch ni mng sao cho chi
ph l nh nht.
Bi ton xy dng h thng cable. Gi s ta mun xy dng mt h thng cable in thoi
ni n im ca mt mng vin thng sao cho im bt k no trong mng u c ng truyn tin
ti cc im khc. Bit chi ph xy dng h thng cable t im i n im j l c[i,j]. Hy tm
cch xy dng h thng mng cable sao cho chi ph l nh nht.
163

Chng 7: Cy (Tree)
gii bi ton cy bao trm nh nht, chng ta c th lit k ton b cy bao trm v chn
trong s mt cy nh nht. Phng n nh vy thc s khng kh thi v s cy bao trm ca
th l rt ln c nn-2, iu ny khng th thc hin c vi th vi s nh c chc.
tm mt cy bao trm chng ta c th thc hin theo cc bc nh sau:

Bc 1. Thit lp tp cnh ca cy bao trm l . Chn cnh e = (i, j) c di nh


nht b sung vo T.

Bc 2. Trong s cc cnh thuc E \ T, tm cnh e = (i1, j1) c di nh nht sao


cho khi b sung cnh vo T khng to nn chu trnh. thc hin iu ny,
chng ta phi chn cnh c di nh nht sao cho hoc i1 T v j1 T, hoc j1 T
v i1 T.

Bc 3. Kim tra xem T n-1 cnh hay cha? Nu T n-1 cnh th n chnh
l cy bao trm ngn nht cn tm. Nu T cha n-1 cnh th thc hin li bc 2.

V d. Tm cy bao trm nh nht ca th trong hnh 7.7.

20

33

18

16

17

6
14

Hnh 7.7. th v hng lin thng G=<V, E>

Bc 1. t T=. Chn cnh (3, 5) c di nh nht b sung vo T.


Buc 2. Sau ba ln lp u tin, ta ln lt b sung vo cc cnh (4,5), (4, 6). R rng, nu
b sung vo cnh (5, 6) s to nn chu trnh v nh 5, 6 c mt trong T. Tnh hung tng t
cng xy ra i vi cnh (3, 4) l cnh tip theo ca dy. Tip , ta b sung hai cnh (1, 3), (2, 3)
vo T.
Buc 3. Tp cnh trong T n-1 cnh: T={ (3, 5), (4,6), (4,5), (1,3), (2,3)} chnh l cy
bao trm ngn nht.
Chng trnh tm cy bao trm ngn nht c th hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

164

Chng 7: Cy (Tree)
#include <math.h>
#include <dos.h>
#define MAX 50
#define

TRUE

#define FALSE

1
0

int E1[MAX], E2[MAX], D[MAX], EB[MAX], V[MAX];/*


u ca cc cnh;

E1

E2

: Lu tr tp nh cui ca cc cnh;

: di cc cnh;

EB

: Tp cnh cy bao trm ;

: Tp nh ca th cng l tp nh ca cy bao trm;

: Lu tr tp nh

*/
int i, k, n, m, sc, min, dai;
FILE *fp;
void Init(void){
fp=fopen("BAOTRUM.IN","r");
if(fp==NULL){
printf("\n Khong co file Input");
getch(); return;
}
fscanf(fp, "%d%d", &n,&m);
printf("\n So dinh do thi:%d",n);
printf("\n So canh do thi:%d", m);
printf("\n Danh sach canh:");
for (i=1; i<=m; i++){
fscanf(fp,"%d%d%d", &E1[i],&E2[i], &D[i]);
printf("\n%4d%4d%4d",E1[i], E2[i], D[i]);
}
fclose(fp);
for(i=1; i<=m; i++) EB[i]=FALSE;
for(i=1; i<=n; i++) V[i]= FALSE;
}

165

Chng 7: Cy (Tree)
void STREE_SHORTEST(void){
/* Giai on 1 ca thut ton l tm cnh k c di nh nht*/
min = D[1]; k=1;
for (i=2; i<=m; i++) {
if(D[i]<min){
min=D[i]; k=i;
}
}
/* Kt np cnh k vo cy bao trm*/
EB[k]=TRUE; V[E1[k]]=TRUE; V[E2[k]]=TRUE;sc=1;
do {
min=32000;
for (i=1; i<=m; i++){
if (EB[i]==FALSE && (
( (V[E1[i]]) && (V[E2[i]]==FALSE))||
( ( V[E1[i]]==FALSE ) && (V[E2[i]]==TRUE ) ) )
&& (D[i]<min) ){
min=D[i]; k=i;
}
}
/* Tm k l cnh nh nht tha mn iu kin nu kt np
cnh vo cy s khng to nn chu trnh*/
EB[k]=TRUE;V[E1[k]]=TRUE; V[E2[k]]=TRUE;sc=sc+1;
}while(sc!=(n-1));
}
void Result(void){
printf("\n Cay bao trum:");
dai=0;
for (i=1; i<=m; i++){
if(EB[i]){
printf("\n Canh %4d %4d dai %4d", E1[i], E2[i], D[i]);
dai=dai+D[i];

166

Chng 7: Cy (Tree)
}
}
printf("\n Do dai cay bao trum:%d", dai);
}
void main(void){
Init();
STREE_SHORTEST();
Result();
getch();
}

7.5. THUT TON KRUSKAL


Thut ton s xy dng tp cnh T ca cy khung nh nht H=<V, T> theo tng bc nh sau:
a. Sp xp cc cnh ca th G theo th t tng dn ca trng s cnh;
b. Xut pht t tp cnh T=, mi bc, ta s ln lt duyt trong danh sch cc cnh
c sp xp, t cnh c trng s nh n cnh c trng s ln tm ra cnh m khi
b sung n vo T khng to thnh chu trnh trong tp cc cnh c b sung vo T
trc ;
c. Thut ton s kt thc khi ta thu c tp T gm n-1 cnh.
Thut ton c m t thng qua th tc Kruskal nh sau:
void

Kruskal(void){

T = ;
While ( | T | < (n-1) and (E ) ){
Chn cnh e E l cnh c di nh nht;
E:= E\ {e};
if (T {e}: khng to nn chu trnh )
T = T {e};
}
if ( | T | <n-1)
th khng lin thng;
}

Chng trnh tm cy khung nh nht theo thut ton Kruskal c th hin nh sau:
167

Chng 7: Cy (Tree)
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define

TRUE

#define FALSE

1
0

int n, m, minl, connect;


int dau[500],cuoi[500], w[500];
int daut[50], cuoit[50], father[50];
void Init(void){
int i; FILE *fp;
fp=fopen("baotrum1.in","r");
fscanf(fp, "%d%d", &n,&m);
printf("\n So dinh do thi:%d", n);
printf("\n So canh do thi:%d", m);
printf("\n Danh sach ke do thi:");
for(i=1; i<=m;i++){
fscanf(fp, "%d%d%d", &dau[i], &cuoi[i], &w[i]);
printf("\n Canh %d: %5d%5d%5d", i, dau[i], cuoi[i], w[i]);
}
fclose(fp);getch();
}
void Heap(int First, int Last){
int j, k, t1, t2, t3;
j=First;
while(j<=(Last/2)){
if( (2*j)<Last && w[2*j + 1]<w[2*j])
k = 2*j +1;
else
k=2*j;

168

Chng 7: Cy (Tree)
if(w[k]<w[j]){
t1=dau[j]; t2=cuoi[j]; t3=w[j];
dau[j]=dau[k]; cuoi[j]=cuoi[k]; w[j]=w[k];
dau[k]=t1; cuoi[k]=t2; w[k]=t3;
j=k;
}
else j=Last;
}
}
int Find(int i){
int tro=i;
while(father[tro]>0)
tro=father[tro];
return(tro);
}
void Union(int i, int j){
int x = father[i]+father[j];
if(father[i]>father[j]) {
father[i]=j;
father[j]=x;
}
else {
father[j]=i;
father[i]=x;
}
}
void Krusal(void){
int i, last, u, v, r1, r2, ncanh, ndinh;
for(i=1; i<=n; i++)
father[i]=-1;
for(i= m/2;i>0; i++)
Heap(i,m);

169

Chng 7: Cy (Tree)
last=m; ncanh=0; ndinh=0;minl=0;connect=TRUE;
while(ndinh<n-1 && ncanh<m){
ncanh=ncanh+1;
u=dau[1]; v=cuoi[1];
r1= Find(u); r2= Find(v);
if(r1!=r2) {
ndinh=ndinh+1; Union(r1,r2);
daut[ndinh]=u; cuoit[ndinh]=v;
minl=minl+w[1];
}
dau[1]=dau[last];
cuoi[1]=cuoi[last];
w[1]=w[last];
last=last-1;
Heap(1, last);
}
if(ndinh!=n-1) connect=FALSE;
}
void Result(void){
int i;
printf("\n Do dai cay khung nho nhat:%d", minl);
printf("\n Cac canh cua cay khung nho nhat:");
for(i=1; i<n; i++)
printf("\n %5d%5d",daut[i], cuoit[i]);
printf("\n");
}
void main(void){
clrscr(); Init();
Krusal();Result(); getch();
}

170

Chng 7: Cy (Tree)

7.6. THUT TON PRIM


Thut ton Kruskal lm vic km hiu qu i vi nhng th c s cnh khong m=n
(n-1)/2. Trong nhng tnh hung nh vy, thut ton Prim t ra hiu qu hn. Thut ton Prim cn
c mang tn l ngi lng ging gn nht. Trong thut ton ny, bt u ti mt nh tu s
ca th, ni s vi nh y sao cho trng s cnh c[s, y] l nh nht. Tip theo, t nh s hoc y
tm cnh c di nh nht, iu ny dn n nh th ba z v ta thu c cy b phn gm 3
nh 2 cnh. Qu trnh c tip tc cho ti khi ta nhn c cy gm n-1 cnh, chnh l cy
bao trm nh nht cn tm.
Trong qu trnh thc hin thut ton, mi bc, ta c th nhanh chng chn nh v cnh
cn b sung vo cy khung, cc nh ca th c s c gn cc nhn. Nhn ca mt nh v
gm hai phn, [d[v], near[v]]. Trong , phn th nht d[v] dng ghi nhn di cnh nh nht
trong s cc cnh ni nh v vi cc nh ca cy khung ang xy dng. Phn th hai, near[v] ghi
nhn nh ca cy khung gn v nht. Thut ton Prim c m t thng qua th tc sau:
void Prim (void){
/*bc khi to*/
Chn s l mt nh no ca th;
VH = { s }; T = ; d[s] = 0; near[s] = s;
For ( v V\VH ) {
D[v] = C[s, v]; near[v] = s;
}
/* Bc lp */
Stop = False;
While ( not stop ) {
Tm u V\VH tho mn: d[u] = min { d[v] vi uV\VH};
VH = VH {u}; T = T (u, near[u] );
If ( | VH |) == n ) {
H = <VH, T> l cy khung nh nht ca th;
Stop = TRUE;
}
Else {
For ( v V\VH ) {
If (d[v] > C[u, v]) {
D[v] = C[u, v];
Near[v] = u;

171

Chng 7: Cy (Tree)
}
}
}
}
}

Chng trnh ci t thut ton Prim tm cy bao trm nh nht c thc hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define

TRUE

#define FALSE

#define MAX

10000

int a[100][100];
int n,m, i,sc,w;
int chuaxet[100];
int cbt[100][3];
FILE *f;
void nhap(void){
int p,i,j,k;
for(i=1; i<=n; i++)
for(j=1; j<=n;j++)
a[i][j]=0;
f=fopen("baotrum.in","r");
fscanf(f,"%d%d",&n,&m);
printf("\n So dinh: %3d ",n);
printf("\n So canh: %3d", m);
printf("\n Danh sach canh:");
for(p=1; p<=m; p++){
fscanf(f,"%d%d%d",&i,&j,&k);
printf("\n %3d%3d%3d", i, j, k);

172

Chng 7: Cy (Tree)
a[i][j]=k; a[j][i]=k;
}
for (i=1; i<=n; i++){
printf("\n");
for (j=1; j<=n; j++){
if (i!=j && a[i][j]==0)
a[i][j]=MAX;
printf("%7d",a[i][j]);
}
}
fclose(f);getch();
}
void Result(void){
for(i=1;i<=sc; i++)
printf("\n %3d%3d", cbt[i][1], cbt[i][2]);
}
void PRIM(void){
int i,j,k,top,min,l,t,u;
int s[100];
sc=0;w=0;u=1;
for(i=1; i<=n; i++)
chuaxet[i]=TRUE;
top=1;s[top]=u;
chuaxet[u]=FALSE;
while (sc<n-1) {
min=MAX;
for (i=1; i<=top; i++){
t=s[i];
for(j=1; j<=n; j++){
if (chuaxet[j] && min>a[t][j]){
min=a[t][j];
k=t;l=j;

173

Chng 7: Cy (Tree)
}
}
}
sc++;w=w+min;
cbt[sc][1]=k;cbt[sc][2]=l;
chuaxet[l]=FALSE;a[k][l]=MAX;
a[l][k]=MAX;top++;s[top]=l;
printf("\n");
}
}
void main(void){
clrscr();
nhap();PRIM();
printf("\n Do dai ngan nhat:%d", w);
for(i=1;i<=sc; i++)
printf("\n %3d%3d", cbt[i][1], cbt[i][2]);
getch();
}

NHNG NI DUNG CN GHI NH


9

Cy l th v hng lin thng khng c chu trnh. Do vy, mi th v


hng lin thng u c t nht mt cy khung ca n.

Hiu cch biu din v ci t c cc loi cy: cy nh phn tm kim, cy quyt


nh, cy m tin t v cy m Huffman.

Nm vng phng php xy dng cy khung ca th bng hai thut ton duyt
theo chiu rng v duyt theo chiu su.

Hiu v ci t c cc thut ton Kruskal v Prim tm cy bao trm nh nht.

BI TP CHNG 7
Bi 1. Kim tra b m sau c phi l m tin t hay khng:
A

: 11

: 00

: 10

:01

Bi 2. Cho b m a:001, b:0001, e:1, s:0100, t: 011, r:0000, x:01010. Tm cc k t t dy m sau:


174

Chng 7: Cy (Tree)
01110100011, 0001110000, 01100101010, 0100101010,
0001001000100100000001001011010000101010001
Bi 3. Vit chng trnh sinh ra m tin t ca mt string bt k.
Bi 4. Vit chng trnh sinh ra m Huffman cho mt string bt k.
Bi 5. Vit chng trnh thc hin cc thut ton:
a. Xy dng cy khung ca th;
b. Xy dng tp cc chu trnh c bn ca th;
Bi 6. Cho th v hng G c cho bi danh sch cnh:
C

Tm cy khung nh nht ca G theo thut ton Kruskal, ch r kt qu trung gian theo tng
bc thc hin ca thut ton.
Bi 7. Cho th v hng G c cho bi danh sch cnh:
C

Tm cy khung nh nht ca G theo thut ton Prim, ch r kt qu trung gian theo tng
bc thc hin ca thut ton.
Bi 8. Cho th G cho bi ma trn trng s:

00
33
17
85
85

33
00
18
20
85

17
18
00
16
04

85
20
16
00
09

85
85
04
09
00

85
85
85
08
14

85 85 85 08 14 00
175

Chng 7: Cy (Tree)
Hy tm cy khung nh nht ca th bng thut ton Kruskal, ch r kt qu trung gian
theo tng bc thc hin ca thut ton.
Bi 9. Cho th G cho bi ma trn trng s:

00
33
17
85
85
85

33
00
18
20
85
85

17
18
00
16
04
85

85
20
16
00
09
08

85
85
04
09
00
14

85
85
85
08
14
00

Hy tm cy khung nh nht ca th bng thut ton Prim, ch r kt qu trung gian theo


tng bc thc hin ca thut ton.
Bi 10. p dng thut ton Prim tm cy khung nh nht ca th ca th sau, ly nh xut
pht l nh 1.

11

14

176

10

Chng 8: Mt s bi ton quan trng ca th

CHNG VIII: MT S BI TON QUAN TRNG


CA TH

Trong chng ny chng ta s cp n mt s bi ton quan trng ca l thuyt th.


Nhng bi ton ny khng ch c ngha n thun v l thuyt m cn c nhng ng dng quan
trng trong thc t. Nhiu ng dng khc nhau ca thc t c pht biu di dng ca cc bi
ton ny. Nhng bi ton c cp y gm:
9

Bi ton t mu th.

Bi ton tm ng i ngn nht.

Bi ton lung cc i trn mng.

Bn c c th tm thy thng tin v chng minh tnh ng n cng nh phc tp ca


cc thut ton thng qua ti liu [1], [2] ca ti liu tham kho.

8.1. BI TON T MU TH
nh ngha 1. Cho trc mt s nuyn dng p. Ta ni th G l p sc nu bng p mu
khc nhau c th t trn cc nh mi nh mt mu sao cho hai nh k nhau ty u c mu
khc nhau. S p nh nht m i vi s th G l p sc c gi l sc s ca th G v k
hiu bng (G).
Nh vy, sc s ca mt th l s mu t nht cn dng t trn cc nh ca th
(mi nh mt mu) sao cho hai nh k nhau ty c t bn hai mu khc nhau.
nh nha 2. Sc lp l s mu t nht cn dng t trn cc cnh ca th mi cnh mt
mu sao cho hai cnh k nhau ty c t bng hai mu khc nhau.
Ta c th chuyn bi ton sc lp v bi ton sc s bng cch: i vi mi th G = < V,
E> xy dng th G = <V, E>, trong mi nh thuc V l mt cnh ca G, cn E c
xc nh nh sau:
E ={ (v, v)| u, u V} v hai cnh l k nhau.
Ni cch khc, ta to th G trong mi cnh ca n tr thnh mt nh ca th, hai
cnh k nhau trong G s c mt ng ni gia hai nh ca th trong G. Bng cch ny ta d
dng thy rng sc s ca G bng sc lp ca G. Hnh 8.1 di y minh ha sc s ca G bng
sc s ca G.

177

Chng 8: Mt s bi ton quan trng ca th


1

4
3

th G=<V,E>

th G =<V, E>

Hnh 8.1. Sc s G bng sc lp ca G


Di y l mt s tnh cht ca sc s, bn c c th tm thy chng minh chi tit ca n
trong [3].
nh l 1. Mt chu trnh di l lun c sc s bng 3.
nh l 2. th G =<U, V> vi t nht mt cnh l th hai sc khi v ch khi khng c
chu trnh di l.
H qu: Tt c cc chu trnh di chn u c sc s bng 2.
nh l 3. th y vi n nh lun c sc s bng n.
nh l 4. nh l bn mu. S mu ca th phng khng bao gi ln hn 4.
Thut ton t mu th n:

Bc 1. Sp xp cc nh v1, v2,..,vn theo th t gim dn ca bc cc nh:


deg(v1) deg(v2)..deg(vn).

Bc 2. Gn mu 1: cho v1; cc nh tip theo trong danh sch khng lin k vi v1


(nu n tn ti) v cc nh khng k vi nh c mu 1.

Bc 3. Gn mu 2 cho nh tip theo trong danh sch cn cha c t mu v cc


nh khng k vi cc nh c mu 2. Nu vn cn cc nh cha c t mu th
gn mu 3 cho cc nh u tin cha c t mu trong danh sch v cc nh
cha t mu khng lin k vi cc nh c mu 3.

Bc 4. Tip tc lp li bc 3 cho n khi cc nh c t mu.

8.2. BI TON TM LUNG CC I TRN MNG


Bi ton. Cho mt c hn G = <V, E>, V = { x1, x2,.., xn}. Vi mi cung (xi, xj) c mt
s qij gi l kh nng thng qua ca cung. th c hai nh c bit: nh s gi l nh pht, nh
t gi l nh thu. Tp hp cc s zij xc nh trn cc cung (xi,xj)E gi l lung trn cc cung nu
tha mn:

178

Chng 8: Mt s bi ton quan trng ca th

z ij z ki = v

x j ( xi )
x j 1 ( xi )
0

nu x = s,
nu x = t,
cho cc nh cn li.

0 zij qij vi mi (i,j) V

Trong , (xi) l tp hp cc cung i ra khi xi, -1(xi) l tp hp cc cung i ra khi xi. Gi


tr v c gi l gi tr lung. Bi ton c t ra l tm lung c gi tr v ln nht.
Thut ton Ford-Fullkerson: T tng thut ton c bt u t mt lung chp nhn no
(c th l lung c gi tr 0), sau ta thc hin tng lung bng cch tm cc ng i tng
lung. tm ng i tng lung ta p dng phng php nh du cc nh. Nhn ca mt
nh s ch ra theo cc cun no c th tng lung v tng c bao nhiu. Mi khi tm c n
i tng lung, ta tng lung theo ng i , sau xa ht tt c cc nhn v s dng lung
mi thu c nh du li cc nh. Thut ton kt thc khi khng tm ng i tng lung
no c.
Khi xt cc nh ca th, mi nh ca mng s mt trong ba trng thi: nh cha c
nhn, nh c nhn nhng cha c xt n, nh c nhn v xt. Nhn ca mt nh xi gm
c hai phn thuc mt trong hai dng sau:

Dng th nht: (+xj, (xi)), c ngha l c th tng lung theo cung (xj, xi) vi
lng ln nht l (xi).

Dng th 2: (-xj, (xi)), c ngha l c th gim lung theo cung (xj, xi) vi lng
ln nht l (xi).

Qu trnh gn nhn cho nh tng ng vi th tc tm ng i tng lung t s n x.


Thut ton gn nhn c thc hin thng qua cc bc sau:
Bc 1. nh du nh s bi nhn (+s,+). nh s l nh c nhn v cha xt, tt c cc
nh cn li u cha c nhn.
Bc 2. Chn mt nh c nhn nhng cha xt, chng hn nh xi, vi nhn l (xk, (xi)).
i vi nh xi ny ta xc nh hai tp:
K+(xi) = { xj: xj (xi), zij <qij, xj cha c nhn}
K-(xi) = { xj: xj -1(xi), zji >0, xj cha c nhn}
Vi mi nh xj K+(xi) ta gn cho nhn (-xi, (xj)), trong (xj) = min { (xi), zij}.
Vi mi nh xj K-(xi) ta gn cho nhn (-xi, (xj)), trong (xj) = min { (xi), zji}.
By gi nh xi c nhn v xt, cn cc nh xjK+(xi) v xjK-(xj) c nhn nhng
cha c xt.
Bc 3. Lp li bc 2 cho n khi mt tron hai kh nng sau xy ra:

nh t c nh du, chuyn sang bc 4.


179

Chng 8: Mt s bi ton quan trng ca th

nh t khng c nhn v khng th nh du tip tc c na. Khi lung ang


xt l lung cc i. Nu k hiu X0 l tp cc nh c nhn, Y0 l tp cc nh
khng c nhn th (X0,Y0) s l lt ct hp nht. Thut ton dng.

Bc 4. t x=t.
Bc 5. Tin hnh tng lung:

Nu nh x c nhn l (+u, (x)) th tng lung theo cung (u,x) t z(u,x) ln z(u,x)+
(t).

Nu nh x c nhn l (-u, (x)) th gim lng vn chuyn trn cung (u,x) t z(u,x)
xung cn (z(u,x)- (t)).

Bc 6. Nu u=s th xa tt c cc nhn v quay li bc 1 vi lung iu chnh bc


5. Nu us th t x=u v quay li bc 5.
V d. Tm lung cc i ca th G=<V,E> c cho nh di y.
x3
4

x1

x4
2

2
2

x2

x6

x5

Hnh 8.2. Mng G=<V,E>


Gii. K kiu Vx l tp cc nh c nhn v xt, Vc l tp cc nh c nhn nhng cha xt.
Ln lp s 1. Xut pht t lung zij =0 vi mi i,j
Bc 1. Gn nhn cho x1 l (+x1, ). Ta c Vx=, Vc = {x1}.
Bc 2. Xt nh x1, ta c
K+(x1) = { x2, x3}, K-(x1) = .
Nhn ca x2 l {+x1, min(, 2-0)}=(+x1,2).
Nhn ca x3 l {+x1, min(, 4-0)}=(+x1,4).
Hai tp Vx = {x1}, Vc={ x2, x3}
Bc 2. chn nh x2 xt, ta c
K+(x2) = { x4, x5}, K-(x2) = .
Nhn ca x4 l {+x2, min(2, 4-0)}=(+x2,2).
180

Chng 8: Mt s bi ton quan trng ca th


Nhn ca x5 l {+x2, min(2, 2-0)}=(+x2,2).
Hai tp Vx = {x1, x2 }, Vc={ x3, x4, x5 }.
Bc 2. xt nh x4, ta c
K+(x4) = { x6}, K-(x4) = .
Nhn ca x6 l {+x4, min(2, 2-0)}=(+x4,2).
nh t = x6 c gn nhn.
Bc 4. t x = t.
Bc 5. nh x = x6 c nhn l (+u, (x))= (+x4,2). Tng lung trn cung ( x4, x6 ) t 0 ln
0+(t)=2.
Bc 6. V u=x4 s nn t x= x4.
Bc 5. nh x= x4 c nhn l (+u, (x)) =(+x2,2). Tng lung trn cung (x2,x4) t 0 ln 0
+(t)=2.
Bc 6. V u = x2 s nn t x = x2.
Bc 5. nh x = x2 c nhn (+u, (x)) =(+x1, 2). Tng lung trn cung (x1,x2) t 0 ln
0+(t)=2.
Bc 6. V u = x1 =s nn xa tt c cc nhn v quay li bc 1.
Ln lp th 2:
Bc 1. Gn nhn cho x1 l (+x1,), Vx=, Vc= {x1}.
Bc 2. Xt nh x1, ta c
K+(x1) = { x3}, K-(x1) = .
Nhn ca x3 l {+x1, min(, 4-0)}=(+x1,4).
Hai tp Vx = {x1}, Vc={ x3}.
Bc 2. xt nh x3, ta c
K+(x3) = { x4, x5}, K-(x3) = .
Nhn ca x6 l {+x3, min(4, 1-0)}=(+x3,1).
nh t = x6 c gn nhn.
Bc 4. t x = t.
Bc 5. nh x = x6 c nhn l (+u, (x))= (+x3,1). Tng lung trn cung ( x3, x6 ) t 0 ln
0+(t)=1.
Bc 6. V u=x3 s nn t x= x3.
181

Chng 8: Mt s bi ton quan trng ca th


Bc 5. nh x= x3 c nhn l (+u, (x)) =(+x1,4). Tng lung trn cung (x1,x3) t 0 ln 0
+(t)=1.
Bc 6. V u = x1 =s nn xa tt c cc nhn v quay li bc 1.
Ln lp th 3:
Bc 1. Gn nhn cho x1 l (+x1,), Vx=, Vc= {x1}.
Bc 2. Xt nh x1, ta c
K+(x1) = { x3}, K-(x1) = .
Nhn ca x3 l {+x1, min(, 4-1)}=(+x1,3).
Hai tp Vx = {x1}, Vc={ x3}.
Bc 2. Xt nh x3, ta c
K+(x3) = { x4}, K-(x3) = .
Nhn ca x4 l {+x3, min(3, 4-0)}=(+x3,3).
Hai tp Vx = {x1, x3}, Vc={ x4}.
Bc 2. Xt nh x4, ta c
K+(x4) = , K-(x4) = {x2}.
Nhn ca x2 l {-x4, min(3, 2)}=(-x4,2).
Hai tp Vx = {x1, x3, x4}, Vc={ x2}.
Bc 2. Xt nh x2, ta c
K+(x2) = {x5}, K-(x2) = .
Nhn ca x5 l {+x2, min(3, 2-0}=(x2,2 ).
Hai tp Vx = {x1, x3, x4,x2}, Vc={ x5}.
Bc 2. Xt nh x5, ta c
K+(x5) = {x6}, K-(x5) = .
Nhn ca x6 l {+x5, 2). nh t = x6 c gn nhn.
Dng bc 4, 5 v 6 ta tm c ng i tng lung l:
x1 x3 x4 x2 x5 x6
Trn cc cung thun ta tng vn chuyn ln mt lng l (t) = 2, trn cung ngc ta gim
vn chuyn i mt lng l (t).
Ln lp th 4:
182

Chng 8: Mt s bi ton quan trng ca th


Bc 1. Gn nhn cho x1 l (+x1,), Vx=, Vc= {x1}.
Bc 2. Xt nh x1, ta c
K+(x1) = { x3}, K-(x1) = .
Nhn ca x3 l {+x1, 1}.
Hai tp Vx = {x1}, Vc={ x3}.
Bc 2. Xt nh x3, ta c
K+(x3) = { x4}, K-(x3) = .
Nhn ca x4 l {+x3, min(1, 4-2)}=(+x3,1).
Hai tp Vx = {x1, x3}, Vc={ x4}.
Bc 2. Xt nh x4, ta c
K+(x4) = , K-(x4) = .
Ti bc ny ta khng th nh nhn tip tc c na, nh t =x6 khng c gn nhn.
Vy lung lung ch ra nh trn l lung cc i. Lt ct hp nht l
X0 = {x1, x3, x4}, Y0= {x2, x5, x6}.

8.3. BI TON TM NG I NGN NHT


Xt th G=<V, E>; trong | V| = n, | E | = m. Vi mi cnh (u, v)E, ta t tng ng
vi n mt s thc A<u,v> c gi l trng s ca cnh. Ta s t A[u,v]= nu (u, v)E. Nu
dy v0, v1,..., vk l mt ng i trn G th

i =1

A[vi 1 , vi ] c gi l di ca ng i.

Bi ton tm ng i ngn nht trn th di dng tng qut c th c pht biu di


dng sau: tm ng i ngn nht t mt nh xut pht sV (nh ngun) n nh cui tV
(nh ch). ng i nh vy c gi l ng i ngn nht t s n t, di ca ng i
d(s,t) c gi l khong cch ngn nht t s n t (trong trng hp tng qut d(s,t) c th m).
Nu nh khng tn ti ng i t s n t th di ng i d(s,t)=. Nu nh mi chu trnh
trong th u c di dng th trong ng i ngn nht s khng c nh no b lp li,
ng i nh vy c gi l ng i c bn. Nu nh th tn ti mt chu trnh no c
di m, th ng i ngn nht c th khng xc nh, v ta c th i qua chu trnh m mt s
ln ln di ca n nh hn bt k mt s thc cho trc no.

8.3.1. Thut ton gn nhn


C rt nhiu thut ton khc nhau c xy dng tm ng i ngn nht. Nhng t
tng chung ca cc thut ton c th c m t nh sau:
T ma trn trng s A[u,v], u,vV, ta tm cn trn d[v] ca khong cch t s n tt c cc
nh vV. Mi khi pht hin thy d[u] + A[u,v] < d[v] th cn trn d[v] s c lm tt ln bng
183

Chng 8: Mt s bi ton quan trng ca th


cch gn d[v] = d[u] + A[u, v]. Qu trnh s kt thc khi no ta khng th lm tt hn ln c
bt k cn trn no, khi d[v] s cho ta gi tr ngn nht t nh s n nh v. Gi tr d[v] c
gi l nhn ca nh v. V d di y th hin t tng trn bng mt thut ton gn nhn tng
qut nh sau:
V d. Tm ng i ngn nht t nh A n nh Z trn th hnh 8.3.
B

C
8

4
E

Z
5

Hnh 8.3. th trng s G

Bc 1. Gn cho nhn nh A l 0;

Bc 2. Trong s cc cnh (cung) xut pht t A, ta chn cnh c di nh nht,


sau gn nhn cho nh bng nhn ca nh A cng vi di cnh tng ng.
Ta chn c nh C c trng s AC = 5, nhn d[C] = 0 + 5 = 5.

Bc 3. Tip , trong s cc cnh (cung) i t mt nh c nhn l A hoc C ti mt


nh cha c gn nhn, ta chn cnh (cung) sao cho nhn ca nh cng vi trng
s cnh tng ng l nh nht gn cho nhn ca nh cui ca cnh (cung). Nh vy,
ta ln lt gn c cc nhn nh sau: d[B] = 6 v d[B] <d[C] + | CB| = 5 + 4; d[E]
= 8; Tip tc lm nh vy cho ti khi nh Z c gn nhn chnh l di ng
i ngn nht t A n Z. Thc cht, nhn ca mi nh chnh l ng i ngn nht t
nh ngun ti n. Qu trnh c th c m t nh trong bng di y.

Bc

nh c gn nhn

Nhn cc nh

Khi to

0+5=5

0+6=6

0+8=8

+4=9

+ 7 = 13

8 + 6 = 14

9 + 6 = 15

15 + 3 = 18

184

nh dng gn nhn

Chng 8: Mt s bi ton quan trng ca th


Nh vy, di ng i ngn nht t A n Z l 18. ng i ngn nht t A n Z qua
cc nh: A-> C-> D -> G -> Z.

8.3.2. Thut ton Dijkstra


Thut ton tm ng i ngn nht t nh s n cc nh cn li c Dijkstra ngh p
dng cho trng hp th c hng vi trng s khng m. Thut ton c thc hin trn c
s gn tm thi cho cc nh. Nhn ca mi nh cho bit cn trn ca di ng i ngn nht
ti nh . Cc nhn ny s c bin i (tnh li) nh mt th tc lp, m mi bc lp mt
s nh s c nhn khng thay i, nhn chnh l di ng i ngn nht t s n nh .
Thut ton c th c m t bng th tc Dijkstra nh sau:
void Dijkstra(void)
/*u vo G=(V, E) vi n nh c ma trn trng s A[u,v] 0; sV */
/*u ra l khong cch nh nht t s n cc nh cn li d[v]: vV*/
/*Truoc[v] ghi li nh trc v trong ng i ngn nht t s n v*/
{
/* Bc 1: Khi to nhn tm thi cho cc nh*/
for ( v V ) {
d[v] = A[s,v];
truoc[v]=s;
}
d[s]=0; T = V\{s}; /*T l tp nh c nhn tm thi*/
/* Bc lp */
while (T!= ) {
Tm nh uT sao cho d[u] = min { d[z] | zT};
T= T\{u}; /*c nh nhn nh u*/;
For ( vT ) { /* Gn li nhn cho cc nh trong T*/
If ( d[v] > d[u] + A[u, v] ) {
d[v] = d[u] + A[u, v];
truoc[v] =u;
}
}
}
}

185

Chng 8: Mt s bi ton quan trng ca th


Chng trnh ci t thut ton Dijkstra tm ng i ngn nht t mt nh n tt c cc
nh khc ca th c hng vi trng s khng m c thc hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define

TRUE

#define FALSE

1
0

int n, s, t;
char chon;
int truoc[MAX], d[MAX], CP[MAX][MAX];
int final[MAX];
void Init(void){
FILE * fp;int i, j;
fp = fopen(ijk1.in,r);
fscanf(fp,%d, &n);
printf(\n So dinh:%d,n);
printf(\n Ma tran khoang cach:);
for(i=1; i<=n;i++){
printf(\n);
for(j=1; j<=n;j++){
fscanf(fp, %d, &CP[i][j]);
printf(%3d,CP[i][j]);
if(CP[i][j]==0) CP[i][j]=32000;
}
}
fclose(fp);
}
void Result(void){
int i,j;

186

Chng 8: Mt s bi ton quan trng ca th


printf(\n Duong di ngan nhat tu %d den %d la\n, s,t);
printf(%d<=,t);
i=truoc[t];
while(i!=s){
printf(%d<=,i);
i=truoc[i];
}
printf(%d,s);
printf(\n Do dai duong di la:%d, d[t]);
getch();
}
void Dijkstra(void){
int v, u, minp;
printf(\n Tim duong di tu s=);scanf(%d, &s);
printf( den );scanf(%d, &t);
for(v=1; v<=n; v++){
d[v]=CP[s][v];
truoc[v]=s;
final[v]=FALSE;
}
truoc[s]=0;

d[s]=0;final[s]=TRUE;

while(!final[t]) {
minp=2000;
for(v=1; v<=n; v++){
if((!final[v]) && (minp>d[v]) ){
u=v;
minp=d[v];
}
}
final[u]=TRUE;// u- la dinh co nhan tam thoi nho nhat
if(!final[t]){
for(v=1; v<=n; v++){

187

Chng 8: Mt s bi ton quan trng ca th


if ((!final[v]) && (d[u]+ CP[u][v]< d[v])){
d[v]=d[u]+CP[u][v];
truoc[v]=u;
}
}
}

}
}
void main(void){
clrscr();Init();

Dijkstra();

Result(); getch();
}

8.3.3.Thut ton Floy


tm ng i ngn nht gia tt c cc cp nh ca th, chng ta c th s dng n ln
thut ton Ford_Bellman hoc Dijkstra (trong trng hp trng s khng m). Tuy nhin, trong
c hai thut ton c s dng u c phc tp tnh ton ln (ch t l O(n3)). Trong trng
hp tng qut, ngi ta thng dng thut ton Floy c m t nh sau:
void Floy(void)
/* Tm ng i ngn nht gia tt c cc cp nh*/
/*Input

th cho bi ma trn trng s a[i, j], i, j = 1, 2,..., n.*/

/*Output: - Ma trn ng i ngn nht gia cc cp nh d[i, j], i, j = 1, 2,...,n;


d[i,j] l di ngn nht t i n j.
Ma trn ghi nhn ng i p[i, j], i, j = 1, 2,..., n
p[i, j] ghi nhn nh i trc nh j trong ng i ngn nht;
*/
{
/*bc khi to*/
for (i=1; i n; i++) {
for (j =1; j n; j++) {
d[i,j] = a[i, j];
p[i,j] = i;

188

Chng 8: Mt s bi ton quan trng ca th


}
}
/*bc lp */
for (k=1; k n; k++) {
for (i=1; i n; i++){
for (j =1; j n; j++) {
if (d[i,j] > d[i, k] + d[k, j]) {
d[i, j] = d[i, k] + d[k, j];
p[i,j] = p[k, j];
}
}
}
}
}

Chng trnh ci t thut ton Foly tm ng i ngn nht gia tt c cc cp nh ca


th c th hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 10000
#define

TRUE

#define FALSE

1
0

int A[50][50], D[50][50], S[50][50];


int n, u, v, k;FILE *fp;
void Init(void){
int i, j, k;
fp=fopen(FLOY.IN,r);
if(fp==NULL){
printf(\n Khong co file input);
getch(); return;

189

Chng 8: Mt s bi ton quan trng ca th


}
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
A[i][j]=0;
fscanf(fp,%d%d%d,&n,&u,&v);
printf(\n So dinh do thi:%d,n);
printf(\n Di tu dinh:%d den dinh %d:,u,v);
printf(\n Ma tran trong so:);
for(i=1; i<=n; i++){
printf(\n);
for(j=1; j<=n; j++){
fscanf(fp,%d, &A[i][j]);
printf(%5d,A[i][j]);
if(i!=j && A[i][j]==0)
A[i][j]=MAX;
}
}
fclose(fp);getch();
}
void Result(void){
if(D[u][v]>=MAX) {
printf(\n Khong co duong di);
getch(); return;
}
else {
printf(\n Duong di ngan nhat:%d, D[u][v]);
printf(\n Dinh %3d, u);
while(u!=v) {
printf(%3d,S[u][v]);
u=S[u][v];
}
}

190

Chng 8: Mt s bi ton quan trng ca th


}
void Floy(void){
int i, j,k, found;
for(i=1; i<=n; i++){
for(j=1; j<=n;j++){
D[i][j]=A[i][j];
if (D[i][j]==MAX) S[i][j]=0;
else S[i][j]=j;
}
}
/* Mang D[i,j] la mang chua cac gia tri khoan cach ngan nhat tu i den j
Mang S la mang chua gia tri phan tu ngay sau cua i tren duong di
ngan nhat tu i->j */
for (k=1; k<=n; k++){
for (i=1; i<=n; i++){
for (j=1; j<=n; j++){
if (D[i][k]!=MAX && D[i][j]>(D[i][k]+D[k][j]) ){
// Tim D[i,j] nho nhat co the co
D[i][j]=D[i][k]+D[k][j];
S[i][j]=S[i][k];
//ung voi no la gia tri cua phan tu ngay sau i
}
}
}
}
}
void main(void){
clrscr();Init();
Floy();Result();
}

191

Chng 8: Mt s bi ton quan trng ca th

NHNG NI DUNG CN GHI NH


9

Nm vng khi nim sc s v sc lp ca th. Phng php chuyn bi ton


sc lp v bi ton tm sc s ca th.

Tm hiu phng php chng minh cc nh l v sc s ca th.

Hiu bi ton lung cc i v thut ton Ford-Fullkerson xy dng lung cc i


trn mng.

Hiu v phn bit thut ton Dijkstra & thut ton Floy trong khi tm ng i
ngn nht gia cc nh ca th.

BI TP CHNG 8
Bi 1. Chng minh rng trong khng gian c su ng thng, trong khng c ba ng
thng no ng qui ti mt im, khng c ba ng thng no ng phng v khng c ba
ng thng no song song, th nht nh c ba ng thng i mt cho nhau.
Bi 2. Mi by nh khoa hc mi ngi trao i th vi 16 ngi khc, trong th h ch
bn v 3 ti, nhng bt c hai nh khoa hc no cng ch bn vi nhau v mt trong ba ti
trn. Chng minh rng c t nht ba nh khoa hc bn vi nhau cng mt ti.
Bi 3. Cho th gm 7 nh cho bi ma trn trng s

00 11 65 17 65 65 65
65 00 12 65 65 10 16
65 65 00 13 14 65 19
65 65 65 00 65 65 18
65 65 65 65 00 65 15
65 13 18 65 65 00 10
65 65 65 65 65 65 00
Tm ng i ngn nht t nh 1 n nh 7. Yu cu ch r nhng kt qu trung gian
trong qu trnh thc hin thut ton.
Bi 4. Cho C s d liu ghi li thng tin v N Tuyn bay (N<=100) ca mt hng hng
khng. Trong , thng tin v mi tuyn bay c m t bi: im khi hnh (departure), im
n (destination), khong cch (lenght). Departure, destination l mt xu k t di khng qu
32, khng cha du trng gia, Length l mt s nh hn 32767.
Ta gi Hnh trnh bay t im khi hnh A ti im n B l dy cc hnh trnh [A, A1,
n1], [A1, A2, n2]...[Ak, B,nk] vi Ai l im n ca tuyn i nhng li l im khi hnh ca tuyn i
+1, ni l khong cch ca tuyn bay th i (1<=i<k). Trong , khong cch ca hnh trnh l tng
khong cch ca cc tuyn m hnh trnh i qua (n1+n2+..+nk).
192

Chng 8: Mt s bi ton quan trng ca th


Cho file d liu kiu text hanhtrinh.in c ghi theo tng dng, s cc dng trong file d
liu khng vt qu N, trn mi dng ghi li thng tin v mt tuyn bay, trong departure,
destination, length c phn bit vi nhau bi mt hoc vi du trng. Hy tm gii php tho
mn nhu cu ca khch hng i t A n B theo mt s tnh hung sau:
Tm hnh trnh c khong cch b nht t A n B. In ra mn hnh tng im m hnh trnh
qua v khong cch ca hnh trnh. Nu hnh trnh khng tn ti hy a ra thng bo Hnh
trnh khng tn ti.
V d v C s d liu hanhtrinh.in
New_York

Chicago

1000

Chicago

Denver

1000

New_York

Toronto

800

New_York

Denver

1900

Toronto

Calgary

1500

Toronto

Los_Angeles 1800

Toronto

Chicago

500

Denver

Urbana

1000

Denver

Houston

1500

Houston

Los_Angeles 1500

Denver

Los_Angeles 1000

Vi im i: New_York, im n: Los_Angeles ; chng ta s c kt qu sau:


Hnh trnh ngn nht:
New_York to Toronto to Los_Angeles; Khong cch: 2600.
Bi 5. K tc thnh cng vi khi lp phng thn b, Rubik sng to ra dng phng ca
tr chi ny gi l tr chi cc vung thn b. l mt bng gm 8 vung bng nhau nh
hnh 1. Chng ta qui nh trn mi vung c mt mu khc nhau. Cc mu c k hiu bi 8
s nguyn tng ng vi tm mu c bn ca mn hnh EGA, VGA nh hnh 1. Trng thi ca
bng cc mu c cho bi dy k hiu mu cc c vit ln lt theo chiu kim ng h bt
u t gc trn bn tri v kt thc gc di bn tri. V d: trng thi trong hnh 1 c
cho bi dy cc mu tng ng vi dy s (1, 2, 3, 4, 5, 6, 7, 8). Trng thi ny c gi l
trng thi khi u.
Bit rng ch cn s dng 3 php bin i c bn c tn l A, B, C di y bao gi
cng chuyn c t trng thi khi u v trng thi bt k:
A: i ch dng trn xung dng di. V d sau php bin i A, hnh 1 s tr thnh
hnh 2:
193

Chng 8: Mt s bi ton quan trng ca th


B: thc hin mt php hon v vng quanh t tri sang phi trn tng dng. V d sau
php bin i B hnh 1 s tr thnh hnh 3:
C: quay theo chiu kim ng h bn gia. V d sau php bin i C hnh 1 tr thnh
hnh 4:

Hnh 1

Hnh 2

Hnh 3

Hnh 4

Cho file d liu Input.txt ghi li 8 s nguyn trn mt dng, mi s c phn bit vi nhau
bi mt du trng ghi li trng thi ch. Hy tm dy cc php bin i s bn a trng thi
khi u v trng thi ch sao cho s cc php bin i l t nht c th c.
D liu ra c ghi li trong file Output.txt, dng u tin ghi li s cc php bin i,
nhng dng tip theo ghi li tn ca cc thao tc c bn thc hin, mi thao tc c bn c
vit trn mt dng.
Bn s c thm 20 im nu s dng bng mu thch hp ca mn hnh m t li cc
php bin i trng thi ca tr chi. V d vi trng thi ch di y s cho ta kt qu nh sau:
Input.txt
268 4 5 7 3 1

Output.txt
7
B
C
A
B
C
C
B

Bi 6. Cho mt mng thng tin gm N nt. Trong , ng truyn tin hai chiu trc tip
t nt i n nt j c chi ph truyn thng tng ng l mt s nguyn A[i,j] = A[j,i], vi
A[i,j]>=0, i j. Nu ng truyn tin t nt i1 n nt ik phi thng qua cc nt i2,.. ik-1 th chi
ph truyn thng c tnh bng tng cc chi ph truyn thng A[i1,i2], A[i2,i3],... A[ik-1,ik]. Cho
trc hai nt i v j. Hy tm mt ng truyn tin t nt i n nt j sao cho chi ph truyn thng
l thp nht.
D liu vo c cho bi file TEXT c tn INP.NN. Trong , dng th nht ghi ba s N, i,
j, dng th k + 1 ghi k-1 s A[k,1], A[k,2],.., A[k,k-1], 1<=k<=N.
194

Chng 8: Mt s bi ton quan trng ca th


Kt qu thng bo ra file TEXT c tn OUT.NN. Trong , dng th nht ghi chi ph
truyn thng thp nht t nt i n nt j, dng th 2 ghi ln lt cc nt trn ng truyn tin c
chi ph truyn thng thp nht t nt i ti nt j.
Bi 7. Cho mt mng thng tin gm N nt. Trong , ng truyn tin hai chiu trc tip t
nt i n nt j c chi ph truyn thng tng ng l mt s nguyn A[i,j] = A[j,i], vi A[i,j]>=0, i
j. Nu ng truyn tin t nt i1 n nt ik phi thng qua cc nt i2,.. ik-1 th chi ph truyn
thng c tnh bng tng cc chi ph truyn thng A[i1,i2], A[i2,i3],... A[ik-1,ik]. Bit rng, gia
hai nt bt k ca mng thng tin u tn ti t nht mt ng truyn tin.
tit kim ng truyn, ngi ta tm cch loi b i mt s ng truyn tin m vn
m bo c tnh lin thng ca mng. Hy tm mt phng n loi b i nhng ng truyn
tin, sao cho ta nhn c mt mng lin thng c chi ph ti thiu nht c th c.
D liu vo c cho bi file TEXT c tn INP.NN. Trong , dng th nht ghi s N,
dng th k + 1 ghi k-1 s A[k,1], A[k,2],.., A[k,k-1], 1<=k<=N.
Kt qu thng bo ra file TEXT c tn OUT.NN trong dng th nht ghi chi ph truyn
thng nh nht trong ton mng. T dng th 2 ghi ln lt cc nt trn ng truyn tin, mi
ng truyn ghi trn mt dng.

195

Mc lc

TI LIU THAM KHO

[1] Kenneth H. Rossen, Ton hc ri rc ng dng trong tin hc. Nh xut bn khoa hc k
thut, H Ni 1998.
[2] Nguyn c Ngha - Nguyn T Thnh, Ton ri rc. Nh xut bn i hc Quc Gia
H Ni, 2003.
[3] ng Huy Run, L thuyt th v ng dng. Nh xut bn khoa hc k thut, 2000.
[4] c Gio, Ton ri rc. Nh xut bn Khoa hc k thut H Ni, 2004.
[5] c Gio, Bi tp ton ri rc. Nh xut bn Khoa hc k thut H Ni, 2005.

196

Mc lc

MC LC
LI GII THIU ...................................................................................................................................................
U

CHNG I: NHNG KIN THC C BN ....................................................................................................


1.1. GII THIU CHUNG..................................................................................................................................
1.2. NHNG KIN THC C BN V LOGIC..............................................................................................
1.2.1. nh ngha & php ton .........................................................................................................................
1.2.2. S tng ng gia cc mnh .........................................................................................................
1.2.3. Dng chun tc.......................................................................................................................................
1.3. V T V LNG T...............................................................................................................................
1.4. MT S NG DNG TRN MY TNH.................................................................................................
1.5. NHNG KIN THC C BN V L THUYT TP HP ..................................................................
1.5.1. Khi nim & nh ngha.........................................................................................................................
1.5.2. Cc php ton trn tp hp.....................................................................................................................
1.5.3. Cc hng ng thc trn tp hp............................................................................................................
1.6. BIU DIN TP HP TRN MY TNH.................................................................................................
NHNG NI DUNG CN GHI NH...............................................................................................................
BI TP CHNG 1 ........................................................................................................................................
CHNG II: BI TON M V BI TON TN TI ...............................................................................
2.1. NHNG NGUYN L M C BN......................................................................................................
2.1.1. Nguyn l cng ......................................................................................................................................
2.1.2. Nguyn l nhn ......................................................................................................................................
2.2. NGUYN L B TR ...............................................................................................................................
2.3. M CC HON V T HP ...................................................................................................................
2.3.1. Chnh hp lp.........................................................................................................................................
2.3.2. Chnh hp khng lp..............................................................................................................................
2.3.3. Hon v...................................................................................................................................................
2.3.4. T hp....................................................................................................................................................
2.4. H THC TRUY HI.................................................................................................................................
2.4.1. nh ngha v v d................................................................................................................................
2.4.2. Gii cng thc truy hi tuyn tnh thun nht vi h s hng s ...........................................................
2.5. QUI TC V CC BI TON N GIN ..............................................................................................
2.6. PHNG PHP LIT K ..........................................................................................................................
2.7. BI TON TN TI ..................................................................................................................................
2.7.1. Gii thiu bi ton..................................................................................................................................

197

Mc lc
2.7.2. Phng php phn chng.......................................................................................................................
2.7.3. Nguyn l Dirichlet................................................................................................................................
NHNG NI DUNG CN GHI NH...............................................................................................................
BI TP CHNG 2 ........................................................................................................................................
CHNG III: BI TON LIT K....................................................................................................................
3.1. GII THIU BI TON.............................................................................................................................
3.2. QUI.........................................................................................................................................................
3.2.1. nh ngha bng qui ..........................................................................................................................
3.2.2. Gii thut qui.....................................................................................................................................
3.3. PHNG PHP SINH................................................................................................................................
3.4. THUT TON QUAY LUI (BACK TRACK) ...........................................................................................
NHNG NI DUNG CN GHI NH...............................................................................................................
BI TP CHNG 3 ........................................................................................................................................
CHNG IV: BI TON TI U ......................................................................................................................
U

4.1. GII THIU BI TON.............................................................................................................................


4.2. DUYT TON B ......................................................................................................................................
4.3. THUT TON NHNH CN....................................................................................................................
4.4. K THUT RT GN GII QUYT BI TON NGI DU LCH.....................................................
4.4.1.Th tc rt gn........................................................................................................................................
4.4.2.Th tc chn cnh phn nhnh (r,c)........................................................................................................
4.4.3.Thut ton nhnh cn gii bi ton ngi du lch ...................................................................................
NHNG NI DUNG CN GHI NH...............................................................................................................
BI TP CHNG 4 ........................................................................................................................................
CHNG V: NHNG KHI NIM C BN CA TH ..........................................................................
5.1. NH NGHA V KHI NIM .................................................................................................................
5.2. CC THUT NG C BN......................................................................................................................
5.3. NG I, CHU TRNH, TH LIN THNG ..................................................................................
5.4. BIU DIN TH TRN MY TNH....................................................................................................
5.4.1. Ma trn k, ma trn trng s ..................................................................................................................
5.4.2. Danh sch cnh (cung )..........................................................................................................................
5.4.3. Danh sch k ..........................................................................................................................................
NHNG NI DUNG CN GHI NH...............................................................................................................
BI TP CHNG 5 ........................................................................................................................................
CHNG VI: CC THUT TON TM KIM TRN TH ....................................................................
6.1. THUT TON TM KIM THEO CHIU SU (DFS).............................................................................
6.2. THUT TON TM KIM THEO CHIU RNG (Breadth First Search)................................................
6.3. DUYT CC THNH PHN LIN THNG CA TH ....................................................................
6.4. TM NG I GIA HAI NH BT K CA TH ....................................................................

198

Mc lc
6.5. NG I V CHU TRNH EULER .......................................................................................................
6.6. NG I V CHU TRNH HAMILTON...............................................................................................
NHNG NI DUNG CN GHI NH...............................................................................................................
BI TP CHNG 6 ........................................................................................................................................
CHNG 7. CY (TREE) ....................................................................................................................................
7.1. CY V MT S TNH CHT C BN.................................................................................................
7.2. MT S NG DNG QUAN TRNG CA CY...................................................................................
7.2.1. Cy nh phn tm kim ...........................................................................................................................
7.2.2. Cy quyt nh .......................................................................................................................................
7.2.3. M tin t ...............................................................................................................................................
7.2.4. M Huffman...........................................................................................................................................
7.3. CY BAO TRM........................................................................................................................................
7.4. TM CY BAO TRM NGN NHT .......................................................................................................
7.5. THUT TON KRUSKAL.........................................................................................................................
7.6. THUT TON PRIM..................................................................................................................................
NHNG NI DUNG CN GHI NH...............................................................................................................
BI TP CHNG 7 ........................................................................................................................................
CHNG 8. MT S BI TON QUAN TRNG CA TH ..................................................................
8.1. BI TON T MU TH ....................................................................................................................
8.2. BI TON TM LUNG CC I TRN MNG ..................................................................................
8.3. BI TON TM NG I NGN NHT..............................................................................................
8.3.1. Thut ton gn nhn...............................................................................................................................
8.3.2. Thut ton Dijkstra ................................................................................................................................
8.3.3.Thut ton Floy .......................................................................................................................................
NHNG NI DUNG CN GHI NH...............................................................................................................
BI TP CHNG 8 ........................................................................................................................................
TI LIU THAM KHO ......................................................................................................................................

199

TON RI RC
M s: 492TNC211 v 492TNC212
Chu trch nhim bn tho
TRUNG TM O TO BU CHNH VIN THNG 1
(Ti liu ny c ban hnh theo Quyt nh s: 374/Q-TTT1 ngy
22/05/2006 ca Gim c Hc vin Cng ngh Bu chnh Vin thng)

In ti : Cng ty c phn In Bu in
S lng : 2000 cun, kh 19 x 26 cm
Ngy hon thnh : 01/06/2006.

You might also like