Professional Documents
Culture Documents
CƠ SỞ LẬP TRÌNH
CƠ SỞ LẬP TRÌNH
CƠ SỞ LẬP TRÌNH
QUI RECURVE
2
Mt khi nim X c nh ngha theo kiu qui nu trong nh ngha ca X c s dng trc tip hoc gin tip li chnh khi nim X.
V d
1. nh nghi giai tha ca mt s t nhin N, k hiu N!
a) N! = 1 nu N = 0 b) N! = N*(N-1)! nu N > 0
V d: nh ngha hm tnh N! theo qui. int Fac(int N) { if (N == 0) return 1; return N * Fac(N - 1); }
V d: Tnh UCLN(M, N) theo thut ton Euclide a) UCLN(M, N) = M nu N = 0 b) UCLN(M, N) = UCLN(N, M mod N) nu N>0 int UCLN(int M, int N) { if (N == 0) return M; return UCLN(N, M % N); }
2- qui nh phn Hm F { Nu (tha iu kin dng) th <thc hin S> Ngc li { gi hm F ; gi hm F } } Vi S l thao tc khng qui V d: Hm tm gi tr phn t F(n) ca dy Fibonacci int F(int n) { if ( n < 2 ) return 1 ; return F(n -1) + F(n -2) ; }
9
10
Hm F() { for (gi tri u ti gi tr cui) { Nu (tha iu kin dng) th <thc hin S> Ngc li < gi qui F > } }
11
12
Cng dng:
Gii bi ton lit k tt c cc li gii tha yu cu bi ton. V d: 1. Lit k cc dy nh phn c di N 2. Lit k cc tp con k phn t ca tp S = {1, 2,.., n} 3. Lit k cc chnh hp khng lp chp k ca tp S = {1, 2,.., n}
13
Cu hnh mt li gii
X1
X2
X3
Xn
Tp gi tr c
v1
v2
vm
14
Bi ton: Lit k cc dy nh phn c di n Phn tch: Cu trc li gii l dy c n phn t: X[1] .. X[n] Mi phn t X[ i ] nhn gi tr trong tp c {0, 1}
Cu trc li gii
Tp gi tr c
16
Xc nh gi tr phn t X[i] ca dy nh phn void XacDinhPhanTu(int i) { for (int v = 0; v<= 1; v++) { X[ i ] = v; if ( i == n ) <Xut dy nh phn tm c>; else XacDinhPhanTu ( i + 1 ); } }
17
18
Cch gii:
a ra iu kin cho mi tp con l : 1 <= X[1] < X[2] < .. < X[ i ] < .. < X[K-1] < X[K] <= N Nhn xt:
X[K] <= N X[K-1] <= X[K] - 1 <= N 1 X[K-2] <= X[K] - 2 <= N 2 X[ i ] = X[K-(K-i)] <= N - (K - i)
Gii hn gi tr c cho thnh phn X[i] trong khong t : X[i-1]+1 n (N K + i) iu ny cng ng cho c trng hp i = 1, ta thm vo X[0] = 0.
19
Xc nh gi tr phn t Xi ca mt tp con
void XacDinhPhanTu(int i) { for (int v = X[i-1]+1; v <= N-K+i; v++) { X[i] = v; if ( i == K ) <Thng bo tp con tm c>; else XacDinhPhanTu( i + 1 ); } }
20
F[v] = 0; } } }
23
Bi ton M i tun: ch ra hnh trnh ca qun M xut pht t mt trn bn c i qua tt c cc cn li ca bn c, mi ng 1 ln.
Phn tch: Cu trc li gii l BC[1..n][1..n] cha s th t hnh trnh ca qun M. Tp gi tr c cha cc gi tr dng tnh ta cc k tip dx[1..8] = {-2,-1, 1, 2, 2, 1, -1, -2} dy[1..8] = { 1, 2, 2, 1, -1, -2, -2, -1} iu kin chn gi tr c cho bc i th i phi n mt : Thuc bn c V cha i qua: BC[u, v] = 00
(u, v)
(x, y)
24
Bi ton: t 8 Qun Hu trn bn c quc t 8x8 sao cho cc qun Hu khng n nhau
Phn tch: Cu trc li gii l mng Dong[1..8] lu ch s ca ct c cha qun hu Tp gi tr c {1..8 } l ch s ca ct s t qun hu. T chc cc bin trng thi ghi nhn ng cho no c qun hu: ng cho ngc: CN[1..15] (d, c) thuc ng CN[c + d - 1] ng cho xui: CX[1..15] (d, c) thuc ng CX[ 8 + c d ] T chc bin trng thi ghi nhn ct c qun hu: Cot[1..8]
1 2 3
26
2 1 3 1 1 2 4 2 4 3
28
2 1 3 1 1 2 4 2 4 3
0 3 2 1
3 0 1 2
2 1 0 4
1 2 4 0
Ma trn chi ph C
29
Phn tch:
Mi hnh trnh l mt chu trnh i qua cc thnh ph {1, 2, .., n}. Cu trc li gii l dy X[1..n] trong : X[1] = 1 c xem l thnh ph xut pht. X[2..n] cha hon v ca dy {2, 3, .. ,n}
0 3 2 1
3 0 1 2
2 1 0 4
1 2 4 0
Ma trn chi ph C
30
32
Bi ton Knapsack
C N vt, vt th i c trng lng l Ai v c gi tr l Ci (i=1,..,n). Xc nh cc vt cn b vo ba l sao cho tng trng lng khng qu M nhng c tng gi tr l ln nht.
33
Phn tch:
Vt c chn c c hiu l 1, vt khng c chn c c hiu l 0. a v bi ton lit k dy s nh phn Cu trc li gii l dy: X[1..n] X[i] = 1 : nu vt i c chn. X[i] = 0 : nu vt i khng c chn.
34
Xc nh gi tr phn t X[i] ca dy nh phn void Try(int i) { for (int v =0; v<= 1; v++) { X[ i ] = v; if ( i == n ) <Cp nht vt chn ti u>; else Try( i + 1 ); } }
35
Cp nht vt chn ti u:
T chc ghi nhn danh sch vt chn tt nht: Best[1..n] : cha dy nh phn ghi nhn cch chn ti u. Smax : tng gi tr ca cc vt trong cch chn ti u. Khi to ban u cho Smax = 0 S : tng gi tr ca cc vt trong cch chn hin hnh
n 1 S = X[i] * C[i ] i =1
36
Cp nht vt chn ti u
Thut ton: Cp nht vt chn ti u
{
Tnh v
if ( W <= M && S > Smax ) { Smax = S; Ghi nhn X l la chn tt nht: Best = X; } }
37
K THUT NHNH CN
38
Cng dng
Gim thi gian thc hin bi ton tm li gii tt nht trong cc li gii c lit k bng thut ton quay lui. tng: Thm vo thut ton quay lui kh nng nh gi li gii ti u tng bc xc nh phn t Xi. Nu ti bc th i nh gi c li gii s khng ti u th quay lui ngay khng cn phi tm tip cc phn t khc.
39
2 1 3 1 1 2 4 2 4 3
0 3 2 1
3 0 1 2
2 1 0 4
1 2 4 0
Ma trn chi ph C
41
Phn tch:
Cu trc li gii l dy: X[1..n]
X[1] = 1 c xem l thnh ph xut pht. X[2..n] l mt hon v ca cc thnh ph 2, .. ,n.
42
T chc nh gi li gii ti bc th i:
Thm mng T[1..n]: T[i] cha tng chi ph t X[1] n X[i] T[i] = T[i -1] + C[X[i -1], X[i]];
Khi to: T[1] = 0
Nu i tip (n i) thnh ph na th chi ph ti thiu phi l: T[i] + (n - i)*Cmin. Nu T[i] + (n - i)*Cmin < Smin th c hy vng tm c li gii ti u, ngc li th chc chn khng tm c li gii ti u.
44
46
Bi ton Knapsack
C N vt, vt th i c trng lng l Ai v c gi tr l Ci (i=1,..,n). Xc nh cc vt cn b vo ba l sao cho tng trng lng khng qu M nhng c tng gi tr l ln nht.
47
Phn tch:
Cu trc li gii l dy: X[1..n]
X[i] = 1 : nu vt i c chn. X[i] = 0 : nu vt i khng c chn.
48
Xc nh gi tr phn t X[i] ca dy nh phn void Try(int i) { for (int v =0; v<= 1; v++) { X[ i ] = v; if ( i == n ) <Cp nht vt chn ti u>; else if (cn hy vng tm ra li gii ti u) Try( i + 1 ); } }
49
T chc nh gi li gii ti bc th i:
Mng T[0..n]: T[i] cha tng gi tr vt chn trong min [1..i] T[i] = T[i-1] + X[i]*C[i] Mng K[0..n]: K[i] cha tng khi lng cc vt chn trong min [1..i] K[i] = K[i-1] + X[i]*A[i] nh gi li gii sau khi xc nh X[i]:
Gi Cmax l gi tr ln nht trong cc gi tr C[i]. Nu chn ht (n i) vt cn li th tng gi tr ti a ca li gii l:
T[i] + (n-i)*Cmax Nu K[i] <= M v T[i] + (n-i)*Cmax > Smax: th c hy vng tm c li gii ti u.
50
51
Cp nht vt chn ti u:
Thut ton: { if ( K[n] <= M && T[n] > Smax ) { Smax = T[n]; Ghi nhn X l la chn tt nht: Best = X; } }
52
Mt s bi ton
1. C N gi ko, gi th i c Ai cc ko. Xy dng thut ton chia N gi ko thnh hai phn sao cho chnh lch s ko gia hai phn l t nht. Yu cu, khng c thay i s ko trong mi gi ; in chnh lch nh nht gia hai phn c th c v in danh sch gi ko ca tng nhm. 2. Cho 1 mng gm n cc s nguyn a[1], a[2],.., a[n] v mt s nguyn S. Hy tm tt c cc dy con : 1 <= x1 < x2 < .. < xk <= n sao cho: a[x1] + a[x2] + ..+ a[xk] = S 3. Mt dy chuyn sn xut c N (N<=100) v tr. C N cng nhn, cho bit nng sut ca cng nhn th i m lm v tr th j l Cij (Cij : Integer). Hy sp xp N cng nhn vo N v tr sao cho t nng sut cao nht. 4. Tnh s cch v in tt c cc cch phn tch s t nhin N >1 thnh tng cc s t nhin nh hn n (mi phn tch ch k ng mt ln: 4+3+1 v 1+4+3 ch l mt) 5. Hy tm tp hp cc du '+, - v khng du gia dy s 123456789 sao cho c mt biu thc c gi tr bng = N cho trc. V d: N = 280 ta c cc t hp sau: 1+2+345-67+8-9; 1+234-5+67-8-9; 123-4+5+67+89
53
6. Cho mt dy N s nguyn. Hy loi b khi dy mt s phn t c mt dy con, c t nht 2 phn t, khng gim v di nht. In ra dy con . V d: N = 10: 2 6 -7 5 8 1 -3 5 15 9 Kt qu tm c dy con khng gim di nht c 4 phn t: -7 -3 5 9 7. Mt ngi cha mang theo s tin l M vo mt ca hng mua K mn qu tng cho cc con. Trong ca hng c N mt hng, mt hng th i c gi tin l Ai. Ngi cha cn chn K (K < N) mt hng khc nhau lm qu sao cho tng s tin ca K mt hng ny l ln nht nhng khng ln hn s tin mang theo. 8. Mi ht x ngu c 6 mt, mi mt cha t 1 n 6 du chm. Lit k cc kt qu phn bit c th c khi cng lc 3 ht x ngu, khng k th t xut hin trn cc ht x ngu, v d {1, 2, 3} v {2, 3, 1} l nh nhau.
54
9. Trn bn c vung 4x4 xp 8 qun c gm 4 qun mu en v 4 qun mu trng sao cho trn mi hng v mi ct c ng mt qun mu en v 1 qun mu trng. Th hin trn mn hnh cc cch sp xp ny 10. Mt c s sn xut cn phn cng M nhn vin tham gia thc hin N hp ng sn xut sn phm (M >= N). Mi nhn vin ch tham gia thc hin mt hp ng. Ngi ta d tnh rng, nu phn cng i nhn vin tham gia thc hin hp ng j th c thi gian hon thnh hp ng l T[i,j]. Hy tm phng n phn cng mi hp ng bao nhiu nhn vin sao cho tng s thi gian hon thnh N hp ng l t nht. 11. Cho ma trn vung cp 8 cha cc s nguyn. Tm gi tr ln nht ca tng 8 s hng trn ma trn s trn sao cho 2 s hng bt k trong 8 s hng trn khng nm trn cng mt hng, khng cng nm trn mt ct v khng cng nm trn ng cho . 12. Cho mt bng A c M hng, N ct (3 M, N 50), Mi phn t ca bng l mt s nguyn nhn gi tr t 0 n 99. Cho mt s K (2 K Min(M, N)). Tm K phn t trong bng A tng ca K phn t ny l ln nht, vi iu kin l trn mi hng chn nhiu nht mt phn t, mi ct chn nhiu nht mt phn t.
55