Bài giảng chuyên đề - Lê Minh Hoàng

Embed Size (px)

DESCRIPTION

Cấu trúc dữ liệu và giải thuật

Citation preview

  • 1.Bi ton lit k1MC LC 0. GII THIU...................................................................................................................................... 2 1. NHC LI MT S KIN THC I S T HP....................................................................... 3 I. CHNH HP LP ...........................................................................................................................................3 II. CHNH HP KHNG LP...........................................................................................................................3 III. HON V ......................................................................................................................................................3 IV. T HP.........................................................................................................................................................3 2. PHNG PHP SINH (GENERATE) ............................................................................................ 5 I. SINH CC DY NH PHN DI N.......................................................................................................6 II. LIT K CC TP CON K PHN T........................................................................................................7 III. LIT K CC HON V .............................................................................................................................9 3. THUT TON QUAY LUI ............................................................................................................. 12 I. LIT K CC DY NH PHN DI N...............................................................................................13 II. LIT K CC TP CON K PHN T......................................................................................................14 III. LIT K CC CHNH HP KHNG LP CHP K ..............................................................................15 IV. BI TON PHN TCH S .....................................................................................................................16 V. BI TON XP HU.................................................................................................................................18 4. K THUT NHNH CN.............................................................................................................. 22 I. BI TON TI U......................................................................................................................................22 II. S BNG N T HP...............................................................................................................................22 III. M HNH K THUT NHNH CN.....................................................................................................22 IV. BI TON NGI DU LCH...................................................................................................................23 V. DY ABC ....................................................................................................................................................25L Minh Hong

2. Bi ton lit k20. GII THIU Trong thc t, c mt s bi ton yu cu ch r: trong mt tp cc i tng cho trc c bao nhiu i tng tho mn nhng iu kin nht nh. Bi ton gi l bi ton m cu hnh t hp. Trong lp cc bi ton m, c nhng bi ton cn yu cu ch r nhng cu hnh tm c tho mn iu kin cho l nhng cu hnh no. Bi ton yu cu a ra danh sch cc cu hnh c th c gi l bi ton lit k t hp. gii bi ton lit k, cn phi xc nh c mt thut ton c th theo ln lt xy dng c tt c cc cu hnh ang quan tm. C nhiu phng php lit k, nhng chng cn phi p ng c hai yu cu di y: Khng c lp li mt cu hnh Khng c b st mt cu hnh C th ni rng, phng php lit k l phng k cui cng gii c mt s bi ton t hp hin nay. Kh khn chnh ca phng php ny chnh l s bng n t hp. xy dng 1 t cu hnh (con s ny khng phi l ln i vi cc bi ton t hp - V d lit k cc cch xp n13 ngi quanh mt bn trn) v gi thit rng mi thao tc xy dng mt khong 1 giy, ta phi mt qung 31 nm mi gii xong. Tuy nhin cng vi s pht trin ca my tnh in t, bng phng php lit k, nhiu bi ton t hp tm thy li gii. Qua , ta cng nn bit rng ch nn dng phng php lit k khi khng cn mt phng php no khc tm ra li gii. Chnh nhng n lc gii quyt cc bi ton thc t khng dng phng php lit k thc y s pht trin ca nhiu ngnh ton hc. Cui cng, nhng tn gi sau y, tuy v ngha khng phi ng nht, nhng trong mt s trng hp ngi ta c th dng ln ngha ca nhau c. l: Phng php lit k Phng php vt cn trn tp phng n Phng php duyt ton bL Minh Hong 3. Bi ton lit k31. NHC LI MT S KIN THC I S T HP Cho S l mt tp hu hn gm n phn t v k l mt s t nhin. Gi X l tp cc s nguyn dng t 1 n k: X =SL:start:notranslate 8 I. CHNH HP LP Mi nh x f: X S. Cho tng ng vi mi i X, mt v ch mt phn t f(i) S. c gi l mt chnh hp lp chp k ca S. Nhng do X l tp hu hn (k phn t) nn nh x f c th xc nh qua bng cc gi tr f(1), f(2), ..., f(k). V d: S =SL:start:notranslate 7; k = 3. Mt nh x f c th cho nh sau: i 1 2 3 f(i) E C E Nn ngi ta ng nht f vi dy gi tr (f(1), f(2), ..., f(k)) v coi dy gi tr ny cng l mt chnh hp lp chp k ca S. Nh v d trn (E, C, E) l mt chnh hp lp chp 3 ca S. D dng chng minh c kt qu sau bng quy np hoc bng phng php nh gi kh nng la chn: S chnh hp lp chp k ca tp gm n phn t: kAn = nk II. CHNH HP KHNG LP Khi f l n nh c ngha l vi i, j X ta c f(i) = f(j) i = j. Ni mt cch d hiu, khi dy gi tr f(1), f(2), ..., f(k) gm cc phn t thuc S khc nhau i mt th f c gi l mt chnh hp khng lp chp k ca S. V d mt chnh hp khng lp (C, A, E): i 1 2 3 f(i) C A E S chnh hp khng lp chp k ca tp gm n phn t: n! A k = n (n 1)(n 2)...(n k + 1) = n (n k )! III. HON V Khi k = n. Mt chnh hp khng lp chp n ca S c gi l mt hon v cc phn t ca S. V d: mt hon v: (A, D, C, E, B, F) ca S =SL:start:notranslate 6 i 1 2 3 4 5 6 f(i) A D C E B F rng khi k = n th s phn t ca tp X =SL:start:notranslate 5 ng bng s phn t ca S. Do tnh cht i mt khc nhau nn dy f(1), f(2), ..., f(n) s lit k c ht cc phn t trong S. Nh vy f l ton nh. Mt khc do gi thit f l chnh hp khng lp nn f l n nh. Ta c tng ng 1-1 gia cc phn t ca X v S, do f l song nh. Vy nn ta c th nh ngha mt hon v ca S l mt song nh giaSL:start:notranslate 4 v S. S hon v ca tp gm n phn t = s chnh hp khng lp chp n: Pn = n! IV. T HP Mt tp con gm k phn t ca S c gi l mt t hp chp k ca S. L Minh Hong 4. Bi ton lit k4Ly mt tp con k phn t ca S, xt tt c k! hon v ca tp con ny. D thy rng cc hon v l cc chnh hp khng lp chp k ca S. V d ly tpSL:start:notranslate 3 l tp con ca tp S trong v d trn th: (A, B, C), (C, A, B), (B, C, A), ... l cc chnh hp khng lp chp 3 ca S. iu tc l khi lit k tt c cc chnh hp khng lp chp k th mi t hp chp k s c tnh k! ln. Vy: S t hp chp k ca tp gm n phn t: Ak n! C = n = k! k!(n k )! k nS tp con ca tp n phn t: C 0 + C1 + ... + C n = (1 + 1) n = 2 n n n nL Minh Hong 5. Bi ton lit k52. PHNG PHP SINH (GENERATE) Phng php sinh c th p dng gii bi ton lit k t hp t ra nu nh hai iu kin sau tho mn: 1. 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 u tin v cu hnh cui cng trong th t xc nh 2. Xy dng c thut ton t cu hnh cha phi cu hnh cui, sinh ra c cu hnh k tip n. Phng php sinh c th m t nh sau: ; repeat ; ; until ;Th t t in Trn cc kiu d liu n gin chun, ngi ta thng ni ti khi nim th t. V d trn kiu s th c quan h: 1 < 2; 2 < 3; 3 < 10; ..., trn kiu k t Char th cng c quan h 'A' < 'B'; 'C' < 'c'... Xt quan h th t ton phn "nh hn hoc bng" k hiu "" trn mt tp hp S, l quan h hai ngi tho mn bn tnh cht: Vi a, b, c S Tnh ph bin: Hoc l a b, hoc b a; Tnh phn x: a a Tnh phn i xng: Nu a b v b a th bt buc a = b. Tnh bc cu: Nu c a b v b c th a c. Trong trng hp a b v a b, ta dng k hiu " ai, chn ra ch s jmax c L[jmax] ln nht. t L[i] := L[jmax] + 1. 3. Truy vt Ti bc xy dng dy L, mi khi tnh L[i] := L[jmax] + 1, ta t T[i] = jmax. lu li rng: Dy con di nht bt u ti ai s c phn t th hai k tip l ajmax. Sau khi tnh xong hay dy L v T, ta bt u t 0. T[0] l phn t u tin c chn, L Minh Hong 120. Quy hoch ng10T[T[0]] l phn t th hai c chn, T[T[T[0]]] l phn t th ba c chn ...Qu trnh truy vt c th din t nh sau: i := T[0]; while i n + 1 do {Chng no cha duyt n s an+1=+ cui} begin

i := T[i]; end;V d: vi A = (5, 2, 3, 4, 9, 10, 5, 6, 7, 8). Hai dy L v T sau khi tnh s l: i01234567891011ai-52349105678+L[i]95876325432128347611891011T[i]TracingPROG03_1.PAS * Tm dy con n iu tng di nht program LongestSubSequence; const max = 10000; var a, L, T: array[0..max + 1] of Integer; n: Word; procedure Enter; {Nhp d liu t thit b nhp chun theo ng khun dng Input} var i: Word; begin ReadLn(n); for i := 1 to n do Read(a[i]); end; procedure Optimize; {Quy hoch ng} var i, j, jmax: Word; begin a[0] := -32768; a[n + 1] := 32767; {Thm hai phn t canh hai u dy a} L[n + 1] := 1; {in c s quy hoach ng vo bng phng n} for i := n downto 0 do {Tnh bng phng n} begin {Chn trong cc ch s j ng sau i tho mn aj > ai ra ch s jmax c L[jmax] ln nht}jmax := n + 1; for j := i + 1 to n + 1 do if (a[j] > a[i]) and (L[j] > L[jmax]) then jmax := j; L[i] := L[jmax] + 1; {Lu di dy con tng di nht bt u ti ai} T[i] := jmax; {Lu vt: phn t ng lin sau ai trong dy con tng di nht l ajmax} end; WriteLn(L[0] - 2); {Chiu di dy con tng di nht} i := T[0]; {Bt u truy vt tm nghim} while i n + 1 do begin WriteLn('a[', i, '] = ', a[i]); i := T[i]; end; end; begin {nh ngha li thit b nhp/xut chun}L Minh Hong 121. Quy hoch ng11Assign(Input, 'INCSEQ.INP'); Reset(Input); Assign(Output, 'INCSEQ.OUT'); Rewrite(Output); Enter; Optimize; Close(Input); Close(Output); end.Nhn xt: 1. Ta c th lm cch khc: Gi L[i] l di dy con di nht kt thc ti a[i], T[i] l ch s ng lin trc ai trong dy con di nht . Cch ny khi truy vt s cho th t cc ch s c chn gim dn. 2. Dng mng T lu vt c chng trnh ngn gn ch thc ra khng cn c n vn c th d li c nghim, ch cn dng mng L m thi. Bi tp 1. Trong cch gii trn, u l bng phng n: a) Mng L? b) mng T? c) c mng L v mng T? 2. Vn gi nguyn gi thit v kch c d liu nh trn hy lp chng trnh tr li cu hi: a) C bao nhiu dy con n iu tng di nht ? b) Cho bit tt c nhng dy con n iu tng di nht II. BI TON CI TI Trong siu th c n gi hng (n 100), gi hng th i c trng lng l Wi 100 v tr gi Vi 100. Mt tn trm t nhp vo siu th, tn trm mang theo mt ci ti c th mang c ti a trng lng M ( M 100). Hi tn trm s ly i nhng gi hng no c tng gi tr ln nht. Input: file vn bn BAG.INP Dng 1: Cha hai s n, M cch nhau t nht mt du cch n dng tip theo, dng th i cha hai s nguyn dng Wi, Vi cch nhau t nht mt du cch Output: file vn bn BAG.OUT Dng 1: Ghi gi tr ln nht tn trm c th ly Dng 2: Ghi ch s nhng gi b ly BAG.INP 5 11 3 3 4 4 5 4 9 10 4 4BAG.OUT 11 5 2 1Cch gii: Nu gi F[i, j] l gi tr ln nht c th c bng cch chn trong cc gi {1, 2, ..., i} vi gii hn trng lng j. Th gi tr ln nht khi c chn trong s n gi vi gii hn trng lng M chnh l F[n, M]. 1. Cng thc truy hi tnh F[i, j]. Vi gii hn trng lng j, vic chn ti u trong s cc gi {1, 2, ...,i - 1, i} c gi tr ln nht s c hai kh nng: Nu khng chn gi th i th F[i, j] l gi tr ln nht c th bng cch chn trong s cc gi {1, 2, ..., i - 1} vi gii hn trng lng l j. Tc l F[i, j] = F[i - 1, j] L Minh Hong 122. Quy hoch ng12Nu c chn gi th i (tt nhin ch xt ti trng hp ny khi m Wi j) th F[i, j] bng gi tr gi th i l Vi cng vi gi tr ln nht c th c c bng cch chn trong s cc gi {1, 2, ..., i - 1} vi gii hn trng lng j - Wi. Tc l v mt gi tr thu c: F[i, j] = Vi + F[i - 1, j - Wi] V theo cch xy dng F[i, j] l gi tr ln nht c th, nn F[i, j] s l max trong 2 gi tr thu c trn. 2. C s quy hoch ng: D thy F[0, j] = gi tr ln nht c th bng cch chn trong s 0 gi = 0. 3. Tnh bng phng n: Bng phng n F gm n + 1 dng, M + 1 ct, trc tin c in c s quy hoch ng: Dng 0 gm ton s 0. S dng cng thc truy hi, dng dng 0 tnh dng 1, dng dng 1 tnh dng 2, v.v... n khi tnh ht dng n.0 1 2 ... n0 01 0... 0M 0...4. Truy vt: Tnh xong bng phng n th ta quan tm n F[n, M] chnh l gi tr ln nht thu c khi chn trong c n gi vi gii hn trng lng M. Nu F[n, M] = F[n - 1, M] th tc l khng chn gi th n, ta truy tip F[n - 1, M]. Cn nu F[n, M] F[n - 1, M] th ta thng bo rng php chn ti u c chn gi th n v truy tip F[n - 1, M - Wn]. C tip tc cho ti khi truy ln ti hng 0 ca bng phng n. PROG03_2.PAS * Bi ton ci ti program The_Bag; const max = 100; var W, V: Array[1..max] of Integer; F: array[0..max, 0..max] of Integer; n, M: Integer; procedure Enter; {Nhp d liu t thit b nhp chun (Input)} var i: Integer; begin ReadLn(n, M); for i := 1 to n do ReadLn(W[i], V[i]); end; procedure Optimize; {Tnh bng phng n bng cng thc truy hi} var i, j: Integer; begin FillChar(F[0], SizeOf(F[0]), 0); {in c s quy hoch ng} for i := 1 to n do for j := 0 to M do begin {Tnh F[i, j]} L Minh Hong 123. Quy hoch ng13{Gi s khng chn gi th i th F[i, j] = F[i - 1, j]} {Sau nh gi: nu chn gi th i s c li hn th t li F[i, j]}F[i, j] := F[i - 1, j];if (j >= W[i]) and (F[i, j] < F[i - 1, j - W[i]] + V[i]) then F[i, j] := F[i - 1, j - W[i]] + V[i]; end; end; procedure Trace; {Truy vt tm nghim ti u} begin WriteLn(F[n, M]); {In ra gi tr ln nht c th kim c} while n 0 do {Truy vt trn bng phng n t hng n ln hng 0} begin if F[n, M] F[n - 1, M] then {Nu c chn gi th n} begin Write(n, ' '); M := M - W[n]; { chn gi th n ri th ch c th mang thm c trng lng M - Wn na thi} end; Dec(n); end; end; begin {nh ngha li thit b nhp/xut chun}Assign(Input, 'BAG.INP'); Reset(Input); Assign(Output, 'BAG.OUT'); Rewrite(Output); Enter; Optimize; Trace; Close(Input); Close(Output); end.III. BIN I XU Cho xu k t X, xt 3 php bin i: a) Insert(i, C): i l s, C l k t: Php Insert chn k t C vo sau v tr i ca xu X. b) Replace(i, C): i l s, C l k t: Php Replace thay k t ti v tr i ca xu X bi k t C. c) Delete(i): i l s, Php Delete xo k t ti v tr i ca xu X. Yu cu: Cho trc xu Y, hy tm mt s t nht cc php bin i trn bin xu X thnh xu Y. Input: file vn bn STR.INP Dng 1: Cha xu X ( di 100) Dng 2: Cha xu Y ( di 100) Output: file vn bn STR.OUT ghi cc php bin i cn thc hin v xu X ti mi php bin i. STR.INP PBBCEFATZ QABCDABEFASTR.OUT 7 PBBCEFATZ -> Delete(9) -> PBBCEFAT PBBCEFAT -> Delete(8) -> PBBCEFA PBBCEFA -> Insert(4, B) -> PBBCBEFA PBBCBEFA -> Insert(4, A) -> PBBCABEFA PBBCABEFA -> Insert(4, D) -> PBBCDABEFA PBBCDABEFA -> Replace(2, A) -> PABCDABEFA PABCDABEFA -> Replace(1, Q) -> QABCDABEFACch gii: i vi xu k t th vic xo, chn s lm cho cc phn t pha sau v tr bin i b nh ch s li, gy kh khn cho vic qun l v tr. khc phc iu ny, ta s tm mt th t bin i tho mn: Php bin i ti v tr i bt buc phi thc hin sau cc php bin i ti v tr i + 1, i + 2, ... L Minh Hong 124. Quy hoch ng14V d: X = 'ABCD'; Insert(0, E) sau Delete(4) cho ra X = 'EABD'. Cch ny khng tun th nguyn tc Delete(3) sau Insert(0, E) cho ra X = 'EABD'. Cch ny tun th nguyn tc ra. Ni tm li ta s tm mt dy bin i c v tr thc hin gim dn. 1. Cng thc truy hi Gi s m l di xu X v n l di xu Y. Gi F[i, j] l s php bin i ti thiu bin xu gm i k t u ca xu X: X1X2 ... Xi thnh xu gm j k t u ca xu Y: Y1Y2...Yj. Ta nhn thy rng X = X1X2...Xm v Y = Y1Y2...Yn nn: Nu Xm = Yn th ta ch cn bin on X1X2...Xm-1 thnh Y1Y2...Yn-1 tc l trong trng hp ny F[m, n] = F[m - 1, n - 1]. Nu Xm Yn th ti v tr Xm ta c th s dng mt trong 3 php bin i: a) Hoc chn vo sau v tr m ca X, mt k t ng bng Yn: X =X1X2...Xm-1XmY =Y1Y2...Yn-1YnYnTh khi F[m, n] s bng 1 php chn va ri cng vi s php bin i bin dy X1...Xm thnh dy Y1...Yn-1: F[m, n] = 1 + F[m, n - 1] b) Hoc thay v tr m ca X bng mt k t ng bng Yn X =X1X2...Xm-1Xm := YnY =Y1Y2...Yn-1YnTh khi F[m, n] s bng 1 php thay va ri cng vi s php bin i bin dy X1...Xm-1 thnh dy Y1...Yn-1: F[m, n] = 1 + F[m-1, n - 1] c) Hoc xo v tr th m ca X X =X1X2...Xm-1XmY =Y1Y2...Yn-1YnTh khi F[m, n] s bng 1 php xo va ri cng vi s php bin i bin dy X1...Xm-1 thnh dy Y1...Yn: F[m, n] = 1 + F[m-1, n] V F[m, n] phi l nh nht c th, nn trong trng hp Xm Yn th F[m, n] = min(F[m, n - 1], F[m - 1, n - 1], F[m - 1, n]) + 1. Ta xy dng xong cng thc truy hi. 2. C s quy hoch ng F[0, j] l s php bin i bin xu rng thnh xu gm j k t u ca F. N cn ti thiu j php chn: F[0, j] = j F[i, 0] l s php bin i bin xu gm i k t u ca S thnh xu rng, n cn ti thiu i php xo: F[i, 0] = i Vy u tin bng phng n F (c[0..m, 0..n]) c khi to hng 0 v ct 0 l c s quy hoch ng. T dng cng thc truy hi tnh ra tt c cc phn t bng B. Sau khi tnh xong th F[m, n] cho ta bit s php bin i ti thiu. Truy vt: Nu Xm = Yn th ch vic xt tip F[m - 1, n - 1]. Nu khng, xt 3 trng hp: Nu F[m, n] = F[m, n - 1] + 1 th php bin i u tin c s dng l: Insert(m, Yn)L Minh Hong 125. Quy hoch ng15 Nu F[m, n] = F[m - 1, n - 1] + 1 th php bin i u tin c s dng l: Replace(m, Yn) Nu F[m, n] = F[m - 1, n] + 1 th php bin i u tin c s dng l: Delete(m) a v bi ton vi m, n nh hn truy vt tip cho ti khi v F[0, 0] V d: X =' ABCD'; Y = 'EABD' bng phng n l: 0 1 2 3 4 0 10 11 12 13 24 32 32 32 32 31 22 2444432Lu : khi truy vt, trnh truy nhp ra ngoi bng, nn to vin cho bng. PROG03_3.PAS * Bin i xu program StrOpt; const max = 100; var X, Y: String[2 * max]; F: array[-1..max, -1..max] of Integer; m, n: Integer; procedure Enter; {Nhp d liu t thit b nhp chun} begin ReadLn(X); ReadLn(Y); m := Length(X); n := Length(Y); end; function Min3(x, y, z: Integer): Integer; {Cho gi tr nh nht trong 3 gi tr x, y, z} var t: Integer; begin if x < y then t := x else t := y; if z < t then t := z; Min3 := t; end; procedure Optimize; var i, j: Integer; begin {Khi to vin cho bng phng n}for i := 0 to m do F[i, -1] := max + 1; for j := 0 to n do F[-1, j] := max + 1; {Lu c s quy hoch ng}for j := 0 to n do F[0, j] := j; for i := 1 to m do F[i, 0] := i; {Dng cng thc truy hi tnh ton bng phng n}for i := 1 to m do for j := 1 to n do if X[i] = Y[j] then F[i, j] := F[i - 1, j - 1] else F[i, j] := Min3(F[i, j - 1], F[i - 1, j - 1], F[i - 1, j]) + 1; end; procedure Trace; {Truy vt} begin WriteLn(F[m, n]); {F[m, n] chnh l s t nht cc php bin i cn thc hin} while (m 0) or (n 0) do {Vng lp kt thc khi m = n = 0} if X[m] = Y[n] then {Hai k t cui ca 2 xu ging nhau} L Minh Hong 126. Quy hoch ng16begin Dec(m); Dec(n); {Ch vic truy cho ln trn bng phng n} end else {Ti y cn mt php bin i} begin Write(X, ' -> '); {In ra xu X trc khi bin i} if F[m, n] = F[m, n - 1] + 1 then {Nu y l php chn} begin Write('Insert(', m, ', ', Y[n], ')'); Insert(Y[n], X, m + 1); Dec(n); {Truy sang phi} end else if F[m, n] = F[m - 1, n - 1] + 1 then {Nu y l php thay} begin Write('Replace(', m, ', ', Y[n], ')'); X[m] := Y[n]; Dec(m); Dec(n); {Truy cho ln trn} end else {Nu y l php xo} begin Write('Delete(', m, ')'); Delete(X, m, 1); Dec(m); {Truy ln trn} end; WriteLn(' -> ', X); {In ra xu X sau php bin i} end; end; begin Assign(Input, 'STR.INP'); Reset(Input); Assign(Output, 'STR.OUT'); Rewrite(Output); Enter; Optimize; Trace; Close(Input); Close(Output); end.Bi ny gii vi cc xu 100 k t, nu lu bng phng n di dng mng cp pht ng th c th lm vi cc xu 255 k t. (Tt hn nn lu mi dng ca bng phng n l mt mng cp pht ng 1 chiu). Hy t gii thch ti sao khi gii hn di d liu l 100, li phi khai bo X v Y l String[200] ch khng phi l String[100] ?. IV. DY CON C TNG CHIA HT CHO K Cho mt dy gm n ( n 1000) s nguyn dng A1, A2, ..., An v s nguyn dng k (k 50). Hy tm dy con gm nhiu phn t nht ca dy cho sao cho tng cc phn t ca dy con ny chia ht cho k. Cch gii: bi yu cu chn ra mt s ti a cc phn t trong dy A c mt dy c tng chia ht cho k, ta c th gii bi ton bng phng php duyt t hp bng quay lui c nh gi nhnh cn nhm gim bt chi ph trong k thut vt cn. Di y ta trnh by phng php quy hoch ng: Nhn xt 1: Khng nh hng n kt qu cui cng, ta c th t: Ai := Ai mod k vi i: 1 i n Nhn xt 2: Gi S l tng cc phn t trong mng A, ta c th thay i cch tip cn bi ton: thay v tm xem phi chn ra mt s ti a nhng phn t c tng chia ht cho k, ta s chn ra mt sL Minh Hong 127. Quy hoch ng17ti thiu cc phn t c tng ng d vi S theo modul k. Khi ch cn loi b nhng phn t ny th nhng phn t cn li s l kt qu. Nhn xt 3: S phn t ti thiu cn loi b bao gi cng nh hn k Tht vy, gi s s phn t t nht cn loi b l m v cc phn t cn loi b l Ai1, Ai2, ..., Aim. Cc phn t ny c tng ng d vi S theo m-un k. Xt cc dy sau Dy 0 := () = Dy rng (Tng 0 (mod k)) Dy 1 := (Ai1) Dy 2 := (Ai1, Ai2) Dy 3 := (Ai1, Ai2, Ai3) ... ... Dy m := (Ai1, Ai2, ..., Aim) Nh vy c m + 1 dy, nu m k th theo nguyn l Dirichlet s tn ti hai dy c tng ng d theo m-un k. Gi s l hai dy: Ai1 + Ai2 + ... + Aip Ai1 + Ai2 + ... + Aip + Aip+1 + ... + Aiq (mod k) Suy ra Aip+1 + ... + Aiq chia ht cho k. Vy ta c th xo ht cc phn t ny trong dy chn m vn c mt dy c tng ng d vi S theo modul k, mu thun vi gi thit l dy chn c s phn t ti thiu. Cng thc truy hi: Nu ta gi F[i, t] l s phn t ti thiu phi chn trong dy A1, A2, ..., Ai c tng chia k d t. Nu khng c phng n chn ta coi F[m, t] = + . Khi F[m, t] c tnh qua cng thc truy hi sau: Nu trong dy trn khng phi chn Am th F[m, t] = F[m - 1, t]; Nu trong dy trn phi chn Am th F[m, t] = 1 + F[m - 1, t - Am] (t - Am y hiu l php tr trn cc lp ng d mod k. V d khi k = 7 th 1 - 3 = 5) T trn suy ra F[m, t] = min (F[m - 1, t], 1 + F[m - 1, t - Am]). Cn tt nhin, c s quy hoch ng: F(0, 0) = 0; F(0, i) = + (vi i: 1 i < k). Bng phng n F c kch thc [0..n, 0.. k - 1] ti a l 1001x50 phn t kiu Byte. n y th vn tr nn qu d, thit ngh cng khng cn ni thm m cng chng cn phi vit chng trnh ra lm g na. V. PHP NHN T HP DY MA TRN Vi ma trn A kch thc pxq v ma trn B kch thc qxr. Ngi ta c php nhn hai ma trn c ma trn C kch thc pxr. Mi phn t ca ma trn C c tnh theo cng thc: qC ij = A ik .B kj(i, j: 1 i p; 1 j r)k =1V d: A l ma trn kch thc 3x4, B l ma trn kch thc 4x5 th C s l ma trn kch thc 3x5 1 5 92 6 103 7 114 8 12*1 0 3 10 1 0 12 0 1 14 5 6 10 1 1 1=14 34 546 14 229 25 4136 100 1649 21 33 thc hin php nhn hai ma trn A(mxn) v B(nxp) ta c th lm nh on chng trnh sau: for i := 1 to p do for j := 1 to r do L Minh Hong 128. Quy hoch ng18begin cij := 0; for k := 1 to q do cij := cij + aik * bkj; end;Ph tn thc hin php nhn ny c th nh gi qua s php nhn, nhn hai ma trn A(pxq) v B(qxr) ta cn thc hin p.q.r php nhn s hc. Php nhn ma trn khng c tnh cht giao hon nhng c tnh cht kt hp (A * B) * C = A * (B * C) Vy nu A l ma trn cp 3x4, B l ma trn cp 4x10 v C l ma trn cp 10x15 th: tnh (A * B) * C, ta thc hin (A * B) trc, c ma trn X kch thc 3x10 sau 3.4.10 = 120 php nhn s. Sau ta thc hin X * C c ma trn kt qu kch thc 3x15 sau 3.10.15 = 450 php nhn s. Vy tng s php nhn s hc phi thc hin s l 570. tnh A * (B * C), ta thc hin (B * C) trc, c ma trn Y kch thc 4x15 sau 4.10.15 = 600 php nhn s. Sau ta thc hin A * Y c ma trn kt qu kch thc 3x15 sau 3.4.15 = 180 php nhn s. Vy tng s php nhn s hc phi thc hin s l 780. Vy th trnh t thc hin c nh hng ln ti chi ph. Vn t ra l tnh s ph tn t nht khi thc hin php nhn mt dy cc ma trn: M1 * M2 * ... * Mn Vi : M1 l ma trn kch thc a1 x a2 M2 l ma trn kch thc a2 x a3 ... Mn l ma trn kch thc an x an+1 Input: file vn bn MATRIXES.INP Dng 1: Cha s nguyn dng n 100 Dng 2: Cha n + 1 s nguyn dng a1, a2, ..., an+1 (i: 1 ai 100) cch nhau t nht mt du cch Output: file vn bn MATRIXES.OUT Dng 1: Ghi s php nhn s hc ti thiu cn thc hin Dng 2: Ghi biu thc kt hp ti u ca php nhn dy ma trn MATRIXES.INP 6 3 2 3 1 2 2 3MATRIXES.OUT 31 ((M[1] * (M[2] * M[3])) * ((M[4] * M[5]) * M[6]))Trc ht, nu dy ch c mt ma trn th chi ph bng 0, tip theo ta nhn thy nhn mt cp ma trn th khng c chuyn kt hp g y c, chi ph cho php nhn l tnh c ngay. Vy th ph tn cho php nhn hai ma trn lin tip trong dy l hon ton c th ghi nhn li c. S dng nhng thng tin ghi nhn ti u ho ph tn nhn nhng b ba ma trn lin tip ... C tip tc nh vy cho ti khi ta tnh c ph tn nhn n ma trn lin tip. 1. Cng thc truy hi: Gi F[i, j] l s php nhn ti thiu cn thc hin nhn on ma trn lin tip: Mi*Mi+1*...*Mj. Th khi F[i, i] = 0 vi i. tnh Mi * Mi+1 * ... * Mj, ta c th c nhiu cch kt hp: Mi * Mi+1 * ... * Mj = (Mi * Mi+1 * ... * Mk) * (Mk+1 * Mk+2 * ... * Mj) (Vi i k < j) L Minh Hong 129. Quy hoch ng19Vi mt cch kt hp (ph thuc vo cch chn v tr k), chi ph ti thiu phi thc hin bng: Chi ph thc hin php nhn Mi * Mi+1 * ... * Mk = F[i, k] Cng vi chi ph thc hin php nhn Mk+1 * Mk+2 * ... * Mj = F[k + 1, j] Cng vi chi ph thc hin php nhn hai ma trn cui cng: ma trn to thnh t php nhn (Mi * Mi+1 * ... * Mk) c kch thc ai x ak+1 v ma trn to thnh t php nhn (Mk+1 * Mk+2 * ... * Mj) c kch thc ak+1 x aj+1, vy chi ph ny l ai * ak+1 * aj+1. T suy ra: do c nhiu cch kt hp, m ta cn chn cch kt hp c chi ph t nht nn ta s cc tiu ho F[i, j] theo cng thc: F[i, j] = min(F[i, k] + F[k + 1 j] + ai * a k + 1 * aj+ 1) , i k 109 th ta t li phn t l 109 + 1 trnh b trn s do cng hai s qu ln. Kt thc qu trnh tnh ton, nu F[n, k] = 109 + 1 th ta ch cn thng bo chung chung l c > 1 t s. Cn c s quy hoch ng th c nhiu cch t: V d: Cch 1: F[1, k] = s cc s c 1 ch s m TCCS bng k, nh vy nu k 10 th F[1, k] = 0 cn nu 0 k 9 th F[1, k] = 1. Cch 2: F[0, k] = s cc s c 0 ch s m TCCS bng k, th F[0, 0] = 1 (Dy X rng c tng = 0) v F[0, k] = 0 vi k > 0 (Bi dy X rng th khng th cho tng l s k dng c) Cu b: Da vo bng phng n F[0..n, 0..k], F[n - 1, k] = s cc s c n - 1 CS m TCCS bng k = s cc s c n CS, bt u l 0, TCCS bng k. F[n - 1, k - 1] = s cc s c n - 1 CS m TCCS bng k - 1 = s cc s c n CS, bt u l 1, TCCS bng k. F[n - 1, k - 2] = s cc s c n - 1 CS m TCCS bng k - 2 = s cc s c n CS, bt u l 2, TCCS bng k. ... F[n - 1, k - 9] = s cc s c n - 1 CS m TCCS bng k - 9 = s cc s c n CS, bt u l 9, TCCS bng k.T ta c th bit c s th p (theo th t tng dn) cn tm s c ch s u tin l ch s no, tng t ta s tm c ch s th hai, th ba v.v... ca s . 2. Cho n gi ko (n 200), mi gi cha khng qu 200 vin ko, v mt s M 40000. Hy ch ra mt cch ly ra mt s cc gi ko c tng s ko l M, hoc thng bo rng khng th thc hin c vic . Gi : Gi s s ko cha trong gi th i l Ai Gi b[V] l s nguyn dng b nht tho mn: C th chn trong s cc gi ko t gi 1 n gi b[V] ra mt s gi c tng s ko l V. Nu khng c phng n chn, ta coi b[V] = +. Trc tin, khi to b[0] = 0 v cc b[V] = + vi mi V > 0. Ta s xy dng b[V] nh sau: tin ni, ta t k = b[V]. V k l b nht c th, nn nu c cch chn trong s cc gi ko t gi 1 n gi k c s ko V th chc chn phi chn gi k. M chn gi k ri th trong s cc gi ko t 1 n k - 1, phi chn ra c mt s gi c s ko l V - Ak. Tc l b[V - Ak] k - 1 < k. Vy th b[V] s c tnh bng cch: Xt tt c cc gi ko k c Ak V v tho mn b[V - Ak] < k, chn ra ch s k b nht, sau gn b[V] := k. y chnh l cng thc truy hi tnh bng phng n. Sau khi tnh b[1], b[2], ..., b[M]. Nu b[M] vn bng + th c ngha l khng c phng n chn. Nu khng th s chn gi p1 = b[M], tip theo s chn gi p2 = b[M - Ap1], ri li chn gi p3 = b[M - Ap1 - Ap2]... n khi truy vt v ti b[0] th thi. 3. Cho n gi ko (n 200), mi gi cha khng qu 200 vin ko, hy chia cc gi ko ra lm hai nhm sao cho s ko gia hai nhm chnh lch nhau t nht Gi : Gi S l tng s ko v M l na tng s ko, p dng cch gii nh bi 2. Sau Tm s nguyn dng T tho mn:L Minh Hong 132. Quy hoch ng22 TM Tn ti mt cch chn ra mt s gi ko c tng s ko l T (b[T] +) T ln nht c th Sau chn ra mt s gi ko c T vin ko, cc gi ko c a vo mt nhm, s cn li vo nhm th hai. 4. Cho mt bng A kch thc m x n, trn ghi cc s nguyn. Mt ngi xut pht ti no ca ct 1, cn sang ct n (ti no cng c). Quy tc: T A[i, j] ch c quyn sang mt trong 3 A[i, j + 1]; A[i - 1, j + 1]; A[i + 1, j + 1]. Hy tm v tr xut pht v hnh trnh i t ct 1 sang ct n sao cho tng cc s ghi trn ng i l ln nht. 1 7 1 42 6 2 76 5 3 87 6 4 79 7 2 6Gi : Gi B[i, j] l s im ln nht c th c c khi ti A[i, j]. R rng i vi nhng ct 1 th B[i, 1] = A[i, 1]: A 1 7 1 42 6 2 76 5 3 87 6 4 7B 1 7 1 49 7 2 6Vi nhng (i, j) cc ct khc. V ch nhng (i, j - 1), (i - 1, j - 1), (i + 1, j - 1) l c th sang c (i, j), v khi sang (i, j) th s im c cng thm A[i, j] na. Chng ta cn B[i, j] l s im ln nht c th nn B[i, j] = max(B[i, j - 1], B[i - 1, j - 1], B[i + 1, j - 1]) + A[i, j]. Ta dng cng thc truy hi ny tnh tt c cc B[i, j]. Cui cng chn ra B[i, n] l phn t ln nht trn ct n ca bng B v t truy vt tm ra ng i nhiu im nht. B. Bi tp t lm 1. Bi ton ci ti vi kch thc nh nu trn l khng thc t, chng c siu th no c 100 gi hng c. Hy lp chng trnh gii bi ton ci ti vi n 10000; M 1000. 2. Xu k t S gi l xu con ca xu k t T nu c th xo bt mt s k t trong xu T c xu S. Lp chng trnh nhp vo hai xu k t S1, S2. Tm xu S3 c di ln nht l xu con ca c S1 v S2. V d: S1 = 'abcdefghi123'; S2 = 'abc1def2ghi3' th S3 l 'abcdefghi3'. 3. Mt xu k t X gi l cha xu k t Y nu nh c th xo bt mt s k t trong xu X c xu Y: V d: Xu '1a2b3c45d' cha xu '12345'. Mt xu k t gi l i xng nu n khng thay i khi ta vit cc k t trong xu theo th t ngc li: V d: 'abcABADABAcba', 'MADAM' l cc xu i xng. Nhp mt xu k t S c di khng qu 128, hy tm xu k t T tho mn c 3 iu kin: 1. i xng 2. Cha xu S 3. C t k t nht (c di ngn nht) Nu c nhiu xu T tho mn ng thi 3 iu kin trn th ch cn cho bit mt. Chng hn vi S = 'a_101_b' th chn T = 'ab_101_ba' hay T = 'ba_101_ab' u ng. V d: S MADAM L Minh HongT MADAM 133. Quy hoch ng23 edcbabcdeedbabcd 00_11_22_33_222_1_000 abcdefg_hh_gfe_1_d_2_c_3_ba000_11_222_33_222_11_000 ab_3_c_2_d_1_efg_hh_gfe_1_d_2_c_3_ba4. C n loi tin giy: T giy bc loi i c mnh gi l V[i] ( n 20, 1 V[i] 10000). Hi mun mua mt mn hng gi l M th c bao nhiu cch tr s tin bng nhng loi giy bc cho (Trng hp c > 1 t cch th ch cn thng bo c nhiu hn 1 t). Nu tn ti cch tr, cho bit cch tr phi dng t t tin nht. 5. Cho n qun -mi-n xp dng ng theo hng ngang v c nh s t 1 n n. Qun -min th i c s ghi trn l a[i] v s ghi di l b[i]. Xem hnh v: 1 2 3 4 5 6 1 61 34 14 10 66 1Bit rng 1 n 100 v 0 ai, bi 6 vi i: 1 i n. Cho php lt ngc cc qun -mi-n. Khi mt qun -mi-n th i b lt, n s c s ghi trn l b[i] v s ghi di l a[i]. Vn t ra l hy tm cch lt cc qun -mi-n sao cho chnh lch gia tng cc s ghi hng trn v tng cc s ghi hng dii l ti thiu. Nu c nhiu phng n lt tt nh nhau, th ch ra phng n phi lt t qun nht. Nh v d trn th s lt hai qun -mi-n th 5 v th 6. Khi : Tng cc s hng trn = 1 + 1 + 4 + 4 + 6 + 1 = 17 Tng cc s hng di = 6 + 3 + 1 + 1 + 0 + 6 = 17 6. Xt bng H kch thc 4x4, cc hng v cc ct c nh ch s A, B, C, D. Trn 16 ca bng, mi ghi 1 k t A hoc B hoc C hoc D. A B C DA A C B BB A D C DC B A B DD B B A DCho xu S gm n k t ch gm cc ch A, B, C, D. Xt php co R(i): thay k t Si v Si+1 bi k t nm trn hng Si, ct Si+1 ca bng H. V d: S = ABCD; p dng lin tip 3 ln R(1) s c ABCD ACD BD B. Yu cu: Cho trc mt k t X{A, B, C, D}, hy ch ra th t thc hin n - 1 php co k t cn li cui cng trong S l X. 7. Cho N s t nhin A1, A2, ..., AN. Bit rng 1 N 200 v 0 Ai 200. Ban u cc s c t lin tip theo ng th t cch nhau bi du "?": A1 ? A2 ? ... ? AN. Yu cu: Cho trc s nguyn K, hy tm cch thay cc du "?" bng du cng hay du tr c mt biu thc s hc cho gi tr l K. Bit rng 1 N 200 v 0 Ai 100. V d: Ban u 1 ? 2 ? 3 ? 4 v K = 0 s cho kt qu 1 - 2 - 3 + 4. 8. Dy Catalant l mt dy s t nhin bt u l 0, kt thc l 0, hai phn t lin tip hn km nhau 1 n v. Hy lp chng trnh nhp vo s nguyn dng n l v mt s nguyn dng p. Cho bit rng nu nh ta em tt c cc dy Catalant di n xp theo th t t in th dy th p l dy no. i vi phng php quy hoch ng, lng b nh dng lu bng phng n c th rt ln nn ta tit kim c cng nhiu cng tt. Nu bng phng n c tnh di dng dng dng i tnh dng i + 1 th r rng vic lu tr cc dng i - 1, i - 2... by gi l khng cn thit, ta c th L Minh Hong 134. Quy hoch ng24ci tin bng cch dng 2 mng trc, sau tng ng vi 2 dng i, i + 1 ca bng v c dng chng tnh li ln nhau, thm ch ch cn dng 1 mng tng ng vi 1 dng v tnh li chnh n nh v d u tin lm, nh vy c th tit kim c b nh chy cc d liu ln. Mt bi ton quy hoch ng c th c nhiu cch tip cn khc nhau, chn cch no l tu theo yu cu bi ton sao cho d dng ci t nht. Phng php ny thng khng kh khn trong vic tnh bng phng n, khng kh khn trong vic tm c s quy hoch ng, m kh khn chnh l nhn nhn ra bi ton quy hoch ng v tm ra cng thc truy hi gii n, cng vic ny i hi s nhanh nhy, khn kho, m ch t kinh nghim v s rn luyn mi c ch chng c l thuyt no cho ta mt phng php chung tht c th gii mi bi ton quy hoch ng c.L Minh Hong 135. L thuyt th1MC LC 0. M U .......................................................................................................................................... 3 1. CC KHI NIM C BN.............................................................................................................. 4 I. NH NGHA TH (GRAPH) ..................................................................................................................4 II. CC KHI NIM..........................................................................................................................................5 2. BIU DIN TH TRN MY TNH............................................................................................ 6 I. MA TRN LIN K (MA TRN K) ..........................................................................................................6 II. DANH SCH CNH.....................................................................................................................................7 III. DANH SCH K .........................................................................................................................................7 IV. NHN XT...................................................................................................................................................8 3. CC THUT TON TM KIM TRN TH ............................................................................. 10 I. BI TON.....................................................................................................................................................10 II. THUT TON TM KIM THEO CHIU SU (DEPTH FIRST SEARCH)..........................................11 III. THUT TON TM KIM THEO CHIU RNG (BREADTH FIRST SEARCH)...............................16 IV. PHC TP TNH TON CA BFS V DFS...................................................................................21 4. TNH LIN THNG CA TH ................................................................................................. 22 I. NH NGHA................................................................................................................................................22 II. TNH LIN THNG TRONG TH V HNG................................................................................23 III. TH Y V THUT TON WARSHALL ..............................................................................23 IV. CC THNH PHN LIN THNG MNH...........................................................................................26 5. VI NG DNG CA CC THUT TON TM KIM TRN TH ........................................ 36 I. XY DNG CY KHUNG CA TH .................................................................................................36 II. TP CC CHU TRNH C BN CA TH.......................................................................................38 III. NH CHIU TH V BI TON LIT K CU...........................................................................39 IV. LIT K KHP..........................................................................................................................................44 I. BI TON 7 CI CU ................................................................................................................................47 II. NH NGHA...............................................................................................................................................47 III. NH L.....................................................................................................................................................47 IV. THUT TON FLEURY TM CHU TRNH EULER .............................................................................48 V. CI T......................................................................................................................................................48 VI. THUT TON TT HN.........................................................................................................................50 7. CHU TRNH HAMILTON, NG I HAMILTON, TH HAMILTON.................................... 53 I. NH NGHA................................................................................................................................................53 II. NH L ......................................................................................................................................................53 III. CI T.....................................................................................................................................................53 8. BI TON NG I NGN NHT........................................................................................... 57 I. TH C TRNG S...............................................................................................................................57 II. BI TON NG I NGN NHT......................................................................................................57 III. TRNG HP TH KHNG C CHU TRNH M - THUT TON FORD BELLMAN...........58 IV. TRNG HP TRNG S TRN CC CUNG KHNG M - THUT TON DIJKSTRA.............60 V. THUT TON DIJKSTRA V CU TRC HEAP.................................................................................63 VI. TRNG HP TH KHNG C CHU TRNH - TH T T P ................................................65 L Minh Hong 136. L thuyt th2VII. NG I NGN NHT GIA MI CP NH - THUT TON FLOYD ...................................68 VIII. NHN XT..............................................................................................................................................70 9. BI TON CY KHUNG NH NHT .......................................................................................... 72 I. BI TON CY KHUNG NH NHT......................................................................................................72 II. THUT TON KRUSKAL (JOSEPH KRUSKAL - 1956) .......................................................................72 III. THUT TON PRIM (ROBERT PRIM - 1957).......................................................................................76 10. BI TON LUNG CC I TRN MNG.............................................................................. 80 I. BI TON.....................................................................................................................................................80 II. LT CT, NG TNG LUNG, NH L FORD - FULKERSON.................................................80 III. CI T.....................................................................................................................................................82 IV. THUT TON FORD - FULKERSON (L.R.FORD & D.R.FULKERSON - 1962)...............................85 11. BI TON TM B GHP CC I TRN TH HAI PHA................................................. 89 I. TH HAI PHA (BIPARTITE GRAPH).................................................................................................89 II. BI TON GHP I KHNG TRNG V CC KHI NIM...........................................................89 III. THUT TON NG M ....................................................................................................................90 IV. CI T.....................................................................................................................................................90 12. BI TON TM B GHP CC I VI TRNG S CC TIU TRN TH HAI PHA THUT TON HUNGARI.................................................................................................................... 95 I. BI TON PHN CNG ............................................................................................................................95 II. PHN TCH .................................................................................................................................................95 III. THUT TON ...........................................................................................................................................96 IV. CI T...................................................................................................................................................100 V. BI TON TM B GHP CC I VI TRNG S CC I TRN TH HAI PHA..........105 VI. PHC TP TNH TON..................................................................................................................106 13. BI TON TM B GHP CC I TRN TH................................................................ 111 I. CC KHI NIM.......................................................................................................................................111 II. THUT TON EDMONDS (1965) ..........................................................................................................112 III. PHNG PHP LAWLER (1973)..........................................................................................................113 IV. CI T...................................................................................................................................................115 V. PHC TP TNH TON...................................................................................................................119L Minh Hong 137. L thuyt th30. M U Trn thc t c nhiu bi ton lin quan ti mt tp cc i tng v nhng mi lin h gia chng, i hi ton hc phi t ra mt m hnh biu din mt cch cht ch v tng qut bng ngn ng k hiu, l th. Nhng tng c bn ca n c a ra t th k th XVIII bi nh ton hc Thu S Leonhard Euler, ng dng m hnh th gii bi ton v nhng cy cu Konigsberg ni ting. Mc d L thuyt th c khoa hc pht trin t rt lu nhng li c nhiu ng dng hin i. c bit trong khong vi mi nm tr li y, cng vi s ra i ca my tnh in t v s pht trin nhanh chng ca Tin hc, L thuyt th cng c quan tm n nhiu hn. c bit l cc thut ton trn th c nhiu ng dng trong nhiu lnh vc khc nhau nh: Mng my tnh, L thuyt m, Ti u ho, Kinh t hc v.v... Chng hn nh tr li cu hi: Hai my tnh trong mng c th lin h c vi nhau hay khng ?; hay vn phn bit hai hp cht ho hc c cng cng thc phn t nhng li khc nhau v cng thc cu to cng c gii quyt nh m hnh th. Hin nay, mn hc ny l mt trong nhng kin thc c s ca b mn khoa hc my tnh. Trong phm vi mt chuyn , khng th ni k v ni ht nhng vn ca l thuyt th. Tp bi ging ny s xem xt l thuyt th di gc ngi lp trnh, tc l kho st nhng thut ton c bn nht c th d dng ci t trn my tnh mt s ng dng ca n. Cc khi nim tru tng v cc php chng minh s c din gii mt cch hnh thc cho n gin v d hiu ch khng phi l nhng chng minh cht ch dnh cho ngi lm ton. Cng vic ca ngi lp trnh l c hiu c tng c bn ca thut ton v ci t c chng trnh trong bi ton tng qut cng nh trong trng hp c th. Thng thng sau qu trnh rn luyn, hu ht nhng ngi lp trnh gn nh phi thuc lng cc m hnh ci t, khi p dng c th ci t ng ngay v hiu qu, khng b mt thi gi vo cc cng vic g ri. Bi vic g ri mt thut ton tc l phi d li tng bc tin hnh v t tr li cu hi: "Ti bc nu ng th phi nh th no ?", thc ra l tiu ph thi gian v ch chng minh li tnh ng n ca thut ton trong trng hp c th, vi mt b d liu c th. Trc khi tm hiu cc vn v l thuyt th, bn phi c k thut lp trnh kh tt, ngoi ra nu c tm hiu trc v cc k thut vt cn, quay lui, mt s phng php ti u ho, cc bi ton quy hoch ng th s gip ch nhiu cho vic c hiu cc bi ging ny.L Minh Hong 138. L thuyt th41. CC KHI NIM C BN I. NH NGHA TH (GRAPH) L mt cu trc ri rc gm cc nh v cc cnh ni cc nh . c m t hnh thc: G = (V, E) V gi l tp cc nh (Vertices) v E gi l tp cc cnh (Edges). C th coi E l tp cc cp (u, v) vi u v v l hai nh ca V. Mt s hnh nh ca th:S giao thngMng my tnh Hnh 1: V d v m hnh thC th phn loi th theo c tnh v s lng ca tp cc cnh E: Cho th G = (V, E). nh ngha mt cch hnh thc 1. G c gi l n th nu gia hai nh u, v ca V c nhiu nht l 1 cnh trong E ni t u ti v. 2. G c gi l a th nu gia hai nh u, v ca V c th c nhiu hn 1 cnh trong E ni t u ti v (Hin nhin n th cng l a th). 3. G c gi l th v hng nu cc cnh trong E l khng nh hng, tc l cnh ni hai nh u, v bt k cng l cnh ni hai nh v, u. Hay ni cch khc, tp E gm cc cp (u, v) khng tnh th t. (u, v)(v, u) 4. G c gi l th c hng nu cc cnh trong E l c nh hng, c th c cnh ni t nh u ti nh v nhng cha chc c cnh ni t nh v ti nh u. Hay ni cch khc, tp E gm cc cp (u, v) c tnh th t: (u, v) (v, u). Trong th c hng, cc cnh c gi l cc cung. th v hng cng c th coi l th c hng nu nh ta coi cnh ni hai nh u, v bt k tng ng vi hai cung (u, v) v (v, u). V d:V hngC hngV hngn th Hnh 2: Phn loi thL Minh HongC hng a th 139. L thuyt th5II. CC KHI NIM Nh trn nh ngha th G = (V, E) l mt cu trc ri rc, tc l cc tp V v E hoc l tp hu hn, hoc l tp m c, c ngha l ta c th nh s th t 1, 2, 3... cho cc phn t ca tp V v E. Hn na, ng trn phng din ngi lp trnh cho my tnh th ta ch quan tm n cc th hu hn (V v E l tp hu hn) m thi, chnh v vy t y v sau, nu khng ch thch g thm th khi ni ti th, ta hiu rng l th hu hn. Cnh lin thuc, nh k, bc i vi th v hng G = (V, E). Xt mt cnh e E, nu e = (u, v) th ta ni hai nh u v v l k nhau (adjacent) v cnh e ny lin thuc (incident) vi nh u v nh v. Vi mt nh v trong th, ta nh ngha bc (degree) ca v, k hiu deg(v) l s cnh lin thuc vi v. D thy rng trn n th th s cnh lin thuc vi v cng l s nh k vi v. nh l: Gi s G = (V, E) l th v hng vi m cnh, khi tng tt c cc bc nh trong V s bng 2m: deg(v) = 2mvVChng minh: Khi ly tng tt c cc bc nh tc l mi cnh e = (u, v) bt k s c tnh mt ln trong deg(u) v mt ln trong deg(v). T suy ra kt qu. H qu: Trong th v hng, s nh bc l l s chn i vi th c hng G = (V, E). Xt mt cung e E, nu e = (u, v) th ta ni u ni ti v v v ni t u, cung e l i ra khi nh u v i vo nh v. nh u khi c gi l nh u, nh v c gi l nh cui ca cung e. Vi mi nh v trong th c hng, ta nh ngha: Bn bc ra ca v k hiu deg+(v) l s cung i ra khi n; bn bc vo k hiu deg-(v) l s cung i vo nh nh l: Gi s G = (V, E) l th c hng vi m cung, khi tng tt c cc bn bc ra ca cc nh bng tng tt c cc bn bc vo v bng m: degvV( v) = deg + ( v) = m vVChng minh: Khi ly tng tt c cc bn bc ra hay bn bc vo, mi cung (u, v) bt k s c tnh ng 1 ln trong deg+(u) v cng c tnh ng 1 ln trong deg-(v). T suy ra kt qu Mt s tnh cht ca th c hng khng ph thuc vo hng ca cc cung. Do tin trnh by, trong mt s trng hp ta c th khng quan tm n hng ca cc cung v coi cc cung l cc cnh ca th v hng. V th v hng c gi l th v hng nn ca th c hng ban u.L Minh Hong 140. L thuyt th62. BIU DIN TH TRN MY TNH I. MA TRN LIN K (MA TRN K) Gi s G = (V, E) l mt n th c s nh (k hiu V) l n, Khng mt tnh tng qut c th coi cc nh c nh s 1, 2, ..., n. Khi ta c th biu din th bng mt ma trn vung A = [aij] cp n. Trong : aij = 1 nu (i, j) E aij = 0 nu (i, j) E Quy c aii = 0 vi i; i vi a th th vic biu din cng tng t trn, ch c iu nu nh (i, j) l cnh th khng phi ta ghi s 1 vo v tr aij m l ghi s cnh ni gia nh i v nh j V d: 1 2 3 4 5 1 1 0 0 1 1 0 5 2 2 0 0 0 1 1 3 1 0 0 0 1 4 1 1 0 0 0 4 3 5 0 1 1 0 01 2 3 4 51 0 0 0 1 02 0 0 0 0 13 1 0 0 0 04 0 1 0 0 05 0 0 1 0 01 5243Cc tnh cht ca ma trn lin k: 1. i vi th v hng G, th ma trn lin k tng ng l ma trn i xng (aij = aji), iu ny khng ng vi th c hng. 2. Nu G l th v hng v A l ma trn lin k tng ng th trn ma trn A: Tng cc s trn hng i = Tng cc s trn ct i = Bc ca nh i = deg(i) 3. Nu G l th c hng v A l ma trn lin k tng ng th trn ma trn A: Tng cc s trn hng i = Bn bc ra ca nh i = deg+(i) Tng cc s trn ct i = Bn bc vo ca nh i = deg-(i) Trong trng hp G l n th, ta c th biu din ma trn lin k A tng ng l cc phn t logic. aij = TRUE nu (i, j) E v aij = FALSE nu (i, j) E u im ca ma trn lin k: n gin, trc quan, d ci t trn my tnh kim tra xem hai nh (u, v) ca th c k nhau hay khng, ta ch vic kim tra bng mt php so snh: auv 0. Nhc im ca ma trn lin k:L Minh Hong 141. L thuyt th7Bt k s cnh ca th l nhiu hay t, ma trn lin k lun lun i hi n2 nh lu cc phn t ma trn, iu gy lng ph b nh dn ti vic khng th biu din c th vi s nh ln. Vi mt nh u bt k ca th, nhiu khi ta phi xt tt c cc nh v khc k vi n, hoc xt tt c cc cnh lin thuc vi n. Trn ma trn lin k vic c thc hin bng cch xt tt c cc nh v v kim tra iu kin auv 0. Nh vy, ngay c khi nh u l nh c lp (khng k vi nh no) hoc nh treo (ch k vi 1 nh) ta cng buc phi xt tt c cc nh v kim tra iu kin trn dn ti lng ph thi gian II. DANH SCH CNH Trong trng hp th c n nh, m cnh, ta c th biu din th di dng danh sch cnh, trong cch biu din ny, ngi ta lit k tt c cc cnh ca th trong mt danh sch, mi phn t ca danh sch l mt cp (u, v) tng ng vi mt cnh ca th. (Trong trng hp th c hng th mi cp (u, v) tng ng vi mt cung, u l nh u v v l nh cui ca cung). Danh sch c lu trong b nh di dng mng hoc danh sch mc ni. V d vi th di y: 1 5243Ci t trn mng: 1 (1, 3)2 (2, 4)3 (3, 5)4 (4, 1)5 (5, 2)Ci t trn danh sch mc ni: 1324354152 nilu im ca danh sch cnh: Trong trng hp th tha (c s cnh tng i nh: chng hn m < 6n), cch biu din bng danh sch cnh s tit kim c khng gian lu tr, bi n ch cn 2m nh lu danh sch cnh. Trong mt s trng hp, ta phi xt tt c cc cnh ca th th ci t trn danh sch cnh lm cho vic duyt cc cnh d dng hn. (Thut ton Kruskal chng hn) Nhc im ca danh sch cnh: Nhc im c bn ca danh sch cnh l khi ta cn duyt tt c cc nh k vi nh v no ca th, th chng c cch no khc l phi duyt tt c cc cnh, lc ra nhng cnh c cha nh v v xt nh cn li. iu kh tn thi gian trong trng hp th dy (nhiu cnh). III. DANH SCH K khc phc nhc im ca cc phng php ma trn k v danh sch cnh, ngi ta xut phng php biu din th bng danh sch k. Trong cch biu din ny, vi mi nh v ca th, ta cho tng ng vi n mt danh sch cc nh k vi v. Vi th G = (V, E). V gm n nh v E gm m cnh. C hai cch ci t danh sch k ph bin: L Minh Hong 142. L thuyt th8 12435Cch 1: (Forward Star) Dng mt mng cc nh, mng chia lm n on, on th i trong mng lu danh sch cc nh k vi nh i: V d vi th sau, danh sch k s l mt mng A gm 12 phn t: 12345678910111223 5 1 3 1 2 4 3 5 1 4 on 1 on 2 on 3 on 4 on 5 bit mt on nm t ch s no n ch s no, ta c mt mng lu v tr ring. Ta gi mng lu v tr l mng Head. Head[i] s bng ch s ng lin trc on th i. Quy c Head[n + 1] s bng m. Vi th bn th mng VT[1..6] s l: (0, 3, 5, 8, 10, 12) Nh vy on t v tr Head[i] + 1 n Head[i + 1] trong mng A s cha cc nh k vi nh i. Lu rng vi th c hng gm m cung th cu trc Forward Star cn phi cha m phn t, vi th v hng m cnh th cu trc Forward Star cn phi cha 2m phn t Cch 2: Dng cc danh sch mc ni: Vi mi nh i ca th, ta cho tng ng vi n mt danh sch mc ni cc nh k vi i, c ngha l tng ng vi mt nh i, ta phi lu li List[i] l cht ca mt danh sch mc ni. V d vi th trn, danh sch mc ni s l: List[1]235List[2]13List[3]12List[4]35NilList[5]14Nil4NilNilNilu im ca danh sch k: i vi danh sch k, vic duyt tt c cc nh k vi mt nh v cho trc l ht sc d dng, ci tn "danh sch k" cho thy r iu ny. Vic duyt tt c cc cnh cng n gin v mt cnh thc ra l ni mt nh vi mt nh khc k n. Nhc im ca danh sch k V l thuyt, so vi hai phng php biu din trn, danh sch k tt hn hn. Ch c iu, trong trng hp c th m ma trn k hay danh sch cnh khng th hin nhc im th ta nn dng ma trn k (hay danh sch cnh) bi ci t danh sch k c phn di dng hn. IV. NHN XT Trn y l nu cc cch biu din th trong b nh ca my tnh, cn nhp d liu cho th th c nhiu cch khc nhau, dng cch no th tu. Chng hn nu biu din bng ma trn k m cho nhp d liu c ma trn cp n x n (n l s nh) th khi nhp t bn phm s rt mt thi gian, ta cho nhp kiu danh sch cnh cho nhanh. Chng hn mng A (nxn) l ma trn k ca mt th v hng th ta c th khi to ban u mng A gm ton s 0, sau cho ngi s dng nhp cc cnh bng cch nhp cc cp (i, j); chng trnh s tng A[i, j] v A[j, i] ln 1. Vic nhp c th cho kt thc khi ngi s dng nhp gi tr i = 0. V d: program Nhap_Do_Thi; L Minh Hong 143. L thuyt th9var A: array[1..100, 1..100] of Integer; {Ma trn k ca th} n, i, j: Integer; begin Write('Number of vertices'); ReadLn(n); FillChar(A, SizeOf(A), 0); repeat Write('Enter edge (i, j) (i = 0 to exit) '); ReadLn(i, j); {Nhp mt cp (i, j) tng nh l nhp danh sch cnh} if i 0 then begin {nhng lu tr trong b nh li theo kiu ma trn k} Inc(A[i, j]); Inc(A[j, i]); end; until i = 0; {Nu ngi s dng nhp gi tr i = 0 th dng qu trnh nhp, nu khng th tip tc} end.Trong nhiu trng hp khng gian lu tr, vic chuyn i t cch biu din no sang cch biu din khc khng c g kh khn. Nhng i vi thut ton ny th lm trn ma trn k ngn gn hn, i vi thut ton kia c th lm trn danh sch cnh d dng hn v.v... Do , vi mc ch d hiu, cc chng trnh sau ny s la chn phng php biu din sao cho vic ci t n gin nht nhm nu bt c bn cht thut ton. Cn trong trng hp c th bt buc phi dng mt cch biu din no khc, th vic sa i chng trnh cng khng tn qu nhiu thi gian.L Minh Hong 144. L thuyt th103. CC THUT TON TM KIM TRN TH I. BI TON Cho th G = (V, E). u v v l hai nh ca G. Mt ng i (path) di l t nh u n nh v l dy (u = x0, x1, ..., xl = v) tho mn (xi, xi+1) E vi i: (0 i < l). ng i ni trn cn c th biu din bi dy cc cnh: (u = x0, x1), (x1, x2), ..., (xl-1, xl = v) 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 gi l chu trnh (Circuit), ng i khng c cnh no i qua hn 1 ln gi l ng i n, tng t ta c khi nim chu trnh n. V d: Xt mt th v hng v mt th c hng di y: 231246531465Trn c hai th, (1, 2, 3, 4) l ng i n di 3 t nh 1 ti nh 4. Bi (1, 2) (2, 3) v (3, 4) u l cc cnh (hay cung). (1, 6, 5, 4) khng phi ng i bi (6, 5) khng phi l cnh (hay cung). Mt bi ton quan trng trong l thuyt th l bi ton duyt tt c cc nh c th n c t mt nh xut pht no . Vn ny a v mt bi ton lit k m yu cu ca n l khng c b st hay lp li bt k nh no. Chnh v vy m ta phi xy dng nhng thut ton cho php duyt mt cch h thng cc nh, nhng thut ton nh vy gi l nhng thut ton tm kim trn th v y ta quan tm n hai thut ton c bn nht: thut ton tm kim theo chiu su v thut ton tm kim theo chiu rng cng vi mt s ng dng ca chng. Lu : 1. Nhng ci t di y l cho n th v hng, mun lm vi th c hng hay a th cng khng phi sa i g nhiu. 2. D liu v th s c nhp t file vn bn GRAPH.INP. Trong : Dng 1 cha s nh n ( 100), s cnh m ca th, nh xut pht S, nh kt thc F cch nhau mt du cch. m dng tip theo, mi dng c dng hai s nguyn dng u, v cch nhau mt du cch, th hin c cnh ni nh u v nh v trong th. 3. Kt qu ghi ra file vn bn GRAPH.OUT Dng 1: Ghi danh sch cc nh c th n c t S Dng 2: ng i t S ti F c in ngc theo chiu t F v SL Minh Hong 145. L thuyt th1124 617 8 35GRAPH.INP 8 7 1 5 1 2 1 3 2 3 2 4 3 5 4 6 7 8GRAPH.OUT 1, 2, 3, 5, 4, 6, 5; begin Trace[v] := u; {Lu vt ng i, nh m t ti v l u} DFS(v); {Gi quy duyt tng t i vi v} end; end; begin {Chng trnh chnh} < Nhp d liu: th, nh xut pht S, nh ch F >; < Khi to: Tt c cc nh u cha b nh du >; DFS(S); < Nu F cha b nh du th khng th c ng i t S ti F >; < Nu F b nh du th truy theo vt tm ng i t S ti F >; end. PROG03_1.PAS * Thut ton tm kim theo chiu su program Depth_First_Search_1; const max = 100; var a: array[1..max, 1..max] of Boolean; {Ma trn k ca th} Free: array[1..max] of Boolean; {Free[v] = True v cha c thm n} Trace: array[1..max] of Integer; {Trace[v] = nh lin trc v trn ng i t S ti v} n, S, F: Integer;L Minh Hong 146. L thuyt th12procedure Enter; {Nhp d liu t thit b nhp chun (Input)} var i, u, v, m: Integer; begin FillChar(a, SizeOf(a), False); {Khi to th cha c cnh no} ReadLn(n, m, S, F); {c dng 1 ra 4 s n, m, S v F} for i := 1 to m do {c m dng tip ra danh sch cnh} begin ReadLn(u, v); a[u, v] := True; a[v, u] := True; end; end; procedure DFS(u: Integer); var v: Integer; begin Write(u, ', '); Free[u] := False; for v := 1 to n do if Free[v] and a[u, v] then begin Trace[v] := u; DFS(v); end; end;{Thut ton tm kim theo chiu su bt u t nh u}{Thng bo ti c u} {nh du u thm} {Vi mi nh v cha thm k vi u} {Lu vt ng i: nh lin trc v trong ng i t S ti v l u} {Tip tc tm kim theo chiu su bt u t v}procedure Result; {In ng i t S ti F} begin WriteLn; {Vo dng th hai ca Output file} if Free[F] then {Nu F cha nh du thm tc l khng c ng} WriteLn('Path from ', S, ' to ', F, ' not found') else {Truy vt ng i, bt u t F} begin while F S do begin Write(F, '; cy tm kim DFS := >;Bi thut ton Tarjan ch l sa i mt cht thut ton DFS, cc thao tc vo/ra ngn xp c thc hin khng qu n ln. Vy nn nu th c n nh v m cung th phc tp tnh ton ca thut ton Tarjan vn l O(n + m) trong trng hp biu din th bng danh sch k, l O(n2) trong trng hp biu din bng ma trn k v l O(n.m) trong trng hp biu din bng danh sch cnh. Mi th sn sng, di y l ton b chng trnh. Trong chng trnh ny, ta s dng: Ma trn k A biu din th. Mng Free kiu Boolean, Free[u] = True nu u cha b lit k vo thnh phn lin thng no, tc l u cha b loi khi th. Mng Numbering v Low vi cng dng nh trn, quy c Numbering[u] = 0 nu nh u cha c thm. Mng Stack, th tc Push, hm Pop m t cu trc ngn xp. Input: file vn bn GRAPH.INP: Dng u: Ghi s nh n ( 100) v s cung m ca th cch nhau mt du cch m dng tip theo, mi dng ghi hai s nguyn u, v cch nhau mt du cch th hin c cung (u, v) trong th Output: file vn bn GRAPH.OUT Lit k cc thnh phn lin thng mnhL Minh Hong 166. L thuyt th32 12 8 3 4 95106 11GRAPH.INP 11 15 1 2 1 8 2 3 3 4 4 2 4 5 5 6 6 7 7 5 8 9 9 4 9 10 10 8 10 11 11 8GRAPH.OUT Component 1: 7, 6, 5, Component 2: 4, 3, 2, Component 3: 11, 10, 9, 8, Component 4: 1,7PROG04_2.PAS * Thut ton Tarjan lit k cc thnh phn lin thng mnh program Strong_connectivity; const max = 100; var a: array[1..max, 1..max] of Boolean; Free: array[1..max] of Boolean; Numbering, Low, Stack: array[1..max] of Integer; n, Count, ComponentCount, Last: Integer; {Nhp d liu (t thit b nhp chun)} procedure Enter; var i, u, v, m: Integer; begin FillChar(a, SizeOf(a), False); ReadLn(n, m); for i := 1 to m do begin ReadLn(u, v); a[u, v] := True; end; end; {Khi to} procedure Init; begin FillChar(Numbering, SizeOf(Numbering), 0); FillChar(Free, SizeOf(Free), True); Last := 0; Count := 0; ComponentCount := 0; end;{Mi nh u cha thm} {Cha nh no b loi} {Ngn xp rng} {Bin nh s th t thm} {Bin nh s cc thnh phn lin thng}procedure Push(v: Integer); begin Inc(Last); Stack[Last] := v; end;{y mt nh v vo ngn xp}function Pop: Integer; begin Pop := Stack[Last]; Dec(Last); end;{Ly mt nh khi ngn xp, tr v trong kt qu hm}L Minh Hong 167. L thuyt th33function Min(x, y: Integer): Integer; begin if x < y then Min := x else Min := y; end; procedure Visit(u: Integer); {Thut ton tm kim theo chiu su bt u t u} var v: Integer; begin Inc(Count); Numbering[u] := Count; {Trc ht nh s cho u} Low[u] := Numbering[u]; {Coi u c cung ti u, nn c th khi gn Low[u] th ny ri sau cc tiu ho dn} Push(u); {y u vo ngn xp} for v := 1 to n do if Free[v] and a[u, v] then {Xt nhng nh v k u} if Numbering[v] 0 then {Nu v thm} Low[u] := Min(Low[u], Numbering[v]) {Cc tiu ho Low[u] theo cng thc ny} else {Nu v cha thm} begin Visit(v); {Tip tc tm kim theo chiu su bt u t v} Low[u] := Min(Low[u], Low[v]); {Ri cc tiu ho Low[u] theo cng thc ny} end; {n y th nh u c duyt xong, tc l cc nh thuc nhnh DFS gc u u thm} if Numbering[u] = Low[u] then {Nu u l cht} begin {Lit k thnh phn lin thng mnh c cht u}Inc(ComponentCount); WriteLn('Component ', ComponentCount, ': '); repeat v := Pop; {Ly dn cc nh ra khi ngn xp} Write(v, ', '); {Lit k cc nh } Free[v] := False; {Ri loi lun khi th} until v = u; {Cho ti khi ly ti nh u} WriteLn; end; end; procedure Solve; var u: Integer; begin {Thay v thm mt nh gi x v cc cung (x, v) vi mi nh v ri gi Visit(x), ta c th lm th ny cho nhanh} {sau ny phi hu b thnh phn lin thng gm mi mt nh gi }for u := 1 to n do if Numbering[u] = 0 then Visit(u); end; begin Assign(Input, 'GRAPH.INP'); Reset(Input); Assign(Output, 'GRAPH.OUT'); Rewrite(Output); Enter; Init; Solve; Close(Input); Close(Output); end.Bi tp: 1. Phng php ci t nh trn c th ni l rt hay v hiu qu, i hi ta phi hiu r bn cht thut ton, nu khng th rt d nhm. Trn thc t, cn c mt phng php khc d hiu hn, tuy tnh hiu qu c km hn mt cht. Hy vit chng trnh m t phng php sau: Vn dng thut ton tm kim theo chiu su vi th tc Visit ni u mc, nh s li cc nh t 1 ti n theo th t duyt xong, sau o chiu tt c cc cung ca th. Xt ln lt cc nh L Minh Hong 168. L thuyt th34theo th t t nh duyt xong sau cng ti nh duyt xong u tin, vi mi nh , ta li dng thut ton tm kim trn th (BFS hay DFS) lit k nhng nh no n c t nh ang xt, chnh l mt thnh phn lin thng mnh. Lu l khi lit k xong thnh phn no, ta loi ngay cc nh ca thnh phn khi th. Tnh ng n ca phng php c th hnh dung khng my kh khn: Trc ht ta thm vo th nh x v cc cung (x, v) vi mi v, sau gi Visit(x) xy dng cy DFS gc x. Hin nhin x l cht ca thnh phn lin thng ch gm mi x. Sau b nh x khi cy DFS, cy s phn r thnh cc cy con. nh r duyt xong sau cng chc chn l gc ca mt cy con (bi khi duyt xong n chc chn s li v x) suy ra r l cht. Hn th na, nu mt nh u no ti c r th u cng phi thuc cy con gc r. Bi nu gi s phn chng rng u thuc cy con khc th u phi c thm trc r (do cy con gc r c thm ti sau cng), c ngha l khi Visit(u) th r cha thm. Vy nn r s thuc nhnh DFS gc u, mu thun vi lp lun r l gc. T suy ra nu u ti c r th r ti c u, tc l khi o chiu cc cung, nu r ti c nh no th nh thuc thnh phn lin thng cht r. Loi b thnh phn lin thng vi cht r khi th. Cy con gc r li phn r thnh nhiu cy con. Lp lun tng t nh trn vi v' l nh duyt xong sau cng. V d: 11162453451038 679 29 1081 117nh s li, o chiu cc cung v duyt BFS vi cch chn cc nh xut pht ngc li vi th t duyt xong (Th t 11, 10... 3, 2, 1)2. Thut ton Warshall c th p dng tm bao ng ca th c hng, vy hy kim tra tnh lin thng mnh ca mt th c hng bng hai cch: Dng cc thut ton tm kim trn th v thut ton Warshall, sau so snh u, nhc im ca mi phng php 3. M cung hnh ch nht kch thc m x n gm cc vung n v. Trn mi k t: O: Nu an ton X: Nu c cm by E: Nu l c mt nh thm him ang ng. Duy nht ch c 1 ghi ch E. Nh thm him c th t mt i sang mt trong s cc chung cnh vi ang ng. Mt cch i thot khi m cung l mt hnh trnh i qua cc an ton ra mt bin. Hy ch gip cho nh thm him mt hnh trnh thot ra khi m cungL Minh Hong 169. L thuyt th354. Trn mt phng vi h to Decattes vung gc cho n ng trn, mi ng trn xc nh bi b 3 s thc (X, Y, R) y (X, Y) l to tm v R l bn knh. Hai ng trn gi l thng nhau nu chng c im chung. Hy chia cc ng trn thnh mt s ti thiu cc nhm sao cho hai ng trn bt k trong mt nhm bt k c th i c sang nhau sau mt s hu hn cc bc di chuyn gia hai ng trn thng nhau.L Minh Hong 170. L thuyt th365. VI NG DNG CA CC THUT TON TM KIM TRN TH I. XY DNG CY KHUNG CA TH Cy l th v hng, lin thng, khng c chu trnh n. th v hng khng c chu trnh n gi l rng (hp ca nhiu cy). Nh vy mi thnh phn lin thng ca rng l mt cy. Khi nim cy c s dng rng ri trong nhiu lnh vc khc nhau: Nghin cu cu trc cc phn t hu c, xy dng cc thut ton t chc th mc, cc thut ton tm kim, lu tr v nn d liu... 1. nh l (Daisy Chain Theorem) Gi s T = (V, E) l th v hng vi n nh. Khi cc mnh sau l tng ng: 1. T l cy 2. T khng cha chu trnh n v c n - 1 cnh 3. T lin thng v mi cnh ca n u l cu 4. Gia hai nh bt k ca T u tn ti ng mt ng i n 5. T khng cha chu trnh n nhng h c thm vo mt cnh ta thu c mt chu trnh n. 6. T lin thng v c n - 1 cnh Chng minh: 12: "T l cy" "T khng cha chu trnh n v c n - 1 cnh" T T l cy, theo nh ngha T khng cha chu trnh n. Ta s chng minh cy T c n nh th phi c n - 1 cnh bng quy np theo s nh n. R rng khi n = 1 th cy c 1 nh s cha 0 cnh. Nu n > 1 th do th hu hn nn s cc ng i n trong T cng hu hn, gi P = (v1, v2, ..., vk) l mt ng i di nht (qua nhiu cnh nht) trong T. nh v1 khng th c cnh ni vi nh no trong s cc nh v3, v4, ..., vk. Bi nu c cnh (v1, vp) (3 p k) th ta s thit lp c chu trnh n (v1, v2, ..., vp, v1). Mt khc, nh v1 cng khng th c cnh ni vi nh no khc ngoi cc nh trn P trn bi nu c cnh (v1, v0) (v0P) th ta thit lp c ng i (v0, v1, v2, ..., vk) di hn ng i P. Vy nh v1 ch c ng mt cnh ni vi v2 hay v1 l nh treo. Loi b v1 v cnh (v1, v2) khi T ta c th mi cng l cy v c n - 1 nh, cy ny theo gi thit quy np c n - 2 cnh. Vy cy T c n - 1 cnh. 23: "T khng cha chu trnh n v c n - 1 cnh""T lin thng v mi cnh ca n u l cu" Gi s T c k thnh phn lin thng T1, T2, ..., Tk. V T khng cha chu trnh n nn cc thnh phn lin thng ca T cng khng cha chu trnh n, tc l cc T1, T2, ..., Tk u l cy. Gi n1, n2, ..., nk ln lt l s nh ca T1, T2, ..., Tk th cy T1 c n1 - 1 cnh, cy T2 c n2 - 1 cnh..., cy Tk c nk - 1 cnh. Cng li ta c s cnh ca T l n1 + n2 + ... + nk - k = n - k cnh. Theo gi thit, cy T c n - 1 cnh, suy ra k = 1, th ch c mt thnh phn lin thng l th lin thng. By gi khi T lin thng, nu b i mt cnh ca T th T s cn n - 2 cnh v s khng lin thng bi nu T vn lin thng th do T khng c chu trnh nn T s l cy v c n - 1 cnh. iu chng t mi cnh ca T u l cu. 34: "T lin thng v mi cnh ca n u l cu""Gia hai nh bt k ca T c ng mt ng i n" Gi x v y l 2 nh bt k trong T, v T lin thng nn s c mt ng i n t x ti y. Nu tn ti mt ng i n khc t x ti y th nu ta b i mt cnh (u, v) nm trn ng i th nht nhng khng nm trn ng i th hai th t u vn c th n c v bng cch: i t u i theo L Minh Hong 171. L thuyt th37chiu ti x theo cc cnh thuc ng th nht, sau i t x ti y theo ng th hai, ri li i t y ti v theo cc cnh thuc ng i th nht. iu ny mu thun vi gi thit (u, v) l cu. 45: "Gia hai nh bt k ca T c ng mt ng i n""T khng cha chu trnh n nhng h c thm vo mt cnh ta thu c mt chu trnh n" Th nht T khng cha chu trnh n v nu T cha chu trnh n th chu trnh qua t nht hai nh u, v. R rng dc theo cc cnh trn chu trnh th t u c hai ng i n ti v. V l. Gia hai nh u, v bt k ca T c mt ng i n ni u vi v, vy khi thm cnh (u, v) vo ng i ny th s to thnh chu trnh. 56: "T khng cha chu trnh n nhng h c thm vo mt cnh ta thu c mt chu trnh n""T lin thng v c n - 1 cnh" Gi u v v l hai nh bt k trong T, thm vo T mt cnh (u, v) na th theo gi thit s to thnh mt chu trnh cha cnh (u, v). Loi b cnh ny i th phn cn li ca chu trnh s l mt ng i t u ti v. Mi cp nh ca T u c mt ng i ni chng tc l T lin thng, theo gi thit T khng cha chu trnh n nn T l cy v c n - 1 cnh. 61: "T lin thng v c n - 1 cnh""T l cy" Gi s T khng l cy th T c chu trnh, hu b mt cnh trn chu trnh ny th T vn lin thng, nu th mi nhn c vn c chu trnh th li hu mt cnh trong chu trnh mi. C nh th cho ti khi ta nhn c mt th lin thng khng c chu trnh. th ny l cy nhng li c < n - 1 cnh (v l). Vy T l cy 2. nh ngha Gi s G = (V, E) l th v hng. Cy T = (V, F) vi FE gi l cy khung ca th G. Tc l nu nh loi b mt s cnh ca G c mt cy th cy gi l cy khung (hay cy bao trm ca th). D thy rng vi mt th v hng lin thng c th c nhiu cy khung.G T1 T2 Hnh 13: th G v mt s v d cy khung T1, T2, T3 ca nT3iu kin cn v mt th v hng c cy khung l th phi lin thng S cy khung ca th y Kn l nn-2.3. Thut ton xy dng cy khung Xt th v hng lin thng G = (V, E) c n nh, c nhiu thut ton xy dng cy khung ca G a) Xy dng cy khung bng thut ton hp nht Trc ht, t T = (V, ); T khng cha cnh no th c th coi T gm n cy ri rc, mi cy ch c 1 nh. Sau xt ln lt cc cnh ca G, nu cnh ang xt ni hai cy khc nhau trong T th thm cnh vo T, ng thi hp nht hai cy li thnh mt cy. C lm nh vy cho ti khi kt np n - 1 cnh vo T th ta c T l cy khung ca th. Cc phng php kim tra cnhL Minh Hong 172. L thuyt th38c ni hai cy khc nhau hay khng cng nh k thut hp nht hai cy s c bn k hn trong thut ton Kruskal 9. b) Xy dng cy khung bng cc thut ton tm kim trn th. p dng thut ton BFS hay DFS bt u t nh S, ti mi bc t nh u ti thm nh v, ta thm vo thao tc ghi nhn lun cnh (u, v) vo cy khung. Do th lin thng nn thut ton s xut pht t S v ti thm tt c cc nh cn li, mi nh ng mt ln, tc l qu trnh duyt s ghi nhn c ng n - 1 cnh. Tt c nhng cnh khng to thnh chu trnh n bi thut ton khng thm li nhng nh thm. Theo mnh tng ng th hai, ta c nhng cnh ghi nhn c to thnh mt cy khung ca th. 1S1234567891011S234567891011Hnh 14: Cy khung DFS v cy khung BFS (Mi tn ch chiu i thm cc nh)II. TP CC CHU TRNH C BN CA TH Xt mt th v hng lin thng G = (V, E); gi T = (V, F) l mt cy khung ca n. Cc cnh ca cy khung c gi l cc cnh trong, cn cc cnh khc l cc cnh ngoi. Nu thm mt cnh ngoi eEF vo cy khung T, th ta c ng mt chu trnh n trong T, k hiu chu trnh ny l Ce. Tp cc chu trnh: = {Ce eEF} c gi l tp cc chu trnh c s ca th G. Cc tnh cht quan trng ca tp cc chu trnh c s: 1. Tp cc chu trnh c s l ph thuc vo cy khung, hai cy khung khc nhau c th cho hai tp chu trnh c s khc nhau. 2. Nu th lin thng c n nh v m cnh, th trong cy khung c n - 1 cnh, cn li m - n + 1 cnh ngoi. Tng ng vi mi cnh ngoi c mt chu trnh c s, vy s chu trnh c s ca th lin thng l m - n + 1. 3. Tp cc chu trnh c s l tp nhiu nht cc chu trnh tho mn: Mi chu trnh c ng mt cnh ring, cnh khng nm trong bt c mt chu trnh no khc. Bi nu c mt tp gm t chu trnh tho mn iu th vic loi b cnh ring ca mt chu trnh s khng lm mt tnh lin thng ca th, ng thi khng nh hng ti s tn ti ca cc chu trnh khc. Nh vy nu loi b tt c cc cnh ring th th vn lin thng v cn m - t cnh. th lin thng th khng th c t hn n - 1 cnh nn ta c m - t n - 1 hay t m - n + 1. 4. Mi cnh trong mt chu trnh n bt k u phi thuc mt chu trnh c s. Bi nu c mt cnh (u, v) khng thuc mt chu trnh c s no, th khi ta b cnh i th vn lin thng v khng nh hng ti s tn ti ca cc chu trnh c s. Li b tip nhng cnh ngoi L Minh Hong 173. L thuyt th39ca cc chu trnh c s th th vn lin thng v cn li m - (m - n + 1) - 1 = n - 2 cnh. iu ny v l. 5. i vi th G = (V, E) c n nh v m cnh, c k thnh phn lin thng, ta c th xt cc thnh phn lin thng v xt rng cc cy khung ca cc thnh phn . Khi c th m rng khi nim tp cc chu trnh c s cho th v hng tng qut: Mi khi thm mt cnh khng nm trong cc cy khung vo rng, ta c ng mt chu trnh n, tp cc chu trnh n to thnh bng cch ghp cc cnh ngoi nh vy gi l tp cc chu trnh c s ca th G. S cc chu trnh c s l m - n + k. III. NH CHIU TH V BI TON LIT K CU Bi ton t ra l cho mt th v hng lin thng G = (V, E), hy thay mi cnh ca th bng mt cung nh hng c mt th c hng lin thng mnh. Nu c phng n nh chiu nh vy th G c gi l th nh chiu c. Bi ton nh chiu th c ng dng r nht trong s giao thng ng b. Chng hn nh tr li cu hi: Trong mt h thng ng ph, liu c th quy nh cc ng ph thnh ng mt chiu m vn m bo s i li gia hai nt giao thng bt k hay khng. 1. Php nh chiu DFS Xt m hnh duyt th bng thut ton tm kim theo chiu su bt u t nh 1. V th l v hng lin thng nn qu trnh tm kim s thm c ht cc nh. procedure Visit(u V); begin ; for (v: (u, v) E) do if then Visit(v); end; begin ; Visit(1); end;Coi mt cnh ca th tng ng vi hai cung c hng ngc chiu nhau. Thut ton tm kim theo chiu su theo m hnh trn s duyt qua ht cc nh ca th v tt c cc cung na. Qu trnh duyt cho ta mt cy tm kim DFS. Ta c cc nhn xt sau: Nhn xt 1: Qu trnh duyt s khng c cung cho (cung i t mt nhnh DFS thm sau ti nhnh DFS thm trc). Tht vy, nu qu trnh duyt xt ti mt cung (u, v): Nu u thm trc v c ngha l khi Visit(u) c gi th v cha thm, v th tc Visit(u) s xy dng nhnh DFS gc u gm nhng nh cha thm n c t u, suy ra v nm trong nhnh DFS gc u v l hu du ca u, hay (u, v) l cung DFS hoc cung xui. Nu u thm sau v (v thm trc u), tng t trn, ta suy ra u nm trong nhnh DFS gc v, v l tin bi ca u (u, v) l cung ngc. Nhn xt 2: Trong qu trnh duyt th theo chiu su, nu c duyt qua cung (u, v) no th ta b i cung (v, u). (Tc l h duyt qua cung (u, v) th ta nh chiu lun cnh (u, v) theo chiu t u ti v), ta c mt php nh chiu th gi l php nh chiu DFS.L Minh Hong 174. L thuyt th40 1122 343457689105768910Hnh 15: Php nh chiu DFSNhn xt 3: Vi php nh chiu nh trn, th s ch cn cc cung trn cy DFS v cung ngc, khng cn li cung xui. Bi trn th v hng ban u, nu ta coi mt cnh l hai cung c hng ngc chiu nhau th vi mt cung xui ta c cung ngc chiu vi n l cung ngc. Do tnh cht DFS, cung ngc c duyt trc cung xui tng ng, nn khi nh chiu cnh theo cung ngc th cung xui s b hu v khng b xt ti na. Nhn xt 4: Trong th v hng ban u, cnh b nh hng thnh cung ngc chnh l cnh ngoi ca cy khung DFS. Chnh v vy, mi chu trnh c s trong th v hng ban u vn s l chu trnh trong th c hng to ra. (y l mt phng php hiu qu lit k cc chu trnh c s ca cy khung DFS: Va duyt DFS va nh chiu, nu duyt phi cung ngc (u, v) th truy vt ng i ca DFS tm ng t v n u, sau ni thm cung ngc (u, v) c mt chu trnh c s). nh l: iu kin cn v mt th v hng lin thng c th nh chiu c l mi cnh ca th nm trn t nht mt chu trnh n (Hay ni cch khc mi cnh ca th u khng phi l cu). Chng minh: Gi G = (V, E) l mt th v hng lin thng. "" Nu G l nh chiu c th sau khi nh hng s c th lin thng mnh G'. Vi mt cnh c nh chiu thnh cung (u, v) th s tn ti mt ng i n trong G' theo cc cnh nh hng t v v u. ng i ni thm cung (u, v) s thnh mt chu trnh n c hng trong G'. Tc l trn th ban u, cnh (u, v) nm trn mt chu trnh n. "" Nu mi cnh ca G u nm trn mt chu trnh n, ta s chng minh rng: php nh chiu DFS s to ra th G' lin thng mnh. Trc ht ta chng minh rng nu (u, v) l cnh ca G th s c mt ng i t u ti v trong G'. Tht vy, v (u, v) nm trong mt chu trnh n, m mi cnh ca mt chu trnh n u phi thuc mt chu trnh c s no , nn s c mt chu trnh c s cha c u v v. Chu trnhL Minh Hong 175. L thuyt th41c s qua php nh chiu DFS vn l chu trnh trong G' nn i theo cc cnh nh hng ca chu trnh , ta c th i t u ti v v ngc li. Nu u v v l 2 nh bt k ca G th do G lin thng, tn ti mt ng i (u=x0, x1, ..., xn=v). V (xi, xi + 1) l cnh ca G nn trong G', t xi c th n c xi+1. Suy ra t u cng c th n c v bng cc cnh nh hng ca G'.2. Ci t Vi nhng kt qu chng minh trn, ta cn suy ra c: Nu th lin thng v mi cnh ca n nm trn t nht mt chu trnh n th php nh chiu DFS s cho mt th lin thng mnh. Cn nu khng, th php nh chiu DFS s cho mt th nh hng c t thnh phn lin thng mnh nht, mt cnh khng nm trn mt chu trnh n no (cu) ca th ban u s c nh hng thnh cung ni gia hai thnh phn lin thng mnh. Ta s ci t mt thut ton vi mt th v hng: lit k cc cu v nh chiu cc cnh c mt th mi c t thnh phn lin thng mnh nht: nh s cc nh theo th t thm DFS, gi Numbering[u] l s th t ca nh u theo cch nh s . Trong qu trnh tm kim DFS, duyt qua cnh no nh chiu lun cnh . nh ngha thm Low[u] l gi tr Numbering nh nht ca nhng nh n c t nhnh DFS gc u bng mt cung ngc. Tc l nu nhnh DFS gc u c nhiu cung ngc hng ln trn pha gc cy th ta ghi nhn li cung ngc hng ln cao nht. Nu nhnh DFS gc u khng cha cung ngc th ta cho Low[u] = +. C th cch cc tiu ho Low[u] nh sau: Trong th tc Visit(u), trc ht ta nh s th t thm cho nh u (Numbering[u]) v khi gn Low[u] = +. Sau , xt tt c nhng nh v k u, nh chiu cnh (u, v) thnh cung (u, v). C hai kh nng xy ra: v cha thm th ta gi Visit(v) thm v v cc tiu ho Low[u] theo cng thc: Low[u] := min(Low[u]c, Low[v]) v thm th ta cc tiu ho Low[u] theo cng thc: Low[u] := min(Low[u]c, Numbering[v]) D thy cch tnh nh vy l ng n bi nu v cha thm th nhnh DFS gc v nm trong nhnh DFS gc u v nhng cung ngc trong nhnh DFS gc v cng l cung ngc trong nhnh DFS gc u. Cn nu v thm th (u, v) s l cung ngc. 1 11 122 13 44433 85 476359 10 38 6910 th v hng7 54 th nh chiu, Gi tr Numbering[u] ghi trong vng trn, Gi tr Low[u] ghi bn cnh Hnh 16: Php nh s v ghi nhn cung ngc ln cao nhtL Minh Hong 176. L thuyt th42Nu t nh u ti thm nh v, (u, v) l cung DFS. Khi nh v c duyt xong, li v th tc Visit(u), ta so snh Low[v] v Numbering[u]. Nu Low[v] > Numbering[u] th tc l nhnh DFS gc v khng c cung ngc thot ln pha trn v. Tc l cnh (u, v) khng thuc mt chu trnh c s no c, tc cnh l cu. { th G = (V, E)} procedure Visit(uV); begin ; for (v: (u, v)E) do begin ; if then begin Visit(v); if Low[v] > Numbering[u] then ; Low[u] := Min(Low[u], Low[v]); {Cc tiu ho Low[u] theo Low[v]} end else {v thm} Low[u] := Min(Low[u], Numbering[v]); {Cc tiu ho Low[u] theo Numbering[v]} end; end; begin for (uV) do if then Visit(u); ; end.Input: file vn bn GRAPH.INP Dng 1 ghi s nh n (n 100) v s cnh m ca th cch nhau t nht mt du cch m dng tip theo, mi dng ghi hai s nguyn dng u, v cch nhau t nht mt du cch, cho bit th c cnh ni nh u vi nh v Output: file vn bn GRAPH.OUT Thng bo cc cu v php nh chiu c t thnh phn lin thng mnh nht1 32 4568791011GRAPH.INP 11 14 1 2 1 3 2 3 2 4 4 5 4 6 4 9 5 7 5 10 6 8 7 10 7 11 8 9 10 11GRAPH.OUT Bridges: (4, 5) (2, 4) Directed Edges: 1 -> 2 2 -> 3 2 -> 4 3 -> 1 4 -> 5 4 -> 6 5 -> 7 6 -> 8 7 -> 10 8 -> 9 9 -> 4 10 -> 5 10 -> 11 11 -> 7PROG05_1.PAS * Php nh chiu DFS v lit k cu program Directivity_and_Bridges; L Minh Hong 177. L thuyt th43const max = 100; var a: array[1..max, 1..max] of Boolean; {Ma trn k ca th} Numbering, Low: array[1..max] of Integer; n, Count: Integer; procedure Enter; var f: Text; i, m, u, v: Integer; begin FillChar(a, SizeOf(a), False); Assign(f, 'GRAPH.INP'); Reset(f); ReadLn(f, n, m); for i := 1 to m do begin ReadLn(f, u, v); a[u, v] := True; a[v, u] := True; end; Close(f); end; procedure Init; begin FillChar(Numbering, SizeOf(Numbering), 0); {Numbering[u] = 0 u cha thm} Count := 0; end; procedure Visit(u: Integer); var v: Integer; begin Inc(Count); Numbering[u] := Count; {nh s th t thm cho nh u, u tr thnh thm} Low[u] := n + 1; {Khi gn Low[u] bng mt gi tr ln hn tt c Numbering} for v := 1 to n do if a[u, v] then {Xt mi nh v k u} begin a[v, u] := False; {nh chiu cnh (u, v) thnh cung (u, v)} if Numbering[v] = 0 then {Nu v cha thm} begin Visit(v); {i thm v} if Low[v] > Numbering[u] then {(u, v) l cu} WriteLn('(', u, ', ', v, ')'); if Low[u] > Low[v] then Low[u] := Low[v]; {Cc tiu ho Low[u] } end else if Low[u] > Numbering[v] then Low[u] := Numbering[v]; {Cc tiu ho Low[u] } end; end; procedure Solve; var u, v: Integer; begin WriteLn('Bridges: '); {Dng DFS nh chiu th v lit k cu} for u := 1 to n do if Numbering[u] = 0 then Visit(u); WriteLn('Directed Edges: '); {Qut li ma trn k in ra cc cnh nh hng} for u := 1 to n do for v := 1 to n do if a[u, v] then WriteLn(u, ' -> ', v); L Minh Hong 178. L thuyt th44end; begin Enter; Init; Solve; end.IV. LIT K KHP Trong th v hng, Mt nh C c gi l khp, nu nh ta b i nh C v cc cnh lin thuc vi n th s lm tng s thnh phn lin thng ca th. Bi ton t ra l phi lit k ht cc khp ca th. R rng theo cch nh ngha trn, cc nh treo v nh c lp s khng phi l khp. th lin thng c 3 nh, khng c khp (cho d b i nh no th vn lin thng) c gi l th song lin thng. Gia hai nh phn bit ca th song lin thng, tn ti t nht 2 ng i khng c nh trung gian no chung. Coi mi cnh ca th ban u l hai cung c hng ngc chiu nhau v dng php duyt th theo chiu su: { th G = (V, E)} procedure Visit(u V): V; begin ; for (v: (u, v) E) do if then Visit(v); end; begin ; for (uV) do if then Visit(u); end;Qu trnh duyt cho mt rng cc cy DFS. Cc cung duyt qua c ba loi: cung DFS, cung ngc v cung xui, khng b ri hnh, ta ch u tin v cung DFS hoc cung ngc:1112 3 12 457691381017141516Hnh 17: Duyt DFS, xc nh cy DFS v cc cung ngcHy nhnh DFS gc nh r no Nu mi nhnh con ca nhnh DFS gc r u c mt cung ngc ln ti mt tin bi ca r th r khng l khp. Bi nu trong th ban u, ta b r i th t mi nh bt k ca nhnh con, ta L Minh Hong 179. L thuyt th45vn c th i ln mt tin bi ca r, ri i sang nhnh con khc hoc i sang tt c nhng nh cn li ca cy. S thnh phn lin thng ca th khng thay i. Nu r khng phi l gc ca mt cy DFS, v tn ti mt nhnh con ca nhnh DFS gc r khng c cung ngc ln mt tin bi ca r th r l khp. Bi khi , tt c nhng cung xut pht t nhnh con ch i ti nhng nh ni b trong nhnh DFS gc r m thi, trn th ban u, khng tn ti cnh ni t nhng nh thuc nhnh con ti mt tin bi ca r. Vy t nhnh mun i ln mt tin bi ca r, tt phi i qua r. Hu r khi th s lm mt tt c cc ng i , tc l lm tng s thnh phn lin thng ca th. Nu r l gc ca mt cy DFS, th r l khp khi v ch khi r c t nht hai nhnh con. Bi khi r c 2 nhnh con th ng i gia hai nh thuc hai nhnh con tt phi i qua r. Vy th thut ton lit k khp li l nhng k thut quen thuc, duyt DFS, nh s, ghi nhn cnh ngc ln cao nht t mt nhnh con, ch thm vo mt thao tc nh: Nu t nh u gi quy thm nh v ((u, v) l cung DFS) th sau khi duyt xong nh v, li v th tc Visit(u), ta so snh Low[v] v Numbering[u] kim tra xem t nhnh con gc v c cnh ngc no ln tin bi ca u hay khng, nu khng c th tm thi nh du u l khp. Cui cng phi kim tra li iu kin: nu u l gc cy DFS th n l khp khi v ch khi n c t nht 2 nhnh con, nu khng tho mn iu kin th nh du li u khng l khp. Input: file vn bn GRAPH.INP vi khun dng nh bi ton lit k cu Output: Danh sch cc khp ca th 2 15 4 1039 86137 1112GRAPH.INP 13 15 1 3 2 4 2 5 3 6 3 7 4 8 4 11 5 9 5 10 6 7 8 11 8 12 9 10 9 13 11 12GRAPH.OUT Cut vertices: 2, 3, 4, 5, 9,PROG05_2.PAS * Lit k cc khp ca th program CutVertices; const max = 100; var a: array[1..max, 1..max] of Boolean; {Ma trn k ca th} Numbering, Low, nC: array[1..max] of Integer; {nC[u]: S nhnh con ca nhnh DFS gc u} Mark: array[1..max] of Boolean; {Mark[u] = True u l khp} n, Count: Integer; procedure LoadGraph; {Nhp th (t thit b nhp chun Input)} var i, m, u, v: Integer; begin FillChar(a, SizeOf(a), False);L Minh Hong 180. L thuyt th46ReadLn(n, m); for i := 1 to m do begin ReadLn(u, v); a[u, v] := True; a[v, u] := True; end; end; procedure Visit(u: Integer); {Tm kim theo chiu su bt u t u} var v: Integer; begin Inc(Count); Numbering[u] := Count; Low[u] := n + 1; nC[u] := 0; Mark[u] := False; for v := 1 to n do if a[u, v] then {Xt mi v k u} if Numbering[v] = 0 then {Nu v cha thm} begin Inc(nc[u]); {Tng bin m s con ca u ln 1} Visit(v); {Thm v} {Nu nhnh DFS gc v khng c cung ngc ln mt tin bi ca u tc l Low[v] Numbering[u]}Mark[u] := Mark[u] or (Low[v] >= Numbering[u]); {Tm nh du u l khp} if Low[u] > Low[v] then Low[u] := Low[v]; {Cc tiu ho Low[u] } end else if Low[u] > Numbering[v] then Low[u] := Numbering[v]; {Cc tiu ho Low[u] } end; procedure Solve; var u: Integer; begin FillChar(Numbering, SizeOf(Numbering), 0); {nh s = 0 nh cha thm} FillChar(Mark, SizeOf(Mark), False); {Mng nh du khp cha c g} Count := 0; for u := 1 to n do if Numbering[u] = 0 then {Xt mi nh u cha thm} begin Visit(u); {Thm u, xy dng cy DFS gc u} if nC[u] < 2 then {Nu u c t hn 2 con} Mark[u] := False; {Th u khng phi l khp} end; end; procedure Result; {Da vo mng nh du lit k cc khp} var i: Integer; begin WriteLn('Cut vertices:'); for i := 1 to n do if Mark[i] then Write(i, ', '); end; begin Assign(Input, 'GRAPH.INP'); Reset(Input); Assign(Output, 'GRAPH.OUT'); Rewrite(Output); LoadGraph; Solve; Result; Close(Input); Close(Output); end.L Minh Hong 181. L thuyt th476. CHU TRNH EULER, NG I EULER, TH EULERI. BI TON 7 CI CU Thnh ph Konigsberg thuc Ph (nay l Kaliningrad thuc Cng ho Nga), c chia lm 4 vng bng cc nhnh sng Pregel. Cc vng ny gm 2 vng bn b sng (B, C), o Kneiphof (A) v mt min nm gia hai nhnh sng Pregel (D). Vo th k XVIII, ngi ta xy 7 chic cu ni nhng vng ny vi nhau. Ngi dn y t hi: Liu c cch no xut pht ti mt a im trong thnh ph, i qua 7 chic cu, mi chic ng 1 ln ri quay tr v ni xut pht khng ? Nh ton hc Thy s Leonhard Euler gii bi ton ny v c th coi y l ng dng u tin ca L thuyt th, ng m hnh ho s 7 ci cu bng mt a th, bn vng c biu din bng 4 nh, cc cu l cc cnh. Bi ton tm ng qua 7 cu, mi cu ng mt ln c th tng qut ho bng bi ton: C tn ti chu trnh n trong a th cha tt c cc cnh ?. CCADADB BHnh 18: M hnh th ca bi ton by ci cuII. NH NGHA 1. Chu trnh n cha tt c cc cnh ca th c gi l chu trnh Euler 2. ng i n cha tt c cc cnh ca th c gi l ng i Euler 3. Mt th c chu trnh Euler c gi l th Euler 4. Mt th c ng i Euler c gi l th na Euler. R rng mt th Euler th phi l na Euler nhng iu ngc li th khng phi lun ng III. NH L 1. Mt th v hng lin thng G = (V, E) c chu trnh Euler khi v ch khi mi nh ca n u c bc chn: deg(v) 0 (mod 2) (vV) 2. Mt th v hng lin thng c ng i Euler nhng khng c chu trnh Euler khi v ch khi n c ng 2 nh bc l 3. Mt thi c hng lin thng yu G = (V, E) c chu trnh Euler th mi nh ca n c bn bc ra bng bn bc vo: deg+(v) = deg-(v) (vV); Ngc li, nu G lin thng yu v mi nh ca n c bn bc ra bng bn bc vo th G c chu trnh Euler, hay G s l lin thng mnh. 4. Mt th c hng lin thng yu G = (V, E) c ng i Euler nhng khng c chu trnh Euler nu tn ti ng hai nh u, v V sao cho deg+(u) - deg-(u) = deg-(v) - deg+(v) = 1, cn tt c nhng nh khc u v v u c bn bc ra bng bn bc vo.L Minh Hong 182. L thuyt th48IV. THUT TON FLEURY TM CHU TRNH EULER 1. i vi th v hng lin thng, mi nh u c bc chn. Xut pht t mt nh, ta chn mt cnh lin thuc vi n i tip theo hai nguyn tc sau: Xo b cnh i qua Ch i qua cu khi khng cn cnh no khc chn V ta c chn cnh i mt cch thoi mi nh vy cho ti khi khng i tip c na, ng i tm c l chu trnh Euler. V d: Vi th sau: 5252 7147 148 368 36Nu xut pht t nh 1, c hai cch i tip: hoc sang 2 hoc sang 3, gi s ta s sang 2 v xo cnh (1, 2) va i qua. T 2 ch c cch duy nht l sang 4, nn cho d (2, 4) l cu ta cng phi i sau xo lun cnh (2, 4). n y, cc cnh cn li ca th c th v nh trn bng nt lin, cc cnh b xo c v bng nt t. By gi ang ng nh 4 th ta c 3 cch i tip: sang 3, sang 5 hoc sang 6. V (4, 3) l cu nn ta s khng i theo cnh (4, 3) m s i (4, 5) hoc (4, 6). Nu i theo (4, 5) v c tip tc i nh vy, ta s c chu trnh Euler l (1, 2, 4, 5, 7, 8, 6, 4, 3, 1). Cn i theo (4, 6) s tm c chu trnh Euler l: (1, 2, 4, 6, 8, 7, 5, 4, 3, 1). 2. i vi th c hng lin thng yu, mi nh u c bn bc ra bng bn bc vo. Bng cch "lm dng thut ng", ta c th m t c thut ton tm chu trnh Euler cho c th c hng cng nh v hng: Th nht, di y nu ta ni cnh (u, v) th hiu l cnh ni nh u v nh v trn th v hng, hiu l cung ni t nh u ti nh v trn th c hng. Th hai, ta gi cnh (u, v) l "mt i khng tr li" nu nh t u ta i ti v theo cnh , sau xo cnh i th khng c cch no t v quay li u. Vy th thut ton Fleury tm chu trnh Euler c th m t nh sau: Xut pht t mt nh, ta i mt cch tu theo cc cnh tun theo hai nguyn tc: Xo b cnh va i qua v ch chn cnh "mt i khng tr li" nu nh khng cn cnh no khc chn. V. CI T Ta s ci t thut ton Fleury trn mt a th v hng. n gin, ta coi th ny c chu trnh Euler, cng vic ca ta l tm ra chu trnh thi. Bi vic kim tra tnh lin thng cng nh kim tra mi nh u c bc chn n gi c th coi l chuyn nh. Input: file vn bn EULER.INP Dng 1: Cha s nh n ca th (n 100) Cc dng tip theo, mi dng cha 3 s nguyn dng cch nhau t nht 1 du cch c dng: u v k cho bit gia nh u v nh v c k cnh ni Output: file vn bn EULER.OUT ghi chu trnh EULER L Minh Hong 183. L thuyt th491243EULER.INP 4 1 2 1 1 3 2 1 4 1 2 3 1 3 4 1EULER.OUT 1 231341PROG06_1.PAS * Thut ton Fleury tm chu trnh Euler program Euler_Circuit; const max = 100; var a: array[1..max, 1..max] of Integer; n: Integer; procedure Enter; {Nhp d liu t thit b nhp chun Input} var u, v, k: Integer; begin FillChar(a, SizeOf(a), 0); ReadLn(n); while not SeekEof do begin ReadLn(u, v, k); a[u, v] := k; a[v, u] := k; end; end; {Th tc ny kim tra nu xo mt cnh ni (x, y) th y c cn quay li c x hay khng}function CanGoBack(x, y: Integer): Boolean; var Queue: array[1..max] of Integer; {Hng i dng cho Breadth First Search} First, Last: Integer; {First: Ch s u hng i, Last: Ch s cui hng i} u, v: Integer; Free: array[1..max] of Boolean; {Mng nh du} begin Dec(a[x, y]); Dec(a[y, x]); {Th xo mt cnh (x, y) S cnh ni (x, y) gim 1} FillChar(Free, n, True); {sau p dng BFS xem t y c quay li x c khng ?} Free[y] := False; First := 1; Last := 1; Queue[1] := y; repeat u := Queue[First]; Inc(First); for v := 1 to n do if Free[v] and (a[u, v] > 0) then begin Inc(Last); Queue[Last] := v; Free[v] := False; if Free[x] then Break; end; until First > Last; CanGoBack := not Free[x]; Inc(a[x, y]); Inc(a[y, x]); { trn th xo cnh th gi phi phc hi} end; procedure FindEulerCircuit; {Thut ton Fleury} var Current, Next, v, count: Integer;L Minh Hong 184. L thuyt th50begin Current := 1; Write(1:5); {Bt u t nh Current = 1} count := 1; repeat Next := 0; for v := 1 to n do if a[Current, v] > 0 then begin Next := v; if CanGoBack(Current, Next) then Break; end; if Next 0 then begin Dec(a[Current, Next]); Dec(a[Next, Current]); {Xo b cnh va i qua} Write(Next:5); {In kt qu i ti Next} Inc(count); if count mod 16 = 0 then WriteLn; {In ra ti a 16 nh trn mt dng} Current := Next; {Li tip tc vi nh ang ng l Next} end; until Next = 0; {Cho ti khi khng i tip c na} WriteLn; end; begin Assign(Input, 'EULER.INP'); Reset(Input); Assign(Output, 'EULER.OUT'); Rewrite(Output); Enter; FindEulerCircuit; Close(Input); Close(Output); end.VI. THUT TON TT HN Trong trng hp th Euler c s cnh nh, ta c th s dng phng php sau tm chu trnh Euler trong th v hng: Bt u t mt chu trnh n C bt k, chu trnh ny tm c bng cch xut pht t mt nh, i tu theo cc cnh cho ti khi quay v nh xut pht, lu l i qua cnh no xo lun cnh . Nu nh chu trnh C tm c cha tt c cc cnh ca th th l chu trnh Euler. Nu khng, xt cc nh dc theo chu trnh C, nu cn c cnh cha xo lin thuc vi mt nh u no th li t u, ta i tu theo cc cnh cng theo nguyn tc trn cho ti khi quay tr v u, c mt chu trnh n khc qua u. Loi b v tr u khi chu trnh C v chn vo C chu trnh mi tm c ti ng v tr ca u va xo, ta c mt chu trnh n C' mi ln hn chu trnh C. C lm nh vy cho ti khi c chu trnh Euler. Vic chng minh tnh ng n ca thut ton cng l chng minh nh l v iu kin cn v mt th v hng lin thng c chu trnh Euler. M hnh thut ton c th vit nh sau: ; ; while Stack do begin x := Get; if then {T x cn i hng khc c} begin Push(y);L Minh Hong 185. L thuyt th51; end else {T x khng i tip c ti u na} begin x := Pop; ; end; end;Thut ton trn c th dng tm chu trnh Euler trong th c hng lin thng yu, mi nh c bn bc ra bng bn bc vo. Tuy nhin th t cc nh in ra b ngc so vi cc cung nh hng, ta c th o ngc hng cc cung trc khi thc hin thut ton c th t ng. Thut ton hot ng vi hiu qu cao, d ci t, nhng trng hp xu nht th Stack s phi cha ton b danh sch nh trn chu trnh Euler chnh v vy m khi a th c s cnh qu ln th s khng khng gian nh m t Stack (Ta c th vi th ch gm 2 nh nhng gia hai nh c ti 106 cnh ni s thy ngay). L do thut ton ch c th p dng trong trng hp s cnh c gii hn bit trc nh l nh vy. PROG06_2.PAS * Thut ton hiu qu tm chu trnh Euler program Euler_Circuit; const max = 100; maxE = 20000; {S cnh ti a} var a: array[1..max, 1..max] of Integer; stack: array[1..maxE] of Integer; n, last: Integer; procedure Enter; {Nhp d liu} var u, v, k: Integer; begin FillChar(a, SizeOf(a), 0); ReadLn(n); while not SeekEof do begin ReadLn(u, v, k); a[u, v] := k; a[v, u] := k; end; end; procedure Push(v: Integer); {y mt nh v vo ngn xp} begin Inc(last); Stack[last] := v; end; function Pop: Integer; begin Pop := Stack[last]; Dec(last); end;{Ly mt nh khi ngn xp, tr v trong kt qu hm}function Get: Integer; begin Get := Stack[last]; end;{Tr v phn t nh (Top) ngn xp}procedure FindEulerCircuit; varL Minh Hong 186. L thuyt th52u, v, count: Integer; begin Stack[1] := 1; {Khi to ngn xp ban u ch gm nh 1} last := 1; count := 0; while last 0 do {Chng no ngn xp cha rng} begin u := Get; {Xc nh u l phn t nh ngn xp} for v := 1 to n do if a[u, v] > 0 then {Xt tt c cc cnh lin thuc vi u, nu thy} begin Dec(a[u, v]); Dec(a[v, u]); {Xo cnh khi th} Push(v); {y nh tip theo vo ngn xp} Break; end; if u = Get then {Nu phn t nh ngn xp vn l u vng lp trn khng tm thy nh no k vi u} begin Inc(count); Write(Pop:5, ' '); {In ra phn t nh ngn xp} if count mod 16 = 0 then WriteLn; {Output khng qu 16 s trn mt dng} end; end; end; begin Assign(Input, 'EULER.INP'); Reset(Input); Assign(Output, 'EULER.OUT'); Rewrite(Output); Enter; FindEulerCircuit; Close(Input); Close(Output); end.Bi tp: Trn mt phng cho n hnh ch nht c cc cnh song song vi cc trc to . Hy ch ra mt chu trnh: Ch i trn cnh ca cc hnh ch nht Trn cnh ca mi hnh ch nht, ngoi tr nhng giao im vi cnh ca hnh ch nht khc c th qua nhiu ln, nhng im cn li ch c qua ng mt ln. CBEMJFKADHINLM D A B C M F G N L I J K N H E ML Minh HongG 187. L thuyt th537. CHU TRNH HAMILTON, NG I HAMILTON, TH HAMILTON I. NH NGHA Cho th G = (V, E) c n nh 1. Chu trnh (x1, x2, ..., xn, x1) c gi l chu trnh Hamilton nu xi xj vi 1 i < j n 2. ng i (x1, x2, ..., xn) c gi l ng i Hamilton nu xi xj vi 1 i < j n C th pht biu mt cch hnh thc: Chu trnh Hamilton l chu trnh xut pht t 1 nh, i thm tt c nhng nh cn li mi nh ng 1 ln, cui cng quay tr li nh xut pht. ng i Hamilton l ng i qua tt c cc nh ca th, mi nh ng 1 ln. Khc vi khi nim chu trnh Euler v ng i Euler, mt chu trnh Hamilton khng phi l ng i Hamilton