Professional Documents
Culture Documents
------- -------
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.
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
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.
pq
pq
pq
pq
pq
p q
pq
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)
TN GI
pTp
Lut ng nht
pFp
pTT
Lut nut
pFF
ppp
Lut lu ng
ppp
(p) p
Lut ph nh kp
pqqp
pqqp
(p q) r p ( q r)
Lut kt hp
(p q) r p ( q r)
p ( q r) (p q ) (p r)
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 )
p [ (p) q
p [ p q ]
theo lut ph nh kp
(p p ) (p q)
F (p q)
v p p F
p q
p dng lut phn phi thay cc cng thc c dng (p(qr)) bi (pq)(pr).
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;
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
: Bn cao di 1.5m.
r l cu
: Bn trn 18 tui.
(q r) p
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
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
Mi tp hp l tp con ca chnh n.
16
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
n
Ai = A1 A 2 .. A n
i =1
17
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
Cc php ton hi, tuyn, tuyn loi, suy ra, ko theo ca logic mnh .
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)
20
a)
b)
c) ( X 1 X 2
Xn
X1 X1
Xn
X1 X 2
Xn
X1 X 2
Xn
d)
( 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
Cc nguyn l m c bn
Nguyn l b tr
Hon v v t hp
H thc truy hi
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.
22
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.
for in =1 to nm
k:=k +1
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
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 )
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!
10
11
Dn
44
265
1845
14833
133496
1334961
4890741
27
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.
n!
(n k )!
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 )
n!
=
(1)
k!
k!(n k )!
29
(2)
b. C(n, 0) = C(n,n)= 1
(3)
(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
+ =
( 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
S cp sinh sn
S cp th con
Tng s cp th
..
..
..
..
=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 nDn 1 = Vn = Vn 1 =
Dn
Dn 1
(1) n
=
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
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 +
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)
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
c1 a n 1 + c 2 a n 2
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:
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
35
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
c dng xc nh cc hng s 1, 2.
f 0 = 1 + 2 = 0
1 5
1+ 5
+2
f1 = 1
2 =1
1
5
; 2 =
1
5
do cc s fibonaci c cho
1 1+ 5
1 1 5
fn =
5 2
5 2
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
a n = 1 2 n + 2.3 n
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
a = (a 2 n1 a 2 n2
a1 a0 ) 2 v b = (b2 n 1b2 n 2
b1b0 ) 2
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
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
(*)
+ (1) n g (2n, n)
C (n k 1, k 1) + C (n k , k ) =
n
C (n k , k )
nk
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
10
Un
13
80
579
4783
43387
439792
...
n-1
...
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.
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
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
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
46
Nhng nguyn l m c bn: nguyn l cng, nguyn l nhn & nguyn l b tr.
Hiu phng php cch gii quyt bi ton m bng h thc truy hi.
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
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.
vi n 0, a0 = 2, a1 = 8.
Gii quyt bi ton lit k bng phng php quay lui da trn gii thut qui.
Khng c lp li mt cu hnh
Khng c b xt mt cu hnh
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.
50
S(1) = 1
S(2) = S(1) + 2
S(3) = S(2) + 3
............
S(n) = S(n - 1) + n
*, trong l xu rng
wx * nu w * v x *
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));
}
51
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:
53
#define FALSE
54
5
55
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.
Thay ai bi ai +1,
56
57
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:
i ch aj vi ak
s = s - 1;
}
}
20
#define TRUE
#define
FALSE 0
59
60
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
<stdio.h>
#include
<conio.h>
#include
<stdlib.h>
62
63
j;
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
Gc
Kh nng chn x1
Kh nng chn x2
vi x1 chn
Kh nng chn x3 vi
x1, x2 chn
0
0
000
1
1
001 010
0
1
011
0
100
1
1
101 110
1
111
65
66
123 124
124 134
135
145
234
235
245
345
100
67
3
2 3
1,3, 2 2,1,3
2
1
3
3
2,3,1 3,1,2
3,2,1
<stdio.h>
#include
<conio.h>
#include
<stdlib.h>
69
(2*N-1)
#define
SG
(N-1)
#define
TRUE
#define
FALSE 0
void hoanghau(int);
void inloigiai(int
loigiai[]);FILE *fp;
70
71
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
Th no l bi ton lit k?
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
72
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
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
bai10.out
0
75
Chng 4: 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].
Chng 4: Bi ton ti u
T (1)
t:
+ C ( n 1), ( n ) + C ( n ), (1) ,
D = {J S : N k N p = , k p J
}. Vi mi phng n J D
f ( j) = | N j |
jJ
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)
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
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
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();
}
(*)
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
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);
}
}
}
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>;
}
Vic tnh gi tr ca g phi n gin hn vic gii bi ton t hp trong v phi ca (*).
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)
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)
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
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
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
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;
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
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=
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
90
Chng 4: Bi ton ti u
g l cn di
T1 T2 T3 T5 T4 T1 v chi ph nh nht l 22
f = +
(2,3,4) =23;
g=29
(2,3,5) =11;
g=17
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
f = 22
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();
}
94
Chng 4: Bi ton ti u
Tp tt c cc hnh trnh
Hnh trnh
khng 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);
}
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
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).
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)
Cn di = 81
Cn di = 81
Cn di = 113
Hnh 4.5
99
Chng 4: Bi ton ti u
Tp tt c cc
hnh trnh
Cn di = 81
Cn di= 129
Tp cc hnh
trnh cha (6,3)
Cn di = 81
Cn di= 113
Tp cc hnh
trnh cha (4,6)
Cn di = 81
Cn di= 101
Tp cc hnh
trnh cha (2,1)
Cn di = 84
Tp cc hnh
trnh cha (1, 4)
Cn di= 112
Cn di = 84
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
28
20
50
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) >;
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
Cn di = 103
2
11
Hnh trnh
cha (1, 4)
Hnh trnh
khng cha
(1, 4)
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.
cost
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*/;
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
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
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
Bn c c th tm thy nhng kin thc su hn v rng hn trong cc ti liu [1], [2], [3].
107
Detroit
Chicago
New York
Denver
Los Angeles
Washington
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
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.
Detroit
Chicago
New York
Denver
Los Angeles
Washington
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
vO
vU
deg
vV
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.
6
3
5
3
2
3
6
6
4
8
6
7
9
3
115
Cuoi
Dau
Cuoi
Dau
Cuoi
Trongso
Hnh 5.11
List(i)
nh 1
nh
116
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
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:
-
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
118
119
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
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
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
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
123
6
8
7
10
11
12
13
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
8, 9
5, 10
9, 10
10, 5
1,2,3,11,4,6,12,13,7, 8, 9,10, 5
124
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
getch();
}
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
9
Hnh 6.3. th v hng G=<V,E>.
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
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
130
131
6
8
7
10
3
11
9
13
12
Hnh 6.4. th v hng G=<V,E>
132
100
#define TRUE
#define FALSE
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
134
c
G1
d
G2
G3
c
c
H1
d
H2
H3
* 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
b
4
5
9
10
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
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
TRUE
#define FALSE
1
0
138
139
TRUE
#define FALSE
1
0
140
141
142
TRUE
143
Result();
144
G1
G2
Hnh 6.8. th thi hamilton G3, na Hamilton G2 v G1.
G3
145
G=(V,E)
1
5 3
5 4
3
4
2
31
5 2
5 2
3
3
TRUE
#define FALSE
1
0
146
147
TRUE
#define FALSE
1
0
148
149
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
151
Chng 7: Cy (Tree)
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].
10
10
6
4
8
13
20
20
3
15
15
12
14
25
25
30
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:
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
<
>
<
<
4
>
4
>
<
>
=
6
>
5
<
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
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
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
K t
#1
S ln xut hin
12
K t
#2
#1
S ln xut hin
12
K t
#3
#2
#1
S ln xut hin
12
K t
#3
#4
S ln xut hin
12
K t
#5
#4
S ln xut hin
12
12
K t
#6
#5
#4
S ln xut hin
12
14
12
K t
#6
#7
S ln xut hin
12
14
19
K t
#8
#7
S ln xut hin
26
19
158
Chng 7: Cy (Tree)
K t
#9
S ln xut hin
45
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
01
a:
1000
i:
1101
r:
000
0:
1001
c:
1110
t:
001
y:
1100
l:
1111
h:
101
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);
}
TRUE
#define FALSE
1
0
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();
}
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 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.
20
33
18
16
17
6
14
164
Chng 7: Cy (Tree)
#include <math.h>
#include <dos.h>
#define MAX 50
#define
TRUE
#define FALSE
1
0
E1
E2
: Lu tr tp nh cui ca cc cnh;
: di cc cnh;
EB
: 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();
}
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
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)
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();
}
Nm vng phng php xy dng cy khung ca th bng hai thut ton duyt
theo chiu rng v duyt theo chiu su.
BI TP CHNG 7
Bi 1. Kim tra b m sau c phi l m tin t hay khng:
A
: 11
: 00
: 10
:01
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
11
14
176
10
Bi ton t mu th.
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
4
3
th G=<V,E>
th G =<V, E>
178
z ij z ki = v
x j ( xi )
x j 1 ( xi )
0
nu x = s,
nu x = t,
cho cc nh cn li.
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).
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)).
x1
x4
2
2
2
x2
x6
x5
i =1
A[vi 1 , vi ] c gi l di ca ng i.
C
8
4
E
Z
5
Bc 1. Gn cho nhn nh A l 0;
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
185
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
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
}
}
void main(void){
clrscr();Init();
Dijkstra();
Result(); getch();
}
188
TRUE
#define FALSE
1
0
189
190
191
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
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
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
195
Mc lc
[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
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
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.