Professional Documents
Culture Documents
NMLT C19 KyThuatLapTrinhDeQuy
NMLT C19 KyThuatLapTrinhDeQuy
NMLT C19 KyThuatLapTrinhDeQuy
NHP MN LP TRNH
ng Bnh Phng
dbphuong@fit.hcmus.edu.vn
K THUT LP TRNH
QUY
1
&
VC
BB
Ni dung
4 Cc bi ton kinh in
Cho S(n) = 1 + 2 + 3 + + n
=>S(10)? S(11)?
S(10) = 1 + 2 + + 10 = 55
S(11) = 1 + 2 + + 10 + 11 = 66
= S(10) + 11
= 55 + 11 = 66
= +
Bc 1. Phn tch
S(1) = S(0) + 1
Phn tch thnh bi ton ng
dng nhng n gin hn.
Dng li bi ton ng S(0) = 0
dng n gin nht c th xc
nh ngay kt qu.
Khi nim
Vn quy l vn c
nh ngha bng chnh n.
V d
Tng S(n) c tnh thng qua
tng S(n-1).
Khi nim
Mt hm c gi l quy nu bn trong
thn ca hm c li gi hm li chnh n
mt cch trc tip hay gin tip.
Phn dng
(Base step)
Phn khi tnh ton hoc
im kt thc ca thut ton
Khng cha phn ang c
nh ngha
Phn quy
(Recursion step)
C s dng thut ton ang
c nh ngha.
H TNG
Trong thn hm ny c li gi hm ti
PHI TUYN 3 hm kia v bn trong thn hm kia c
li gi hm ti hm ny.
4
Trong thn hm c li gi hm li chnh
n c t bn trong thn vng lp.
K thut lp trnh quy
8
&
VC
BB
quy tuyn tnh
V d
Tnh S(n) = 1 + 2 + + n
S(n) = S(n 1) + n
K dng: S(0) = 0
V d
Tnh s hng th n ca dy
Fibonacy:
f(0) = f(1) = 1
f(n) = f(n 1) + f(n 2) n > 1
Cu trc chng trnh K dng: f(0) = 1 v f(1) = 1
<Kiu> TnHm(<TS>) {
.: Chng trnh :.
if (<K dng>) {
long Fibo(int n)
{
return <Gi Tr>;
if (n == 0 || n == 1)
}
return 1;
TnHm(<TS>);
return Fibo(n1)+Fibo(n2);
}
TnHm(<TS>);
}
K thut lp trnh quy
10
&
VC
BB
quy h tng
V d
Tnh s hng th n ca dy:
x(0) = 1, y(0) = 0
x(n) = x(n 1) + y(n 1)
y(n) = 3*x(n 1) + 2*y(n 1)
Cu trc chng trnh K dng: x(0) = 1, y(0) = 0
.: Chng trnh :.
<Kiu> TnHm1(<TS>) {
long yn(int n);
if (<K dng>)
long xn(int n) {
return <Gi tr>;
if (n == 0) return 1;
TnHm2(<TS>);
return xn(n-1)+yn(n-1);
}
}
<Kiu> TnHm2(<TS>) {
long yn(int n) {
if (<K dng>)
if (n == 0) return 0;
return <Gi tr>;
return 3*xn(n-1)+2*yn(n-1);
TnHm1(<TS>);
}
}
K thut lp trnh quy
11
&
VC
BB
quy phi tuyn
V d
Tnh s hng th n ca dy:
x(0) = 1
x(n) = n2x(0) + (n-1)2x(1) +
+ 22x(n 2) + 12x(n 1)
Cu trc chng trnh K dng: x(0) = 1
<Kiu> TnHm(<TS>) {
.: Chng trnh :.
if (<K dng>) {
long xn(int n)
{
return <Gi Tr>;
if (n == 0) return 1;
}
long s = 0;
Vng lp {
for (int i=1; i<=n; i++)
TnHm(<TS>);
s = s + i*i*xn(ni);
}
return s;
}
}
K thut lp trnh quy
12
&
VC
BB
Cc bc xy dng hm quy
; B B B C
C(); {
; ; D A A A A A A A D
} } M M M M M M M M M M M
Thi gian
F(4)
5
3
F(3) 5
+ 2
F(2)
2
F(2) 3
+ 1
F(1) 1
F(1) 2
+ 1
F(0)
1
F(1) 2
+ 1
F(0)
Khi nim
H thc truy hi ca 1 dy An l cng thc
biu din phn t An thng qua 1 hoc nhiu
s hng trc ca dy.
V d 1
Vi trng c 1 gi li nhn i. Vy sau 5 gi
s c my con vi trng nu ban u c 2 con?
Gii php
Gi Vh l s vi trng ti thi im h.
Ta c:
Vh = 2Vh-1
V0 = 2
quy tuyn tnh vi V(h)=2*V(h-1) v iu
kin dng V(0) = 2
K thut lp trnh quy
20
&
VC
BB
1.H thc truy hi
V d 2
Gi ngn hng 1000 USD, li sut 12%/nm.
S tin c c sau 30 nm l bao nhiu?
Gii php
Gi Tn l s tin c c sau n nm.
Ta c:
Tn = Tn-1 + 0.12Tn-1 = 1.12Tn-1
V(0) = 1000
quy tuyn tnh vi T(n)=1.12*T(n-1) v
iu kin dng V(0) = 1000
K thut lp trnh quy
21
&
VC
BB
2.Chia tr (divide & conquer)
Khi nim
Chia bi ton thnh
nhiu bi ton con.
Gii quyt tng bi
ton con.
Tng hp kt qu
tng bi ton con
ra li gii.
V d 1
Cho dy A sp xp th t tng. Tm v tr
phn t x trong dy (nu c)
Gii php
mid = (l + r) / 2;
Nu A[mid] = x tr v mid.
Ngc li
Nu x < A[mid] tm trong on [l, mid 1]
Ngc li tm trong on [mid + 1, r]
S dng quy nh phn.
K thut lp trnh quy
23
&
VC
BB
2.Chia tr (divide & conquer)
V d 2
Tnh tch 2 chui s cc ln X v Y
Gii php
X = X2n-1XnXn-1X0, Y = Y2n-1YnYn-1Y0
t XL=X2n-1Xn, XN=Xn-1X0 X=10nXL+XN
t YL=Y2n-1Yn, YN=Yn-1Y0 Y=10nYL+YN
X*Y = 102nXLYL + 10n(XLYL+XNYN)+XNYN
v XLYL+XNYN = (XL-XN)(YN-YL)+XLYL+XNYN
Nhn 3 s nh hn ( di ) n khi c th
nhn c ngay. 24
K thut lp trnh quy
&
VC
BB
2.Chia tr (divide & conquer)
Mt s bi ton khc
Bi ton thp H Ni
Cc gii thut sp xp: QuickSort, MergeSort
Cc gii thut tm kim trn cy nh phn tm
kim, cy nh phn nhiu nhnh tm kim.
Lu
Khi bi ton ln c chia thnh cc bi ton
nh hn m nhng bi ton nh hn ny
khng n gin nhiu so vi bi ton gc th
khng nn dng k thut chia tr.
K thut lp trnh quy
25
&
VC
BB
3.Ln ngc (Backtracking)
Khi nim
Ti bc c nhiu la chn, ta chn th 1
bc i tip.
Nu khng thnh cng th ln ngc chn
bc khc.
Nu thnh cng th ghi nhn li gii ny
ng thi ln ngc truy tm li gii mi.
Thch hp gii cc bi ton kinh in nh bi
ton 8 hu v bi ton m i tun.
V d
Tm ng i t X n Y.
A D
B Y
X
THP H NI
TM HU
#
$ @
1 2 3
1 3 2
M I TUN
M t bi ton
C 3 ct A, B v C v ct A hin c N a.
Tm cch chuyn N a t ct A sang ct C
sao cho:
Mt ln chuyn 1 a
a ln hn phi nm di.
C th s dng cc ct A, B, C lm ct trung gian.
N a A C = N-1 a A B + a N A C + N-1 a B C
1
N-1
N
M t bi ton
Cho bn c vua kch thc 8x8
Hy t 8 hong hu ln bn c ny sao cho
khng c hong hu no n nhau:
Khng nm trn cng dng, cng ct
Khng nm trn cng ng cho xui, ngc.
1 n ng
n ng
2n-1 ng
0
14 13 12 11 10 9 8 7 34
K thut lp trnh quy
&
VC
BB
Tm hu Cc ng cho ngc
2n-1 ng
0
7 8 9 10 11 12 13 14 35
K thut lp trnh quy
&
VC
BB
Tm hu Cc dng
i=2
j=3
j+i=5
j-i+n-1=8 36
K thut lp trnh quy
&
VC
BB
M i tun
M t bi ton
Cho bn c vua kch thc 8x8 (64 )
Hy i con m 64 nc sao cho mi ch i
qua 1 ln (xut pht t bt k) theo lut:
5 6
4 7
3 8
2 1
S dng cy quy
(recursive tree)
Gip hnh dung bc phn tch v th ngc.
Bc phn tch: i t trn xung di.
Bc th ngc i t tri sang phi, t di
ln trn.
ngha
Chiu cao ca cy ln trong STACK.
S nt S li gi hm.
u im
Sng sa, d hiu, nu r bn cht vn .
Tit kim thi gian thc hin m ngun.
Mt s bi ton rt kh gii nu khng dng
qui.
Khuyt im
Tn nhiu b nh, thi gian thc thi lu.
Mt s tnh ton c th b lp li nhiu ln.
Mt s bi ton khng c li gii quy.
F(4)
F(3) F(2)
F(1) F(0)
Lp li
Khi nim
a cc bi ton quy v cc bi ton
khng s dng quy.
Thng s dng vng lp hoc STACK t to.
Nhn xt
Ch nn dng phng php quy gii cc
bi ton kinh in nh gii cc vn chia
tr, ln ngc.
Vn quy khng nht thit phi gii
bng phng php quy, c th s dng
phng php khc thay th (kh quy)
Tin cho ngi lp trnh nhng khng ti u
khi chy trn my.
Bc u nn gii bng quy nhng tng
bc kh quy nng cao hiu qu.
K thut lp trnh quy
42
&
VC
BB
Bi tp