You are on page 1of 31

Chng 3 QUY HOCH NG MC TIU CA CHNG - Hiu v nm vng bn cht ca phng php quy hoch ng.

- Cung cp mt cch tip cn mi trong vic gii quyt cc bi ton ti u mang bn cht quy. - Sinh vin cn nm vng phn l thuyt c th hnh thnh cc k nng trong vic tip cn v gii cc bi ton quy hoch ng. NI DUNG BI GING L THUYT Quy hoch ng (Dynamic programming) l mt k thut nhm n gin ha vic tnh ton cc cng thc truy hi bng cch lu tr ton b hay mt phn kt qu tnh ton ti mi bc vi mc ch s dng li. Bn cht ca quy hoch ng l nhm thay th m hnh tnh ton t trn xung (top-down) bng m hnh tnh ton t di ln (bottom-up). Quy hoch ng thng dng gii cc bi ton ti u c bn cht qui Vic tm nghim ti u ca bi ton cho c thc hin da trn vic tm nghim ti u ca cc bi ton con. Kt qu ca cc bi ton con c ghi nhn li phc v cho vic gii cc bi ton ln hn v gii c bi ton yu cu. 3.1. Bi ton quy hoch Bi ton quy hoch l bi ton ti u: gm c mt hm f gi l hm mc tiu hay hm nh gi, cc hm g1, g2, gn cho gi tr logic gi l hm rng buc. Yu cu ca bi ton l tm mt cu hnh x tha mn tt c cc rng buc g1, g2, gn: gi(x)=TRUE ( 1 i i: n) v x l tt nht, theo ngha khng tn ti mt cu hnh y no khc tha mn cc hm rng buc m f(y) tt hn f(x). V d: Tm (x, y) Hm mc tiu : x + y max Hm rng buc : x2 + y2 1 Xt trong mt phng ta , nhng cp (x, y) tha mn x2 + y2 1 l ta ca nhng im nm trong hnh trn c tm O l gc ta , bn knh 1. Vy nghim ca bi ton bt buc nm trong hnh trn . Nhng ng thng c phng trnh x + y = C (C l mt hng s) l ng thng vung gc vi ng phn gic gc phn t th nht. Ta phi tm s C ln nht m ng thng x +

y = C vn c im chung vi ng trn (O, 1). ng thng l mt tip tuyn ca ng trn : x + y = 2 . Tip im ( 1 2 , 1 2 ) tng ng vi nghim ti u ca bi ton cho.

Cc dng bi ton quy hoch rt phong ph v a dng, ng dng nhiu trong thc t, nhng cng cn bit rng a s cc bi ton quy hoch l khng gii c, hoc cha gii c. Cho n nay ngi ta mi ch c thut ton n gii gii bi ton quy hoch tuyn tnh li, v mt vi thut ton khc p dng cho bi ton c th. 3.2. Phng php quy hoch ng Phng php quy hoch ng dng gii bi ton ti u c bn cht quy, tc l vic tm phng n ti u cho bi ton c th a v tm phng n ti u ca s hu hn cc bi ton con. i vi nhiu thut ton quy chng ta tm hiu, nguyn l chia tr thng ng vai tr ch o trong vic thit k thut ton. gii quyt mt bi ton ln, ta chia n lm nhiu bi ton con cng dng vi n gii quyt c lp. Trong phng php quy hoch ng, nguyn l ny cng c th hin r : Khi khng bit cn phi gii quyt nhng bi ton con no, ta s i gii quyt tt c cc bi ton con v lu tr nhng li gii hay p s ca chng vi mc ch s dng li theo mt s phi hp no gii quyt nhng bi ton tng qut hn. chnh l im khc nhau gia quy hoch ng v php phn gii quy v cng l ni dung ca phng php quy hoch ng : Php phn gii quy bt u t bi ton ln phn r thnh nhiu bi ton con v i gii tng bi ton con . Vic gii quyt tng bi ton con li a v php phn r tip thnh nhiu bi ton nh hn v li i gii tip bi ton nh hn bt k n c gii hay cha. Quy hoch ng bt u t vic gii tt c cc bi ton nh nht (bi ton c s) t tng bc gii quyt nhng bi ton ln hn, cho ti khi gii c bi ton ln nht ( bi ton ban u). Ta xt mt v d n gin Dy Fibonacci l dy v hn cc s nguyn dng F[1], F[2],. c nh ngha nh sau :

1 i 2 F[1] = F[i 2] + F[i 1] i > 2


Hy tnh F[6]

Xt hai cch ci t chng trnh int F(int i) { if(i <=2) return 1 ; return F(i 2) + F(i 1) } void main() { cout<<F(6)<< endl; } Cch 1 c hm quy F(i) tnh s Fibonacci th i. Qu trnh tnh ton c th v nh cy di y. Ta nhn thy tnh F(6) n phi tnh mt ln F(5), hai ln F(4), ba lm F(3), nm ln F(2), ba ln F(1). } int F(100); // Bang phuong an void main { F[1] = F[2] = 1; for(int i =3; i<=6; i++) F[i] = F[i-2] + F[i -1] cout<<F(6)<< endl;

Hm quy tnh s Fibonacci Cch 2: Trc ht n tnh sn F[1] v F[2], t tnh tip F[3], li tnh tip c F[4], F[5], F[6]. m bo mi gi tr Fibonacci ch phi tnh mt ln.
3

Trc khi p dng phng php quy hoch ng ta phi xem xt phng php c tha mn nhng yu cu di y hay khng: Bi ton ln phi phn r c thnh nhiu bi ton con m c s phi hp li gii ca cc bi ton con cho ta li gii bi ton ln. V quy hoch ng l i gii tt c bi ton con, nn nu khng khng gian vt l lu tr li gii (b nh, a.) phi hp chng th phng php quy hoch ng cng khng th thc hin c. Qu trnh t bi ton c s tm ra li gii bi ton ban u phi qua hu hn bc. Cc khi nim Bi ton gii theo phng php quy hoch ng gi l bi ton quy hoch ng Cng thc phi hp nhiu nghim ca cc bi ton con c nghim ca bi ton ln gi l cng thc truy hi (hay phng trnh truy ton) ca quy hoch ng Tp tt c cc bi ton nh nht c ngay li gii t gii quyt cc bi ton ln hn gi l c s quy hoch ng. Khng gian lu tr li gii cc bi ton con tm cch phi hp chng gi l bng phng n ca quy hoch ng. Cc bc ci t mt chng trnh s dng quy hoch ng. Gii tt c cc bi ton c s, lu cc li gii vo bng phng n. Dng cng thc truy hi phi hp nhng li gii ca nhng bi ton nh lu trong bng phng n tm li gii ca nhng bi ton ln hn v lu chng vo bng phng n. Cho ti khi bi ton ban u tm c li gii. Da vo bng phng n, truy vt tm ra nghim ti u 3.3. Mt s bi ton quy hoch ng 3.3.1. Bi ton ba l 1 (knapsack) Cho n gi hng. Gi hng th i c khi lng l A[i] v gi tr C[i]. Cn chn nhng gi hng no b vo mt ba l sao tng gi tr ca cc gi hng chn l ln nht nhng tng khi lng ca chng khng vt qu khi lng M cho trc. Mi gi ch chn 1 hoc khng chn. V d: n = 5; M = 13

Tng gi tr ca cc gi hng b vo ba l: 16
4

Cc gi c chn: 1(3, 4), 2(4, 5), 3(5, 6), 5(1, 1) Tham s th hin kch thc bi ton Kt qu bi ton l tng gi tr ln nht ca cc mn hng c chn trong n mn sao cho tng khi lng khng ln hn M cho trc, k hiu l F(n) Tham s th hin kch thc bi ton l s mn hng n Gi tr ca F(n) c th c tnh t gi tr ca F(n-1) cng thm hoc khng cng thm gi tr ca mn hng th n nhng tng khi lng khng ln hn M. Nu chn thm mn hng th n th tng khi lng c chn trong (n-1) mn hng khng ln hn (M-A[n]) Suy ra bi ton c 2 tham s: s mn hng v khi lng gii hn Lp cng thc qui Gi F(i, v) l tng gi tr ln nht ca cc gi hng c chn trong i gi hng sao cho tng khi lng khng ln hn v. Trng hp A[i] > v: F(i, v) = F(i -1, v) Trng hp A[i] <= v: - Nu gi hng th i khng c chn th: F(i, v) = F(i -1, v) - Nu gi hng th i c chn th: F(i, v) = F(i -1, v A[i]) + C[i]

F(i, v) = Max{ F(i -1, v); F(i -1, v A[i]) + C[i]) }


Bi ton nh nht ng vi i = 0 ta c: F(0, v) = 0 Xy dng bng phng n: Cu trc bng phng n: Dng mng F[0..n][0..M] cha gi tr ca cc F(i, v) Cch tnh gi tr trn bng phng n: - in s 0 cho cc trn dng 0 - S dng cng thc qui v gi tr trn dng (i -1) tnh dng i Trng hp A[i] > v: F(i, v) = F(i -1, v) Trng hp A[i] <= v: F(i, v) = Max{ F(i -1, v); F(i -1, v A[i]) + C[i]) } V d bng phng n:
5

Trng hp A[i] > v: F(i, v) = F(i -1, v) Trng hp A[i] <= v: F(i, v) = Max{ F(i -1, v); F(i -1, v A[i]) + C[i]) }

Thut ton to bng phng n void TaoBangPhuongAn(F[0..n][0..M]) { for (v=0; v <= M; v++) F[0, v] = 0; // in s 0 cho dng 0 ca bng for (i = 1; i <= n; i++) for (v=0; v <= M; v++) { F[i, v] = F[i-1, v]; if (A[i] <= v && F[i, v] < F[i-1, v - A[i] ] + C[i]) F[i, v] = F[ i-1, v - A[i] ] + C[i]; } } Truy vt tm li cc gi hng chn Bt u t F[n, M] trn dng n ta d ngc v dng 0 theo nguyn tc: Nu F[ i, v] <> F[i1, v] th gi th i c chn, ta truy tip F[i-1, v-A[i]]. Nu F[ i, v] = F[i1, v] th gi th i khng c chn, ta truy tip F[i-1, v].

Thut ton truy vt tm li cc gi hng chn void TruyVet(F[0..n][0..M]) { Bt u t F[n, M] trn dng n: i = n; v = M; for (; i > 0; i --) if (F[i, v] != F[i-1, v]) { <Mn hng th i c chn >; v = v A[i]; } } 3.3.2.Bi ton ba l 2 Cho n loi hng. Mn hng thuc loi hng i c khi lng A[i] v gi tr C[i]. S lng cc mn hng ca mi loi khng hn ch. Cn chn cc mn hng trong tng loi b vo mt ba l sao cho tng gi tr ca cc mn hng chn l ln nht nhng tng khi lng ca chng khng vt qu khi lng M cho trc. Cho bit s lng mn hng tng loi hng c chn V d: n = 5; M = 13

Tng gi tr ca cc mn hng b vo ba l: 19 Cc mn c chn: 1 gi hng loi 1 c khi lng 3 v gi tr 4 5 gi hng loi 4 c khi lng 2 v gi tr 3 Xc nh cng thc quy
7

Gi F(i, v) l tng gi tr ln nht ca cc mn hng c chn sao cho tng khi lng <= v trong i loi hng. Trng hp A[i] > v: F(i, v) = F(i-1, v) Trng hp A[i] <= v: - Nu loi hng i khng c chn th: F(i, v) = F(i-1, v) - Nu c k mn hng loi i c chn: (1 <= k <= v/A[i] ) F(i, v) = F(i-1, v A[i]*k) + C[i]*k Do : F(i, v) = Max{F(i-1, v A[i]*k) + C[i]*k } k [0, v/A[i]] Bi ton nh nht ng vi i = 0 hay v=0 ta c: F(0, v) = 0 Cng thc quy Gi F(i, v) l tng gi tr ln nht ca cc mn hng c chn c tng khi lng <= v trong i loi hng u tin Vi i = 0 : F(i, v) = 0 Vi i > 0 : - A[i] > v : F(i, v) = F(i - 1, v) - A[i] <= v : F(i, v) = Max{ F(i-1, v A[i]*k) + C[i]*k } vi k [0, v/A[i]] Xy dng bng phng n:

Cu trc bng phng n: dng 2 mng - Mng F[0..n][0..M]: F[i, v] cha gi tr ca cc F(i, v) - Mng S[1..n][1..M]: S[i,v] cha s mn hng loi i c chn Nu F(i, v) = F(i - 1, v): S[i, v] = 0 Ngc li S[i, v] = k

Cch tnh gi tr trn bng phng n: - in s 0 cho cc trn dng 0 v ct 0 ca bng F - S dng cng thc quy v gi tr trn dng i -1 tnh dng i ca bng F v bng S V d: Lp bng phng n F Vi i > 0 : - A[i] > v : F(i, v) = F(i - 1, v)
8

- A[i] <= v : F(i, v) = Max{ F(i-1, v A[i]*k) + C[i]*k } vi k [0, v/A[i] ] Bang F(i,v)

Bang S[i, v]

Thut ton to bng phng n void TaoBangPhuongAn(F[0..n][0..M], S[1..n][1..M]) { <in s 0 cho dng 0 v ct 0 ca bng F[0..n][0..M]>; for (i = 1; i <= n; i++) for (v=1; v <= M; v++) { F[i, v] = F[i-1, v]; S[i, v] = 0; if (v >= A[i]) for(k = 1; k <= v/A[i]; k++) if (F[i, v] < F[i-1, v - A[i]*k ] + C[i]*k) { F[i, v] = F[i-1, v - A[i]*k ] + C[i]*k; S[i, v] = k;
9

} } } Truy vt tm li cc gi hng chn Bt u t S[n, M] trn dng n ta d ngc v dng 1 theo nguyn tc: Nu S[i, v] <> 0 th : - Loi hng i c chn vi s lng l S[i, v] - Truy tip S[i-1, v - S[i, v]*A[i] ]. Nu S[i, v] = 0 th : - Loi hng i khng c chn, - Truy tip S[i-1, v].

Thut ton truy vt tm li cc gi hng chn void TruyVet(S[1..n][1..M]) { i = n; v = M while (i > 0) { if (S[i, v] != 0) { <in s lng gi hng i trong S[i, v] >; v = v S[i, v]*A[i]; } i = i 1; } } 3.3.3. Bi ton dy con c tng chia ht cho k

10

Cho mt dy A gm n s nguyn v mt s nguyn dng k. Hy tm mt dy con (khng nht thit phi lin tip nhau) di nht c tng cc s chia ht cho s k. V d: n = 6 v k = 5

Chiu di dy con: 4 Cc phn t c chn l : 1 C gi tr tng ng l : : 11 Nhc li php ton mod Gi s r = a mod k v z = b mod k Ta c: 1. (a + b) mod k = (r + z) mod k 2. (-r) mod k = (- r + k) mod k 3. (r + z) mod k = v z = (v r) mod k = (v r + k) mod k 2 6 5 20 6 8

Xc nh tham s Gi F(i) = chiu di dy con di nht trong min [1..i] c tng chia ht cho k. 1. Nu dy con di nht khng c A[i] th F(i) = F(i-1) Vi F(i-1) = chiu di dy con di nht trong min [1..i-1] c tng chia ht cho k 2. Nu dy con di nht c cha A[i]: th F(i) = F( i-1) + 1 Gi r = A[i] mod k - Nu r = 0: th F(i-1) = chiu di dy con di nht trong min [1..i- 1] c tng chia ht cho k - Nu r > 0 : do (r + k - r) mod k = 0 nn F(i-1) bng chiu di dy con di nht trong min [1..(i-1)] c tng chia vi k d (k-r) Tham s th hin kch thc ca bi ton: kch thc min v s d ca tng chia vi k Lp cng thc qui Gi F(i, v) = chiu di dy con di nht trong min [1..i] c tng chia vi k d l v.
11

1. Nu dy con di nht khng c A[i] th F(i, v) = F(i-1, v) 2. Nu dy con di nht c cha A[i]: Gi r = A[i] mod k ta c F(i, v) = F(i-1, v - r) + 1 - Nu v r = 0 : F(i, v) = F(i-1, 0) + 1 - Nu v r > 0 v F(i-1, v - r)>0: F(i, v) = F( i-1, v - r) + 1 - Nu v r < 0 v F(i-1, v-r+k)>0: F(i, v) = F( i-1, v-r+k) + 1 thay (v - r) mod k = (v r + k) mod k Bi ton nh nht ng vi i = 1: F(1,v)= 0 nu r <> v F(1,v)= 1 nu r = v Cng thc quy Gi r = A[i] mod k Vi i = 1: - F(1, v) = 0 nu r <> v - F(1, v) = 1 nu r = v Vi i > 1 : - Nu v = r th : F(i, v) = Max {F(i-1, v), F(i-1, 0) +1 } - Nu v > r v F(i-1, v- r) >0 th F(i, v) = Max {F(i-1, v), F(i-1, v r) +1 } - Nu v < r v F(i-1, v r + k)>0 th F(i, v) = Max{F(i-1, v), F(i-1, v r + k) + 1} Tinh ch cng thc quy Gi r = A[i] mod k Vi i = 1: - F(1, v) = 0 nu r <> v - F(1, v) = 1 nu r = v Vi i > 1 : - Nu v = r th : F(i, v) = Max {F(i-1, v), F(i-1, 0) +1 } - Nu v<>r v F(i-1, (v- r +k) mod k) > 0 th F(i, v) = Max {F(i-1, v), F(i-1, (v r + k) mod k) +1 } Xy dng bng phng n: Cu trc bng phng n:
12

Dng mng F[1..n][0..K-1] cha gi tr ca cc F(i, v) Cch tnh gi tr trn bng phng n: - in gi tr dng 1: Nu A[1] mod k = v th F[1, v] = 1 ngc li F[1, v] = 0 - S dng cng thc quy v gi tr trn dng i -1 tnh dng i V d bng phng n: Vi i > 1 : - Nu v = r th : F(i, v) = Max {F(i-1, v), F(i-1, 0) +1 } - Nu v<>r v F(i-1, (v-r+k) mod k) > 0 th F(i, v) = Max {F(i-1, v), F(i-1, (v r + k) mod k) +1 } i 1 2 3 4 5 6 r = A[i] | v 1 1 2 2 0 3 0 0 4 | 0 3 | 0 3 | 3 0 | 4 2 | 4 1 1 0 | 1 4 | 1 4 | 3 1 | 4 3 | 4 2 0 1 | 2 0 | 2 0 | 2 2 | 3 4 | 5 3 0 0 | 2 1 | 2 1 | 2 3 | 3 1 | 5 4 0 3 | 0 2 | 3 2 | 3 4 | 4 2 | 6

Thut ton to bng phng n void TaoBangPhuongAn(F[1..n][0..k-1]) { for (v=0; v <= k-1; v++) F[1, v] = (A[i]%k == v) ? 1 : 0; for (i = 2; i <= n; i++) for (v=0; v <= k-1; v++) { r = A[i] % k; F[i, v] = F[i-1, v]; if (v == r && F[i, v] <= F[i-1, 0 ]) F[i, v] = F[i-1, 0] + 1; else if (F[i-1, (v - r + k)%k] >0 && F[i, v] <= F[i-1, (v - r + k)%k]) F[i, v] = F[ i -1, (v - r + k)%k] + 1; } }
13

Truy vt Bt u t F[n, 0] trn dng n ta d ngc v dng 0 theo nguyn tc: Nu F[i1, (v-r+k)%k] > 0 v F[i, v] > F[i1, (v-r+k)%k]: - A[i] c chn - Truy tip F[i -1, (v-r+k)%k]. Ngc li th A[i] khng c chn, ta truy tip F[i -1, v]. i 1 2 3 4 5 6 r = A[i] | v 1 1 2 2 0 3 0 0 4 | 0 3 | 0 3 | 3 0 | 4 2 | 4 1 1 0 | 1 4 | 1 4 | 3 1 | 4 3 | 4 2 0 1 | 2 0 | 2 0 | 2 2 | 3 4 | 5 3 0 0 | 2 1 | 2 1 | 2 3 | 3 1 | 5 4 0 3 | 0 2 | 3 2 | 3 4 | 4 2 | 6

3.3.4.Tm dy con khng gim di nht Cho mt dy gm n s nguyn. Hy loi b khi dy mt s phn t c mt dy con khng gim di nht. In ra dy con . V d: vi n = 10 v dy A c cho trong bng. Hy ch ra dy con khng gim di nht ?

Xc nh tham s th hin kch thc bi ton Gi L(n) l di dy con khng gim di nht trong min [1..n] - L(n) = L(n-1) nu dy con di nht trong min [1..n-1] khng c A[n] - L(n) = L(n-1) +1 nu dy con di nht trong min [1..n-1] c A[n] Do tham s th hin kch thc bi ton l s phn t n. Xt 2 cch ghi nhn kt qu cc bi ton con:

14

Lp cng thc qui Gi L(i) l di dy con di nht trong dy A[1..i] v c A[i] l phn t cui dy con di nht . Nu A[i] < A[j] vi mi j < i th: L(i) = 1 Ngc li th : L(i) = Max{ L(j) : j < i v A[j] <= A[i] } + 1 Bi ton nh nht vi on A[1..1] th L(1) = 1

Xy dng bng phng n: - Mng L[1..n]: L[i] cha gi tr ca L(i) - Mng Truoc[1..n]: Truoc[i] ghi ch s phn t k trc i trong dy con di nht m i l phn t cui dy. Cch tnh gi tr trn bng phng n: - Gn L[1] = 1 v Truoc[1] = 0 - Vi cc phn t i t 2 n n: Nu A[i] < A[j] vi mi j < i th: L(i) = 1 v Truoc(i) = 0 Ngc li th - L(i) = Max{ L(j) : j < i v A[j] <= A[i] } + 1 - Truoc[i] = k sao cho L(k)= Max{ L(j) : j < i v A[j] <= A[i] }

Thut ton to bng phng n void TaoBangPhuongAn() { L[1] = 1; Truoc[1] = 0; for (i = 2; i <= n; i++)
15

L[i] = 1; Truoc[i] = 0; for (j = i-1; j >= 1; j--) if (A[j] <= A[i] && L[j] >= L[i]) { } L[i] = L[j] + 1; Truoc[i] = j;

} }

Truy vt tm li cc phn t trn dy con Bt u t phn t i c gi tr L[i] c ln nht l phn t cui cng trong dy con di nht. Truy tip sang phn t c ch s Trc[i] cho n khi phn t Truoc[i] = 0.

Thut toan tm li cc phn t trn dy con ti u void TruyVet() { i = n; for ( j = n-1; j >=1; j--) if (B[j] > B[i]) i = j; while ( i > 0) { <in thng tin A[i] thuc dy con ti u>; i = Truoc[i];
16

} <in thng tin A[i] thuc dy con ti u>; }

3.3.5. Lp lch thu nhn cng C mt d n ko di trong T thng, ngi qun l cn phi lp lch s dng cng nhn mi thng cho d n. Bit rng, s cng nhn ti thiu cn trong thng th i l Scn[i]; tin dch v khi thu mt cng nhn mi l DV; tin n b khi sa thi mt cng nhn l ST, lng thng mi cng nhn phi tr l LT. Cn phi thu hay sa thi bao nhiu cng nhn mi thng tng chi ph nhn cng ca d n l nh nht.

Xc nh tham s th hin kch thc bi ton Tham s th hin kch thc bi ton l s thng T Tng chi ph nhn cng trong T thng c tnh t tng chi ph nhn cng ca T-1 thng cng thm chi ph tr nhn cng ca thng th T. Chi ph tr nhn cng ca thng th T bao gm : - Tin lng tr cho s nhn cng ca thng T v - Tin dch v nu s nhn cng ca thng T ln hn s nhn cng thng T-1 hay tin sa thi nu s nhn cng trong thng T nh hn s nhn cng ca thng T-1. Kch thc bi ton ph thuc vo 2 tham s: s thng v s nhn cng ca thng Lp cng thc qui Scn[i] lu s cng nhn cn thu cho thng th i Smax l s cng nhn ca thng cn nhiu ngi nht Bi ton con nh nht ng vi i = 1 (thng u tin): C(1, j) = j * (DV + LT) vi j = Scn[1]..Smax

C(i, j) l chi ph ti thiu ca i thng u tin nu ti thng th i c j cng nhn c thu.


17

C(i, j) = Min{ C(i-1, k) + chi ph t k ngi thnh j ngi } ( i=2..T; j =Scn[i]..Smax; k = Scn[i-1]..Smax) Kt qu bi ton l: Kq = Min{C(T, j) + chi ph sa thi j ngi} j=Scn[T]..Smax Xy dng bng cha C(i, j) Mng C[1..T+1, 1..Smax]: C[i, j] ghi nhn gi tr C(i, j) C(1, j) = j * (DV + LT) vi j = Scn[1]..Smax C(i, j) = Min{ C(i-1, k) + chi ph t k ngi thnh j ngi } ( i=1..T; j =Scn[i]..Smax; k = Scn[i-1]..Smax) C(T+1, j) = C(T, j) + (j * ST) j=Scn[T]..Smax

Xy dng bng truy vt s cng nhn Mng Truoc[1..T, 1..Smax]: Truoc[i, j] := k l s ngi thu thng th i-1 c C[i, j]

Thut ton to bng phng n C v Truoc { for (j=Scn[1]; j <= Smax; j++) C[1, j] = j * (DV + LT); for (i = 2; i <= T; i++) for (j=Scn[i]; j <= Smax; j++)
18

C[i, j] = MAXINT; for (k=Scn[i-1]; k <= Smax; k++) { X = C[i-1, k] ; if (k > j) X = X + (k j)*DV; else X = X + (j k)*ST if (X< C[i, j]) { C[i, j] = X; Truoc[i, j] = k; } }

} for (j=Scn[T]; j <= Smax; j++) C[T+1, j] = C(T, j) + (j * ST) ; } Thut ton truy vt s cng nhn mi thng { //Tm s nhn cng ca thng th T S = C[T+1, Scn[T] ]; k = Scn[T]; for (j=Scn[T]+1; j <= Smax; j++) if (S > C[T+1, j ]) { k = j; S =C[T+1, j ]; } <Thng T cn k cng nhn> for (i=T; i > 1; i--) { } } Bi tp 1. C N gi ko, gi th i c Ai ci ko. Khng c bc bt k mt gi ko no, cn chia N gi ko thnh hai phn sao cho chnh lch s ko gia hai gi l t nht. 2. Cho n loi t giy bc. T giy bc th i c mnh gi A[i]. S t mi loi khng gii hn. Cn chi tr cho khch hng s tin M ng. Hy cho bit mi loi tin cn bao nhiu t sao cho tng s t l t nht. Nu khng i c, th thng bo KHONG DOI DUOC. 3. Cho n loi t giy bc. T giy bc th i c mnh gi A[i]. Gi thit loi tin mnh gi A[i] c B[i] t (i := 1, n). Cn chi tr cho khch hng s tin M ng. Hy cho bit mi loi tin cn bao nhiu t sao cho tng s t l t nht. Nu khng i c, th thng bo KHONG DOI DUOC. 4. Cn cm k loi hoa khc nhau vo n l xp thng hng sao cho loi hoa c s hiu nh c t trc hoa c s hiu ln. Vi mi loi hoa i ta bit gi tr thm m khi cm hoa k = Truoc[i, k]; <Thng i-1 cn k cng nhn>

19

vo l j l v[i,j]. Hy tm phng n cm cc loi hoa trn vo n l sao cho tng gi tr thm m l ln nht. 5. Mt hp th in t cho php gi nh km mt hoc nhiu file vo mt th in t sao cho tng dung lng cc file nh km trn th in t khng vt qu kch thc M KByte cho trc. c s th in t gi i l t nht, ngi ta cn chn trong N file d liu cc file nh km vo mt email sao cho tng dung lng ca cc file nh km l ln nht nhng khng vt qu kch thc M. Gi s, M 100; N 50 v file th i trong N file d liu c kch thc l Ai KByte (l s nguyn dng). Hy trnh by thut ton chn trong N file d liu cc file nh km vo mt th in t theo yu cu trn, lit k kch thc cc file chn. 6. Vic xy dng cng trnh cp nc sch cc bn vng cao rt kh khn, phi xy dng ko h thng dn nc t di thung lng ln bn bng qua cc ngn i. thun li cho vic dn nc, ngi ta t cc trm bm ni tip trn tng ngn i dn t thung lng ln bn vng cao, theo nguyn tc ngn i sau phi cao hn ngn i trc, hai trm bm k nhau khng nht thit t trn hai ngn i k nhau. Gi s c N ngn i (N 100), mi ngn i c gn mt s th t tng theo hng t thung lng ln vng cao, ngn i th i c cao Ai (l mt s nguyn dng). a. Hy trnh by gii thut chn la ra cc ngn i t cc trm bm sao cho s ngn i c chn l nhiu nht. b. S dng ngn ng C++ ci t gii thut trn. 7. Mt cng ty my tnh nhn c N hp ng (N 50) lp t h thng my tnh ti N cng ty. Hp ng th i c gi tr l Ci (s nguyn) v cn Ai nhn s thc hin. Do s lng nhn s ca cng ty c hn, nn Cng ty mun u tin chn mt s hp ng thc hin trc sao cho tng gi tr ca cc hp ng chn l ln nht nhng tng s nhn s thc hin cc hp ng khng vt qu s lng M nhn s (M 100) hin c ca cng ty. Hy trnh by thut gii chn la cc hp ng theo yu cu trn, cho bit tng gi tr ca cc hp ng chn; gi tr hp ng v s lng nhn s ca cc hp ng chn. 8. Mt cng ty my tnh nhn c N hp ng (N 50) lp t h thng my tnh ti N cng ty. Hp ng th i c gi tr l Ci (s nguyn) v cn Ai nhn s thc hin. Do s lng nhn s ca cng ty c hn, nn Cng ty mun u tin chn mt s hp ng thc hin trc sao cho tng gi tr ca cc hp ng chn l ln nht nhng tng s nhn s thc hin cc hp ng khng vt qu s lng M nhn s (M 100) hin c ca cng ty. Hy trnh by thut gii chn la cc hp ng theo yu cu trn, cho bit tng gi tr ca cc hp ng chn, gi tr hp

20

21

Chng 4 CY MC TIU CA CHNG - Hiu v nm vng bn cht, cc khi nim c bn v cy v cc CTDL biu din cy - Nghin cu mt lp cy c bit: cy nh phn. - Sinh vin cn nm vng phn l thuyt c th hnh thnh cc k nng trong vic tip cn v gii cc bi ton c th. NI DUNG BI GING L THUYT 4.1.Cc khi nim c bn Chng ta c th xc nh khi nim cy bng hai cch: quy v khng quy. Trc ht chng ta a ra nh ngha cy thng qua cc khi nim trong th nh hng. Mt v d in hnh v cy l tp hp cc thnh vin trong mt dng h vi quan h cha con. Tr ng t ca dng h ny, mi mt ngi trong dng h l con ca mt ngi cha no trong dng h. Biu din dng h di dng th hng: quan h cha con c biu din bi cc cung ca th, nu A l cha ca B, th trong th c cung i t nh A ti nh B. Xem xt cc c im ca th nh hng ny, chng ta a ra nh ngha cy nh sau: Cy l mt th nh hng tha mn cc tnh cht sau: C mt nh c bit c gi l gc cy Mi nh C bt k khng phi l gc, tn ti duy nht mt nh P c cung i t P n C. nh P c gi l cha ca nh C, v C l con ca P C ng i duy nht t gc ti mi nh ca cy. Ngi ta quy c biu din cy nh trong hnh 4.1: gc trn cng, hng di l cc nh con ca gc, di mt hng l cc nh con ca cc nh trong hng , c on ni t nh cha ti nh con (cn lu cung lun lun i t trn xung di)

Hnh 4.1. Biu din hnh hc mt cy


22

Sau y chng ta s a ra mt s thut ng hay c dng n sau ny. M rng ca quan h cha con, l quan h t tin con chu. Trong cy nu c ng i t nh A ti nh B th A c gi l t tin ca B, hay B l con chu ca A. Chng hn, gc cy l t tin ca cc nh cn li trong cy. Cc nh cng cha c xem l anh em. Chng hn, trong cy hnh 4.1 cc nh B, C, D l anh em. Cc nh khng c con c gi l l. Trong hnh 4.1, cc nh l l E, F, C, G. Mt nh khng phi l l c gi l nh trong. Mt nh bt k A cng vi tt c cc con chu ca n lp thnh mt cy gc l A. Cy ny c gi l cy con ca cy cho. Nu nh A l con ca gc, th cy con gc A c gi l cy con ca gc. cao ca cy l s nh nm trn ng i di nht t gc ti mt l. Chng hn, cy trong hnh 4.1 c cao l 3. D dng thy rng, cao ca cy l cao ln nht ca cy con ca gc cng thm 1. su ca mt nh l di ng i t gc ti nh . Chng hn, trong hnh 4.1, nh G c su l 2. Cy l mt cu trc d liu phn cp: Cc nh ca cy c phn thnh cc mc. Mc ca mi nh c xc nh quy nh sau: Gc mc 1 Mc ca mt nh = mc ca nh cha + 1 Nh vy, cc nh trong cng mt mc l nh con ca mt nh no mc trn. cao ca cy chnh l mc ln nht ca cy. V d, cy trong hnh 4.1 c phn thnh 3 mc: mc 1 ch gm c gc, mc 2 gm cc nh A, B, C, D, mc 3 gm cc nh E, F, G. Sau ny chng ta ch quan tm n cc cy c sp. Cy c sp l cy m cc nh con ca mi nh c sp sp theo mt th th t xc nh. Gi s a l mt nh v cc con ca n c sp xp theo th t b1, b2, ..., bk (k 1), khi nh b1 c gi l con c ca a, cn nh bi+1 (i=1, 2, ...k-1) c gi l em lin k ca nh bi. Trong biu din hnh hc, nh con c l nh ngoi cng bn tri, nh b k l nh ngoi cng bn phi. Trn y chng ta nh ngha cy nh mt th nh hng c mt s tnh cht c bit. Khi nim cy cn c th nh ngha mt cch khc: nh ngha quy. nh ngha quy. Cy l mt tp hp khng rng T cc phn t (c gi l cc nh) c xc nh quy nh sau: gc l a. Tp ch c mt nh a l cy, cy ny c
23

Gi s T1, T2, ....., Tk (k 1) l cc cy c gc tng ng l r1, r2, ...., rk , trong hai cy bt k khng c nh chung. Gi s r l mt nh mi khng c trong cc cy . Khi tp T gm nh r v tt c cc nh trong cc cy Ti (i=1, ...., k) lp thnh mt cy c gc l nh r, v r l nh cha ca nh ri hay ri l nh con ca r (i=1, ..., k). Cc cy Ti (i=1, ..., k) c gi l cc cy con ca gc r. Cy T c biu din hnh hc nh sau:

S dng nh ngha cy quy, chng ta c th d dng a ra cc thut ton quy cho cc nhim v x l trn cy. Ci t cy Cy c th ci t bi cc CTDL khc nhau. Chng ta c th s dng mng ci t cy. Song cch ny khng thun tin, t c s dng. Sau y, chng ta trnh by hai phng php ci t cy thng dng nht. Phng php 1 (ch ra danh sch cc nh con ca mi nh). Vi mi nh ca cy, ta s dng mt con tr tr ti mt nh con ca n. V nh vy, mi nh ca cy c biu din bi mt cu trc gm hai thnh phn: mt bin data lu d liu cha trong nh v mt mng child cc con tr tr ti cc nh con. Gi s, mi nh ch c nhiu nht K nh con, khi ta c th m t mi nh bi cu trc sau: const int K = 10; template <class Item> { Item data; Node* child [K]; }; Chng ta c th truy cp ti mt nh bt k trong cy bng cch i theo cc con tr bt u t gc cy. V vy, ta cn c mt con tr ngoi tr ti gc cy, con tr root: root Node <Item>* root;
A

vi cch ci t ny, cy trong hnh 4.1 c ci t bi CTDT c biu din hnh hc trong hnh 4.2.
B C D

24
E F G

Hnh 4.2. Ci t cy bi mng con tr. Phng php 2 (ch ra con c v em lin k ca mi nh). Trong mt cy, s nh con ca cc nh c th rt khc nhau. Trong trng hp , nu s dng mng con tr, s lng ph b nh. Thay v s dng mng con tr, ta ch s dng hai con tr: con tr firstChild tr ti nh con c v con tr nextSibling tr ti em lin k. Mi nh ca cy c biu din bi cu trc sau: template <class Item> struct { Item Node* }; Chng ta cng cn c mt con tr ngoi root tr ti gc cy nh trong phng php 1. Vi cch ny, cy trong hnh 4.1 c ci t bi CTDL nh trong hnh 4.3. D dng thy rng, xut pht t gc i theo con tr firstChild hoc con tr nextSibling, ta c th truy cp ti nh bt k trong cy. Ta c nhn xt rng, cc con tr nextSibling lin kt cc nh to thnh mt danh sch lin kt biu din danh sch cc nh con ca mi nh.
root A

Node data; nextSibling;

Node*; firstChild;

G 25

Hnh 4.3. Ci t cy s dng hai con tr. Cn ch rng, trong mt s trng hp, thun tin cho cc x l, ta c th a thm vo cu trc Node mt con tr parent tr ti nh cha. 4.2. Duyt cy Ngi ta thng s dng cy t chc d liu. Khi d liu c t chc di dng cy, th hnh ng hay c s dng l duyt cy. Duyt cy c ngha l ln lt thm cc nh ca cy theo mt trt t no v tin hnh cc x l cn thit vi cc d liu trong mi nh ca cy, chng hn nh in ra cc d liu . C ba phng php duyt cy hay c s dng nht trong cc ng dng l: duyt cy theo th t trc (preorder), theo th t trong (inorder) v theo th t sau (postorder). Chng ta xc nh cc phng php duyt cy ny. Cc phng php duyt cy c m t rt n gin bng quy. Gi s T l cy c gc r v cc cy con ca gc l T1, T2, ..., Tk (k>=0). Duyt cy T theo th t trc c ngha l: Thm gc r.

Duyt ln lt cc cy con T1,..., Tk theo th t trc.


Chng hn, xt cy trong hnh 4.1. Th t cc nh c thm theo phng php ny l A, B, E, F, C, D, G. Phn tch k thut duyt cy theo th t trc, ta rt ra quy lut i thm cc nh ca cy nh sau: u tin thm gc r , sau i xung thm con c r 1 ca gc (r1 l gc ca cy con T1), ri li tip tc i xung thm con c ca r 1... Khi khng i su xung c, tc l t ti mt nh khng c con (l), ta quay ln cha ca n v i xung thm mt nh con tip theo (nu c) ca nh cha , ri li tip tc i xung... Qu trnh i thm cc nh ca cy trong hnh 4.1 c biu din bi hnh 4.4. Nh vy, duyt cy theo th t trc c ngha l xut pht thm t gc, lun lun i su xung thm cc nh con, ch tr khi no khng xung di c na mi quay ln nh cha ri li tip tc i xung. Do , k thut duyt cy theo th t trc cn c gi l k thut tm kim theo su.

26

Hnh 4.4. Thm cc nh ca cy theo th t trc Duyt cy T theo th t trong c quy nh nh sau:

Duyt cy con T1 theo th t trong


Thm gc r

Duyt ln lt cc cy con T2, ..., Tk theo th t trong.


V d, th t cc nh ca cy trong hnh 4.1 c thm theo th t l E, B, F, A, C, G, D. Duyt cy T theo th t sau c tin hnh nh sau:

Duyt ln lt cc cy con T1, ...Tk theo th t sau


Thm gc r Chng hn, cng vi cy trong hnh 4.1, cc nh c thm theo phng php ny ln lt l E, F, B, C, G, D, A. By gi chng ta ci t cc hm duyt cy. Cc k thut duyt cy c xc nh quy, v vy d dng ci t cc k thut duyt cy bi cc hm quy. Sau y ta vit hm quy duyt cy theo th t trc: hm Preorder. Hm ny cha mt tham bin l con tr root tr ti gc cy. Lu rng, C++ cho php tham bin ca mt hm c th l hm. Chng ta a vo hm Preorder mt tham bin khc, l hm vi khai bo sau: void f(Item&); Hm f l hm bt k thc hin cc x l no vi d liu c kiu Item, trong Item l kiu ca d liu cha trong nh ca cy. Gi s cy c ci t bng phng php s dng hai con tr: firstChild v nextSibling. Khi hm quy Preorder c ci t nh sau: template <class Item> void { if (root ! = NULL) { f (root data); node <Item>* { Preorder (P, f); P = P nextSibling; } }
27

Preorder (Node<Item>* root, void f(Item&))

P = root firstChild;

while (P ! = NULL)

Chng ta cng c th ci t hm Preorder khng quy. Mun vy chng ta cn s dng mt ngn xp lu cc nh nm trn ng i t gc ti nh ang c thm khi ti mt nh m khng i su xung c th bit c nh cha ca n m quay ln. Thay v lu cc nh, ngn xp s lu cc con tr tr ti cc nh. Hm Preorder khng quy: template <class Item>; void Preorder (Node <Item>* root, void f (Item)) { Stack <Node<Item>*> S; // Khi to ngn xp rng S lu // cc con tr. Node <Item>* P = root while (P ! = NULL) { f (P data); S. Push (P); // y con tr P vo ngn xp S P = P firstChild; } while (! S. Empty ()) { P = S. Pop (); // Loi con tr P nh ngn xp. P = P nextSibling; while (P ! = NULL) { f (P data); S. Push (P); P = P firstChild; } } } Mt cch tng t, c th vit ra cc hm quy v khng quy thc hin duyt cy theo th t trong: hm Inorder, v duyt cy theo th t sau: hm Postorder. 4.3. Biu din v duyt cy tng qut 4.3.1. Biu din cy tng qut
28

Hnh 4.5. Cy tng qut C th hiu l cy tng qut l cy m-phn no . C th m c xc nh trc, cng c th m khng c xc nh trc. Vi cy m-phn m dng mng lu tr theo cch thng thng th r rng l c rt nhiu trng. Tuy nhin, cch dng mng ch s cha nh dng vi cy nh phn kh thch hp vi cy m-phn. 1. Dng mng biu din cy tng qut. Gi s c n nt c nh s l 1, 2, ..., n. Dng mng A biu din cy T theo nguyn tc: A(i) = 0 nu nt i l gc, ngoi ra, A(i) = j nu j l cha ca nt i. 2. Cng c th dng danh sch lin kt biu din cy tng qut. Mi nt c mt danh sch cc con ca n, bt u t con bn tri nht n con bn phi nht.
1. Dng m hnh cy nh phn vi con tri nht v nt em k cn bn phi. Mi nt c

th hnh dung gm ba trng chnh:

trong , Data l trng lu tr thng tin ca nt, trng Left_Child tr ti con tri nht, cn trng Right_Sibling tr ti nt em k cn bn phi ca nt hin ti

29

Hnh 4.6. Hnh nh danh sch ln kt lu tr cy 4.5 4.3.2. Duyt cy tng qut Vi mi cch biu din cy tng qut, c nhiu cch duyt tng ng. Chng hn, vi cch biu din thng qua cy nh phn vi con tri nht v nt em k cn bn phi, c th s dng cc cch duyt cy nh phn trong mc trc cho cy tng qut chuyn i. Tuy nhin cng c th xy dng ring th tc duyt cy tng qut nhm tng hiu qu ca php duyt. 1. Vi cy tng qut 4.5, nu p dng phng php duyt tin th t, ta s nhn c danh sch cc nh theo th t: 1, 2, 4, 5, 6, 7, 3, 8, 9, 10 2. Danh sch cc nh ca cy 4.5 c c theo phng php duyt trung th t: 4, 5, 7, 6, 2, 8, 9, 10, 3, 1. 3. Danh sch cc nh ca cy 4.5 c c theo phng php duyt hu th t: 7, 6, 5, 4, 10, 9, 8, 3, 2, 1.

30

Bi tp

1. Hy a ra cch biu din cy bi mng. M t CTDL biu din cy theo cch bng cc khai bo trong C + +. 2. Cho cy:
A B a

Hy vit ra danh sch cc nh khi duyt cy theo cc th t preorder, inorder v postorder. 3. Gi s cy c biu din bng cch s dng hai con tr firstChild v nextSibling. Bng cch s dng ngn xp, hy vit cc hm khng quy duyt cy theo th t inorder v postorder.

31

You might also like