KTLT C19 KyThuatLapTrinhDeQuy - PPT (By Bsquochoai - Ga)

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 44

B mn Cng ngh phn mm

Khoa Cng ngh thng tin


Trng i hc Khoa hc T nhin

K THUT LP TRNH
ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn

K THUT LP TRNH
QUY

1
&
VC
BB
Ni dung

1 Tng quan v quy

2 Cc vn quy thng dng

3 Phn tch gii thut & kh quy

4 Cc bi ton kinh in

K thut lp trnh quy


2
&
VC
BB
Bi ton

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

K thut lp trnh quy


3
&
VC
BB
2 bc gii bi ton
Bc 2. Th ngc
Xc nh kt qu bi ton
ng dng t n gin n
S(n) = S(n-1) + n phc tp Kt qu cui cng.

S(n-1) = S(n-2) + n-1

= +
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.

K thut lp trnh quy


4
&
VC
BB
Khi nim quy

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).

2 iu kin quan trng


Tn ti bc quy.
iu kin dng.

K thut lp trnh quy


5
&
VC
BB
Hm quy trong NNLT C

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.

Hm() Hm1() Hm2()


{ { {


Li gi Hm Li gi Hm2 Li gi Hmx



} } }

Q trc tip Q gin tip


K thut lp trnh quy
6
&
VC
BB
Cu trc hm quy

<Kiu> <TnHm>(TS)
{ Phn dng
if (<K dng>) (Base step)

{ Phn khi tnh ton hoc


im kt thc ca thut ton

Khng cha phn ang c
return <Gi tr>;
nh ngha
}
Phn quy
(Recursion step)

Li gi Hm C s dng thut ton ang


c nh ngha.

}

K thut lp trnh quy


7
&
VC
BB
Phn loi

Trong thn hm c duy nht mt


TUYN TNH 1 li gi hm gi li chnh n mt
cch tng minh.

Trong thn hm c hai li gi


NH PHN
2 hm gi li chnh n mt cch
tng minh.

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

Cu trc chng trnh .: Chng trnh :.


long Tong(int n)
{
<Kiu> TnHm(<TS>) { if (n == 0)
if (<K ng>) { return 0;
return Tong(n1) + n;
return <Gi Tr>; }
}
TnHm(<TS>);
}

K thut lp trnh quy


9
&
VC
BB
quy nh phn

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

Tng qut ha bi ton c th thnh bi


ton tng qut.
Thng s ha Thng s ha cho bi ton tng qut
bi ton VD: n trong hm tnh tng S(n),

Chia bi ton tng qut ra thnh:


Phn khng quy.
Tm thut gii Phn nh bi ton trn nhng
tng qut kch thc nh hn.
VD: S(n) = S(n 1) + n,

Cc trng hp suy bin ca bi ton.


Kch thc bi ton trong trng hp
Tm cc trng ny l nh nht.
hp suy bin (neo) VD: S(0) = 0

K thut lp trnh quy


13
&
VC
BB
C ch gi hm v STACK

main() B() main


{ {
; ;
A(); D();
; ;
D(); } A D
;
} C()
{
A() ;
{ } B C
;
B(); D() D
STACK

; 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

K thut lp trnh quy


14
&
VC
BB
Nhn xt

C ch gi hm dng STACK trong C ph hp


cho gii thut quy v:
Lu thng tin trng thi cn d dang mi khi
gi quy.
Thc hin xong mt ln gi cn khi phc
thng tin trng thi trc khi gi.
Lnh gi cui cng s hon tt u tin.

K thut lp trnh quy


15
&
VC
BB
V d gi hm quy

Tnh s hng th 4 ca dy Fibonacy

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)

K thut lp trnh quy


16
&
VC
BB
Mt s li thng gp

Cng thc quy cha ng, khng tm c


bi ton ng dng n gin hn (khng hi t)
nn khng gii quyt c vn .
Khng xc nh cc trng hp suy bin neo
(iu kin dng).
Thng ip thng gp l StackOverflow do:
Thut gii quy ng nhng s ln gi
quy qu ln lm trn STACK.
Thut gii quy sai do khng hi t hoc
khng c iu kin dng.
K thut lp trnh quy
17
&
VC
BB
Cc vn quy thng dng

quy??

K thut lp trnh quy


18
&
VC
BB
1.H thc truy hi

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.

A0 A1 An-2 An-1 Hm truy


An hi

A0 A1 An-2 An-1 Hm truy


An hi

K thut lp trnh quy


19
&
VC
BB
1.H thc truy hi

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.

K thut lp trnh quy


22
&
VC
BB
2.Chia tr (divide & conquer)

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.

K thut lp trnh quy


26
&
VC
BB
3.Ln ngc (Backtracking)

V d
Tm ng i t X n Y.

A D

B Y
X

K thut lp trnh quy


27
&
VC
BB
Mt s bi ton kinh in

THP H NI
TM HU

#
$ @

1 2 3
1 3 2
M I TUN

PHT SINH HON V

K thut lp trnh quy


28
&
VC
BB
Thp H Ni

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.

K thut lp trnh quy


29
&
VC
BB
Thp H Ni

N a A C = N-1
? a A B + a N A C + N-1 a B C

1

N-1
N

Ct ngun A Ct trung gian B Ct ch C

K thut lp trnh quy


30
&
VC
BB
Tm hu

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.

K thut lp trnh quy


31
&
VC
BB
Tm hu Cc dng

1 n ng

K thut lp trnh quy


32
&
VC
BB
Tm hu Cc ct
0 1 2 3 4 5 6 7

n ng

K thut lp trnh quy


33
&
VC
BB
Tm hu Cc ng cho xui

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

K thut lp trnh quy


37
&
VC
BB
Phn tch gii thut quy

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.

K thut lp trnh quy


38
&
VC
BB
Nhn xt

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.

K thut lp trnh quy


39
&
VC
BB
V d cy quy Fibonacy

F(4)

F(3) F(2)

F(2) F(1) F(1) F(0)

F(1) F(0)
Lp li

K thut lp trnh quy


40
&
VC
BB
Kh quy (tham kho)

Khi nim
a cc bi ton quy v cc bi ton
khng s dng quy.
Thng s dng vng lp hoc STACK t to.

K thut lp trnh quy


41
&
VC
BB
Tng kt

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

Bi 1: Cc bi tp trn mng s dng quy.


Bi 2: Vit hm quy xc nh chiu di chui.
Bi 3: Hin th n dng ca tam gic Pascal.
a[i][0] = a[i][i] = 1
a[i][k] = a[i-1][k-1] + a[i-1][k]
Dng 0: 1
Dng 1: 1 1
Dng 2: 1 2 1
Dng 3: 1 3 3 1
Dng 4: 1 4 6 4 1
43
K thut lp trnh quy
&
VC
BB
Bi tp

Bi 4: Vit hm quy tnh C(n, k) bit


C(n, k) = 1 nu k = 0 hoc k = n
C(n, k) = 0 nu k > n
C(n ,k) = C(n-1, k) + C(n-1, k-1) nu 0<k<n
Bi 5: i 1 s thp phn sang c s khc.
Bi 6: Tnh cc tng truy hi.
Bi 7: Bi ton Thp H Ni.
Bi 8: Bi ton 8 hu.
Bi 9: Bi ton M i tun.
K thut lp trnh quy
44

You might also like