You are on page 1of 108

TRNG AI HOC A LAT

F7G

GIAO TRNH

KY THUAT LAP TRNH


NANG CAO

TRAN HOANG THO

2002

Ky thuat lap trnh nang cao

-2-

MUC LUC
LI NOI AU ........................................................................................................................ 4
PHAN I.................................................................................................................................... 5
CHNG I ............................................................................................................................. 5
I. M AU ........................................................................................................................... 5
1. Mo ta e quy ................................................................................................................ 5
2. Cac loai e quy ............................................................................................................ 6
II. MO TA E QUY CAC CAU TRUC D LIEU................................................................... 7
III. MO TA E QUY GIAI THUAT ........................................................................................ 7
1. Giai thuat e quy.......................................................................................................... 7
2. Chng trnh con e quy.............................................................................................. 8
3. Ma hoa giai thuat e qui trong cac ngon ng lap trnh. ............................................. 11
4. Mot so dang giai thuat e quy n gian thng gap . .............................................. 13
CHNG II ........................................................................................................................... 16
I. CAC NOI DUNG CAN LAM E TM GIAI THUAT E QUY CHO MOT BAI TOAN. ..... 16
1. Thong so hoa bai toan. .............................................................................................. 16
2. Phat hien cac trng hp suy bien (neo) va tm giai thuat cho cac trng hp nay.16
3. Phan ra bai toan tong quat theo phng thc e quy. .............................................. 16
II. MOT SO BAI TOAN GIAI BANG GIAI THUAT E QUY IEN HNH. .......................... 17
1. Bai toan thap Ha Noi . ............................................................................................... 17
2. Bai toan chia thng. ................................................................................................. 19
3. Bai toan tm tat ca cac hoan v cua mot day phan t................................................. 21
4. Bai toan sap xep mang bang phng phap tron (Sort-Merge). ................................. 24
5. Bai toan tm nghiem xap x cua phng trnh f(x)=0 . ............................................... 25
CHNG III .......................................................................................................................... 28
I. C CHE THC HIEN GIAI THUAT E QUY................................................................ 28
II. TONG QUAN VE VAN E KH E QUY..................................................................... 32
III. CAC TRNG HP KH E QUY N GIAN. ......................................................... 33
1. Cac trng hp kh e quy bang vong lap . ............................................................ 33
2. Kh e quy ham e quy arsac .................................................................................. 41
3. Kh e quy mot so dang thu tuc e quy thng gap. ............................................... 45
Phan II .................................................................................................................................. 52
CHNG IV.......................................................................................................................... 52
I. CAC GIAI OAN TRONG CUOC SONG CUA MOT PHAN MEM ................................. 52
1) ac ta bai toan .......................................................................................................... 52
2) Xay dng he thong .................................................................................................... 52
3) S dung va bao tr he thong ...................................................................................... 53
II. AC TA ......................................................................................................................... 53
1. ac ta bai toan........................................................................................................... 53
2. ac ta chng trnh (TCT)....................................................................................... 54
3. ac ta oan chng trnh .......................................................................................... 55
III. NGON NG LAP TRNH.............................................................................................. 57
CHNG V.......................................................................................................................... 59
I. CAC KHAI NIEM VE TNH UNG. ................................................................................ 59
II. HE LUAT HOARE (HOARES INFERENCE RULES). ................................................... 59
1. Cac luat he qua (Consequence rules) ....................................................................... 60

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

-3-

2. Tien e gan (The Assignement Axiom) ..................................................................... 61


3. Cac luat ve cac cau truc ieu khien . ........................................................................ 61
III. KIEM CHNG OAN CHNG TRNH KHONG CO VONG LAP. ............................. 64
IV. KIEM CHNG OAN CHNG TRNH CO VONG LAP. ........................................... 68
1. Bat bien ...................................................................................................................... 68
2. Ly luan quy nap va chng minh bang quy nap. ......................................................... 70
3. Kiem chng chng trnh co vong lap while. ............................................................. 71
CHNG VI......................................................................................................................... 76
I. CAC KHAI NIEM. .......................................................................................................... 76
1. at van e. ................................................................................................................ 76
2. nh ngha WP(S,Q)................................................................................................... 76
3. He qua cua nh ngha. .............................................................................................. 76
4. Cac v du. ................................................................................................................... 77
II. TNH CHAT CUA WP.................................................................................................... 77
III. CAC PHEP BIEN OI TAN T. ................................................................................... 78
1. Toan t gan (tien e gan). ......................................................................................... 78
2. Toan t tuan t........................................................................................................... 78
3. Toan t ieu kien. ...................................................................................................... 79
4. Toan t lap................................................................................................................. 80
IV. LC O KIEM CHNG HP LY VA CAC IEU KIEN CAN KIEM CHNG............ 84
1. Lc o kiem chng. ................................................................................................. 84
2. Kiem chng tnh ung. ............................................................................................... 85
3. Tap toi tieu cac ieu kien can kiem chng. ............................................................... 93
PHU LUC .............................................................................................................................. 96
I. LOGIC TOAN.................................................................................................................. 96
II. LOGIC MENH E.......................................................................................................... 96
1. Phan tch .................................................................................................................... 96
2. Cac lien t logic. ........................................................................................................ 97
3. Yngha cua cac lien t Logic. Bang chan tr. ............................................................. 97
4. Ly luan ung. ............................................................................................................. 98
5. Tng ng (Equivalence). ..................................................................................... 99
6. Tnh thay the, tnh truyen va tnh oi xng............................................................... 100
7. Bai toan suy dien logic......................................................................................... 100
8. Cac luat suy dien (rules of inference). ..................................................................... 102
III. LOGIC TAN T. ......................................................................................................... 103
1. Khai niem ................................................................................................................. 103
2. Cac lng t logic .................................................................................................... 105
3. Tap hp va tan t..................................................................................................... 107
4. Cac lng t so hoc................................................................................................. 107

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

-4-

LI NOI AU
Giao trnh c viet theo noi dung mon hoc Ky thuat lap trnh nang cao vi muc
ch lam tai lieu tham khao chnh cho mon hoc.
Giao trnh gom 2 phan chnh va mot phu luc :
Phan I. e quy.
Trnh bay ve chu e e quy trong lap trnh bao gom cac noi dung sau :
- Khai niem e quy va vai tro cua no trong lap trnh.
- Cach xay dng mot giai thuat cho mot bai toan bang phng phap e quy.
- C che thc hien mot giai thuat e quy.
- Kh e quy.
Phan II. Kiem chng chng trnh.
Trnh bay ve chu e kiem chng tnh ung cua chng trnh bao gom cac noi dung
sau:
- Vai tro cua van e kiem chng trong lap trnh.
- Cac phng phap dung e kiem chng tnh ung .
- He luat Hoare va ap dung cua no vao kiem chng tnh ung co ieu kien.
- He luat Dijkstra va ap dung cua no vao kiem chng tnh ung ay u.
- Dang tong quat cua bai toan kiem chng va phng phap kiem chng. Cac lc
o kiem chng va tap toi thieu cac ieu kien can kiem chng.
Phu luc . Cac kien thc chung ve logic.
Trnh bay cac kien thc ban au ve logic menh e va logic tan t. Phu luc cung cap
mot mot tai lieu co ong ve cac kien thc logic ap dung trc tiep trong phan I va phan
II ( no la mot phan noi dung cua giao trnh nhap mon toan) ngi hoc can danh thi
gian thch hp on lai e co the theo kp hng tiep can cua giao trnh.
Cung vi nhng trnh bay ly thuyet tong quat, tac ga a vao mot so thoa ang cac
v du chon loc nham giup ngi hoc nam bat c ban chat cua cac khai niem, cac
phng phap mi va lam quen vi cach s dung cac ket qua mi. Khi hoc trc khi tm
cach giai cac bai tap cua thay gao cung cap cac ban co gang oc va hieu het cac v du
minh hoa.
V nhieu le chac chan giao trnh con nhieu khiem khuyet. Rat mong tat ca moi
ngi s dung chan thanh gop y.
Tac gia chan thanh cam n cac ong nghiep trong khoa Toan_Tin a ong gop
nhieu y kien quy bau cho viec hnh thanh cau truc chi tiet cho noi dung giao trnh,
chan thanh cam n thac sy Vo Tien a ong gop nhieu y kien quy bau trong cau truc
giao trnh, giup chnh ly nhieu khiem khuyet trong ban thao.
aLat ngay 01 thang 12 nam 2002
TRAN HOANG THO

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

-5-

PHAN I

E QUY
CHNG I

KHAI NIEM E QUY


I. M AU
1. Mo ta e quy
Trong nhieu tnh huong viec mo ta cac bai toan, cac giai thuat, cac s kien, cac s
vat cac qua trnh, cac cau truc, . . . se n gian va hieu qua hn neu ta nhn c no
di goc o mang tnh e qui.
Mo ta mang tnh e qui ve mot oi tng la mo ta theo cach phan tch oi tng
thanh nhieu thanh phan ma trong so cac thanh phan co thanh phan mang tnh chat cua
chnh oi tng c mo ta. Tc la mo ta oi tng qua chnh no.
Cac v du :
- Mo ta e quy tap so t nhien N :
+ So 1 la so t nhien ( 1 N) .
+ So t nhien bang so t nhien cong 1 .
( n N ( n +1 ) N )
- Mo ta e quy cau truc xau (list) kieu T :
+ Cau truc rong la mot xau kieu T.
+ Ghep noi mot thanh phan kieu T(nut kieu T ) vi mot xau kieu T ta co mot
xau kieu T.
- Mo ta e quy cay gia pha : Gia pha cua mot ngi bao gom mgi o va gia pha
cua cha va gia pha cua me.
- Mo ta e quy thu tuc chon hoa hau :
+ Chon hoa hau cua tng khu vc.
+ Chon hoa hau cua cac hoa hau.
- Mo ta e quy thu tuc sap tang day a[m:n] ( day a[m], a[m+1], . . . , a[n] ) bang
phng phap Sort_Merge (SM) :
SM (a[m:n]) Merge ( SM(a[m : (n+m) div 2]) , SM (a[(n+m) div 2 +1 : n] )
Vi :
SM (a[x : x]) la thao tac rong (khong lam g ca ).
Merge (a[x : y] , a[(y+1) : z]) la thu tuc tron 2 day tang a [x : y] , a[(y+1) :
z] e c mot day a[x : z] tang.
- inh ngha e quy ham giai tha FAC( n) = n !
0!=1
n!=n*(n-1)!

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

-6-

Phng phap e quy manh cho no cho phep mo ta mot tap ln cac oi tng ch bi
mot so t cac menh e hoac mo ta mot giai thuat phc tap bang mot so t cac thao tac
(mot chng trnh con e quy).
Mot mo ta e quy ay u gom 2 phan :
- Phan neo : mo ta cac trng hp suy bien cua oi tng (giai thuat) qua mot
cau truc (thao tac) cu the xac nh .
v du: 1 la so t nhien, cau truc rong la mot xau kieu T, 0 ! = 1 , SM (a[x:x])
la thao tac rong.
- Phan quy nap: mo ta oi tng (giai thuat) trong trng hp pho bien thong qua
chnh oi tng (giai thuat ) o mot cach trc tiep hoac gian tiep.
V du : n! = n * (n 1) !
SM (a[m:n]) Merge (SM (a[m:( m+n) div 2] , SM (a[(m+n) div 2 +1 : n]) )
Neu trong mo ta khong co phan neo th oi tng mo ta co cau truc ln vo han, giai
thuat mo ta tr thanh cau truc lap vo tan.

2. Cac loai e quy


Ngi ta phan e quy thanh 2 loai : e quy trc tiep, e quy gian tiep.
- e quy trc tiep la loai e quy ma oi tng c mo ta trc tiep qua no :
A mo ta qua A, B, C,...trong o B, C, ... khong cha A. (cac v du tren).
- e quy gian tiep la loai e quy ma oi tng c mo ta gian tiep qua no :
A mo ta qua A1 ,A2 ,..., An .Trong o co mot Ai c mo ta qua A.
V du 1:
Mo ta dang tong quat mot chng trnh viet tren NNLT Pascal :
Mot Chng trnh Pascal gom :
a) au chng trnh (head) gom: Program Ten ;
b) Than chng trnh (blok) gom :
b1) Khai bao unit, nh ngha hang, nhan, kieu d lieu, khai bao bien.
b2) nh ngha cac chng trnh con gom :
b2.1) au chng trnh con :
Procedure Ten thu tuc ( danh sach thong so hnh thc ) ;
hoac Function Ten ham ( danh sach thong so hnh thc ) : Kieu ;
b2.2) Than chng trnh con ( Blok )
b2.3) Dau ;
b3) Phan lenh : la mot lenh ghep dang :
Begin S1 ; S2 ; . . . ; Sn End ;
c) Dau ket thuc chng trnh : .
V du 2 : Mo ta hai day so {Xn},{Yn} theo luat e quy ho tng nh sau :
X0 = 1 ; Xn = Xn-1 + Yn-1 ;
Y0 = 1 ; Yn =n2 Xn-1 + Yn-1 ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

-7-

II. MO TA E QUY CAC CAU TRUC D LIEU


Trong toan hoc , trong lap trnh ngi ta thng s dung e quy e mo ta cac
cau truc phc tap, co tnh e quy . Bi mo ta e quy khong ch la cach mo ta ngan gon
cac cau truc phc tap ma con tao kha nang e xay dng cac thao tac x ly tren cac cau
truc phc tap bang cac giai thuat e qui . Mot cau truc d lieu co tnh e quy thng
gom mot so thanh phan d lieu cung kieu c ghep noi theo cung mot phng thc .
V du 1:
Mo ta e quy cay nhi phan :
Cay nhi phan kieu T :
+ Hoac la mot cau truc rong (phan neo).
+ Hoac la mot nut kieu T (nut goc) va 2 cay nh phan kieu T ri nhau (cay
con nh phan phai, cay con nh phan trai) ket hp vi nhau .
V du 2:
Mo ta e quy mang nhieu chieu :
+ Mang mot chieu la day co th t cac thanh phan cung kieu .
+ Mang n chieu la mang 1 chieu ma cac thanh phan co kieu mang n-1 chieu .

III. MO TA E QUY GIAI THUAT


1. Giai thuat e quy.
Giai thuat e quy la giai thuat co cha thao tac goi en no . Giai thuat e quy cho
phep mo ta mot day ln cac thao tac bang mot so t cac thao tac trong o co cha thao
tac goi lai giai thuat (goi e quy) .
Mot cach tong quat mot giai thuat e quy c bieu dien nh mot bo P gom menh
e S (khong cha yeu to e quy ) va P : P P[ S , P ] .
Thc thi giai thuat e quy co the dan ti mot tien trnh goi e quy khong ket thuc
khi no khong co kha nang gap trng hp neo, v vay quan tam en ieu kien dng
cua mot giai thuat e quy luon c at ra . e kiem soat qua trnh goi e quy cua
giai thuat e quy P ngi ta thng gan thao tac goi P vi viec kiem tra mot ieu
kien B xac nh va bien oi qua moi lan goi P , qua trnh goi P se dng khi B khong
con thoa.
Mo hnh tong quat cua mot giai thuat e quy vi s quan tam en s dng se la :
P if B then P[ S , P ]
hoac
P P[ S , if B then P ]
Thong thng vi giai thuat e quy P , e am bao P se dng sau n lan goi ta chon
B la ( n >0 ) . Mo hnh giai thuat e quy khi o co dang :
P(n) If ( n > 0 ) then P[ S , P(n - 1)] ;
hoac
P(n) P[ S , if (n >0) then P(n - 1) ] ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

-8-

Trong cac ng dung thc te so lan goi e quy (o sau e quy) khong nhng phai hu
han ma con phai u nho . Bi v moi lan goi e quy se can mot vung nh mi trong khi
vung nh cu van phai duy tr .

2. Chng trnh con e quy.


a) Cac ham e quy.
nh ngha ham so bang e quy thng gap trong toan hoc, ien hnh la cac ham
nguyen mo ta cac day so hoi quy .
V du 1 .
Day cac giai tha : { n! } 1 ,1 , 2 , 6 , 24 , 120 , 720 , 5040 , . . .
Ky hieu FAC(n ) = n ! .
Ta co : + FAC(0 ) = 1 ; ( 0 ! = 1 )
+ FAC(n ) = n * FAC(n - 1 ) ; ( n ! = n * (n - 1 ) ! ) vi n >= 1
Giai thuat e quy tnh FAC(n ) la :
FAC(n ) if (n = 0 ) then return 1 ;
else return (n * FAC(n - 1 )) ;
V du 2 .
Day so Fibonaci(FIBO) :
{ FIBO (n) } 1 ,1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 , 233 , 377 , . . .
+ FIBO(0 ) = FIBO (1 ) = 1 ;
+ FIBO(n ) = FIBO (n - 1 ) + FIBO ( n - 2 ) ; vi n > = 2
Giai thuat e quy tnh FIBO ( n ) la :
FIBO(n) if ((n = 0 ) or ( n = 1 )) then return 1 ;
else return ( FIBO (n - 1) + FIBO (n - 2)) ;
V du 3 .
Day cac to hp :
1
1 2
1
1
3
3
1
1 4
6
4
1
0
Cn = 1 vi n > = 0

Cnm = 0

vi m > n > 0

Cnm = Cnm11 + Cnm1


Giai thuat e quy tnh Cnm

vi n > m > 0

la :

if ( m = 0 ) then return 1 ;
else if (m > n ) then return 0 ;
else return ( Cnm11 + Cnm1 ) ;
Nhan xet :
Mot nh ngha ham e quy gom :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

-9-

+ Mot so cac trng hp suy bien ma ga tr ham tai o a c biet trc hoac
co the tnh mot cach n gian (khong e quy ) .
Nh :
FAC(0 ) = 1 , FIBO(0) = FIBO(1) = 1 , Cn0 = 1 , Cnm = 0 vi m > n > 0 .
+ Trng hp tong quat viec tnh ham se c a ve tnh ham gia tr be
hn (gan vi gia tr neo) cua oi so .
Nh :
FAC(n ) = n * FAC(n - 1 ) ;
FIBO(n) = FIBO(n -1) + FIBO( n - 2 ) .
Trong tap bien cua ham co mot nhom ma o ln cua no quyet nh o phc tap cua
viec tnh ga tr ham . Nhom bien o goi la nhom bien ieu khien . Ga tr bien cua
nhom bien ieu khien ng vi trng hp suy bien . Ga tr cua nhom bien ieu khien
se thay oi qua moi lan goi e quy vi xu hng tien en ga tr bien ( tng ng vi
cac trng hp suy bien cua ham ).
b) Cac thu tuc e quy.
Thu tuc e quy la thu tuc co cha lenh goi en no . Thu tuc e quy thng c s
dung e mo ta cac thao tac tren cau truc d lieu co tnh e quy
V du 1 :
Xem day n phan t a[1:n] la s ket hp gia day a[1:n-1] va a[n] .
Do o :
- Thu tuc tm max trong day a[1:n] ( thu tuc TMax) co the thc hien theo
luat e qui :
+ Tm max trong day con a[1:n] (goi e quy Tmax(a[1:n-1] ) ).
+ Tm max cua 2 so : Tmax(a[1:n-1]) va a[n] (giai thuat khong e quy).
Tc la :
TMax(a[1:n]) = max(TMax(a[1:n-l]) , a[n] )
vi
TMax(a[m:m] = a[m] ; ( trng hp neo )
max(x,y) = x > y ? x : y ;
( giai thuat tnh max 2 so : if (x>y) then
max(x ,y) = x else max(x ,y) = y )
- Thu tuc tnh tong cac phan t ( thu tuc TSUM ) co the thc hien theo luat e
quy :
+ Tm tong day con a[1:n] (goi e quy TSUM(a[1:n-1]) ).
+ Tm tong cua 2 so : TSUM(a[1:n-1]) va a[n] (giai thuat khong e
quy).
Tc la :
TSUM(a[1:n]) = a[n] + TSUM(a[1:n-1]
vi TSUM(a[m:m]) = a[m]
V du 2 :
Xem day a[m : n] la s ket noi gia hai day: day a[m:((m+n) div 2)] va
day a[(((m+n) div 2)+1) :n] .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 10 -

Do o :
- Thu tuc tm max trong day a[1:n] ( thu tuc Tmax1) co the thc hien theo luat
e qui :
+ Tm max trong day con trai a[m:((m+n) div 2)]
(goi e quy Tmax1(a[m:((m+n) div 2)] ) ).
+ Tm max trong day con phai a[(((m+n) div 2)+1) :n] .
(goi e quy Tmax1(a[(((m+n) div 2)+1) :n] ).
+ Tm max cua 2 so : Tmax1(a[m:((m+n) div 2)] ) va
Tmax1(a[(((m+n) div 2)+1) :n] ). (giai thuat khong e quy).
Tc la :Tmax1(a[m:n]) =
max(Tmax1(a[m:((m+n) div 2)] ) ,Tmax1(a[(((m+n) div 2)+1) :n]) ).
vi
Tmax1(a[m:m] = a[m] ; ( trng hp neo )
max(x,y) = x > y ? x : y ;
- Thu tuc tnh tong cac phan t ( TSUM1 ) co the thc hien theo luat e quy :
+ Tm tong day con trai a[m:((m+n) div 2)]
(goi e quy TSUM1 (a[m:((m+n) div 2)] ) ).
+ Tm tong day con phai a[(((m+n) div 2)+1) :n] .
(goi e quy TSUM1 (a[(((m+n) div 2)+1) :n] ) ).
+ Tm tong cua 2 so :
TSUM1 (a[m:((m+n) div 2)] ) va TSUM1 (a[(((m+n) div 2)+1) :n] ).
Tc la :
TSUM1 (a[m:n]) =
TSUM1 (a[m:((m+n) div 2)]) + TSUM1 (a[(((m+n) div 2)+1) :n] )
vi TSUM1 (a[m:m]) = a[m]
V du 3 :
Cay nh phan tm kiem kieu T(BST) la mot cau truc gom : mot nut kieu T ket noi
vi 2 cay con nhi phan tm kiem kieu T nen :
- Thu tuc quet cay nhi nhan tm kiem theo th t gia (LNF) la :
+ Quet cay con trai theo th t gia ;
+ Tham nut goc ;
+ Quet cay con phai theo th t gia ;
- Thu tuc tm kiem gia tri o tren cay nh phan tm kiem Root la :
Neu Root th thc hien thao tac rong (khong lam g )
Con khong
neu gia tr tai nut goc = o th thong bao tm thay va dng
Con khong
neu gia tr tai nut goc < o th tm cay con trai
Con khong th tm cay con phai .
Nhan xet :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 11 -

Trong mot thu tuc e qui, e cho viec goi e quy dng lai sau hu han lan goi no
can cha ieu kien kiem tra (mot bieu thc boolean B tren mot nhom bien ) , e khi
ieu kien nay khong con thoa th viec goi e qui ket thuc .
Dang thng gap cua thu tuc e qui la :
S1 ; ( khong cha yeu to e qui )
if B then S2 ( phan lenh trc tiep , khong co lenh goi e qui )
else Sdq ; ( phan lenh co lenh goi e qui )
S3 ; (khong co goi e qui )

3. Ma hoa giai thuat e qui trong cac ngon ng lap trnh.


a) Tong quan.
Khong phai moi ngon ng lap trnh hien co eu co the ma hoa c giai thuat e
quy, ch mot so nhng ngon ng lap trnh co kha nang to chc vung nh kieu stack
mi co kha nang ma hoa c giai thuat e quy .
Cac ngon ng lap trnh hien nay eu ma hoa giai thuat e quy bang cach to chc cac
chng trnh con e quy tng ng .
b) The hien e qui trong NNLT PASCAL va C++
NN LT Pascal va C++ eu cho phep ma hoa giai thuat e quy bang cach to chc
chng trnh con e quy nh vao c che tao vung nh Stak cua phan mem ngon ng .
b1) Trong NNLT C++.
NNLT C++ cho phep ma hoa giai thuat e quy mot cach thuan li nh vao ky thuat
khai bao trc tieu e nen khong co s phan biet hnh thc nao trong viec khai bao
gia ham con e quy va ham con khong e quy.
b2) Trong NN LT Pascal .
oi vi chng trnh con e quy trc tiep th hnh thc khai bao cung giong nh oi
vi chng trnh con khong e quy.
oi vi chng trnh con e quy gian tiep th hnh thc khai bao co thay oi t nhieu
nham thoa quy tac tam vc cua ngon ng ( trong phan lenh cua mot chng trnh con
ch c goi nhng chng trnh con cung cap a c khai bao trc ).
V du :
Vi mo hnh chng trnh sau :
Trong phan lenh cua khoi A co the goi en :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

Program

- 12 -

+ Goi cac chng trnh con trc tiep cua no


goi c B nhng khong goi c C
+ Goi chnh no ( goi e quy ).
+ Goi chng trnh con cung cap nhmg
phai khai bao trc goi c E nhng
khong goi c D , Muon goi D phai
khai bao trc ( khai bao FORWARD)

E
A
B
C

D
Khai bao trc FORWARD .
e t thu tuc ham A co the goi en D la thu tuc ham cung cap nhng c mo ta sau
A, ta can co mot khai bao trc cua D pha trc cua A . Khai bao nay gom : tieu e
cua D, vi danh sach thong so cua D, tiep theo la t khoa FORWARD . Sau o luc
mo ta lai D th ch can khai bao t khoa PROCEDURE ( hoac FUNCTION ) , ten cua
D ( khong co danh sach thong so ) , phan than cua D.
V du : Vi 2 thu tuc goi e quy ho tng nhau FIRST,SECOND se c khai bao
nh sau :
procedure SECOND (i : integer ) ; Forward ;
procedure FIRST (n : integer ; var X : real);
var j, k : interger ;
begin
for j := 1 to n do begin
writeln( j = , j ) ;
k := n 2* j ;
SECOND( k );
end ;
end ;
procedure second ;
begin
if ( i > 0 ) then begin
writeln( i= , i );
FIRST( i 1 ) ;
end ;
end ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 13 -

4. Mot so dang giai thuat e quy n gian thng gap .


a) e quy tuyen tnh.
Chng trnh con e quy tuyen tnh la chng trnh con e quy trc tiep n
gian nhat co dang :
P { NEU thoa ieu kien dng
th thc hien S ;
Con khong begin { thc hien S* ; goi P }
}
Vi S , S* la cac thao tac khong e quy .
V du 1 : Ham FAC(n) tnh so hang n cua day n!
+ Dang ham trong ngon ng ma gia :
{ Neu n = 0 th FAC = 1 ; /* trng hp neo */
Con khong FAC = n*FAC(n-1) }
+ Dang ham trong ngon ng Pascal :
Function FAC(n : integer) : integer;
begin
if( n = 0 ) then FAC := 1
else FAC := n*FAC(n-1) ;
end;
+ Dang ham trong C++ :
int FAC( int n )
{ if ( n == 0 ) return 1 ;
else return ( n * FAC(n-1 )) ;
}
V du 2 :
Chng trnh con tnh USCLN cua 2 so da vao thuat toan Euclide :
+ Dang ham tren ngon ng toan hoc :
USCLN(m , n ) = USCLN(n , m mod n ) khi n 0
USCLN(m , 0) = m
+ Dang ham trong ngon ng ma gia :
Neu n = 0
th
USCLN = m
Con khong USCLN = USCLN( n , m mod n ) ;
+ Dang ham trong Pascal :
Function USCLN(m , n : integer ) : integer ;
begin
if (n = 0 ) then USCLN := m
else USCLN := USCLN( n , m mod n ) ;
end ;
+Dang ham trong C++ :
int USCLN( int m , int n )

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 14 -

{ if(n == 0 ) return (m) ;


else return ( USCLN( n , m mod n)) ;
}
b) e quy nh phan.
Chng trnh con e quy nh phan la chng trnh con e quy trc tiep co dang :
P { NEU thoa ieu kien dng
th thc hien S ;
Con khong
begin { thc hien S* ; goi P ; goi P }
}
Vi S , S* la cac thao tac khong e quy .
V du 1 : Ham FIBO(n) tnh so hang n cua day FIBONACCI
+ Dang ham trong Pascal:
Function F(n : integer) : integer;
begin
if( n < 2 ) then F := 1
else F := F(n-1) + F(n-2)
end;
+ Dang ham trong C++ :
int F(int n)
{ if ( n < 2 ) return 1 ;
else return (F(n -1) + F(n -2)) ;
}
c) e quy phi tuyen.
Chng trnh con e quy phi tuyen la chng trnh con e quy trc tiep ma li goi
e quy c thc hien ben trong vong lap .
Dang tong quat cua chng trnh con e quy phi tuyen la :
P { for gia tri au to gia tr cuoi do
begin thc hien S ;
if ( thoa ieu kien dng ) then thc hien S*
else goi P
end ;
}
Vi S , S* la cac thao tac khong e quy .
V du :
Cho day { Xn } xac nh theo cong thc truy hoi :
X0 = 1 ; Xn = n2 XO +(n-1)2 X1 + . . . + 2 2 Xn-2 + 1 2 Xn-1
+ Dang ham e quy tnh Xn tren ngon ng ma gia la :
Xn if ( n= 0 ) then return 1 ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

else { tg = 0 ;
for i = 0 to n-1 do
return tg ;
}

- 15 -

tg = tg + (n-i)2 Xi ;

+ Dang ham e quy tnh Xn tren ngon ng Pascal la :


function X( n :integer) : integer ;
var i , tg : integer ;
begin
if ( n= 0 ) then X := 1
else
begin tg = 0 ;
for i: = 0 to n-1 do tg : = tg + sqr(n-i) *X(i) ;
X := tg ;
end ;
end ;
+ Dang ham e quy tnh Xn tren ngon ng C++ la :
int X( int n ) ;
{ if ( n == 0 ) return 1 ;
else { int tg = 0 ;
for (int i = 0 ; i<n ; i++ ) tg = tg + sqr(n-i) *X(i);
return ( tg ) ;
}

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 16 -

CHNG II

BAI TOAN E QUY


I. CAC NOI DUNG CAN LAM E TM GIAI THUAT E QUY CHO
MOT BAI TOAN.
e xay dng giai thuat giai mot bai toan co tnh e quy bang phng phap e quy ta
can thc hien tuan t 3 noi dung sau :
- Thong so hoa bai toan .
- Tm cac trng hp neo cung giai thuat giai tng ng .
- Tm giai thuat giai trong trng hp tong quat bang phan ra bai toan theo kieu
e quy.

1. Thong so hoa bai toan.


Tong quat hoa bai toan cu the can giai thanh bai toan tong quat (mot ho cac bai toan
cha bai toan can giai ),tm ra cac thong so cho bai toan tong quat ac biet la nhom
cac thong so bieu th kch thc cua bai toan cac thong so ieu khien ( cac thong so
ma o ln cua chung ac trng cho o phc tap cua bai toan , va giam i qua moi lan
goi e qui ) .
V du : n trong ham FAC(n) ; a , b trong ham USCLN(a,b) .

2. Phat hien cac trng hp suy bien (neo) va tm giai thuat cho cac
trng hp nay.
ay la cac trng hp suy bien cua bai toan tong quat , la cac trng hp tng ng
vi cac ga tr bien cua cac bien ieu khien (trng hp kch thc bai toan nho nhat),
ma giai thuat giai khong e qui (thng rat n gian).
V du :
FAC(1) =1 , USCLN(a,0) = a , SM(a[x:x] ,TSUM(a[m:m]) = a[m]

3. Phan ra bai toan tong quat theo phng thc e quy.


Tm phng an (giai thuat ) giai bai toan trong trng hp tong quat bang cach phan
chia no thanh cac thanh phan ma hoac co giai thuat khong e quy hoac la bai toan
tren nhng co kch thc nho hn.
V du : FAC(n) = n * FAC(n -1) .
Tmax(a[1:n]) = max(Tmax(a[1:(n-1)]) , a[n] )

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 17 -

II. MOT SO BAI TOAN GIAI BANG GIAI THUAT E QUY IEN
HNH.
1. Bai toan thap Ha Noi .
Truyen thuyet ke rang : Mot nha toan hoc Phap sang tham ong Dng en mot ngoi
chua co Ha Noi thay cac v s ang chuyen mot chong a quy gom 64 a vi kch
thc khac nhau t cot A sang cot C theo cach :
- Moi lan ch chuyen 1 a .
- Khi chuyen co the dung cot trung gian B .
- Trong suot qua trnh chuyen cac chong a cac cot luon c xep ung (a
co kch thc be c at tren a co kch thc ln ) .
Khi c hoi cac v s cho biet khi chuyen xong chong a th en ngay tan the !.
Nh se ch ra sau nay vi chong gom n a can 2 n - 1 lan chuyen c ban (chuyen 1
a ).
Gia s thi gian e chuyen 1 a la t giay th thi gian e chuyen xong chong 64 a
se la :
. 4 * 1019 * t S
T = ( 2 64 1 ) * t S = 18
Vi t = 1/100 s th T = 5.8*109 nam = 5.8 ty nam .
Ta co the tm thay giai thuat (day cac thao tac c ban ) cho bai toan mot cach de
dang ng vi trng hp chong a gom 0, 1, 2, 3 a . Vi chong 4 a giai thuat bai
toan a tr nen phc tap . Tuy nhien giai thuat cua bai toan lai c tm thay rat de
dang nhanh chong khi ta khai quat so a la n bat ky va nhn bai toan bang quan niem
e quy .
a) Thong so hoa bai toan .
Xet bai toan mc tong quat nhat : chuyen n (n>=0) a t cot X sang cot Z
lay cot Y lam trung gian .
Ta goi giai thuat giai bai toan mc tong quat la thu tuc THN(n ,X ,Y,Z) cha 4
thong so n,X,Y,Z ; n thuoc tap so t nhien N (kieu nguyen khong dau ); X ,Y,Z thuoc
tap cac ky t (kieu ky t ).
Bai toan co tren se c thc hien bang li goi THN(64,A,B,C) .
De thay rang : trong 4 thong so cua bai toan th thong so n la thong so quyet nh o
phc tap cua bai toan ( n cang ln th so thao tac chuyen a cang nhieu va th t thc
hien chung cang kho hnh dung ) , n la thong so ieu khien .
b) Trng hp suy bien va cach giai .
Vi n =1 bai toan tong quat suy bien thanh bai toan n gian THN (1,X,Y,Z) : tm
day thao tac e chuyen chong 1 a t cot X sang cot Z lay cot Y lam trung gian . Giai
thuat giai bai toan THN (1,X,Y,Z) la thc hien ch 1 thao tac c ban : Chuyen 1 a t
X sang Z ( ky hieu la Move (X , Z) ) .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 18 -

THN(1,X,Y,Z) { Move( X, Z ) }
Chu y : Hoan toan tng t ta cung co the quan nien trng hp suy bien la trng
hp n= 0 tng ng vi bai toan THN(0,X,Y,Z) : chuyen 0 a t X sang Z lay Y lam
trung gian ma giai thuat tng ng la khong lam g ca ( thc hien thao tac rong ) .
THN(0,X,Y,Z) { }
c) Phan ra bai toan :
Ta co the phan ra bai toan TH N (k,X,Y,Z) : chuyen k a t cot X sang cot Z
lay cot Y lam trung gian thanh day tuan t 3 cong viec sau :
+ Chuyen (k -1) a t cot X sang cot Y lay cot Z lam trung gian :
THN (k -1,X,Z,Y) (bai toan THN vi n = k-1,X= X , Y = Z , Z = Y )
+ Chuyen 1 a t cot X sang cot Z : Move ( X, Z ) (thao tac c ban ).
+ Chuyen (k - 1 ) a t cot Y sang cot Z lay cot X lam trung gian :
THN( k -1,Y,X,Z) ( bai toan THN vi n = k-1 , X = Y , Y = X , Z = Z ) .
Vay giai thuat trong trng hp tong quat (n > 1) la :
THN(n,X,Y,Z)

{ THN (n -1,X,Z,Y) ;
Move ( X, Z ) ;
THN (n -1,Y,X,Z) ;
}
Vi n a th can bao nhieu bc chuyen 1 a? Thc chat trong thu tuc THN cac
lenh goi e qui ch nham sap sep trnh t cac thao tac chuyen 1 a
So lan chuyen 1 a c thc hien la ac trng cho o phc tap cua giai thuat .
Vi n a , goi f(n) la so cac thao tac chuyen _mot_a .
Ta co :
f(0) = 0 .
f(1) =1 .
f(n) = 2f(n -1) + 1
vi n > 0
Do o :
f(n) = 1+ 2 + 2 2 +
+ 2 n-1 = 2 n - 1
e chuyen 64 a can 2 64 - 1 bc hay xap x 10 20 bc . Can khoang 10 trieu
nam vi mot may tnh nhanh nhat hien nay e lam viec nay .

d) Chng trnh con ma hoa giai thuat THN trong NNLT Pascal :
procedure THN (n : integer ; X,Y,Z : char)
begin
if n > 0 then begin
THN (n-1 ,X,Z,Y) ;
Move( X, Z);
THN (n-1 ,Y,X,Z);
end ;
end ;
( Lay trng hp chuyen n = 0 lam trng hp neo )

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 19 -

Hoac :

procedure THN (n : integer ; X,Y,Z : char)


begin
if (n = 1) then Move(X, Z)
else begin
THN (n-1 ,X,Z,Y ) ;
Move(X, Z );
THN (n -1 ,Y,X,Z );
end ;
end;
( Lay trng hp chuyen n = 1 lam trng hp neo )
Vi thu tuc Move(X, Y) mo ta thao tac chuyen 1 a t cot X sang cot Y c viet
tuy theo cach the hien thao tac chuyen .
e) Chng trnh con ma hoa giai thuat THN trong NNLT C++ :
Trong C++ ham con thc hien giai thuat THN co dang :
void THN( int n , char X,Y,Z)
{ if(n > 0)
{ THN(n -1,X,Z,Y ) ;
Move ( X , Z ) ;
THN(n - 1,Y,X,Z ) ;
}
return ;
}
hoac :
void THN( int n , char X,Y,Z)
{ if(n = = 1) Move ( X , Z ) ;
else
{ THN(n -1,X,Z,Y ) ;
Move ( X, Z ) ;
THN(n - 1,Y,X,Z ) ;
}
return ;
}

2. Bai toan chia thng.


Co 100 phan thng em chia cho 12 hoc sinh gioi a c xep hang. Co bao
nhieu cach khac nhau e thc hien cach chia?
Ta thay ngay rang viec tm ra li giai cho bai toan se khong de dang neu ta khong
tm ra cach thch hp e tiep can vi no. Ta se tm giai thuat giai bai toan bang phng
phap e quy.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 20 -

a) Thong so hoa.
Ta se giai bai toan mc o tong quat : Tm so cach chia m vat (phan thng ) cho n
oi tng (hoc sinh ) co th t .
Goi PART la so cach chia khi o PART la ham cua 2 bien nguyen m , n ( PART(m
,n )) .
Ta ma hoa n oi tng theo th t xep hang 1, 2 , 3 , . . . n ; Si la so phan thng ma
hoc sinh i nhan c .
Khi o cac ieu kien rang buoc len cach chia la :
Si >= 0
S1 >= S2 >=
>= Sn .
S1 + S2 +
+ Sn = m
V du :
Vi m = 5 , n = 3 ta co 5 cach chia sau :
5 0 0
4 1 0
3 2 0
3 1 1
2 2 1
Tc la PART(5,3 ) = 5
b) Cac trng hp suy bien :
+ m = 0 th se co duy nhat 1 cach chia : moi hoc sinh eu nhan c 0 phan
thng .
Vay : PART(0 , n ) = 1 vi moi n
+ n = 0 , m <> 0 th se khong co cach nao e thc hien viec chia .
Vay : PART(m , 0 ) = 0 vi moi m <> 0 .
( ta co the thay trng hp neo PART(m ,0) = 0 hoac trng hp neo PART(m , 1)
=1)
c ) Phan ra bai toan trong trng hp tong quat :
+ m < n khi so phan thng m nho hn so hoc sinh n th n - m hoc sinh xep
cuoi se luon khong nhan c g ca trong moi cach chia .
Vay :
khi n > m th PART(m , n ) = PART(m , m ) .
+ Trong trng hp m >= n : so vat chia (phan thng ) ln hn hoac bang so
hoc sinh (oi tng ) ta phan cac cach chia lam 2 nhom :
* Nhom th nhat khong danh cho hoc sinh xep cuoi cung phan thng nao
ca
( Sn = 0 ) . So cach chia nay se bang so cach chia m phan thng cho n -1 hoc sinh .
Tc la : So cach chia trong nhom th nhat = PART(m , n -1 ) .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 21 -

* Nhom th 2 co phan cho ngi cuoi cung ( Sn > 0 ) . De thay rang so


cach chia cua nhom nay bang so cach chia m - n phan thng cho n hoc sinh ( v
phng thc chia ma tat ca hoc sinh eu nhan c phan thng co the thc hien bang
cach : cho moi ngi nhan trc 1 phan thng roi mi chia ).
Tc la : So cach chia trong nhom th 2 = PART(m - n , n ) .
Vay : vi m>= n PART(m , n ) = PART(m , n -1 ) + PART(m - n , n )
d ) Dang ma gia cua ham PART(m , n )
PART(m , n ) = if(m = 0 ) then return 1 ;
else if( n = 1 ) then return 1 ;
else if(m < n ) then return PART(m , m) ;
else return ( PART(m , n -1) + PART(m - n , n ))
e) Dang ham PART trong NNLT Pascal
Function PART(m , n : integer ) : integer ;
Begin
if ( (m = 0) or ( n = 1) ) then PART := 1
else if(m < n) then PART := PART(m , m )
else PART := PART(m , n -1 ) + PART(m - n , n) ;
End ;
g) Dang ham PART trong NN LT C++
int PART( int m , int n )
{ if ((m == 0 ) || (n == 0) ) return 1 ;
else if(m < n ) retrun ( PART(m , m )) ;
else return ( PART(m , n -1 ) + PART( m -n , n ) ) ;
}

3. Bai toan tm tat ca cac hoan v cua mot day phan t.


Bai toan : Xuat tat ca cac hoan v cua day A .
V du :
Vi day A gom N = 3 phan t A[1] = a , A[2] = b , A[3] = c th bai
toan bat phai xuat 6 hoan v co the cua A :
a b c
a c b
c b a
b a c
c a b
b c a
Vi day A gom N = 4 phan t A[1] = 1 , A[2] = 2 , A[3] = 3 , A[4] =4 th bai toan
bat phai xuat 24 hoan v co the cua A :
1 2
3
4
1
2 4
3
1 4 3 2
4 2 3 1

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

2
1
3
3
2

1
3
1
2
3

3
2
2
1
1

4
4
4
4
4

2
1
4
4
2

1
4
1
2
4

4
2
2
1
1

- 22 -

3
3
3
3
3

4
1
3
3
4

1
3
1
4
3

3
4
4
1
1

2
2
2
2
2

2
4
3
3
2

4
3
4
2
3

3
2
2
4
4

1
1
1
1
1

a) Thong so hoa bai toan .


Goi HV(v, m ) ( vi v : array[1 . . N ] of T , m :integer ; m N ; T la mot kieu d
lieu a biet trc ) la thu tuc xuat tat ca cac dang khac nhau cua v co c bang cach
hoan v m thanh phan au cua day v
V du : N = 4 , A[1] = 1 , A[2] = 2 , A[3] = 3 , A[4] = 4 th li goi HV(A ,3 ) xuat
tat ca hoan v cua A co c bang cach hoan v 3 phan t au ( co 6 h v ) :
1
2
3
4
1
3
2
4
3
2
1
4
2
1
3
4
3
1
2
4
2
3
1
4
e giai bai toan at ra ban au ta goi HV(A,N) ).
b) Trng hp neo.
Vi m = 1 : HV(v,1) la thu tuc giai bai toan xuat tat ca cac dang cua v co c
bang cach hoan v 1 phan tu au . Vay HV(v,1) la thu tuc xuat v.
HV(v,1) print(v) for k:= 1 to N do write(v[k])
c) Phan ra bai toan.
Ta co the tm het tat ca cac hoan v m phan t au cua vector V theo cach sau :
- Gi nguyen cac phan t cuoi V[m] , . . . ,V[N] hoan v m-1 phan t au (
goi e quy HV(V ,m - 1) .
- oi cho V[m] cho V[m-1] ,gi nguyen cac phan t cuoi V[m],... ,V[N] hoan
v m-1 phan t au ( goi e quy HV(V ,m - 1) .
- oi cho V[m] cho V[m-2] ,gi nguyen cac phan t cuoi V[m],. ,V[N]
hoan v m-1 phan t au ( goi e quy HV(V ,m - 1) .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . . . . . . . . . .
- oi cho V[m] cho V[2] ,gi nguyen cac phan t cuoi V[m], . .. ,V[N] hoan
v m-1 phan t au ( goi e quy HV(V ,m - 1) .
- oi cho V[m] cho V[1] ,gi nguyen cac phan t cuoi V[m], . . . ,V[N] hoan
v m-1 phan t au ( goi e quy HV(V ,m - 1) .
Vay :
HV(V,m) { SWAP( V[m],V[m] )
; HV(V,m 1) ;
SWAP( V[m],v[m-1] ) ; HV(V,m 1) ;
SWAP( V[m],v[m-2 ] ) ; HV(V,m 1) ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 23 -

...........................
...........................
SWAP (V[m],v[2] )
; HV(V,m 1) ;
SWAP( V[m],v[1] )
; HV(V,m 1) ;
}
( SWAP(x , y ) la thu tuc hoan oi gia tr cua 2 oi tng d lieu x ,y )
Vay :
HV(V , m ) for k := m downto 1 do begin
SWAP( V[m], V[k] ) ;
HV(V,m 1) ;
end ;
d) Thu tuc hoan v tren NNLT Pascal.
..................
const size = Val ; (* Val la hang ga tr *)
type vector = array[1. . size] of typebase; (* typebase la mot kieu d lieu co th
t *)
......................
procedure Swap( var x , y : typebase ) ;
var t : typebase ;
begin
t := x ; x := y ; y := t ;
end ;
......................... .
procedure print( A : vector ) ;
var i : integer ;
begin
for i:= 1 to size do write( A[i] : 3 );
writeln ;
end ;
......................... .
Procedure HV( V : vec tor ; m :integer ) ;
var k : integer ;
begin
if (m = 1 ) then print(V)
else
for k := m downto 1 do begin
Swap(V[m] , V[k]);
HV(V , m 1) ;
end ;
end ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 24 -

e) Thu tuc hoan v tren NNLT C++ .


..................
const size = Val ; // Val la hang ga tr
typedef
typebase vector[size] ; // typebase la mot kieu d lieu co th t
......................
void Swap( typebase & x , typebase& y)
{ typebase
t ;
t=x;x=y;y=t;
}
......................... .
void print( const vector &A)
{ for(int j= 0 ; j <size ; j++ ) cout<< A[j] ;
cout << endl ;
}
......................... .
void HV( const vector &V , int m)
{ if (m == 1 ) print( V );
else for(int k = m-1 ; k > = 0 ; k-- )
{ swap(V[m-1] ,V[k] ) ;
HV(V,m-1) ;
}
}

4. Bai toan sap xep mang bang phng phap tron (Sort-Merge).
Y tng : e sap xep 1 danh sach gom n phan t bang phng phap tron
ngi ta chia danh sach thanh 2 phan (tong quat la nhieu phan ) , sap xep tng phan,
roi tron chung .
Bai toan : sap theo th t khong giam mang a : VectorT bang phng phap tron.
( VectorT = array[1 . . size] of T).
a) Thong so hoa:
Bai toan c khai quat thanh sap xep mot day con cua day V : VectorT t ch so
m en ch so n vi 1 <= m <= n <= size . Ta at ten cho bai toan dang tong quat
la : SM(V,m,n).
Bai toan ban au : sap day A se c thc hien bang li goi : SM(A ,1,size).
b) Trng hp tam thng:
o la khi n = m (day sap ch co 1 phan t ), khi o khong can lam g ca (thao tac
rong) .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 25 -

c) Phan ra trng hp tong quat :


Khi n > m ta thc hien cac cong viec sau :
+ Chia day : a[m] ,a[m+1], . . . , a[n] thanh 2 day con
a[m] , . . , a[l] va a[l+1] , . . . , a[n]
+ Sap xep tng day con thanh cac day co th t theo giai thuat SM .
+ Tron 2 day con co th t lai thanh day a[m] ,. . . , a[n] mi co th t .
e thc hien viec tron hai day co th t thanh mot day co th t ta se dung mot
thu tuc khong e quy Merge(m , l , n) . Ta can chon l e c 2 day con giam han
kch thc so vi day ban au , tc la chon l : m < l < l+1 < n .
Thng chon l la phan t gia : l = ( m + n ) div 2 .
Thu tuc Sort_Merge(m,n) tren mang V : VectorT viet tren ngon ng PASCAL
co dang :
procedure SM (var d: VectorT ; m,n: index);
var l : index ;
begin
if n>m then
begin
l := (m+n) div 2;
SM (d,m,l) ;
SM (d,l+1,n) ;
Merge (d,m,l,n) ;
end ;
end ;
Trong o SM la thu tuc tron 2 day tang e c mot day tang.
e sap mang A (day A[1:size]) ta goi SM(A ,1,size)

5. Bai toan tm nghiem xap x cua phng trnh f(x)=0 .


Bai toan : Ham f(x) lien tuc tren oan [ao,bo] , tm mot nghiem xap x vi o chnh
xac tren [ao,bo] cua phng trnh f(x) = 0.
Y tng cua giai thuat :
- Trng hp neo : bo - ao <
+ Neu f(ao).f(bo) 0 th ham f co nghiem tren [ao,bo] .Va v ta ang tm
nghiem xap x vi o chnh xac nen ao la nghiem xap x can tm .
+ Neu f(ao).f(bo) > 0 th ta xem nh khong co nghiem xap x tren oan xet.
- Trng hp bo - ao th chia oi oan [ao,bo] roi tm lan lt nghiem tren
tng oan con : oan con trai, oan con phai .
Ta se xay dng mot ham e qui tra ve gia tr la nghiem xap x cua f (neu
co),hay mot hang E ( u ln) neu f khong co nghiem xap x tren [ao,bo] .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 26 -

a) Thong so hoa:
Xet ham ROOT vi 3 thong so la g , a,b ,(ROOT(g,a,b)) tra ve gia tr nghiem xap x
cua phng trnh g(x) =0 tren oan [a,b] hoac gia tr C neu phng trnh xet khong
co nghiem xap x . e giai bai toan ban au ta goi ham ROOT(f,ao,bo) .
b) Trng hp tam thng:
o la khi b - a < epsilon .
Khi o :
if ( g(a).g(b) ) <= 0 then ROOT(g,a,b) = a ; // a la nghiem xap x
else ROOT(g,a,b) = E ; // khong co nghiem xap x
c) Phan ra trng hp tong quat:
khi b - a >= ta phan [a,b] lam 2 oan [a,c] va [c,b] vi c = (a + b) / 2.
- Neu ROOT(g , a ,c) < E th ROOT(g , a , b ) = ROOT(g ,a ,c) (bai toan tm
nghiem tren oan [a,c] ) .
- con khong th ROOT(g , a , b ) = ROOT(g ,c ,b) (bai toan tm nghiem tren
oan [c ,b] ) .
d) Ham tm nghiem xap x tren NN Pascal co dang:
const epsilon = ;
E = ;
Function ROOT(a,b :real ) :real ;
var c , R : real ;
begin
if ((b-a) < epsilon ) then if ( f(a)*f(b) <= 0 ) then ROOT := a
else ROOT := L
else
begin
c := (a + b)/2 ;
if ( ROOT(a ,c ) < E ) then ROOT := ROOT(a,c)
else ROOT := ROOT(c,b)
end;
e) Chng trnh con tm nghiem xap x trong NN LT C++
const double epsilon =
;
const double
E =
;
double ROOT(double a , double b )
{ if((b - a) < epsilon ) if(f(a)*f(b) <= epsilon return (a ) ;
else return ( L ) ;
else
{ double c = (a + b ) / 2 ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 27 -

double R = ROOT(a,c) ;
if( R< E ) return R ;
else return ( ROOT(c , b) ) ;
}
}

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 28 -

CHNG III
KH E QUY
I. C CHE THC HIEN GIAI THUAT E QUY.
Trang thai cua tien trnh x ly mot giai thuat mot thi iem c ac trng bi
noi dung cac bien va lenh can thc hien ke tiep. Vi tien trnh x ly mot giai thuat
e qui tng thi iem thc hien, con can lu tr ca cac trang thai x ly ang con
dang d .
a) Xet giai thuat e quy tnh giai tha:
FAC ( n ) if(n = 0 ) then retrun 1 ;
else retrun ( n * FAC (n 1)) ;
S o qua trnh tnh ga tr 3 ! theo giai thuat e quy :

FAC(3 ) = 3 * FAC( 2 )
FAC( 2 ) = 2 * FAC( 1
FAC( 1 ) = 1 * FAC( 0
FAC( 0 ) =

Khi thc hien li goi FAC (3 ) se phat sinh loi goi FAC (2 ) , ong thi phai lu gi
thong tin trang thai x ly con dang do ( FAC ( 3 ) = 3 * FAC ( 2 ) ) . en lt mnh
li goi FAC ( 2 ) lai lam phat sinh li goi FAC (1 ) ,ong thi van phai lu tr thong
tin trang thai x ly con dang d ( FAC (2 ) = 2 * FAC ( 1 ) ) ,.. . C nh vay cho ti
khi gap li goi
trng hp neo ( FAC (0 ) = 1 ) .
Tiep sau qua trnh goi la mot qua trnh x ly ngc c thc hien :
- Dung gia tr FAC ( 0 ) e tnh FAC ( 1 ) theo s o x ly con lu tr .
- Dung gia tr FAC ( 1 ) e tnh FAC ( 2 ) theo s o x ly con lu tr .
- Dung gia tr FAC ( 2 ) e tnh FAC ( 3 ) theo s o x ly con lu tr .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 29 -

ong thi vi qua trnh x ly ngc la qua trnh xoa bo cac thong tin ve giai thuat x
ly trung gian ( qua trnh thu hoi vung nh ) .
b) Xet giai thuat e quy tnh gia tr ham FIBONACCI .
FIB(n) if ((n = 0 ) or ( n = 1 )) then return 1 ;
else return ( FIB(n - 1) + FIB(n - 2)) ;
S o tnh FIB(5) :
FIB(5) = FIB(3) + FIB
( )
FIB(4) = FIB(2) + FIB(3)

FIB(3) = FIB(1) + FIB(2)


FIB(1) =

FIB(2) = FIB(0) + FIB(1)


FIB(0) =

FIB(1) =

FIB(2) = FIB(0) + FIB(1)


FIB(0) =

FIB(3) = FIB(2) + FIB(1)

FIB(1) =

FIB(2) = FIB(0) + FIB(1)


FIB(0) = 1

FIB(1) =
FIB(1) =

c) Xet thu tuc e quy thap Ha Noi THN (n , X , Y , Z)


THN (n : integer ; X ,Y , Z : char)

if (n > 0 ) then
{ THN(n-1,X ,Z ,Y) ;
Move(X, Z) ;
THN(n-1,Y,X,Z) ;
}
e chuyen 3 a t cot A sang cot C dung cot B lam trung gian ta goi : THN
(3,A,B,C)
S o thc hien li goi THN (3,A,B,C) la :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

Li goi c/0

Li goi c/1

THN(2,A,C,B)

THN(3,A,B,C)

- 30 -

Li goi c/2

Li goi c/3

THN(1,A,B,C)

THN(0,A,C,B)
A ---> C
THN(0,B,A,C)

A ---> B
THN(1,C,A,B)

THN(0,C,B,A)
C --->B
THN(0,A,C,B)

THN(1,B,C,A)

THN(0,B,A,C)
B ---> A
THN(0,C,B,A)

A ---> C

THN(2,B,A,C)

B ---> C
THN(1,A,B,C)

THN(0,A,C,B)
A ---> C
THN(0,B,A,C)

Vi THN(0 ,X , Y , Z ) la trng hp neo tng ng vi thao tac rong .


X ------> Y la thao tac chuyen 1 a t cot X sang cot Y (MOVE(X,Y)).
Cac bc chuyen a se la :
A --> C ; A --> B ; C --> B ; A --> C ; B --> A ; B --> C ; A --> C ;
Li goi cap 0 :
THN(3 , A , B , C ) se lam nay sinh hai li goi cap 1 : THN (2 ,A, C, B) ;
THN (2 , B , A , C ) cung vi cac thong tin cua qua trnh x ly con dang d .
Cac li goi cap 1 :
THN(2 , A , C , B ) , THN (2 , B , A ,C ) se lam nay sinh cac li goi cap 2 :
THN (1 ,A, B, C) ; THN (1, C , A , B ) ; THN (1 ,B, C, A) ; THN (1, A , B , C ) ; cung
vi cac thong tin cua qua trnh x ly con dang d .
Cac li goi cap 2 :
THN(1 ,A, B, C) ; THN(1, C , A , B ) ; THN(1 ,B, C, A) ; THN(1, A , B , C ) ;
se lam nay sinh cac li goi cap 3 dang : THN(0 ,X, Y, Z) (thao tac rong tng ng vi
trng hp suy bien ); cung vi cac thong tin cua qua trnh x ly con dang d .
Qua trnh goi dng lai khi gap trng hp suy bien .
Qua trnh x ly ngc vi qua trnh goi bat au khi thc hien xong cac trng hp neo
nham hoan thien cac bc x ly con dang d song song vi qua trnh hoan thien cac li
goi la qua trnh loai bo cac lu tr thong tin giai thuat trung gian.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 31 -

Do ac iem cua qua trnh x ly mot giai thuat e quy la : viec thc thi li goi e
quy sinh ra li goi e quy mi cho en khi gap trng hp suy bien (neo ) cho nen e
thc thi giai thuat e quy can co c che lu tr thong tin thoa cac yeu cau sau :
+ moi lan goi phai lu tr thong tin trang thai con dang d cua tien trnh
x ly thi iem goi. So trang thai nay bang so lan goi cha c hoan tat .
+ Khi thc hien xong (hoan tat) mot lan goi, can khoi phuc lai toan bo
thong tin trang thai trc khi goi .
+ Lenh goi cuoi cung (ng vi trng hp neo) se c hoan tat au tien ,
th t day cac lenh goi c hoan tat ngc vi th t goi, tng ng day thong tin
trang thai c hoi phuc theo th t ngc vi th t lu tr .
Cau truc d lieu cho phep lu tr day thong tin thoa 3 yeu cau tren la cau truc lu tr
thoa luat LIFO (Last In Firt Out ) . Mot kieu cau truc lu tr thng c s dung
trong trng hp nay la cau truc chong (stack).
Vi mot chong S thng cho phep chung ta thc hien cac thao tac sau tren no :
- Thu tuc Creatstack(S) : Tao chong S rong .
- Thu tuc Push(x,S) : Lu tr them d lieu x vao nh stack S
( x la d lieu kieu n gian gian hoac co cau truc )
- Thu tuc Pop(x,S) : Lay gia tr ang lu nh S cha vao trong oi tng d
lieu x va loai bo gia tr nay khoi S ( lui nh S xuong mot mc ) .
- Ham Empty(S) : ( kieu boolean ) Kiem tra tnh rong cua S : cho gia tr ung
neu S rong , sai neu S khong rong .
Cai at cu the cua S co the thc hien bang nhieu phng phap phu thuoc vao tng
ngon ng lap trnh va tng muc ch s dung cu the .
V du :
Cai at ( bang cau truc mang ) chong S ma moi phan t la mot oi tng d lieu
thuoc kieu T trong PASCAL nh sau :
Const sizestack = . . . ;
Type stackType = record
St : array [1 . . sizestack ] of T ;
Top : 0 . . sizestack ;
end ;
Thu tuc Creatstack(S) : tao chong S rong :
Procedure Creatstack( var S : StackType )
Begin
S.Top := 0 ;
End;
Thu tuc Push(x,S) : Chen - Lu tr them d lieu x vao nh stack S
( x la d lieu kieu n gian gian hoac co cau truc )
Procedure Push( var S : StackType ; x : T) ;
Begin

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 32 -

S.St[S.Top +1] := x ;
S.Top := S.Top + 1 ;
End;
Thu tuc Pop(x,S) : Xoa - Lay gia tr ang lu nh S cha vao trong oi
tng d lieu x va loai bo gia tr nay khoi S ( lui nh S xuong mot mc ) .
Procedure Pop( var S : StackType ; var x : T ) ;
Begin
x := S.St[S.Top] ;
S.Top := S.Top - 1 ;
End;
Ham Empty(S) : ( Ham boolean ) Kiem tra tnh rong cua Stack S
Function Empty( S : StackType ) : boolean ;
Begin
Empty := ( S.Top = 0 ) ;
End ;
Mo hnh stack S va tac dung cac thao tac tren no .

3
3
3
2
2
2 x 1
1
1 x o 1 x o
Createstack(S)
( S.top = 0 )
S.top := 1

Push(S, xo ) ;
S.St[1] := xo
S.top := 2

3
2
1 x o

Push(S,x1 )
;
S.St[2] := x1
S.Top := 1 ;

pop(S,y)
y := x1

NNLT PASCAL va C++ thc hien c c che e qui nh trong qua trnh bien dch,
phan mem ngon ng t ong phat sinh ra cau truc stack e quan ly cac lenh goi
chng trnh con. Khi mot lenh goi chng trnh con thc hien, cac bien a phng
(gom ca cac thong so) se c cap phat vung nh mi nh stack. Nh vay cac tac
ong a phng cua thu tuc se khong lam thay oi cac trang thai x ly con dang d.

II. TONG QUAN VE VAN E KH E QUY.


e quy la phng phap giup chung ta tm giai thuat cho cac bai toan kho . Giai
thuat giai bai toan bang e quy thng rat ep (gon gang, de hieu ,de chuyen thanh

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 33 -

chng trnh tren cac NNLT) . Nhng nh a ch ra tren viec x ly giai thuat e quy
lai thng gay kho khan cho may tnh (ton khong gian nh va thi gian x ly), hn na
khong phai moi NNLT eu cho phep ma hoa giai thuat e quy (v du : FORTRAN) . V
vay viec thay the mot chng trnh e quy ( co cha chng trnh con e quy ) bang
mot chng trnh khong e quy cung la mot van e c quan tam nhieu trong lap
trnh .
Mot cach tong quat ngi ta a ch ra rang : Moi giai thuat e quy eu co the thay
the bang mot giai thuat khong e quy . Van e con lai la ky thuat xay dng giai thuat
khong e quy tng ng thay the giai thuat e quy . Rat ang tiec viec xay dng giai
thuat khong e quy thay the cho mot giai thuat e quy a co lai la mot viec khong
phai bao gi cung n gian va en nay van cha co giai phap thoa ang cho trng
hp tong quat.
S o e xay dng chng trnh cho mot bai toan kho khi ta khong tm c giai
thuat khong e quy thng la :
+ Dung quan niem e quy e tm giai thuat cho bai toan .
+ Ma hoa giai thuat e quy .
+ Kh e quy e co c mot chng trnh khong e quy .
Tuy nhien do viec kh e quy khong phai bao gi cung de va v vay trong nhieu
trng hp ta cung phai chap nhan s dung chng trnh e quy .

III. CAC TRNG HP KH E QUY N GIAN.


1. Cac trng hp kh e quy bang vong lap .
a) Ham tnh ga tri cua day d lieu mo ta bang hoi quy .
a1) Y tng dan dat :
Xet mot vong lap trong o s dung 1 tap hp bien W = (V , U ) gom tap hp U
cac bien b thay oi trong vong lap va V la cac bien con lai.
Dang tong quat cua vong lap la :
W := Wo ; { Wo = ( Uo,Vo) }
while C(U) do U := g(W)
(3.1.1)
Goi Uo la trang thai cua U ngay trc vong lap , Uk vi k >0 la trang thai cua U
sau lan lap th k (gia s con lap en lan k ) .
Ta co :
Uo mang cac gia tr c gan ban au
Uk = g(W) = g(Uk-1 , Vo ) = f(uk-1) vi k = 1 .. n (3.1.2)
Vi n la lan lap cuoi cung , tc C(Uk ) ung vi moi k < n , C(Un) sai
Sau vong lap W mang noi dung (Un ,Vo ) .
Ta thay : e tnh ga tr day c nh ngha bi quan he hoi quy dang (3.1.2) ta
co the dung giai thuat lap mo ta bi oan lenh (3.1.1) .
a2) Giai thuat tnh ga tr cua day hoi quy thng gap dang :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

f(n)

=
=

C
g(n,f(n -1))

- 34 -

khi n = no ( C la mot hang )


khi n > no

V du :
Ham giai tha FAC (n) = n ! = 1 khi n = 0
= n * FAC(n - 1) khi n > 0
Tong n so au tien cua day an dau sau :
Sn = 1 - 3 + 5 - 7 .. + (-1)n+1 * (2n-1)
S(k) = 1 khi k =1
= S(k-1) + (- 1)k+1 *(2*k-1) vi k > 1
- Giai thuat e quy tnh gia tr f(n)
f(n) = if(n = no) then return C ;
else return (g(n,f(n -1)) ;
- Giai thuat lap tnh gia tri f(n)
k := no ; F := C ;
{ F = f(no) }
While( k < n ) do begin
k := k +1 ;
F := g(k,F ) ;
end ;
{ F = f(n) }
Hoac : F := C ;
For k := no to n -1 do begin
k := k + 1 ;
F := g(k,F) ;
end ;
Trong trng hp nay :
W = U = ( k ,F )
Wo = Uo = ( no,C )
C(U) = ( k < n)
f(W) = f(U) = f(k,F) = (k+1,g(k,F)))

V du 1: Ham tnh FAC(n) = n! khong e quy


+ Trong NN LT PASCAL
Function FAC ( n : integer ) : longint ;
var k : integer ;
F : longint ;
Begin
F := 1 ; k := 0 ;
while (k < n ) do begin

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 35 -

k := k + 1 ;
F := F * k ;
end ;

FAC := F ;
end ;
hoac :
Function FAC ( n : integer ) : longint ;
var k : integer ;
F : longint ;
Begin
F := 1 ;
For k:= 1 to n do F := F * k ;
FAC := F ;
end ;
+ Trong NN LT C++
long int FAC ( int n )
{ int k = 0 ;
long int F = 1 ;
while ( k < n ) F = ++k * F ;
return (F) ;
}
Hoac :
long int FAC ( int n )
{ long int F = 1 ;
for ( int k = 1; k <= n ; k++) F = k * F ;
return (F) ;
}
V du 2 : Dang ham Sn khong e quy
+ tren NN LT Pascal :
Function S(n : integer ) : integer ;
var k ,tg : integer ;
Begin
k := 1 ; tg := 1 ;
while ( k < n ) do begin
k := k + 1 ;
if odd (k) then tg := tg + (2 * k - 1 )
else tg := tg - (2 * k - 1 ) ;
end ;
S := tg ;
end ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 36 -

+ Trong NN LT C++
int S ( int n )
{ int k = 1 , tg = 1 ;
while ( k < n ) { k ++ ;
if (k%2) tg + = 2 * k - 1 ;
else
tg - = 2 * k + 1 ;
}
return ( tg ) ;
}
b) Cac thu tuc e qui dang e qui uoi.
Xet thu tuc P dang :
P(X) if B(X)

then D(X)
else { A(X) ;
P(f(X)) ;
}
Trong o :
X la tap bien ( mot hoac mot bo nhieu bien ).
P(X)
la thu tuc e quy phu thuoc X
A(X) ; D(X) la cac nhom thao tac (lenh ) khong e quy
f(X)
la ham bien oi X
Xet qua trnh thi hanh P(X) :
goi Po la lan goi P th 0 (au tien ) P(X)
P1 la lan goi P th 1 (lan 2)
P(f(X))
Pi la lan goi P th i ( lan i + 1)
P(f(f(...f(X)...)
( P(fi(X)) hp i lan ham f )
Trong lan goi Pi neu B(fi(X)) khong ung (false) th thi hanh lenh A va goi Pi+1 ;
neu B(fi(X)) ung (true) th thi hanh lenh D va ket thuc qua trnh goi .
Gia s P c goi ung n +1 lan . Khi o trong lan goi cuoi cung (th n ) Pn th
B(fn(X)) ung , lenh D c thi hanh va cham dt thao tac goi thu tuc P .
S o khoi qua trnh thc hien lenh goi thu tuc P(X) co dang sau :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 37 -

P(X)

True

D(X)

B(X)

False

A(X) ;
X : = f(X)

END
Tng ng vi vong lap sau :
While ( not B(X) ) do begin
A(X) ;
X := f(X) ;
end ;
D(X) ;
V du 1 :
e oi 1 so nguyen khong am y c so 10 sang dang c so k ( 2 <= k <= 9 ) vi
viec dung mang A ( A : array[1 . . size ] of 0..k -1 , size la mot hang c khai bao
trc ) e cha cac ky so trong he k phan ( vi quy c ky so co y ngha thap c
cha ch so cao ) khi o thu tuc e quy Convert(x,m) e tao day ga tr :
A[0] ,
A[1] , . . . , A[m] nh sau (hay t giai thch ) :
Convert(n,m) if n <> 0 then Begin
A[m] := n mod k ;
Convert(n div k , m -1) ;
End ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 38 -

Lenh goi Convert(y,n) dung e oi so nguyen y trong c so 10 sang c so k lu

day
ky so trong mang A ;
Trong v du nay ta co :
X
la ( n, m ) ;
B(X) la bieu thc boolean not( n <> 0 )
A(X)
la lenh gan A[m] := n mod k ;
f(X)
la ham f(n,m ) = ( n div k , m - 1 ) ;
D(X)
la lenh rong
oan lenh lap tng ng vi thu tuc Convert(x,m) la :

While (n <> 0) then begin


A[m] := n mod k ; { A(X) }
n := n div k ; { X := f(X) }
m := m - 1 ;
end ;
V du 2 :
Tm USCLN cua 2 so nguyen da vao thuat toan Euclide .
- Giai thuat e quy (di dang thu tuc ) tm USCLN(m,n) bang thuat toan Euclide :
USCLN(m , n , var us)

if ( n = 0 ) then us := m
else USCLN(n , m mod n , us ) ;

- Trong trng hp nay th :


X
la ( m , n , us )
P(X) la USCLN(m ,n ,us)
B(X) la n = 0
D(X) la lenh gan us := m
A(X) la lenh rong
f(X ) la f(m,n,us) = ( n , m mod n ,us )
-

oan lenh lap tng ng la :


While (n <> 0 ) do begin
sd := m mod n ;
m := n ;
n := sd ;
end ;
us := m ;

- Thu tuc khong e quy tng ng trong Pascal .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 39 -

Procedure USCLN(m , n : integer ; var us : integer ) ;


var sd : integer ;
begin
while ( n <> 0 ) do begin
sd := m mod n ;
m := n ;
n := sd ;
end ;
us := m ;
end ;
- Ham con khong e quy tng ng trong C++
void USCLN(int m , int n , int& us )
{ while(n != 0 ) { int sd = m % n ;
m = n ;
n = sd ;
}
us = m ;
}
c) Cac ham e qui dang e qui uoi (tail-recusive).
Xet ham e qui dang :
f(X) =
Tc la :
f(X)

Tnh f(Xo ) .
Ta co :
f(Xo ) = f(g(Xo ))
= f(g(g(Xo )))
= ...
= f(gk (Xo ))
= a(gk (Xo ))

f(g(X))

khi C (X) ung

a (X )

khi C (X) sai

if( C(X) ) then return( f(g(X))


else return( a(x))

v C(Xo )
ung .
vi C(g(Xo )) ung .
vi C(gk-1 (Xo )) ung .
vi C(gk (Xo )) sai.

( gk(xo) = g(g (g (xo))))) )


at :
Uo = Xo = go (Xo )
Ui = gi (Xo ) = g(gi-1 (Xo )) = g(Ui-1 ) vi i >= 1
Ta co quan he sau :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 40 -

Uo = Xo
Ui = g(Ui-1 ) i = 1 ... k . Vi k la so nho nhat ma C(Uk ) sai .
Luc o : f(Xo ) = a(Uk )
Vay oan chng trnh tnh f = f(Xo) la :
U := Xo ;
while C(U) do U := g(U) ;
f := a(U) ;
V du :
Vi m , n > = 0 ta co ham e quy tnh USCLN(m,n) la :
USCLN(m ,n ) if (m <> 0 ) then return(USCLN ( abs(m - n) , min(m , n) ) ;
else return n ;
Trong trng hp nay :
X
la (m ,n ) ;
C (X) = C(m ,n) la m <> 0 ;
g(X) = g(m ,n ) = (abs(m -n ) , min (m ,n ) ) ;
a(x) = a(m ,n ) = n ;
- oan chng trnh tnh USCLN(a ,b) la :
m := a ; n := b ;
while ( m <> 0 ) do begin
t1 := m ;
t2 := n ;
m := abs(t1 - t2 ) ;
n := min(t1,t2 ) ;
end ;
USCLN := n ;
- Ham khong e qui tng ng trong Pascal.
Function USCLN(m , n : integer ) : integer ;
var t1 , t2 : integer ;
begin
while (n <> 0 ) do begin t1 := m ; t2 := n ;
m := abs(t1 - t2 ) ;
if(t1 < t2 ) then n := t1
else n := t2 ;
end ;
USCLN := m ;
- Dang ham tng ng trong C++
int USCLN(int m , int n)
{ while( n != 0) { int t1 = m ; int t2 = n ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 41 -

m = abs(t1-t2) ;
if(t1<t2) n = t1 ; else n = t2 ;
return(m) ;
}

2. Kh e quy ham e quy arsac


a) Dang ham e qui ARSAC.
a1) Dang toan hoc :

A(X) =

DS(A(CS(X) ) , FS(CS(X) , X ) ) )

khi C(X) ung

BS(X)

khi C(X) sai

a2) Dang ma gia :


A(X ) if C(X) then return ( DS (A(CS(X)) ,FS(CS(X),X) )
else return (BS(X ) )
Vi : BS , CS , DS , FS la cac giai thuat khong e qui .
Trng hp thng gap la : BS(X) , CS(Y) , DS(U,V) , FS(U,V) la cac thao tac
n gian , khong co lenh goi ham con . X , Y ,U , V la bien n tr hoac bien vec t
.
ay la dang tong quat cua ham e quy ch goi en chnh no mot lan .
b) S o tong quat tnh ga tr A(X) :
Goi Uo = X la ga tr oi so can tnh cua ham A . Viec tnh A(Uo) se phat sinh
lenh goi tnh A(U1) vi U1 = CS(Uo) ( ga s C(Uo) true ).
C nh vay , khi ma C(Ui ) con ung th viec tnh A(Ui ) se phat sinh lenh tnh
A(Ui+1) vi Ui+1 = CS(Ui ).
Vi gia thiet la Uo = X thuoc mien xac nh cua A , th qua trnh lap lai cac
lenh goi nay phai dng lai sau hu han lan goi . Tc la k thoa :
C(Uo) = C(U1) = . . = C(Uk-1) = true , C(Uk) = false.
Xet 2 day so :
- Day : { Ui } = { CS(Ui) }
( 2.1)
Uo = X { cho trc }
i = 0 . . k-1
Ui+1 = CS(Ui)
- Day : { Vi } = { A(Ui) }
(2.2)
Vo = A(Uo) = A(Xo) ( ga tr can tnh ).
Vi = A(Ui) = DS(A(CS(Ui ), FS(CS(Ui), Ui ) )

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 42 -

= DS(A(Ui+1),FS(Ui+1,Ui))
= DS(Vi+1,FS(Ui+1,Ui)) vi 0< i < k ( v C(Ui) ung )
Vk = BS(Uk)
( v C(Uk) = false )
Da vao 2 day so {Ui } ,{Vi} ( mo ta bi (2.1) va (2.2) ) ta tnh A(X ) theo giai thuat
sau :
- Tnh va ghi nh cac Ui t 0 en k theo (2.1).
( Vi C(Uo) = C(U1) = ...= C(Uk-1) = True , C(Uk) = False )
- S dung day ga tr Ui e tnh lan ngc Vi t k xuong 0 theo (2.2) , Vo chnh
la ga tr can tnh ( Vo = A(X ) ).
c) Giai thuat khong e quy tnh ga tr ham Arsac bang s dung cau truc
Stack .
e thc hien giai thuat tren th day Ui phai c tnh va lu tr trong mot cau
truc d lieu thch hp , e khi can en (khi tnh Vi ) de lay ra s dung . ac iem quan
trong cua day Ui la thoa luat LIFO : th t s dung ngc vi th t tao sinh . Cau
truc d lieu cho phep lu tr thuan li day phan t thoa luat LIFO ( vao sau ra
trc - Last In First Out ) la cau truc Stack .
( Tren cau truc Stack 2 thao tac c ban ac trng la :
+ Push(S,X) : Chen phan t d lieu X vao nh Stack S .
+ Pop(S,X) : Lay ra khoi stack S phan t d lieu nh va cha no
vao bien X ).
Giai thuat khong e qui tnh Vo = A(X) da tren 2 cong thc (2.1 ) , (2. 2 ) va s
dung Stack S la :
+ Bc 1 : tnh Ui bat au t Uo theo (2.1) lu vao Stack S
CreateStack(S) ; ( tao stack rong S )
k := 0 ;
U := X ; ( Uo = X )
push(S,U) ; ( chen UO vao nh stack S )
while C(U) do begin
k := k+1 ;
U := CS(U) ; ( Uk+1 = CS(Uk))
push (S,U) ; ( chen Uk+1 vao nh Stack S )
end ;
+ Bc 2 : Lay d lieu trong Stack S tnh Vi theo (2. 2)
pop(S,U) ; ( U = Uk )
V := BS(U) ; ( C(Uk) sai ; V=Vk = BS (Uk))
for i := k -1 downto 0 do
begin
Y := U ;
( Y = Ui+1)

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

pop(S,U) ;
V := DS(V,FS(Y,U)) ;
end ;
{ V = A(Xo) }

- 43 -

( U = Ui )
( C(Ui) ung ; Vi = DS(Vi+1,FS(Ui+1,Ui)) )

Hoac :
+ Bc 1 : tnh Ui bat au t Uo theo (2.1) lu vao Stack S
CreateStack(S) ; ( tao stack rong S )
U := Xo ; ( Uo = Xo )
push(S,U) ; ( chen UO vao nh stack S )
while C(U) do begin
U := CS(U) ; ( UK+1 = CS(UK))
push (S,U) ; ( chen Uk+1 vao nh Stack S )
end ;
+ Bc 2 : Lay d lieu trong Stack S tnh Vi theo (2. 2)
pop(S,U) ; ( U = Uk )
V := BS(U) ; ( C(Uk) sai ; V=Vk = BS (Uk))
While(not emptystack(S)) do
begin
Y := U ;
( Y = Ui+1)
pop(S,U) ;
( U = Ui )
V := DS(V,FS(Y,U)) ; ( C(Ui) ung ; Vi =
DS(Vi+1,FS(Ui+1,Ui)) )
end ;
{ V = A(Xo) }
C che lu tr day d lieu LIFO bang Stack la mot ac trng cua qua trnh x ly
giai thuat e quy ieu can quan tam la cau truc stack thng chiem nhieu bo nh . V
vay ngi ta luon tm cach tranh dung no khi con tranh c .
d) Mot so ham Arsac ac biet ma viec kh e qui giai thuat tnh ga tr
ham co the khong dung Stack .
d1) Trng hp thu tuc CS la song anh .
Trng hp CS la song anh t mien D len mien D th ham CS co ham ngc
-1
CS . Goi ham ngc cua ham CS la ham CSM1 .
Ta co : CSM1(CS(X)) = CS-1(CS(X)) = X vi X D .
Nen :
CSM1(Ui+1) = CS-1(CS(Ui)) = Ui vi i = k-1, . . ,1,0
Khi o ta khong can lu gi cac gia tr trung gian cua day { Ui } ma ch can
xuat phat t Uk dung ham CSM1 e khoi phuc lai cac ga tr Ui voi i<k .
Giai thuat tnh A(X ) se tr thanh :
+ Bc 1 : Da vao (2.1) tnh Uk

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 44 -

U := X ; ( Uo = X )
k := 0 ;
while C(U) do begin
k := k+1 ;
U := CS(U) ; ( UK+1 = CS(UK))
end ;
+ Bc 2 : Tnh Vk , Vk-1, .. V1, Vo da vao Uk ,(2.2) va CSM1
V := BS(U) ; ( V=Vk = BS (Uk) )
for i := k -1 downto 0 do begin
Y := U ;
( Y = Ui+1 )
U := CSM1(U) ; (Ui = CSM1(Ui+1) )
V := DS(V,FS(Y,U)) ;
( Vi = DS(Vi+1,FS(Ui+1,Ui) )
end ;
{ V = Vo = A(X )}
d2) Trng hp thu tuc DS co tnh hoan v .
Xet cong thc tnh :
Vi = DS(Vi+1,FS(Ui+1,Ui)) vi moi i<k
at :
Ui = FS(Ui+1,Ui )
DS(Vi+1,Ui) = Vi+1 T Ui
Ta co :
Vo = DS(V1, FS(U1,Uo) = DS(V1,Uo) = V1 T U0
V1 = DS(V2, FS(U2,U1) = DS(V2,U1) = V2 T U1
V2 = DS(V3, FS(U3,U2) = DS(V3,U2) = V3 T U2
..............................................................................
..............................................................................
Vi = DS(Vi+1, FS(Ui+1,Ui) = DS(Vi+1,Ui) = Vi+1 T Ui
..............................................................................
..............................................................................

(3-1)

Vk-1 = DS(Vk, FS(Uk,Uk-1) = DS(Vk,Uk-1) = Vk T Uk-1


Vk = BS(Uk)
Khi DS co tnh hoan v tc : DS(DS(x,y),z) = DS(DS(x,z),y)
( Viet tren ky hieu T : (x T y) T z = (x T z) T y
Thc hien the lan lt V1 roi V2 ... trong cong thc Vo.
Ta co :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 45 -

Vo = V1 T U0 = ( V2 T U1) T Uo = ( V2 T U0 ) T U1
= ( ( V3 T U2) T Uo) T U1 = ((V3 T U2) T Uo ) T U1
= ( (V3 T Uo) T U2 ) T U1
= ( (V3 T Uo) T U1 ) T U2
.......................................................................................................
.......................................................................................................
V0 =

( .... ((( Vk T Uo) T U1) T U2 ) T ........T Uk-2) T Uk-1 (3 - 2 )

(3 - 2) la mot day lien tiep ( mot tong ) k phep toan T ma ta a biet giai thuat
tnh. Thc vay :
Thiet lap day Wi nh sau :
W0 = Vk
Wi = Wi-1 T Ui-1
vi i = 1..k
Tc la :
Wo = Vk = BS(Uk )
(3 - 3 )
Wi = Wi-1 T Ui-1 = DS(Wi-1,FS(Ui,Ui-1))
i=1..k
Wk chnh la ga tr Vo can tnh .
Nh vay giai thuat tnh Wk ( Vo = A(X ) ) gom 2 bc :
Bc 1: Xac nh k va Uk theo cong thc ( 1 - 1 )
Bc 2: Tnh day Wi , trong luc tnh th phai tnh lai day Ui ,theo ( 3 - 3)
A(X ) = Vo = Wk .
Giai thuat khong e qui tng ng dc xem nh bai tap .

3. Kh e quy mot so dang thu tuc e quy thng gap.


a) Dan nhap.
e thc hien mot chng trnh con e quy th he thong phai to chc vung lu tr
thoa quy tac LIFO (vung Stack). V vay ch nhng ngon ng lap trnh co kha nang tao
vung nh stack mi cho phep to chc cac chng trnh con e quy. Thc hien mot
chng trnh con e quy theo cach mac nh thng ton bo nh v cach to chc Stack
mot cach mac nh thch hp cho moi trng hp thng la khong toi u trong tng
trng hp cu the. V vay se rat co ch khi ngi lap trnh chu ong tao ra cau truc d
lieu stack ac dung cho tng chng trnh con e quy cu the .
Phan tiep theo se trnh bay viec kh e quy mot so dang thu tuc e quy theo hng
thay giai thuat e quy bang cac vong lap va mot cau truc d lieu kieu stack thch hp .
b) Thu tuc e qui chi co mot lenh goi e quy trc tiep .
Mo hnh tong quat cua thu tuc e quy ch co mot lenh goi e quy trc tiep la :
P(X) if C(X) then D(X)

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

else

P ).

- 46 -

begin
A(X) ; P(f(X)) ; B(X) ;
end ;

Vi :
X la mot bien n hoac bien vec t.
C(X) la mot bieu thc boolean cua X .
A(X) , B(X) , D(X) la cac nhom lenh khong e quy ( khong cha lenh goi en

f(X) la ham cua X .


Tien trnh thc hien thu tuc P(X) se la :
+ Neu C(X) ung th thc hien D(X) .
+ Con khong ( C(X) sai ) th thc hien A(X) ; goi P(f(X)) ; thc hien B(X) . (
B(X) ch c thc hien khi P(f(X)) thc hien xong ) .
Moi lan thanh phan e quy P(Y) c goi th thong tin giai thuat B(Y) lai
c sinh ra (nhng cha thc hien ) .
Ga s qua trnh e quy ket thuc sau k lan goi e quy th ta phai thc hien
mot day k thao tac B theo th t : B(fk-1(X)) , B(fk-2(X)) , . . . ,B(f(f(X)))
,B(f(X)),B(X).
e thc hien day thao tac { B(fi(X)) } theo th t ngc vi th t phat sinh ta can
day d lieu {fi(X) } truy xuat theo nguyen tac LIFO. Ta se dung mot Stack e lu tr
day { fi(X) } { X , f(X) , f(f(X)) , . . . , fi(X) , . . . , fk-1(X) }
Trnh t thc hien P(X) c dien ta bang mo hnh sau :
P(X)

C(X) = False

C(U) = False

A(X) ;

A(U) ;

C(U) = False A(U) ;

Push(S,X); U:=f(X) ; P(U) ; POP(S,U) ; B(U)


(U=X)
Push(S,U); U :=f(U)); P(U) ; POP(S,U) ; B(U)
( U = f(X))
Push(S,U) ; U : = f(U)); P(U ) ;

POP(S,U) ; B(U)

------------------------------------------------------------------------------------------------

C(U) = False A(U) ;------>


C(U) = True

Tran Hoang Tho

Push(S,U) ; U : = f(U)); P(U ) ;


D(U )

POP(S,U) ; B(U)
( U=fk-1(X) )

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 47 -

Giai thuat thc hien P(X) vi viec s dung Stack co dang :


P(X)

Creat_Stack (S) ; ( tao stack S )


While(not(C(X)) do begin A(X) ;
Push(S,X) ; ( cat ga tr X vao stack S )
X := f(X) ;
end ;
D(X) ;
While(not(EmptyS(S))) do begin
POP(S,X) ; ( lay d lieu t S )
B(X) ;
end ;
}

V du :
Thu tuc e quy chuyen bieu dien so t c so thap phan sang nh phan co dang :
Binary(m) if ( m > 0 ) then begin
Binary( m div 2 ) ;
write( m mod 2 ) ;
end;
Trong trng hp nay :
X la m .
P(X) la Binary(m) .
A(X) ; D(X) la lenh rong .
B(X) la lenh Write(m mod 2 ) ;
C(X) la ( m <= 0 ) .
f(X) = f(m) = m div 2 .
Giai thuat thc hien Binary(m) khong e quy la :
Binary (m ) { Creat_Stack (S) ;
While ( m > 0 ) do begin
sdu := m mod 2 ;
Push(S,sdu) ;
m := m div 2 ;
end;
While( not(EmptyS(S)) do begin
POP(S,sdu) ;
Write(sdu) ;
end;
}

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 48 -

c) Nhieu lenh goi e quy trc tiep.


c1) Thu tuc e quy vi 2 lan goi trc tiep
Thu tuc e quy 2 lan goi trc tiep co dang :
P(X)

if C(X) then D(X)


else begin
A(X) ; P(f(X)) ;
B(X) ; P(g(X)) ;
end ;

Qua trnh thc hien thu tuc P(X) se la :


- Neu C(X) ung th thc hien D(X) .
- Neu C(X) sai th thc hien A(X) ; goi P(f(X)) ; thc hien B(X) ; goi P(g(X)) , khi
goi P(g(X)) th lai phat sinh lenh A(g(X)) nh vay ngoai viec phai lu vao stack cac
ga tr fi(X) ta con phai lu vao stack cac ga tr gi(X) tng ng . Khi ta lay d lieu t
stack e thc hien lenh B(U) ma cha gap ieu kien ket thuc th ta thc hien P(g(U))
va lai phai lu ga tr g(U) vao stack ,... ieu kien dng la khi truy xuat ti phan t
lu au tien trong stack .
Nh vay la ngoai d lieu X , con phai lu vao ngan xep them th t lan goi ( cum
goi )
Thuat toan kh e quy tng ng vi thu tuc e quy P(X) la :
{ Creat_Stact (S) :
Push (S, (X,1)) ;
Repeat
While ( not C(X) ) do begin
A(X) ;
Push (S, (X,2)) ;
X := f(X) ;
end ;
D(X) ;
POP (S, (X,k)) ;
if ( k <> 1) then begin
B(X) ;
X := g(X) ;
end ;
until ( k = 1 ) ;
}

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 49 -

V du : Kh e quy thu tuc Thap Ha Noi .


+ Dang e quy cua thu tuc Thap Ha Noi la :
THN(n , X , Y, Z ) if( n > 0 ) then begin
THN ( n - 1 , X , Z , Y ) ;
Move ( X , Z ) ;
THN ( n - 1 , Y , X , Z ) ;
end ;
Vi n la so a , X la cot au , Z la cot cuoi , Y la cot gia ,Move(X,Z) la thao tac
chuyen 1 a t cot X ti cot Z .
Trong trng hp nay :
Bien X la bo ( n , X , Y , Z ) .
C(X) la bieu thc boolean ( n < = 0 ) .
D(X) , A(X) la thao tac rong .
B(X) = B(n,X,Y,Z) la thao tac Move(X,Z) ;
f(X) = f(n ,X ,Y ,Z) = (n - 1 , X , Z , Y) .
g(X) = g(n ,X , Y, Z ) = (n - 1 , Y ,X , Z ) .
Giai thuat khong e quy tng ng la :
{ Creat_Stack (S) ;
Push (S ,(n,X,Y,Z,1)) ;
Repeat
While ( n > 0 ) do begin
Push (S ,(n,X,Y,Z,2)) ;
n := n - 1 ;
Swap (Y,Z ) ; (* Swap(a,b) la thu tuc hoan
end ;
oi noi dung 2 bien a ,b *)
POP (S,(n,X,Y,Z,k)) ;
if ( k <> 1 ) then begin
Move (X ,Z ) ;
n := n - 1 ;
Swap (X ,Y ) ;
end ;
until ( k = 1 ) ;
}
c2) Trng hp n lan goi e quy trc tiep .
Thu tuc e quy trong trng hp nay co dang :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

P(X)

- 50 -

if C(X) then D(X)


else begin
A1(X) ; P(f1(X)) ;
A2(X) ; P(f2(X)) ;
............................
Ai(X) ; P(fi(X)) ;
............................
An(X) ; P(fn(X)) ;
An+1(X) ;
end ;

Cung giong nh trong trng hp (3a) la khi quay tr lai sau khi thc hien mot lan
e quy, can biet o la lenh goi thuoc nhom th may trong day lenh goi e biet thao
tac can thc hien tiep. V vay trong chong can gi them v tr nhom lenh goi .
Dang lap tng ng la :
{ Creat_Stack (S) ;
Push(S,(X,1)) ;
Repeat
While (not C(X) ) do begin
A1(X) ;
Push (S,(X,2)) ;
X := f1(X) ;
end ;
D(X) ;
POP(S,(X,k)) ;
While( k = n+1 ) do begin

if ( k > 0 ) then

until (k = 1 ) ;
}

An+1 ;
POP(S,(X,k)) ;
end ;
begin
Ak(X) ;
Push (S,(X,k+1));
X := f k (X)
end ;

V du : Kh e quy cho thu tuc hoan v .


+ Thu tuc hoan v di dang e quy :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 51 -

HVI(V ,n)

if (n = 1 ) then Print ( V )
else for i := n downto 1 do
begin
Swap (V[n],V[i] ) ;
HVI(V ,n - 1) :
end ;
trong trng hp nay th :
X la bo (V ,n ) . (* vector V va so nguyen n *)
C(X) la ( n = 1 ) .
D(X) la Print (V) . (* xuat vector V *)
Ai(X) la thu tuc Swap(V[n] ,V[i] ) ( i = 1 .. n ) .
An+1 la thao tac rong .
fi(X) = f(V, n ) = ( V, n - 1) .( vi i = 1 . . n )
Dang lap cua thu tuc la :
{ Creat_Stack (S) ;
Push (S,(V ,n ,1)) ;
Repeat
While ( n > 1 ) do begin
Swap(V[n] ,V[1] ;
Push (S ,V , n ,2) ;
n := n -1 ;
end ;
Print (V) ;
POP (S ,(V ,n ,k)) ;
While ( k = n +1 ) do POP(S ,(V ,n ,k) ;
if(k <> 1 ) then begin
Swap(V[n] ,V[k]) ;
Push (S ,(V ,n ,k+1) ;
n := n - 1 ;
end ;
until(k = 1 ) ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 52 -

PHAN II

KIEM CHNG CHNG TRNH


CHNG IV

CAC KHAI NIEM


I. CAC GIAI OAN TRONG CUOC SONG CUA MOT PHAN MEM
Viec s dung may tnh e giai mot bai toan thc te thng bao gom nhieu viec.
Trong cac cong viec o cong viec ma ngi ta quan tam nhat la viec xay dng cac he
thong phan mem (cac he thong chng trnh giai bai toan ).
e xay dng mot he thong phan mem , ngi ta thng thc hien trnh t cac cong
viec sau : ac ta bai toan, xay dng he thong, s dung va bao tr.

1) ac ta bai toan
Gom viec phan tch e nam bat ro yeu cau cua bai toan va dien at chnh xac lai
bai toan bang ngon ng thch hp va thch ng vi chuyen nganh tin hoc va co tnh
ai chung ( de hieu oi vi nhieu ngi).

2) Xay dng he thong


Trong bc nay se tuan t thc hien cac cong viec sau :
- Thiet ke : Xay dng mo hnh he thong phan mem can co. Trong bc nay,
cong viec chu yeu la phan chia he thong thanh cac module chc nang va xac nh ro
chc nang cua tng module cung nh moi tng tac gia cac module vi nhau. Chc
nang cua moi module c nh ro bi ac ta cua tng module tng ng.
- Trien khai tng module va th nghiem :
Viet chng trnh cho tng module (bai toan con) thoa "ung" ac ta a at ra. Tnh
ung cua chng trnh c quan tam bang 2 hng khac nhau :
+ Chng minh tnh ung mot cach hnh thc (thng la mot cong viec kho
khan) .
+ Chay th chng trnh tren nhieu bo d lieu th khac nhau moi bo d
lieu ai dien cho mot lp d lieu (thng la mot cong viec ton kem ). e co tnh
thuyet phuc cao, ngi ta can chay th tren cang nhieu bo d lieu cang tot. Khi th
neu phat hien sai th phai sa lai chng trnh con cha phat hien sai th ta con tam tin
chng trnh ung (chay th ch co tac dung phat hien sai va tang long tin vao tnh
ung ch khong chng minh c tnh ung ).

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 53 -

- Th nghiem mc o he thong : Sau khi tng module hoat ong tot, ngoi ta can
th s hoat ong phoi hp cua nhieu module, th nghiem toan bo he thong phan mem.
Th nghiem tnh ung theo bat c cach nao th cung rat ton thi gian va cong sc
nhng lai la mot viec phai lam cua ngi lap trnh v ngi lap trnh luon luon phai
bao am chng trnh mnh tao ra thoa ung ac ta.

3) S dung va bao tr he thong


Sau khi he thong phan mem hoat ong on nh, ngi ta a no vao s dung.
Trong qua trnh s dung co the co nhng ieu chnh trong ac ta cua bai toan, hay
phat hien loi sai cua chng trnh. Khi o can xem lai chng trnh va sa oi chung.
Cac yeu cau sau cho qua trnh xay dng phan mem :
a) Can xay dng cac chng trnh de oc, de hieu va de sa oi.
ieu nay oi hoi mot phng phap tot khi xay dng he phan mem : phan ra tot he
thong , s dung cac cau truc chuan va co he thong khi viet chng trnh ,co su lieu
ay u .
b) Can am bao tnh ung. Lam the nao e xay dng mot chng trnh "ung" ?
Mot ieu can chu y la: Phep th chng trnh ch cho kha nang ch ra chng trnh
sai neu tnh c phat hien c ch khong chng minh c chng trnh ung v
khong the th het c moi trng hp. V vay ngi ta luon co gang chng minh
chng trnh ung cua chng trnh bang logic song song vi chay th chng trnh.
Co 2 cach chnh thng c s dung e am bao tnh ung cua phan mem trong
qua trnh xay dng he thong :
- Viet chng trnh roi chng minh chng trnh ung.
- Va xay dng va chng minh tnh ung cua he thong.
Viec tm kiem nhng phng phap xay dng tot e co the va xay dng va kiem
chng c tnh ung luon la mot chu e suy ngh cua nhng ngi lap trnh .

II. AC TA
1. ac ta bai toan
a) Khai niem.
Khi co mot van e ( mot bai toan) can c giai quyet , ngi ta phat bieu bai toan
bang mot van ban goi la ac ta bai toan (problem specification).
Cac bai toan at ra cho nhng ngi lam cong tac tin hoc thng co dang sau : Xay
dng mot he thong x ly thong tin ma hoat ong cua no :
- Da tren tap d lieu nhap (thong tin vao) thoa man nhng ieu kien nhat nh.
- Xay ra trong mot khung canh moi trng han che nhat nh.
- Mong muon san sinh ra mot tap d lieu xuat (thong tin ra ) c quy nh trc
ve cau truc va co moi quan he vi d lieu nhap va moi trng c xac nh trc .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 54 -

Nhng kha canh tren c the hien trong ac ta bai toan (TBT) .
b) Tac dung cua ac ta bai toan .
- La c s e at van e, e truyen thong gia nhng ngi at bai toan va nhng
ngi giai bai toan .
- La c s e nhng ngi giai bai toan trien khai cac giai phap cua mnh .
- La c s e nhng ngi giai bai toan kiem chng tnh ung cua phan mem tao ra
.
- La phng tien e nhieu ngi hieu tnh nang cua he thong tin hoc ma khong
can (thng la khong co kha nang) i vao chi tiet cua he thong .
e at c 4 muc tieu tren, TBT can gon, ro va chnh xac .
e at c muc tieu th 2, th 3 th ngon ng e viet TBT can phai co tnh hnh
thc (formal) va tren ngon ng nay can co cac phng tien e thc hien cac chng
minh hnh thc . Ngon ng thch hp vi yeu cau nay la ngon ng toan hoc va he
logic thch hp la logic toan hoc. Ngi ta thng s dung ngon ng bac nhat (vi
cac khai niem va toan t toan hoc) va logic bac nhat .
Tuy theo mc o phc tap cua bai toan ma phng tien dien at TBT co nhng
mc o phc tap va mc o hnh thc khac nhau .
mc bai toan ln, trong moi quan he gia ngi s dung va ngi phan tch,
ngi ta dung : sach hp ong trach nhiem (cahier des charges), s o to chc, bieu o
luan chuyen thong tin ... Gia nhng ngi phan tch, ngi ta dung phieu phan tch
cac n v chc nang, bieu o chc nang...
Ket qua phan tch c chuyen thanh yeu cau vi ngi lap trnh bang cac ac ta
chng trnh (TCT - program specification) .

2. ac ta chng trnh (TCT).


TCT gom cac phan sau :
- D lieu nhap : Cac d kien ma chng trnh s dung . ac trng quan trong la
danh sach d lieu nhap va cau truc cua chung , co khi can neu nguon goc , phng tien
nhap cua moi d lieu nhap .
- ieu kien rang buoc tren d lieu nhap : la nhng ieu kien ma d lieu nhap phai
thoa e he thong hoat ong ung . Chng trnh khong bao am cho ket qua ung khi
thc thi cac bo d lieu khong thoa cac ieu kien nay .
Trong phan mo ta d kien nhap can neu len :
+ Cau truc : kieu d lieu ( cac thanh phan, s ket noi cac thanh phan ).
+ Cac rang buoc tren ga tr cua chung .
- D lieu xuat : Cac d lieu ma chng trnh tao ra . Cung nh phan d lieu nhap,
can neu ro danh sach d lieu xuat, cau truc cua chung, co khi can neu phng tien
xuat cua tng d lieu xuat.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 55 -

- ieu kien rang buoc tren d lieu xuat: Nhng ieu kien rang buoc ma d lieu xuat
phai thoa. Chung the hien yeu cau cua ngi s dung oi vi chng trnh. Cac ieu
kien nay thng lien quan en d lieu nhap .
V du 1 :
Viet chng trnh oc vao mot so nguyen dng N roi xuat ra man hnh N so
nguyen to au tien.
ac ta chng trnh :
+ D lieu nhap : mot so nguyen N .
+ ieu kien nhap : N > 0 , nhap vao t ban phm.
+ D lieu xuat : mot day gom N so nguyen .
+ ieu kien xuat : la day N so nguyen to au tien , xuat ra mam hnh .
V du 2 :
Viet chng trnh oc vao mot day N so nguyen , xuat ra man hnh day a sap xep
theo th t khong giam.
ac ta chng trnh :
+ D lieu nhap : mot array A co N phan t la so nguyen .
+ ieu kien nhap : nhap t ban phm .
+ D lieu xuat : array A' co N phan t la so nguyen.
+ ieu kien xuat : xuat ra man hnh ,A' la mot hoan v cua A , A' la mot
day khong giam. ( 1 <= i < j <= N ==> A'[i] <= A'[j] )
Chu y : Mot ac ta tot cho mot nh hng ung ve s dung hp ly cac cau truc d
lieu va mot gi y tot ve hng xay dng giai thuat cho bai toan.

3. ac ta oan chng trnh .


a) Khong gian trang thai.
Mot chng trnh s dung mot tap cac bien xac nh. Mot bien thuoc mot kieu d
lieu xac nh. Mot kieu d lieu xac nh mot tap ga tr ma moi bien thuoc kieu co
the nhan .
Tap gia tr ma bien chng trnh X co the nhan (mien xac nh cua bien X ) goi la
khong gian trang thai (state space) cua bien X .
Xet chng trnh P gia s P s dung cac bien a , b , c ,. . . vi cac khong gian
trang thai tng ng la : A , B , C ,... th tch Decartes cua A,B,C,... ( A ^ B ^ C ^ ..) la
khong gian trang thai cua chng trnh P .
b) ac ta oan chng trnh.
Xet mot tien trnh x ly thc thi mot chng trnh . Moi lenh cua chng trnh bien
oi trang thai cac bien cua chng trnh t trang thai nay sang trang thai khac , xuat
phat t trang thai au ( trang thai khi bat au tien trnh x ly) ket thuc tai trang thai
cuoi ( trang thai khi tien trnh x ly ket thuc).

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 56 -

tng thi iem trc hoac sau khi thc hien mot lenh , ngi ta quan tam en tap
hp cac trang thai co the cua chng trnh. Tap hp cac trang thai nay se c bieu
th bi cac tan t bac nhat vi cac bien la cac bien cua chng trnh.
V du 1 : oan chng trnh sau tnh tch cua hai so nguyen dng a va b
{ ( a > 0) and (b > 0) } // rang buoc tren trang thai au .
x := a ;
y := b ; u := 0 ;
{ ( x = a ) and (y = b ) and ( (u + x*y ) = (a*b) ) } // rang buoc trung gian tren
repeat
{(u+x*y = a*b) and ( y>0 ) }
trang thai cua CT.
u := u + a ;
y := y - 1 ;
{(u+x*y = a*b) and (y >= 0) }
// rang buoc trung gian tren trang
thai
until (y= 0)
cua chng trnh.
{u= a*b}
// rang buoc tren trang thai xuat
Moi tan t trong v du tren mo ta mot tap cac trang thai co the co iem o.
V du 2 : oan chng trnh hoan oi noi dung cua 2 bien x va y, dung bien t lam
trung gian.
{( x = xo) and (y = yo ) } // x , y mang gia tr ban au bat ky nao o
t := x ;
x := y ;
y := t
{ (x = yo ) and (y = xo ) } // x , y sau cung mang gia tr hoan oi cua nhau.
Trong v du nay e bieu dien quan he gia noi dung cac bien vi noi dung cua mot
so bien b gan tr, ngi ta can phai dung cac bien gia (ghost variable). V du ay
la xo va yo bieu th noi dung cua x va y trc khi thc hien oan chng trnh.
V du 3 :
Nhan 2 so nguyen dng x , y, ket qua cha trong u .
{ (x = xo > 0) and (y = yo > 0 )}
u := 0 ;
repeat
u := u + x ;
y := y - 1 ;
until (y = 0)
{ u = x o * yo }
That ra ay tap hp cac trang thai xuat thc s la nho hn, bieu th bi mot ieu
kien chat hn, o la :
{( u = xo * yo ) and (y = 0) and (x = xo ) }
Tong quat ta can khao sat mot oan chng trnh S vi 2 ieu kien i trc P va
i sau Q . Can chng minh rang neu xuat phat t trang thai thoa P thi hanh lenh S th

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 57 -

can at ti trang thai thoa Q . P c goi la ieu kien au (precondition) , Q c


goi la ieu kien cuoi (postcondition). Cap tan t (P,Q) , c goi ac ta cua oan lenh
S. Bo 3 S, P, Q tao nen mot ac ta oan lenh thng c mo ta hnh thc bang tap ky
hieu : { P } S { Q }
( { P } : tap trang thai thoa tan t P , { Q } : tap trang thai thoa tan t Q )
Viec thiet lap cac khang nh nhng iem khac nhau trong chng trnh nham e :
+ Hoac la ac ta mot oan chng trnh can phai xay dng : tm S thoa P, Q cho
trc.
+ Hoac la c s e chng minh tnh ung cua oan chng trnh S ( oan chng
trnh S thoa ac ta ).
+ Hoac e ac ta ng ngha oan chng trnh (thc hien su lieu chng trnh)
nham muc ch lam ngi oc hieu c y ngha cua oan chng trnh

III. NGON NG LAP TRNH.


e kiem chng tnh ung cua mot oan chng trnh, au tien can trnh bay oan
chng trnh o trong mot dang ngon ng lap trnh chuan mc dang cot loi.
Ngon ng lap trnh dang cot loi ch bao gom cac thao tac chuan : lenh gan, lenh
ieu kien, lenh lap while va lenh ghep (day tuan t cac lenh ).
Cu phap cua ngon ng cot loi c nh ngha trong dang BNF nh sau :
< lenh >
::= < lenh n > | day lenh
< lenh n > ::= < lenh gan > | < lenh ieu kien > | < lenh lap >
< day lenh > ::= < lenh n > | < lenh n > ';' < day lenh >
< nhom lenh > ::= < lenh n > | 'begin' < day lenh > 'end'
< lenh gan > ::= <bien> ':=' < bieu thc >
< lenh ieu kien > ::= 'if' < bieu thc > 'then' < nhom lenh > 'else' < nhom lenh > |
'if' < bieu thc > 'then' < nhom lenh >
< lenh lap > ::= 'while' < bieu thc > 'do' < nhom lenh >
nh ngha tren xac nh rang moi < lenh > ma ta khao sat co the la :
- <Lenh n> : bao gom cac trng hp :
+ < Lenh gan >
V du : Y := ( X + Y ) * Z ;
+ < Lenh ieu kien > ma < nhom lenh> sau 'then' hay 'else' co the la mot
<lenh n> hay mot <day lenh> c bat au bi 'begin' va cham dt bi 'end'.
V du : if (x > 0) then y := z
else begin z := x * 2 ;
if( z = y) then y := 0
end ;
+ < Lenh lap > vi mot < bieu thc > bieu th ieu kien lap va < nhom lenh>

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 58 -

V du : while (x > 0) do begin y := x ;


while ( y > 0) do y := y -1 ;
x := x - 1 ;
end ;
- <Day lenh> chnh la day tuan t cac <lenh n> ngan cach bi dau ';'

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 59 -

CHNG V

KIEM CHNG TNH UNG CO IEU KIEN


I. CAC KHAI NIEM VE TNH UNG.
Xet bo 3 gom : oan lenh S, cac tan t tren cac bien cua chng trnh (co the bao
gom cac bien gia) P, Q ( P mo ta ieu kien au , Q mo ta ieu kien cuoi ).
Bo 3 : { P } S { Q } tao nen ac ta oan lenh S .
ac ta : { P } S { Q } c goi la thoa ay u ( ung ay u ) neu xuat
phat t bat ky 1 trang thai thoa P thc hien oan lenh S th viec x ly se dng trang
thai thoa Q .
ac ta : { P } S { Q } c goi la thoa co ieu kien ( ung co ieu kien ck )
neu xuat phat t bat ky 1 trang thai thoa P thc hien oan lenh S neu viec x ly dng
th trang thai cuoi thoa Q ( tnh dng cua S cha c khang nh ).
Khang nh { P } S { Q } dien at tnh ung co ieu kien (condition
correctness) (tck) cua S. Tnh ung cua S da tren k P va kc Q vi gia nh
rang tnh dng cua S a co.
V du :
a) { (x = xo ) and (y = yo ) }
Neu (x = xo ) va (y = yo ) trc khi
t := x
t := x c thi hanh
{( t = x = xo ) and (y = yo ) }
Th sau o ( t = x = xo ) va (y = yo )
b) {( t = x = xo ) and (y = yo ) }
x := y
{ (t = xo ) and (x = y = yo ) }

Neu (t = x = xo ) va ( y = yo) trc khi


x := y c thi hanh
Th sau o ( t = xo ) va ( x = y = yo )

c) { (t = xo ) and (x = y = yo ) } Neu (t = xo ) va (x = y = yo ) trc khi


y := t
y := t c thi hanh
Th sau o ( y = xo ) va ( x = yo )
{( y = xo ) and (x = yo ) }
Cac phat bieu a, b, c la ung theo cam nhan cua ta ve lenh gan.
d) { x > 0 }
Neu (x > xo ) trc khi
x := x-1
x := x-1 c thc hien
{x>0}
Th sau o ( x > 0 )
Phat bieu d la sai v co mot trang thai ban au x = 1 thoa P ( x > 0 ) nhng sau
khi thi hanh lenh x := x -1 (x giam 1) th x = 0 khong thoa Q ( x > 0 ) .

II. HE LUAT HOARE (HOARES INFERENCE RULES).

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 60 -

e co the thc hien chng minh hnh thc ve tnh ung cua cac oan chng
trnh, ta can co nhng tien e mo ta tac ong cua cac thao tac x ly c ban (lenh c
ban ) cua ngon ng dung viet chng trnh ( ay la ngon ng cot loi a c gii
thieu IV.3 ). Mot he tien e co tac dung nh the cua Ca. Hoare , c trnh bay di
dang mot he luat suy dien (inference rules ) c xet di ay .

1. Cac luat he qua (Consequence rules)


1a.
P => Q , { Q } S { R }

{P} S {R}

(1a)

Neu k P manh hn ieu kien Q .Tc la: P Q hay { P } { Q } ( tap hp


cac trang thai thoa P la tap con cua cac tap trang thai thoa Q ) va moi trang thai thoa
Q eu am bao trang thai sau khi thi hanh S (vi gia nh S dng) thoa R th moi
trang thai thoa P eu am bao trang thai sau khi thi hanh S (vi gia nh S dng) thoa
R.
V du 1 : Kiem chng tck ac ta sau :
{ x = 3 } x := 5 ; y := 2 { x = 5, y = 2 }
Ta co : { true} x := 5 ; y := 2 { x = 5 ; y = 2 } (a) // tam cong nhan
va ( x = 3 ) => true
(b) // hien nhien
Nen { x = 3 } x := 5 ; y := 2 { x = 5, y = 2 } // theo tien e (1a)
V du 2 : Kiem chng tck ac ta sau :
{ x > 3 } x := x -1 { x > 0 }
Ta co : { x > 1 } x := x-1 { x > 0 }
(a) //tam cong nhan
va ( x > 3 ) => ( x > 1)
(b) // hien nhien
Nen { x > 3 } x := x -1 { x > 0 }
// theo tien e (1a)
1b.
Q => R , { P } S { Q }

{P} S {R}

(1b)

V du 3 :

Kiem chng tck ac ta sau :


{ true } x := 5 ; y := 2 { odd(x) and even(y) }
Ta co : { true } x := 5 ; y := 2 { (x = 5) , ( y = 2 ) }
(a) // tam cong nhan
va ( (x = 5) and (y = 2)) => odd(x) and even(y) (b) // hien nhien
Nen { true } x := 5 ; y := 2 { odd(x) and even(y) } //theo (1b)

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 61 -

V du 4 : Kiem chng tck ac ta :


{ x > 1 } x := x -1 { x >= 1 }
Ta co : { x > 1 } x := x-1 { x > 0 } (a) // tam cong nhan
va ( x > 0 ) => ( x >= 1) //
(b) // v x la bien nguyen
Nen { x > 1 } x := x -1 { x >= 1 } // theo (1b)
Hai luat nay cho phep lien ket cac tnh chat phat sinh t cau truc chng trnh
vi cac suy dien logic tren d kien.

2. Tien e gan (The Assignement Axiom)


{ P(bt) }

x := bt

{ P(x) }

(2)

T (2 ) ta suy ra neu trc lenh gan x := bt ; trang thai chng trnh lam P(bt) sai
(thoa not P(bt) ) th sau lenh gan P(x) cung sai (thoa notP(x)).
Lenh gan x := bt xoa gia tr cu cua x , sau lenh gan x mang gia tr mi la tr cua
bieu thc bt , con tat ca cac bien khac van gi gia tr nh cu.
V du : Tnh ung co ieu kien cua cac ac ta sau c khang nh da vao tien e
gan
a) { x = x } y := x { x = y }
b) { 0 <= s + t - 1 } s := s + t - 1 { 0 <= s }
c) { i = 10 } j := 25 { i = 10 }

3. Cac luat ve cac cau truc ieu khien .


a) Luat ve day lenh tuan t ( Rules on Sequential Composition )

{ P } S1 { R } , { R } S2 {Q }

{ P } S1 ; S2 { Q }

(3.1)

Gia nh co tnh dng cua S1 va S2, luat nay phat bieu y sau :
Neu:
i) Thi hanh S1 vi k P am bao kc R ( ac ta { P } S1 { R } c k )
ii) Thi hanh S2 vi k R am bao kc Q ( ac ta { R } S2 { Q } c k)
Th : thi hanh S S1 ; S2 vi k P am bao kc Q ( ac ta { P } S1 ; S2 { Q }
c k )
V du : Kiem chng tck ac ta :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 62 -

{true} x := 5 ; y := 2 { x = 5, y = 2 }
Ta co : { 5 = 5 } x := 5 { x= 5}
true =>( 5 = 5 ) va ( x = 5) => ( (x = 5) and (2 = 2) )
{true} x := 5 {( x = 5) and ( 2 = 2) }
{ x = 5 , 2 = 2 } y := 2 {( x = 5) and ( y = 2) }
{true} x := 5 ; y := 2 { x = 5, y = 2 }

(a) // tien e gan


(b) // hien nhien
(c) //theo luat he qua
(d) // tien e gan
// theo luat tuan t

b) Luat ve ieu kien (chon) (Rule for conditionals)


b1)
{ P and B} S1 {Q }, { P and (not B)} S2 { Q }

(3.2a)
{ P } if B then S1 else S2 { Q }
Y ngha luat nay la :
Neu co :
{ P and B }
S1
{Q}
Va
{ P and notB }
S2
{Q}
Th suy ra :
{P}
if B then S1 else S2
{Q}

+ Neu xuat phat t trang thai thoa P and B


thi hanh S1 th se ti trang thai thoa Q

+ Neu xuat phat t trang thai thoa P and not B


thi hanh S2 th se ti trang thai thoa Q

Neu xuat phat t trang thai thoa P


thi hanh lenh if B then S1 else S2
th se ti trang thai thoa Q .

b2)
{ P and B} S { Q} , P and (not B ) => Q

{ P } if B then S { Q}

V du1 : Kiem chng tck ac ta :


{ i> 0 } if ( i= 0 ) then j := 0 else j := 1
Ta co :
((i> 0) and (i = 0)) false
{ (i> 0 ) and (i = 0)} j := 0 {j=1}
S,Q
( (i> 0) and not(i = 0)) true

Tran Hoang Tho

(3.2b)

{j=1}
(a) //hien nhien
(b) //{false} S { Q } ung vi
(c) // hien nhien

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 63 -

{true } j := 1 { j=1 }
(d) //tien e gan
{(i >0) and not(i = 0)} j := 1 {j=1}
(e) // c,d ,luat he qua
T b ,e va tien e 3.2a ta suy ra PCM.
V du2 : Kiem chng tck ac ta :
{i >= j - 1} if ( i > j) then j := j+1 else i := i+1 {i >= j}
Ta co : {i >= j+1} j := j+1 {i >= j}
(a) //tien e gan
((i >= j-1) and (i > j)) ==> (i >= j+1)
(b) // bien oi vi chu y i , j
nguyen
{(i >= j-1) and (i > j)} j := j + 1 {i >= j} (c) // a,b ,luat he qua
{i+1 >= j} i := i+1 {i >= j}
(d) // tien e gan
((i >= j-1) and not(i > j)) ==> (i+1 >= j) (e) // bien oi
{(i >= j-1) and not(i > j)} i := i + 1 {i >= j} (g) // d ,e , luat he qua)
T c , g da vao 3.2a suy ra PCM.
V du 3 : Kiem chng tck ac ta :
{true} if odd(x) then x := x+1 {even(x)}
Ta co : {even(x+1)} x := x+1 {even(x)}
(a) //tien e gan
true and odd(x) ==> even(x+1) (b) // hien nhien
{true and odd(x)} x := x+1 {even(x)} (c) // a ,b , luat he qua
true and not odd(x) ==> even(x)
(d) // hien nhien
T (c) va (d) da vao 3.2b suy ra PCM .
b3) Luat ve lenh lap While

{ I and B } S { I }
-----{ I } while B do S { I and (not B ) }

(3.3)

Luat nay noi rang neu I khong b thay oi bi mot lan thc hien lenh S th no
cung khong b thay oi bi toan bo lenh lap While B do S. Vi y ngha nay I c goi
la bat bien (invariant) cua vong lap.
Chu y rang khang nh : { P } while B do S { Q } thoa da vao he luat Hoare
ch xac nh tck (conditionnal correctness). e chng minh tnh ung (correctness)
thc s ta can bo sung chng minh lenh lap dng.
V du1 :
Kiem chng tnh ung co ieu kien cua ac ta :
{i<=n} while (i < n ) do i := i+1 {i=n}
Xem I la ( i <= n ) th :
{ I and ( i < n )} i := i+1 {I} (a) // de kiem chng
Nen {I} while ( i < n ) do i := i+1 { I and not(i<n)} (b) // luat 3.3

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 64 -

Ma I and not(i<n) (i <= n) and ( i >= n ) ==> i=n (c)


T b ,c , luat he qua ta co PCM.
V du 2 : Kiem chng tnh ung co ieu kien cua ac ta :
{sum = 0 , i = 0 , n > 0}
while ( i <> n ) do begin
i := i+1 ; sum := sum+i
// S
end ;
{sum = n * (n+1)/2} // tc sum = 1 + 2 + ..... + n
ay : I la (sum = i*(i+1)/2 ) ; B ( i <> n )
Ta co :
{( sum = i*(i+1)/2 ) ,( i<>n)} i := i+1 ; sum := sum+i {sum = i*(i+1)/2}
(a) //tien e gan va tuan
t
{ I } while B do S { I and not B }
(b) // a,va luat 3.3
( s = 0) and (i = 0) and (n >0) ==> s = i*(i+1)/2
(c) //hien nhien
( s = i*(i+1)/2) and not(i<>n) ) ==> s=n*(n+1)/2
(d) //hien nhien
T b , c , d ta suy ra PCM.

III. KIEM CHNG OAN CHNG TRNH KHONG CO VONG


LAP.
Cho : P, Q la cac tan t tren cac bien cua chng trnh , S la mot lenh to hp t cac
lenh gan vi cau truc ieu kien va tuan t. Chng minh ac ta : { P } S { Q}
ung ay u .
ay v moi lenh ch c thi hanh mot lan nen tnh dng cua oan lenh S c suy
ra t tnh dng cua lenh gan ma luon c xem la hien nhien . V vay trong trng hp
nay tnh ung co ieu kien trung vi tnh ung au u.
1) Bai toan 1 : S la day tuan t cac lenh gan .
V du1 : Kiem chng tnh ung cua oan lenh hoan oi noi dung 2 bien x va y
a)
{(x=xo) and ( y = yo ) }
t := x ; x := y ; y := t ;
{(x=yo ) and (y = xo ) }
Chng minh
{(x = yo ) and ( t = xo) } y := t {(x = yo ) and ( y = xo ) }
(a) // tien e gan
{(y = yo ) and ( t = xo ) } x := y {(x = yo ) and ( t = xo ) }
(b ) // tien e gan
{(y = yo ) and ( t = xo ) } x := y ; y := t {(x = yo) and ( y = xo ) } (c) // a , b , luat
tuan t
{(y = yo ) and ( x = xo ) } t := x {(y = yo ) and ( t = xo ) }
(d) // tien e gan
( (x = xo ) and (y = yo ) ) ( ( y = yo ) and ( x = xo ) }
(e ) // giao hoan
{( x = xo ) and (y = yo ) } t := x {(y = yo ) and ( t = xo ) }
(g) // d ,e, luat he
qua

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 65 -

{(x = xo ) and ( y = yo ) } t := x ; x := y ; y := t {(x = yo ) and ( y = xo ) (h) // c ,g , luat


tuan t
V du1 : Kiem chng tnh ung cua ac ta :
{ (m :: k=2*m) and (y * zk = c)}
k := k div 2 ;
z := z * z ;
{ y * zk = c}
Chng minh :
(a) {y * (z*z)k = c} z := z * z {y*zk = c}
(tien e gan)
k div 2
k
(b) {y * (z*z)
= c} k := k div 2 {y*(z*z) = c}
(tien e gan)
(c) {y * (z*z)k div 2 = c} k := k div 2 ; z := z*z {y*z)k = c} (a ,b , luat tuan t)
(d) (m :: k = 2*m) and ( y * zk = c ) ==> (y*z2m = c) and ( m = k div 2 )
==> y * (z*z)k div 2 = c
c ,d , luat he qua suy ra PCM.
Nhan xet :
Vi day tuan t cac lenh gan, viec chng minh {P} S1; ...;Sn {Q} thng c
bat au t lenh cuoi cung, dung tien e gan e c k, roi c the lan ngc ve en
S1.
{Pn} Sn {Q}
(n) tm Pn t Sn ,Q va tien e gan
{Pn-1 } Sn-1 {Pn }
(n-1) tm Pn-1 t Sn-1 , Pn va tien e gan
{Pn-1 } Sn-1 ; Sn {Q}
luat ve day lenh tuan t
...
...
{P1 } S 1 ;...; S n {Q} (1)
sau n-1 lan tng t nh tren.
Sau o dung cac tnh chat cua d kien chng minh logic rang :
P ==> P1 (0)
T (1) , (0) ,da vao luat he qua ta co : {P} S1 ; ... ; Sn {Q} ( PCM )
2) Bai toan 2 :
a) Kiem chng ac ta : {P} if B then S1 else S2 {Q}
Vi S1, S2 la nhom cac lenh gan , B la bieu thc boolean.
Cach chng minh :
+ Bc 1 : Tm P1, P2 thoa :
{P1} S1 {Q} (1a)
{P2} S2 {Q} (1b)
+ Bc 2 : Chng minh ( dung cac tnh chat logic va ai so )
P and B
==> P1 (2a)
P and (not B) ==> P2 (2b)
+ Bc 3 : Dung luat he qua suy ra :
{P and B} S1 {Q}
( 3a) // 1a ,2a , va luat he qua
( 3b) // 1b ,2b , va luat he qua
{P and (not B)} S2 {Q}
+ Bc 4 : Dung (3a) , (3b) , luat ieu kien suy ra :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 66 -

{P} if B then S1 else S2 {Q} ( PCM )


b) Kiem chng ac ta :
{P} S0 ; if B then S1 else S2 {Q}
(*)
vi S1, S2, S0 la day cac lenh gan
V du : Kiem chng ac ta :
{y > 0}
x := y-1 ;
if (y > 3) then x := x*x
else y := y-1
{x >= y}
e khang nh c (*) ta can ch ra 1 khang nh R ma :
{P} S0 {R}
va {R} if B then S1 else S2 {Q} roi dung luat he qua e co (*)
Lam the nao e tm c R ? Do S1 va S2 la nhom lenh gan tuan t nen ta co the
tm c (bang tien e gan va luat ve day lenh tuan t ) U va V e :
{U} S2 {Q} va {V} S3 {Q} .
D nhien ta muon U va V la cac ieu kien tong quat nhat co the ( ay la yeu
nhat). R c xay dng the nao t U va V ? Kha nang tong quat nhat cho R e sau
khi iem ieu kien B se co c U hoac V la :
R (B ==> U) and (not B ==>
V)
Nh sau nay se ch ra U , V , R c xay dng nh vay la yeu nhat (weakest
precondition) e at c Q tng ng vi lan lt cac lenh S1 , S2 va if B then S1
else S2 , va c ky hieu la : WP(S2,Q) ,WP(S3,Q) va WP(if B then S2 else S3, Q)
tng ng.
V du 1 :
Kiem chng ac ta :
{y>0}
x := y - 1 ;
if ( y > 3 ) then x := x * x
else y := y - 1 ;
{ x >= y }
Trong v du nay :
P la tan t : ( y > 0 ) ; Q la tan t : ( x >= y )
B la bieu thc boolean : ( y > 3 )
S0 la lenh gan : x := y - 1 ;
Do S1 va S2 la lenh gan : x := x * x ;
S2 la lenh gan : y := y - 1 ;
Ta co :
{x2 >= y} x := x*x {x >= y} suy ra
U WP( S1 , Q ) x2 >= y
(a)
{x >= y-1} y := y-1 {x >= y} suy ra
V WP( S2 , Q ) x >= y-1
(b)

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 67 -

at R (B ==> U) and (not B ==> V)


((y > 3) ==> (x2 >= y)) and ((y <= 3) ==> (x >= y-1))
Ta chng minh c de dang.
R and (y>3)
==> (x2 >= y)
R and (not(y>3)) ==> (x >= y-1)

(c)
(d)

nen theo luat he qua


{R and y>3} S2 {x >= y}
( {R and B} S2 {Q} ) (e)
{R and not(y>3)} S3 {x >= y} ( {R and (not B)} S3 {Q} ) (g)
Theo luat ve lenh chon
{R} if ( y>3) then x := x*x else y := y-1 {x >=y} (h)
theo tien e gan.
{ ((y>3) ==> ((y-1) 2 >=y)) and ((y <=3) ==> ((y-1) >= (y-1))) }
x := y -1
{R}
(i)
De kiem chng c
(y>3) ==> ((y-1) 2 >= y
true (j)
(y<=3) ==> (y-1) >= y-1 true (k)
nen
(y >0) ==> ((y>3) ==>((y-1)2 >=y)) and ((y<=3) ==> ((y-1) >=(y-1))) (l)
Theo luat he qua
{y > 0}
x := y-1;
if (y>3) then x := x*x else y := y-1
{ x >= y} (m) // PCM
V du 2 : kiem chng acta :
{ true }
if ( i <= j) then if (j<k ) then m := k else m := j
else if( i<k) then m := k else m := i
{(m >= i) and (m >= j) and (m >= k)}
at Q(m) ( m >= i) and (m >= j) and (m >= k)
Ta co :
(a) {Q(i)} m := i {Q(m)}
(tien e gan)
(b) {Q(k)} m := k {Q(m)}
(tien e gan)
at R1 ((i < k) ==> Q(k)) and ( (i >= k) ==>Q(i))
dung luat ve lenh chon ta se chng minh c :
{R1} if ( i < k) then ... {Q(m)} (c)
Tng t at R2 ( j<k) ==> ( Q(k) and (j >= k)) ==> Q(j)

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 68 -

Ta co: {R2} if (j < k ) then ... {Q(m)} (d)


Dung bien oi ai so va logic e chng minh
( true and ( i <= j)) ==> R2 (e)
( true and ( i > j )) ==> R1 (g)
T c , d, e ,g , theo luat ve lenh chon ta co PCM.
Nhan xet :
e chng minh ac ta {P} S {Q} vi S la to hp lenh gom ch cac lenh gan va
ieu
kien ung ay u ,ta thc hien cong viec xay dng ieu kien au yeu nhat P1 cua S
ng vi Q , sau o bc kiem chng cuoi cung ch n gian la chng minh : P ==> P1.
Cong viec tren c trnh bay di dang mot ham e quy nh sau :
function DKDYN (S : nhom_lenh ; Q : tan_t ) : tan_t ;
var t : cau lenh ;
begin
if (S <> rong ) then begin
t := lenh_cuoi(S);
S := S t ;
if ( t = lenh_gan(x:=bt)) then DKDYN := DKDYN(S,Q(
x=bt) )
else (* t la lenh if *)
DKDYN := (ieu_kien(t)==>DKDYN(phan_ung(t),Q))
and not (ieu_kien(t)==>DKDYN(phan_khong ung(t),Q))
end
else DKDYN := Q
end ;

IV. KIEM CHNG OAN CHNG TRNH CO VONG LAP.


1. Bat bien
Mot tnh chat ac thu cua tr tue la no thoat khoi cong viec ma no ang thc hien,
khao sat ket qua ma no a lam va luon luon tm kiem, va thng phat hien c, cac
khuon mau (Douglas R. Hofstadter).
Mot bat bien la mot tnh chat khong thay oi ton tai trong mot khung canh, mot s
kien mot qua trnh thay oi thng xuyen.
Mot ieu co ve nghch ly la trong mot the gii, thay oi va can thiet phai thay oi
nhanh chong, cac bat bien lai co y ngha rat quan trong oi vi chung ta.
Mot em be trong mot nc noi tieng Anh hoc cach thanh lap dang so nhieu cua
danh t : dogs, cats, hands, arms ..., cach thanh lap dang qua kh cua ong t :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 69 -

kicked, jumped, walked ... bang hoc luat khong oi (them s, them ed), kem theo
vi viec hoc thuoc mot so trng hp ngoai le. Hay tng tng viec hoc se kho nh
the nao neu khong co cac luat khong oi (bat bien ) nay.
Viec nhan thc c cac bat bien thng dan ti nhng li giai n gian cho cac
bai toan kho.
au oc con ngi dng nh co mot kha nang ac biet e nhan thc cac bat bien
hay cac "khuon mau".
Hay quan sat 2 day cac hnh sau :

(a)

(b)

Hnh ke tiep trong moi day hnh tren la g ? Tnh chat bat bien cua moi day la g ?
(a) Lap lai bo 3 hnh vuong, tron, tam giac.
(b) Ve dang th la s lap lai cua cap 2 hnh vuong ln va nho. Ve mau th la s lap
lai cua mot mau trang va 2 mau sam.
Trong lnh vc chng trnh cho may tnh, ta cung can nhan thc cac s viec bang
cach phat hien cac bat bien. oi vi mot chng trnh, ta co nhieu lan may tnh thi
hanh no, moi lan thi hanh c goi la mot qua trnh (process) va tac ong tren cac d
kien khac nhau. Tnh bat bien cua cac qua trnh nay chnh la ac ta cua chng trnh.
Ben trong mot chng trnh co the co cac vong lap. Viec thc hien vong lap lam
bien thien nhieu lan trang thai cac bien chng trnh (cac oi tng d lieu ) , ma so
lan bien thien thng khong biet trc c. Lam the nao e hieu c tac ong cua
vong lap va i en chng minh vong lap thc hien mot tnh chat (gi mot bat bien) nao
o the hien bi ac ta cua no.
Mo hnh bien oi trang thai chng trnh cua vong lap while B do S

{P}
{Q}

{ P1 }

{ P2 }. . .

. . . { Pn }

{ P } la trang thai trc vong lap .


{ Pi } la trang thai sau lan lap th i .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 70 -

{ Q } la trang thai sau vong lap .


Viec nhan thc (tm ra ) cac tnh chat bat bien cua trang thai chng trnh trc va
sau moi lan lap co vai tro quyet nh ay.
V du : vi vong lap :
tg := 0 ;
i := 0 ;
while ( i <= n ) do begin
i := i + 1 ;
tg := tg + a[i] ;
end ;
Tnh chat bat bien ay la : bat chap i, sau lan lap th i, tg se cha tong i phan
t au tien cua array a(a[1], a[2], ..., a[i]).
Tc la :

tg = S(j: 1 <= j <=i : a[j]) =

a[ j ]
1

2. Ly luan quy nap va chng minh bang quy nap.


Trong khoa hoc cung nh trong i song hang ngay, ngi ta thng can phai suy
dien t cac phat hien rieng le e i en cac quy luat (bat bien) pho dung cho moi( hay
hau het) trng hp co the.
Qua trnh ma con ngi xac lap c mot tnh chat bat bien t mot tap hp cac
quan sat c goi la suy dien quy nap.
Suy dien quy nap xuat phat t quan sat va ket qua la cho ra cac gia thuyet can
chng minh.
V du 1 : t cac quan sat :
1 = 1 = 12
1 + 3 = 4 = 22
1 + 3 + 5 = 9 = 32
1 + 3 + 5 + 7 = 16 = 42
Bang quy nap ngi ta at gia thuyet :
1 + 3 + ... (2*n - 1) = n2
Ta co the th lai gia thuyet nay vi n = 5, 6.... Tuy nhien, e khang nh rang gia
thuyet ung vi moi n, ta can co chng minh. Phng phap chng minh thng dung
trong trng hp nay la chng minh bang quy nap.
a) Nguyen ly quy nap toan hoc n gian .
e chng minh mot tan t P(n) phu thuoc vao so t nhien la ung vi moi n .
Ta can chng minh 2 ieu sau :
(i)
P(0) la ung
(ii) Neu P(n) c gia nh la ung th se suy ra P(n+1) cung ung.
Khang nh P(0) c goi la c s (basis) va bc chng minh (ii) la bc quy
nap (inductive step). Khi co c 2 ieu (i) va (ii), da vao nguyen ly quy nap toan
hoc, ta ket luan rang P(n) ung vi moi so t nhien n .
Tren thc te nguyen ly tren thng c ap dung hi khac.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 71 -

+ e chng minh P(n) ung vi moi so t nhien n >= m th c s cua chng


minh quy nap la P(m) ch khong phai P(0).
+ e chng minh P(n) ung vi moi so t nhien n thoa m <= n <= p ta chng
minh :
(i) P(m) ung
(ii) Neu m <= n < p va P(n) ung th P(n+1) ung.
V du : (i) C s : P(1) chnh la 1 = 12 ung
(ii) Gia s P(n) ung, tc la 1 + 3 + ... (2*m - 1) = n2
th ta se co :
1 + 3 + .... + ( 2*(n+1)-1 ) = (1+3+....+(2*n -1)) + (2*(n+1)-1)
= n2 + 2*(n+1) - 1
= (n+1)2
Vay P(n+1) ung .Da vao (i) va (ii), ta ket luan P(n) ung vi moi so t nhien
n >= 1 theo nguyen ly quy nap toan hoc.
b) Nguyen ly quy nap manh (Strong induction principle)
e chng minh P(n) ung vi moi so t nhien n ta can chng minh hai ieu sau :
(i) P(0) ung
(ii) Neu gia nh la P(0), P(1), .... P(n) eu ung th P(n+1) cung ung
Cung nh nguyen ly quy nap n gian, ngi ta co the dung cac bien dang cua
nguyen ly quy nap manh e chng minh P(n) ung vi moi so t nhien n >= m
cho trc hay vi moi so t nhien n ma m < n <= p vi m,p cho trc.

3. Kiem chng chng trnh co vong lap while.


a) Dang tong quat cua bai toan .
Cho W la mot lenh lap while B do S va cap k P, kc Q.
Ta can phai chng minh rang : ac ta { P } W { Q } c thoa ay u .
e chng minh W thoa ay u ac ta P,Q ta can ch ra 2 ieu :
(i) P bao am W dng,tc la xuat phat t trang thai bat ky thoa P,th hanh W th W
se dng sau mot thi gian hu han ( sau khi thc hien hu han lan lenh S than vong
lap W th B se co ga tr false ).
(ii) {P} W {Q} - ung co ieu kien ( xuat phat t trang thai thoa P sau khi thi hanh
W neu W dng th se at ti trang thai thoa Q ).
e chng minh (ii) ta co the dung he luat Hoare ma chu yeu la phai phat hien
c bat bien I.
e chng minh (i) W dng ta can da tren cac bien b thay oi trong vong lap
thng da vao mot ham f cua cac bien chng trnh nhan ga tri nguyen va ch ra
rang :
() au moi lan lap ( B thoa ) th f > 0 .
Tc la :
I and B ==> f > 0
() Moi lan thc hien S se lam giam thc s gia tr cua f.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 72 -

Neu () va () thoa th S khong the lap vo tan c (v sau hu han lan th B se


nhan ga tr false ).
V du : Ch ra cac vong lap sau ay dng :
{n >= 0}
k := n ;
while (k <>0 ) do begin {k > 0}
k := k-1 ;
r := 2*r + p[k];
if (r >= q) then r := r - q
end ;
v bat bien {k > 0} luon c gi ung au vong lap. ay ham f chnh la
bang k. f giam sau moi lan lap ( v k := k - 1 ). Vay vong lap dng .
{x >= 0 ; y >= 0}
a := x ;
b := y ;
while (a <>b) do
{max(a,b) > 0}
if (a>b ) then a := a - b
else b := b - a
ay ham f = max(a,b). Ta luon co bat bien max(a,b) > 0 au vong lap, f giam sau
moi lan lap.
b) Cac v du ve chng minh chng trnh co vong lap .
V du 1 : Xet ac ta oan chng trnh tnh tch 2 so nguyen A va B vi B >= 0
bang phep cong :
{ B >= 0 }
R := 0 ;
X := B ;
while (X <>0 ) do begin
R := R + A ;
X := X - 1 ;
end ;
{ R = A*B }
k
P B >= 0
kc
Q R=A*B
Bc 1: Kiem chng tnh ung co ieu kien cua ac ta {P} S {Q}
+ Kiem chng oan lenh trc vong lap : Chng minh ac ta sau ung .
{ B >= 0 }
R := 0 ;
(*)
X := B ;
{X = B , R = 0, B >= 0 }

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 73 -

Ta co :
{0 = 0 , B >= 0} R := 0 {R = 0 , B >= 0} (1) tien e gan
{0 = 0 , B >= 0} { B >= 0}
(2) hien nhien
{B >= 0} R := 0 {R = 0, B >= 0}
(3) luat he qua da vao (1),(2)
{B = B , R = 0 , B >= 0} X := B {X = B , R = 0 , B >= 0} (4) tien e gan
{B =B , R =0 , B >= 0} { R = 0 , B >= 0 }
(5) hien nhien
{R = 0 , B >= 0} X := B {X := B , R = 0 , B >= 0}
(6) Luat he qua da vao
(4),(5)
{B >= 0} X := 0 ; X :=B {X = B , R = 0 , B >= 0} (7) luat tuan t da vao (3),(6).
Nh vay vi ieu kien au B >= 0 th sau khi thc hien xong 2 lenh khi ong, ta co
khang nh X = B, R = 0, B >= 0 ac ta (*) ung .
+ Kiem chng vong lap :
- Phat hien c bat bien cua vong lap.
Bat bien ay la : so lan X b giam i chnh la so lan A c cong vao R
Tc la : I ( R = A*(B-X) ) and ( X >= 0 )
Khang nh (X >= 0 ) c them vao e chng minh vong lap dng.
- Chng minh I la bat bien cua vong lap :
{( R + A = A*B - A*X + A ) and ( X >0 )}
R := R + A
{(R = A*B - A*X + A ) and ( X > 0 )}
(8) tien e gan
{ ( R = A*(B - X)) and ( X > 0 )}
R := R + A
{ ( R = A*B - A*X + A ) and ( X > 0 )} (9) bien oi t (8)
{ ( R = A*B - A*X + A ) and ( X > 0 )}
{ ( R = A*(B -(X - 1)) ) and ( (X 1 ) >= 0 )}(10)
{ ( R = A*(B -(X - 1)) ) and (( X 1 ) >= 0 )}
X := X 1
{( R = A*(B - X)) and ( X>=0 ) }
(11) tien e gan
{( R = A*B - A*X + A) and (X > 0)}
X := X 1
{( R = A*(B X ) ) and ( X >= 0 )}
(12) luat he qua
{(R = A*(B X )) and ( X > 0 )}
R : = R+A ; X := X - 1
{( R = A*(B X )) and ( X >= 0 )}
(13) luat tuan t da vao (9 ),(12)
{(R = A*(B X )) and (X >= 0 ) and (X<>0)} ==> {(R =A*(B X )) and (X >0 )}(14)
{(R = A*(B X )) and (X >= 0) and (X<>0)}
R := R+A ; X := X-1
{(R = A*(B X )) and (X >= 0)} (15) luat he qua da vao (13 ),(14)
Hay {I and C} R := R + A ; X := X 1 {I}
vi C la ieu kien vong lap X<>0
Do luat lap ta co :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 74 -

{I} while ... {I and not C}


(X=B) and (R=0) and (B>=0) ==> (R=A*(B-X)) and (X>=0) (16)
Ket hp 15,16 va 5 dung luat he qua roi luat tuan t, ta co :
{X=B and R=0 and B>=0} while ... {I and notC} (17)
{B>=0} R:=0 ; X:=B ; while ... {I and notC} (18)
ay I and not C ( R = A*(B-X)) and (X >= 0 ) and (X = 0)
ma ( R = A*(B-X)) and ( X >= 0) and (X=0) ==> R=A*B
Dung luat he qua ta co pcm
Bc 2 : Chng minh tnh dng :
at f = X, ta co :
(i) I and C ( R = A*(B-X) ) and ( X >= 0) and (X<>0 ) => X > 0 => f > 0
(ii) Moi lan lap, f b giam mot n v. Vay vong lap phai dng.
T (i) va (ii) ta ket luan c tnh dng t bc 1 va bc 2 suy ra tnh ung ay u
cua oan chng trnh oi vi P,Q.
Nhan xet t chng minh tren :
+ oi vi day cac lenh gan, nen phat xuat qua trnh suy dien t ieu kien cuoi.
+ oi vi vong lap can xac nh ung bat bien cua no.
Chu y : Ta co the kiem chng tck cua oan chng trnh tren bang cach:
- Xay dng mot lc o chng minh hp ly bang cach da vao cac tien e va
cac khang nh a co trc o chen bo sung cac khang nh trung gian nhng iem
khac nhau trong oan chng trnh .
{P } { B >= 0 }
(0)
{(0 = A*(B B )) and (B >= 0 )}
(3)
R := 0 ;
{(R = A*(B B )) and (B >= 0)}
(2)
X := B ;
{I } {( R = A*(B B )) and ( X >= 0 )} (1a)
while (X <>0 ) do begin
{I and C } {( R = A*(B X )) and (X >= 0) and (X<>0)} (1b)
{(R + A = A*(B -(X 1 )) and ( (X 1 ) >= 0)} (5)
R := R+A ;
{( R = A*(B -(X 1 )) and ( (X - 1 ) >= 0)}
(4)
X := X - 1 ;
{I } {(R = A*(B - X)) and ( X >= 0 )} (1d)
end
{I and notC } {( R = A*(B - X ) ) and (X >= 0) and not(X <> 0)} (1c)
{Q } { R = A*B} (6)
Ly le e bo sung la :
(1a) do phat hien c bat bien I
(1b),(1c),(1d) da vao tien e ve lenh lap xuat phat t I
2, 3 da vao tien e gan xuat phat t (1a)

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 75 -

4, 5 da vao tien e gan xuat phat t (1d)


Cac cap khang nh i lien nhau la cac ieu kien can kiem chng :
(0) ==> (3) : ( B >= 0 ) ==>( (0 = A * (B-B)) and (B >= 0 ) )
(1b) ==> (5) : (( R = A*(B X )) and (X >= 0) and (X<>0)) ==>
((R + A = A*(B -(X 1 )) and ( (X 1 )
>= 0))
(1c) ==> (6) : ( (R = A*(B-X)) and (X >= 0) and (X = 0)) ==> ( R=A*B )
De dang chng minh cac ieu tren.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 76 -

CHNG VI

KIEM CHNG TNH UNG AY U


I. CAC KHAI NIEM.
1. at van e.
Ta thng gap bai toan sau : Vi tan t Q tren cac bien chng trnh mo ta trang
thai cuoi can thoa sau khi thc hien lenh S, tm tap ieu kien au thoa ac ta . Tc la
vi tan t Q va oan lenh S cho trc tm tan t P thoa ay u ac ta : {P} S {Q}.
De thay rang bai toan se co nhieu li giai. Xuat phat t mot cap gom tan t Q va
oan lenh S , co nhieu tan t P thoa .
V du :
Vi Q ( x > 0 ) ; S x := x - 1 ;
Cac tan t P sau ay eu thoa :
(x > 1) , (x >= 5), (x > 5), ... , false
Moi tan t P xac nh mot tap hp cac trang thai. Tren tap hp cac trang thai
ng c nay d nhien ta se mong muon chon tap hp ln nhat co the. Tc la ta quan
tam en tan t P la han che yeu nhat tren khong gian trang thai . De dang thay
rang y ngha cua quan he yeu ay la :
P yeu hn Q tc la ( Q ==> P )
hoac { Q } { P }

2. nh ngha WP(S,Q).
Neu Q la mot tan t tren cac bien chng trnh va S la mot oan lenh th ieu kien
au yeu nhat cua S da tren Q (the weakest precondition of S with respect to Q ) la
mot tan t tren cac bien chng trnh mo ta tap hp moi trang thai ban au sao cho
viec thi hanh S bat au mot trang thai thoa no eu c bao am la se dng trong
mot trang thai thoa tan t cuoi Q ( thuoc tap {Q} ),va c ky hieu la WP(S ,Q )
Khai niem WP la c s cho viec mo ta mot he thong quy tac kiem chng tnh ung
ay u oan chng trnh cua Dijkstra . Ta se tm hieu noi dung cua he thong nay
trong moi tng quan vi he luat cua Hoare.
Viec ket hp cac quy tac cua 2 he thong nay se cho ta mot phng tien hp ly e
chng minh tnh ung ay u cua oan chng trnh.

3. He qua cua nh ngha.


+ ac ta { WP(S,Q) } S { Q } thoa co ieu kien (ck)
+ WP(S,Q) bao am tnh dng cua S .Tc la S hoat ong ung thc s vi k
WP(S,Q) va kc Q .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 77 -

+ WP(S ,Q ) la tan t yeu nhat thoa ay u ac ta {P} S {Q} . Tc la neu co


tan t P* bao am S dng va ac ta {P*} S {Q} ung co ieu kien th P* ==>
WP(S,Q) hay { P *} { WP(S,Q) } ( {WP(S,Q) } la tap ieu kien au ln nhat
ma xuat phat t o thi hanh S th se dng tai trang thai thoa Q ) .
ay la cac dau hieu ac trng e nhan ra WP(S,Q)

4. Cac v du.
V du 1 : Tnh WP(while n<>0 do n := n 1, n = 0 ) va so sanh vi tan t yeu
nhat thoa co ieu kien lenh lap while n<>0 do n := n 1 vi ieu kien cuoi n = 0
+ Da vao quy luat cua Hoare th ta co :
{true} while n<>0 do n := n -1 { n = 0}
Thc vay :
T : {true and ( n<>0) } n := n-1 {true}
( xem bat bien vong lap la : I true )
ta suy ra : {true} while (n<>0) do n := n -1 {true and n = 0}
+ T inh ngha WP ta suy ra :
wp (while (n<>0) do n := n -1 , n = 0 ) ( n >= 0 )
Ta co :
wp (while (n<>0) do n := n -1 , n = 0) ===> true
Tc la : tan t yeu nhat thoa ay u ac ta {P} S {Q} manh hn tan t yeu nhat
thoa co ieu kien ac ta ( tc la tap ieu kien au ln nhat thoa ay u la tap con cua
tap ieu kien au thoa co ieu kien )
V du 2 :
S i := 0 ; Q ( i = 0 ) ;
Tm wp (S,Q) .
V : + P ==> true vi moi P nen ta cung co wp(S,Q) ==>true (a)
+ true bao am S dng va moi trang thai au eu dan en Q nen
true ==> wp(S,Q) (b)
T (a),(b) ta suy ra : wp(i:=0, i = 0) true
V du 3 :
S i := 0 ; Q ( i = 1 ) ;
Tnh wp (S,Q) .
ay la trng hp ngc vi v du 2. Bat chap trang thai trc lenh gan la g,
lenh gan i := 0 khong the nao bao am i=1.
V vay :
wp(i:= 0 , i=1) false
false mo ta tap hp trang thai rong. Tc la tap ieu kien au thoa S,Q la tap rong .

II. TNH CHAT CUA WP.


Quan he gia WP oi vi cac toan t logic cau tao nen tan t Q nh the nao?

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 78 -

1. Cac quy c :
a) Luat loai tr trng hp ky d (The law of the excluded miracle ).
WP(S,false)

false

b) WP(S,true) la tan t xac nh tap cac trang thai bao am tnh dng cua S
V du : WP(while (n<>0 ) do n := n -1, true) ( n >= 0 )
2. Tnh phan phoi cua and : wp(S,Q) and wp(S,R) wp(S,Q and R)
3. Tnh phan phoi cua or :
4.

wp(S,Q or R)

wp(S,Q) and wp(S,R)

Neu Q ==> R th wp(S,R) ==> wp(S,R)

III. CAC PHEP BIEN OI TAN T.


1. Toan t gan (tien e gan).
WP(x := bt , Q(x)) = Q(bt )
V du :

WP(i := i -1, i = 0) ( i-1 = 0 ) ( i = 1 ) .


WP(i := (l+u) div 2, l <= i <= u) l <= ((l+u) div 2) <= u
WP(i := 1, i =1 ) 1 = 1 true

2. Toan t tuan t.
WP( S1 ; S2 , Q)

WP(S1 , WP(S2,Q))

V du :

WP(x := x+1 ; y := y+1 , x = y) WP(x := x+1 ; WP(y := y+1,x = y))


WP(x:=x+1, x=y+1)

x+1 = y+1 ( x = y)
Quy luat nay ham y rang to hp tuan t cac lenh co tnh ket hp (associativity)
tc la (S1 ; S2); S3 th cung cung y ngha vi S1; (S2;S3).
Bi v vi Q tuy y wp((S1;S2);S3,Q) wp(S1 ; S2 , wp(S3,Q))
wp(S1 , wp(S2, wp(S3,Q))) wp(S1 , wp(S2;S3,Q))
wp((S1 ; (S2;S3)) ,Q)

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 79 -

V du :
Chng minh tnh ung ay u ac ta sau :
{ S=i*(i+1)/2 }
i := i+1;
S := S+i;
{ S = i*(i+1)/2 }
Ta co :
wp(i := i+1 ; S := S+i, S=i*(i+1)/2)
wp(i := i+1, wp(S := S+i, S=i*(i+1)/2))
wp(i := i+1, S+i = i*(i+1)/2)
S +i+1 = (i+1)*(i+1)+1)/2
S = i*(i+1)/2)
Theo nh ngha cua wp ta co :
{ wp(i := i+1 ; S := S+i, S=i*(i+1)/2) }
i := i+1;
S := S+i;
{ S = i*(i+1)/2 }
ung ay u . Suy ra PCM.

3. Toan t ieu kien.


a)
WP(if B then S1 else S2, Q) (B ==> WP(S1 , Q) and (not B ==> WP(S2 , Q) )

V du 1 :
Tnh WP(if ( i= 0) then j := 0 else j := 1, j=1)
Ta co :
WP(j := 0, j = 1) (1 = 0 ) false
WP(j := 1 , j = 1) (1 = 1 ) true
Nen :
WP(if ( i = 0) then j := 0 else j := 1, j=1)
((i = 0) ==> false) and ((i<>0) ==> true)
( not(i=0) or false) and true ( i <> 0 )
V du 2:
Tnh
WP(if ( i>j ) then j := j+1 else i := i+1, i >= j)
Ta co :
WP(j := j+1, i >= j) i >= j+1 i > j
WP(i := i+1 , i >= j) i+1 >= j i >= j -1
Nen
WP(if ( i>j ) then j := j+1 else i := i+1, i >= j)
((i > j) ==> (i > j)) and ((i <= j) ==> (i >= j -1))
true and ( not(i <= j) or (i >= j -1))
(i > j) or ( i >= j - 1) ( i > j )

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 80 -

b) nh ly sau ay chng minh s ung an cua toan t ieu kien neu chap
nhan he tien e cua Hoare va tnh dng.
nh ly :
Goi P ( B==> WP(S1 ,Q )) and (not B ==> WP(S2 , Q) )
Th ta co : + {P} if B then S1 else S2 {Q} ck (1)
va
+ Vi gia nh S1 va S2 dng neu {R} if B then S1 else S2 {Q}
th R ==> P ( P la tan t yeu nhat thoa ay u ac ta ) (2)
( Tc la : WP(if B then S1 else S2 , Q ) P
( B==> WP(S1 ,Q )) and (not B ==> WP(S2
Q) ) Chng minh :
Theo nh ngha cua WP, neu R ==> WP(S,Q) th {R} S {Q} thoa ck
Ma ta co P and B B and WP(S1 ,Q )) ==> WP(S1 ,Q )
V vay : {P and B} S1 {Q}
thoa ck
Tng t {P and (notB)} S2 {Q} thoa ck
Do o, theo luat ve lenh chon cua Hoare, ta co : {P} if B then S1 else S2 {Q}
(1)
Gia s S1 va S2 luon luon dng va {R} if B then S1 else S2 {Q}
Th : {R and B} S1 {Q}
{R and (not B)} S2 {Q}
va : if B then S1 else S2 luon luon dng.
V vay theo nh ngha cua WP ta co : R and B ==> WP(S1 ,Q )
va R and (notB) ==> WP(S2 ,Q )
Hai khang nh tren tng ng vi :
R ==> (B ==> WP(S1 ,Q ) )
va
R ==> (not B ==> WP(S2 ,Q ) )
V vay R ==> (B ==> WP(S1 ,Q ) ) and (not B ==> WP(S2 ,Q )) ) (2)
T (1) va (2) ta suy ra : P WP(if B then S1 else S2 , Q ) .
c) Ta cung co khang nh ngc lai : Neu chap nhan tien e :
WP(if B then S1 else S2, Q) (B ==> WP(S1, Q) and (not B ==> WP(S2,Q))
th co the chng minh luat ve lenh chon cua Hoare la ung :
nh ly : Gia s S1, S2 dng.
Neu {P and B} S1 {Q}
va {P and not B1} S2 {Q}
th {P} if B then S1 else S2 {Q} ung
Chng minh : (Bai tap)

4. Toan t lap.
a) Xay dng WP(while B do S ,Q ) .
Xet vong lap W while B do S , vi kc Q.
Xay dng tan t : WP(while B do S, Q)
No phai bao am W dng sau mot so hu han lan lap lai S va ti trang thai thoa Q .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 81 -

Goi k la so lan lap (so lan thc hien lenh S than vong lap). Ta xay dng quy nap
theo k :
Bc 0 : ( k = 0 ) tan t yeu nhat mo ta tap ln nhat cac trang thai bao am S lap
ung 0 lan va ti trang thai thoa Q la :
Po (not B) and Q
Bc 1 : ( k = 1) tan t yeu nhat mo ta tap ln nhat cac trang thai bao am S lap
ung mot lan va ti trang thai thoa Q la :
P1 B and WP(S,Po )
( tc la sau khi thc hien mot lan S th trang thai chng trnh se thoa Po ).
Bc 2 : ( k = 2 ) tan t yeu nhat mo ta tap ln nhat cac trang thai bao am S lap
ung 2 lan va ti trang thai thoa Q la :
P2 B and WP(S,P1 )
( tc la sau khi thc hien mot lan S th trang thai chng trnh se thoa P1 ).
.........................................................
.........................................................
Bc k : Mot cach tong quat vi k >= 1 th tan t yeu nhat mo ta tap ln nhat cac
trang thai bao am S lap ung k lan va ti trang thai thoa Q la : Pk B and
WP(S,Pk-1 )
Nh vay mot trang thai au lam W dng mot trang thai thoa Q khi va ch khi no
thoa khang nh sau : (k : k >= 0 : Pk )
Tc la :

Vi

WP(while B do S , Q) (k : k >= 0 : Pk )

Pk =

V du :

not B and Q vi k = 0
WP(S,Pk-1 )

vi k > 0

Cho S la oan chng trnh :


j := j* i ; k := k+j ; n := n+1 ;
va W la while (n <> m) do S
Q la : ( k = (im+1 - 1) /(i-1) and j = im
(oan chng trnh nham tnh k = 1 + i1 + i2 + ... + im )
Gia s rang (i <> 0) va( i <> 1) , xac nh WP(W,Q) .
Day cac khang nh Pn c xac nh :
Po not(n <> m) and Q
Pr (n <> m) and wp(S,Pr-1 ) vi r = 1,2,3,...
Thc hien tnh toan ta co :
Po (n = m) and (k = (im+1 - 1)/( i -1)) and (j = im )
P1 ( n <> m) and (n+1 = m) and ((k + j* i) = (im+1 - 1)/(i-1)) and (j * i =
m
i )
(n = m -1) and (k = (im - 1)/(i-1)) and (j = im-1 )
Tng t :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 82 -

P2 ( n = m -2) and (k = (im-1 - 1)/(i-1)) and (j = im-2 )


Ta co the chng minh bang quy nap gia thuyet sau (vi moi so t nhien r)
Pr ( n = m -r) and (k = (im-r+1 - 1)/(i-1)) and (j = im-r )
Pn ( n = m -n) and (k = (in+1 - 1)/(i-1)) and (j = in )
Vay :
WP(W,Q) (r : r >= 0 : (n = m - r) and (k = (in+1 - 1)/(i-1)) and (j = in )
( n <= m) and (k = (in+1 - 1)/(i-1)) and (j = in )
b) Moi lien he gia toan t lap va tien e lenh lap cua he luat Hoare .
Ta tach viec khao sat tnh ung mot vong lap thanh hai phan :
+ Phan quan sat s bien oi cua vong lap e dan ti khang nh no dng (tnh dng ).
+ Phan quan sat s bat bien cua vong lap e chng minh ket qua cuoi cung cua no
(ck)
Vi y tng o ta tach WP(W,Q) ( vi W la while do S) thanh cac thanh phan tng
ng va khao sat moi quan he gia WP(W,Q) va cac khang nh cua he luat Hoare.
) Vi lenh bat ky S, ieu kien yeu nhat e am bao S dng la khong rang
buoc g sau khi dng. Tc la WP(S,true) la tan t mo ta tap hp tat ca cac trang thai
ma xuat phat t o th bao am S dng.
Ta co :
WP(W,true) (k : k >= 0 :P k )
Vi
Po (not B) and true (not B)
Pk B and WP(S,Pk-1 ) vi k > 0
( Po la ieu kien e khong thc hien S lan nao, P1 la ieu kien e thc hien S
ung mot lan , Pk la ieu kien e thc hien S ung k lan.
V du :
W while ( n <> m) do begin
j := j* i ; k := k+j ; n := n+1 ;
end ;
Ta tnh ieu kien au e W dng nh sau :
Po not (n <> m) ( n = m )
P1 B and WP(S,Po) ( n <> m) and ( n+1 = m ) ( n+1 = m )
Gia thiet quy nap rang Pk (n+k = m) .
Ta co :
Ga thiet ung vi k = 0 v Po (n = m) ( n + 0 = m )
Ga s ga thiet a ung vi k . Tc la : Pk ( ( n+k ) = m )
Chng minh ga thiet ung vi k+1. Thc vay:
Pk+1 B and WP(S,Pk ) ( n <> m) and ((n+1)+k = m) ( n+(k+1) = m)
( WP(S,Pk ) WP (j := j* i ; k := k+j ; n := n+1 ,( (n + k ) = m ) ) = (n + ( k +1))
=m)
Vay : Pi ( n+i = m )
Tc la : WP(W,true) (i: i>=0; n+i =m) ( n >= m )
) Quan he gia { P } S { Q } va WP(S,Q)

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 83 -

Theo nh ngha ve tnh ung va WP (S , Q ) ta co : S ung co ieu kien da tren


ieu kien au P va ieu kien cuoi Q ( ac ta {P} S {Q} ck) neu va ch neu hoi
(and ) cua P va ieu kien yeu nhat bao am s dng cua S manh hn ieu kien yeu
nhat bao am S dng trong mot trang thai thoa tan t Q.
Tc la : {P} S {Q} thoa ck khi va ch khi P and WP(S,true) ==> WP(S,Q)
Nh vay :
{ I and B } S { I } thoa co k khi va ch khi I and B and WP(S,true) ==>
WP(S,I)
{I} while B do S {I and not B} thoa co k khi va ch khi
{I} and WP(while B do S , true) ==> WP(W, I and not B)
Nh vay chng minh S gi bat bien I chnh la chng minh
I and B and wp(W,true) ==> wp(S, I)
Chng minh W dng ng vi k P chnh la chng minh : P ==> WP(W,true)
) nh ly bat bien c s (Fundamental invariance theorem) cua Dijkstra
phat bieu mot dang khac cua luat ve vong lap cua Hoare .
nh ly: Gia s I and B and WP(S,true) ==> WP(S,I) ( I la bat bat bien cua vong
lap )
th :
I and WP(W,true) ==> WP(while B do S , I and notB )
({I} while B do S {I and not B} )
Chng minh : Ta se chng minh bang quy nap tren k rang
I and Pk (true) ==> Pk(I and not B ) (a)
vi : Po(Q) not B and Q
Pk(Q) B and wp(S, Pk-1(Q))
Chu y la Pk(Q) la k yeu nhat bao am vong lap while B do S dng sau ung k
lan lap trong mot trang thai thoa man Q.
(i) C s
I and Po(true) I and (not B and true ) (nh ngha)
not B and ( I and not B)
Po(I and not B)
(ii) Bc quy nap : Gia s (a) a ung vi k . Tc la :
I and Pk(true) ==> Pk(I and not B)
Ta chng minh (a) ung vi k+1 .
Thc vay : I and Pk+1(true) I and B and WP(S,Pk(true)) (nh ngha)
B and I and B and WP(S,Pk(true))

B and I and B and WP(S,true) and


WP(S,Pk(true))
( v
WP(S,Pk(true)) WP(S,true) and
WP(S,Pk(true)) )

B and ( I and B and WP(S,true) ) and


WP(S,Pk(true))
==> B and WP(S,I) and WP(S,Pk(true))

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 84 -

( I and B and WP(S,true) ==> WP(S , I ) ga thiet I la bat bien )


B and WP(S,I and Pk(true))
(phep phan phoi _and)
==> B and WP(S,Pk(I and not B))
( v : I and Pk(true) ==> Pk(I and not B gia thiet quy nap va tnh chat phep phan phoi
==>)
Pk+1(I and not B)
Tc la: I and Pk(true) ==> Pk+1(I and not B)
Theo nguyen ly quy nap ta suy ra :
I and Pk(true) ==> Pk(I and not B) vi moi k >= 0
T ieu nay ta co :
I and WP(W, true) I and (k : k >= 0 : Pk(true))
(k : k >= 0 : I and Pk(true))
==> (k : k >= 0 : Pk(I and not B)) WP(W,I and not B)
Ta co pcm.

IV. LC O KIEM CHNG HP LY VA CAC IEU KIEN CAN


KIEM CHNG.
1. Lc o kiem chng.
e chng minh tnh ung cua ac ta oan chng trnh ngi ta thng :
- Thiet lap cac khang nh ve trang thai chng trnh cac iem trung gian
can thiet.
- Chng minh tnh ung cua cac khang nh o.
Nhng khang nh ve trang thai chng trnh nhng iem trung gian khong ch
nham phuc vu viec kiem chng ma con co muc tieu la giup ngi s dung chng trnh
hieu c ng ngha cua oan chng trnh . Tc la gop phan xay dng mot chng
trnh co dang thc tot ( de oc, de hieu ). Nghe thuat cua viec chng minh tnh ung
cua chng trnh va xay dng su lieu cho chng trnh ( ay la a ra nhng ghi
chu vao chng trnh) la cho lam sao chen vao cac khang nh trung gian va u :
qua nhieu se lam kho oc, mat nhieu thi gian kiem tra, con qua t th khong u ac ta
ng ngha .
Trong phan nay ta thao luan y tng chng minh tnh ung cua oan chng trnh
trong dang lc o kiem chng tnh ung (Proof tableaux).
Cac khai niem.
- Lc o kiem chng tnh ung (lkc) cua mot oan chng trnh la mot day
an xen gia cac khang nh (assertion) va lenh (statement) cua oan chng trnh,
vi bat au va ket thuc bi cac khang nh.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 85 -

- Mot lc o kiem chng la ung (valid) neu khi ta bo i cac khang nh trung
gian th no tr thanh mot ac ta ung. T nhng kien thc a trnh bay cac phan tren
ta suy ra: Mot lc o kiem chng la ung khi va ch khi :
+ Moi bo ac ta dang {P} S {Q} xuat hien trong lkc eu la nhng
ac ta ung.
+ Moi cap khang nh ng lien nhau dang {H} {T} trong lkc th
eu thoa quan he P ==> Q ung.
T nh ngha tren ta thay : mot lkc co the bien dang theo nhieu mc chi tiet. T
mot bo ba ac ta gom : oan lenh S , tan t mo ta ieu kien au P , tan t mo ta ieu
kien cuoi Q ( ac ta {P} S {Q} ) ta co the xay dng nhieu dang lkc khac nhau bang
cac cach chen khac nhau cac khang nh trung gian .
Dang tho nhat cua lkc chnh la ac ta tnh ung cua oan chng trnh no ch
cha 2 khang nh : mot au oan chng trnh va mot cuoi oan chng trnh .
Dang min nhat cua lkc la lkc ma moi lenh eu b kem gia hai khang nh (
ac ta ng ngha ti tng cau lenh ) no la lc o kiem chng mc chi tiet nhat
(lc o kiem chng chi tiet - lkcct).
Trung gian gia hai dang lkc tren ngi ta thng s dung lkc ch co cac
khang nh trung gian nhng cho can thiet ( nhng cho quan trong , nhng cho
ngoat trong noi dung ng ngha cua oan chng trnh ).

2. Kiem chng tnh ung.


a) Y tng
e kiem chng tnh ung ac ta cua oan chng trnh S . Tc la khang nh ac ta
{P} S {Q} ung . Ta can thc hien cac viec sau:
+ Xay dng lkc hp ly xuat phat t ac ta cua oan chong trnh .
+ Chng minh tnh ung cua lkc va xay dng .
Trong 2 cong viec tren th viec xay dng lkc hp ly la viec ton nhieu thi gian va
cong sc . Viec xay dng lc o chng minh hp ly se khac nhau phu thuoc vao cau
truc cua oan lenh S song thng c tien hanh theo 2 bc sau :
Bc 1 : T ac ta xay dng lc o trung gian (chi tiet hay gan chi tiet ) da vao
cac tien e (cua he Hoare hoac cua he Dijkstra ) mo ta ng ngha cua tng lenh bang
cach chen vao cac khang nh trung gian .
Bc 2 : T dng lc o trung gian (chi tiet hay gan chi tiet ) da vao cac tien e
(cua he Hoare hoac cua he Dijkstra ) mo ta ng ngha cua tng lenh bo bt cac khang
inh trung gian tam thng ( cac khang nh nhng v tr khong quan trong , cac
khang nh ma tnh ung cua chung la ro rang va dang thc cua chung n gian de
dang khoi phuc lai khi can ) . Gi lai khang nh trung gian nao trong lkc hp ly la
mot trong nhng nghe thuat cua ngi kiem chng no phan anh ro net mc tr tue (kha
nang t duy, kien thc tch luy ) cua ngi kiem chng .

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 86 -

Viec chng minh tnh ung ay u cua lkc phu thuoc vao cau truc oan lenh S va
he tien e ma ta a s dung e xay dng lc o kiem chng hp ly.
- Trng hp 1 : Neu oan lenh S khong cha mot lenh lap nao ca th tnh dng
c xem la hien nhien, khi o 2 he tien e la hoan toan tng ng .
- Trng hp 2 : Neu oan lenh S co cha lenh lap th tnh dng khong phai
bao gi cung c thoa nen ta can phai ch ra . Khi o 2 he tien e la khong tng
ng .
+ Neu trong suot qua trnh xay dng lc o kiem chng ta ch s dung he tien
e Dijikstra th khong phai kiem chng lai tnh dng na .
+ Neu trong qua trnh xay dng lc o kiem chng ta co s dung (du ch mot
lan ) tien e cua he Hoare th phai kiem chng lai tnh dng ( v tien e Hoare khong
bao am tnh dng ) .
b) Kiem chng tnh ung ac ta {P} S {Q} khi S la mot day lenh tuan t.
( S { S1 ; S2 ; .. . ; Sn } )
Kiem chng tnh ung ac ta : { P } S1 ; S2 ; .. . ; Sn { Q }
V du :
Kiem chng ac ta :
{even(k) and (0 < k ) and (y*zk = xn )} (1)
k := k div 2 ;
z := z*z ;
{(0 <= k ) and (y * zk ) = xn )}
(2)
Bai giai :
Cach 1 : Xay dng lkc hp ly da vao he Haore .
- Bc 1 : Xay dng lc o kiem chng hp ly.
+ Xay dng lc o kiem chng chi tiet :
T (1) ta suy ra :
{even(k) and ( 0 < k ) and (y * zk ) = xn )}
(2a)
k
n
{(0 <= k div 2 ) and (y * (z*z) div 2 = x ) } (2d)
k := k div 2 ;
(2)
k
n
{(0 <= k ) and (y * (z*z) = x ) }
(2c)
z := z*z ;
{(0 <= k ) and (y * zk = xn ) }
(2b)
Dien giai : T (2b) va lenh gan z := z*z dung tien e gan ta suy ra (2c)
T (2c) va lenh gan k := k div 2 dung tien e gan ta suy ra (2d)
+ Xay dng lkc hp ly t lkc chi tiet :
T (2) ta suy ra :
{even(k) and ( 0 < k ) and (y * zk ) = xn )}
(2a)
k
n
{(0 <= k div 2 ) and (y * (z*z) div 2 = x ) } (2d)
k := k div 2 ;
(3)

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

z := z*z ;
{(0 <= k ) and (y * zk = xn ) }

- 87 -

(2b)

Dien giai : T (2b),(2c),(2d) va 2 lenh gan tuan t z := z*z ; k := k div 2 dung


tien e tuan t ta bo i (2c) .
- Bc 2 : chng minh lkc hp ly (3) ung :
{(0 <= k div 2 ) and (y * (z*z)k div 2 = xn ) } (2d)
k := k div 2 ;
(3a)
z := z*z ;
{(0 <= k ) and (y * zk = xn ) }
(2b)
Ta co : Tnh ung cua (3a) c khang nh da vao cach xay dng .
Kiem chng hai khang nh i lien nhau :
{ even(k) and ( 0 < k ) and (y * zk ) = xn ) } {( 0 <= k div 2 ) and (y*(z*z)k div 2 =
xn ) }
co quan he ham y (==>) (hien nhien) (3b).
T (3a),(3b) ap dung luat he qua ta suy ra (3) ung .
Nhan xet :
Ta co the hnh thc hoa qua trnh chng minh bang cach a vao ky hieu :
I(z,k) ( 0 <= k ) and (y*zk = xn )
Khi o (2) co the viet thanh :
{even(k) and (0<k) and I(z,k)}
{I(z*z,k div 2 )}
k := k div 2 ;
{I(z*z,k )}
z := z*z ;
{I(z,k)}
(3) co the viet thanh :
{even(k) and (0<k) and I(z,k)}
{I(z*z,k div 2 )}
k := k div 2 ;
z := z*z ;
{I(z,k)}
ieu kien can kiem chng la :
even(k) and (0<k) and I(z,k) I(z*z,k div 2 )
Chu y : Khi co mot cap {P} {Q} xuat hien trong lc o th khang nh ham y
(===> ) tng ng la mot ieu kien can kiem chng (kckc - verification
condition). Cac ieu kien nay la cot loi cua chng minh ve tck, phan con lai cua
chng minh ch la viec ap dung may moc cac quy luat.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 88 -

Trong v du tren, kckc la :


even(k) and (0 < k ) and I(z,k)} ==> I(z*z , k div 2)
ay ch la cach noi hnh thc cua s kien la (z*z)k div 2 = zk khi k la so nguyen
chan.
Cach 2 : Xay dng lkc hp ly da vao he Dijkstra.
Bc 1 : Xay dng lkc hp ly.
- Tnh WP( k := k div 2 ; z := z*z , I(z,k))
Ta co :
WP( k := k div 2 ; z := z*z , I(z,k))
WP( k := k div 2 ,WP( z := z*z , I(z,k))
WP( k := k div 2 , I(z*z,k))
I(z * z , k div 2))
+ Chen WP( k := k div 2 ; z := z*z , I(z,k)) vao (1) ta c lcm hp ly :
{even(k) and (0<k) and I(z,k)}
{I(z*z,k div 2 )}
k := k div 2 ;
z := z*z ;
{I(z,k)}
Bc 2 : Kiem chng tnh ung cua lkc hp ly .
Ta co : {I(z*z,k div 2 )}
k := k div 2 ;
z := z*z ;
{I(z,k)}
(a) ung
even(k) and (0<k) and I(z,k) I(z*z,k div 2 ) (b) ung.
T (a) , (b) ta suy ra ac ta ung
c) Kiem chng khi oan chng trnh co cha cau lenh ieu kien
{P} if B then S1 else S2 {Q}
Khi o ta them cac khang nh trung gian dang:
{P} if B then {P and B}
S1 {Q}
else {P and not B} S2 {Q}
( hoac :
{P} if B then {P and B} S {Q}
else {P and not B} {Q}
khi khong co phan else )
vao ni co lenh ieu kien tng ng ta co lkc trung gian thch hp .
V du : Kiem chng oan chng trnh :
{(0 < k ) and ( y * zk = xn}
if even(k) then begin
k := k div 2 ;
z := z*z ;

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 89 -

end
else begin
k := k -1 ;
y := y*z ;
end
{(0 <= k ) and ( y * zk = xn )}
Cach 1: Dung he tien e Hoare.
+ Bc 1 : Xay dng lkc hp ly.
at I(y,z,k) ( 0 <= k) and (y*zk = xn )
ac ta co dang :
{(0 < k ) and I(y,z,k)}
if even(k) then begin
k := k div 2 ;
z := z*z ;
end
else begin
k := k -1 ;
y := y*z ;
end
{I(y,z,k)}
Chen cac khang nh trung gian (da vao tien e gan cua Hoare)
{(0 < k ) and I(y,z,k)}
if even(k) then {even(k) and (0 < k ) and I(y,z,k)}
begin
{ I(y ,z*z , k div 2 ) }
k := k div 2 ;
{ I( y , z*z , k ) }
z := z*z ;
end;
{I(y,z,k)}
else
{(not even(k)) and (0 < k ) and I(y,z,k)}
begin
{ I(y*z ,z , k 1) }
k := k -1 ;
{ I(y*z , z , k ) }
y := y*z ;
end
{I(y,z,k)}
Bo i cac khang nh trung gian tam thng (da vao luat tuan t cua Haore) ta co
lkc hp ly :
{(0 < k ) and I(y,z,k)}
if even(k) then {even(k) and (0 < k ) and I(y,z,k)}

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 90 -

{ I(y ,z*z , k div 2 ) }


begin k := k div 2 ;
z := z*z ;
end
{I(y,z,k)}

else
{(not even(k)) and (0 < k ) and I(y,z,k)}
{ I(y*z ,z , k 1) }
k := k -1 ;
y := y*z ;
{I(y,z,k)}
+ Bc 2: Chng minh lc o kc ung.
Cac cap khang nh ng lien nhau xuat hien trong lc o :
{even(k) and (0 < k ) and I(y,z,k)} { I(y ,z*z , k div 2 ) } (a)
va {(not even(k)) and (0 < k ) and I(y,z,k)} { I(y*z ,z , k 1) }(b)
Cac ham y tng ng can phai chng minh ung :
{even(k) and (0 < k ) and I(y,z,k)} ==> { I(y ,z*z , k div 2 ) } (a*) ( kiem
chng ? )
va
{(not even(k)) and (0 < k ) and I(y,z,k)} ==> { I(y*z ,z , k 1) }(b*) ( Kiem
chng ? )
T (a*) va (b*) ta suy ra ieu phai kiem chng.
Cach 2: Dung he tien e Dijkstra.
- Bc 1 : Xay dng lkc hp ly.
at I(y,z,k) ( 0 <= k) and (y*zk = xn )
S1 begin k := k div 2 ; z := z*z ; end ;
S2 begin k := k -1 ; y := y*z ; end ;
B even(k)
ac ta co dang :
{(0 < k ) and I(y,z,k)}
if B then S1 else S2
{I(y,z,k)}
+ Tnh WP(if B then S1 else S2 , I(y,z,k) )
( B ==> WP(S1 , I(y,z,k) ) ) and (not B ==> WP(S2 , I(y,z,k) ) )
( danh cho ngi oc )
+ Chen khang nh WP(if B then S1 else S2 , I(y,z,k) ) vao ac ta theo
tien e chon cua Dijkstra ta c lkc hp ly dang :
{(0 < k ) and I(y,z,k)}
{ WP(if B then S1 else S2 , I(y,z,k) ) }
if B then S1 else S2
{I(y,z,k)}
- Bc 2 : Chng minh lkc ung.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 91 -

Cap khang nh ng lien nhau trong lkc la :


{(0 < k ) and I(y,z,k)} { WP(if B then S1 else S2 , I(y,z,k) ) }
Ta can chng minh tnh ung cua ham y tng ng :
{(0 < k ) and I(y,z,k)} ==> { WP(if B then S1 else S2 , I(y,z,k) ) } (*)
( CM * danh cho ngi oc )
T (*) suy ra ieu phai kiem chng.
d) Kiem chng khi oan chng trnh co cha lenh lap while B do S.
Cach th 1: S dung he tien e Dijkstra.
- Bc 1 : Xay dng WP(While B do S ) va chen vao trc lenh lap .
. . . . . . { WP(while B do S } while B do S . . . . . .
- Bc 2: Xay dng lkc hp ly t lkc tren.
- Bc 3 : Chng minh tnh ung cua cac ieu kien can kiem chng.
Cach th 2 : S dung he tien e Hoare.
- Bc 1 : Phat hien bat bien I cua vong lap va chen cac khang nh trung
gian tng ng vao trc gia va sau lenh lap ( tien e Haore) .
{(Invariant) I}
while B do
{I and B} S {I}
{I and not B }
- Bc 2. Xay dng lkc hp ly t lkc tren.
- Bc 3 : Chng minh tnh ung cua cac ieu kien can kiem chng .
Bc 4 : Chng minh lenh lap dng .
V du : Kiem chng ac ta :
{ 0 <= n }
y := 1 ; z := x ; k := n ;
while (0 <> k ) do
begin
k := k -1 ; y := y*z
end
n
{y = x }
Biet bat bien cua vong lap : I(y,z,k) ( k >= 0 ) and ( y*z = xn )
Bai giai theo cach 1:
Da vao he Hoare ta xay dng lkc chi tiet xuat phat t ieu kien au , ieu kien
cuoi va bat bien .
{0 <= n}
{I(1,x,n)}
y := 1 ;
{I(y,x,n)}
z := x ;
{I(y,z,n)}

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 92 -

k := n ;
{ I(y,z,k)}
while (0 <> k ) do begin
{I(y,z,k) and (k <> 0 )}
{I(y*z,z,k-1)}
k := k -1 ;
{I(y*z,z,k)}
y := y*z ;
{I(y,z,k)}
end
{I(y,z,k) and (k = 0 )}
{y = xn }
Bo i cac khang nh trung gian tam thng ta co lcm hp ly dang :
{0 <= n}
{I(1,x,n)}
y := 1 ;
z := x ;
k := n ;
{ I(y,z,k)}
while (0 <> k ) do
begin
{I(y,z,k) and (k <> 0 )}
{I(y*z,z,k-1)}
k := k -1 ;
y := y*z ;
{I(y,z,k)}
end
{I(y,z,k) and (k = 0 )}
{y = xn }
Cac ieu kien can kiem chng la :
(0 <= n ) ==> I(1,x,n)
I(y,z,k) and (k = 0 ) ==> y = xn .
I(y,z,k) and (k <> 0 ) ==> I(y*x,z,k-1)
Thay I(y,z,k) (0 <= k) and ( y * z k = xn ) ba kckc tren se tr thanh :
(Phan chuan b) ( 0 <= n ) ==> (1*xn = xn )and (0 <= n ) (hien nhien )
(Phan ket thuc lap) ( y * zk = xn ) and (0 <= k ) and (k = 0 )==> y = xn (hien nhien)
(Phan than vong lap) ( y * zk = xn ) and (0 <= k ) and (k <> 0 )
==> ((y*z)*zk-1 = xn ) and (0 <= k -1)
( y * zk = xn ) and (0 < k )
==> (y*zk = xn ) and (0 <= k -1) (hien nhien )

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 93 -

3. Tap toi tieu cac ieu kien can kiem chng.


Mot lkc ay u trong o moi lenh eu c kem gia hai khang nh ro rang la
chi tiet qua mc. Thc ra s dung tri thc cua ta ve cac k yeu nhat cua nhng lenh
khac lenh lap, ta co the mo ta mot giai thuat e san sinh ra mot chng minh hoan chnh
theo kieu Hoare ve tnh ung co ieu kien cua oan lenh S da tren ieu kien au P
va ieu kien cuoi Q, vi gia nh la moi vong lap while trong S c cung cap kem
theo bat bien cua no.
Ve nguyen tac, mot bo chng minh nh ly t ong (theorem prover), vi kha nang
kiem chng cac ieu kien co dang P ==> R co the c dung e chng minh mot cach
t ong tck cua 1 oan chng trnh . iem quan trong ma ta rut ra t cac phan a
trnh bay la: phan cot loi trong mot chng minh ve tck la viec phat hien ra cac bat
bien va sau o viec kiem chng cac ieu kien ham y nham s dung luat he qua.
Chung ta khong mo ta giai thuat e san sinh cac chng minh kieu Hoare, thay vao
o, ta se tru tng hoa t no qua trnh san sinh ra tap hp cac ieu kien can kiem
chng.
Xet mot oan CT bat ky vi cac k P va kc Q. Ta se xay dng t P, S va Q bang
quy nap mot ieu kien au yeu nhat da vao S va Q, ky hieu la pre(S,Q), va hai tap
hp cac ieu kien can kiem chng V'(S,Q) and V(P,S,Q) nh sau :
1. Neu S la lenh gan x := bt th pre(S,Q) la WP(S,Q) va V'(S,Q) rong.
Tc la : pre( x := bt ,Q(x) ) ) WP(x := bt ,Q(x)) Q(bt) va V'(x := bt ,Q) .
2. Neu S co dang S1 ; S2 th pre(S,Q) la pre(S1, pre(S2,Q)) va V'(S,Q) la hoi
cua
V'(S2 , Q) va V'(S1 ,pre(S2 ,Q)).
Tc la :
pre(S1; S2 , Q) pre(S1, pre(S2,Q))
Va V'(S1; S2 ,Q) V'(S2 , Q) V'(S1 ,pre(S2 ,Q)).
3. Neu S co dang if B then S1 else S2 th pre(S,Q) la :
(B and pre(S1,Q)) or (not B and pre(S2,Q)) va V'(S,Q) la hoi cua V'(S1,Q) va V'(S2,Q).
Tc la : pre(if B then S1 else S2 ,Q) (B and pre(S1 ,Q)) or (not B and pre(S2
,Q))
Va V'(if B then S1 else S2 ,Q) V'(S1,Q) V'(S2,Q).
4. Neu S co dang while B do S1 va I la bat bien cua vong lap th pre(S,Q) la I, va
V'(S ,Q) la hoi cua V(I and B , S1 ,I) va tap hp ch gom mot ieu kien I and not B
==> Q.
Tc la : pre(S,Q) I va V'(S ,Q) V(I and B , S1 ,I) { I and not B ==> Q }.
5. Trong moi trng hp V(P,S,Q) la hoi cua V'(S,Q) va tap hp ch gom mot
ieu kien P ==> pre(S,Q).
Tc la : V(P,S,Q) V'(S,Q) { P ==> pre(S,Q) }.
Cac chc nang cua pre(S,Q) , V'(S, Q) ,va V(S,P,Q) trong qua trnh nay c mo ta
bi cac menh e sau :
(P1) Neu moi kckc trong tap hp V(S,Q) eu ung th S la ck da tren k
pre(S,Q) va kc Q. Tc la : { pre(S,Q) } S { Q } ung co ieu kien.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 94 -

(P2) Neu moi kckc trong tap hp V(P,S,Q) eu ung th S la ck da tren k P


va kc Q. Tc la : { P } S {Q } ung co ieu kien.
Tnh chat (P1) co the c chng minh bang quy nap tren kch thc cua S, ay
kch thc cua S co c bang cach em la 1 cho moi lan xuat hien cac ky hieu ':=',
';', 'if', 'while' trong S. Tnh chat (P2) la mot he qua trc tiep cua (P1).
Chu y rang pre(S,Q) khac vi wp(S,Q) ch khi co lenh while. ieu nay xac nhan
la trong trng hp tong quat, khong co kha nang tao lap mot cong thc ong cho
k yeu nhat cua lenh while va nhan manh tam quan trong cua viec ghi nhan nhng
tnh chat bat bien trong cac su lieu chng trnh.
V du 1 : Vi ac ta gom :
Day lenh tuan t S :
S tg := tg + a[k] ; k := k+1 ;
kc
Q I(k, tg) (tg = S(i : 0 <= i < k : a[i]))
k
P I(k,s) and (k <> n )
Ta ap dung cac bc 1 va 2 c :
V'(S, I(k, tg)) la rong .
pre(S, I(k, g)) la I(k+1, tg+a[k])
tap cac kckc
V(P,S,Q) V(I(k,tg) and k <> n, S, I(k, tg)) cha mot ieu kien la
I(k,tg) and k <> n ==> I(k+1, tg+a[k])
Tc la : ( tg = S(i : 0<= i< k : a[i])) and (k <> n )
==> tg + a[k] = S( i: 0 <= i <= k+1 : a[i]) (1)
Vidu 2 : Xet ac ta oan chng trnh tnh tong cac phan t cua mot array
{0 <= n}
k := 0 ; tg := 0 ;
{(Invariant ) I(k,tg) } { tg = S(i: 0<= i <k : a[i])}
while (k <> n ) do
begin
tg := tg + a[k] ; k := k+1 ;
end
{tg = S(i: 0 <= i < n : a[i])}
Tach oan chng trnh thanh 2 nhom :
+ Nhom lenh tuan t :
So k := 0 ; tg := 0 ;
+ Lenh while : W while k <> n do begin
tg := tg + a[k] ; k := k+ 1
end
Theo quy tac 2, ta can tnh pre(W,Q) va V'(W,Q) vi
Q tg = S(i: 0 <= i < n : a[i])
Bay gi, dung quy tac 4,
pre(W,Q) I(k,tg) tg = S(i : 0 <= i < k : a[i])
Cung vay V'(W,Q) bao gom V(I(k,tg) and k <> n, S1, I(k,tg)) vi S1 la nhom lenh
trong vong lap, va ieu kien

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 95 -

I(k,tg) and (k = n )==> tg = S(i : 0<= i <n : a[i]) (2)


Cuoi cung, ta co the tm c
pre(So, I(k,tg)) 0 = S(i: 0 <= i <0 : a[i])
va tap hp cac kckc cho So bao gom ch mot ieu kien
( 0 <= n) ==> pre(So, I(k,tg))
(3)
Nh vay, co 3 kckc cho CT, o la cac ieu kien (1), (2), (3).
-----------------------------------------

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 96 -

PHU LUC

MOT SO KIEN THC VE LOGIC


I. LOGIC TOAN.
Trong i song hang ngay, ngi ta can co nhng ly luan e t cac ieu kien c
biet hay c gia nh (cac tien e - premises) co the suy ra cac ket luan (conclusion)
ung. Hay xet 2 ly luan sau :
Ly luan (1) : - Cac tien e :
+ Neu hom nay tri ep th toi i chi.
+ Neu toi i chi th hom nay ve tre .
- Ga thiet : Hom nay tri ep .
- ket luan : Hom nay toi se ve tre .
Ly luan (2) : - Cac tien e :
+ Neu hom nay rap hat khong ong ca thi toi se xem phim.
+ Neu toi xem phim th toi se khong soan kp bai .
- Ga thiet : Hom nay rap hat khong ong ca .
- ket luan : Hom nay toi se khong soan kp bai.
Hai ly luan tren la ung va co cung dang ly luan. Chung ung v co dang ly luan
ung, bat ke y ngha ma chung e cap en.
Con ly luan sau :
Ly luan (3) : - Cac tien e :
+ Neu tri ep th toi i chi.
+ Neu toi i chi th toi se ve tre.
- Gia thiet : Hom nay toi ve tre.
- ket luan : Hom nay tri ep .
la ly luan sai va moi ly luan dang nh vay eu sai .
Logic toan hoc quan tam en viec phan tch cac cau (sentences), cac menh e
(propositions) va chng minh vi s chu y en dang (form) lc bo i s viec cu the.

II. LOGIC MENH E.


1. Phan tch
Phan tch ly luan (1) ta thay no s dung cac menh e c s sau :
. Hom nay tri ep
. Toi i chi
. Toi se ve tre.
Moi menh e (proposition) la mot phat bieu ung (true) hay sai (false).

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 97 -

Bieu th tng trng lan lt cac menh e tren bi cac ten A, B, C, ta ghi lai dang
ly luan cua (1) nh sau :
. Neu A th B
(4)
. neu B th C
Co A ket luan c : C
ay cung la dang ly luan cua (2) .
Thng mot phat bieu se gom nhieu phat bieu nho noi ket vi nhau bang cac lien
t "va" , "hay" , "v vay " ,"ket qua la" ...
Mot menh e n (simple proposition) la menh e khong cha menh e khac.
Mot menh e phc (compound proposition) la menh e c tao thanh t hai hay
nhieu menh e n .Viec noi ket nay c thc hien bi cac lien t logic.

2. Cac lien t logic.


ky hieu
and
or
not
==>
<==>

y ngha la
va
hay
khong
neu...th...
...neu va ch neu...

Vi cac ky hieu nay, (4) co the c viet nh sau:


[ ( A ==> B ) and ( B ==> C ) and A ] ====> C
Neu A th B va neu B th C va A Th suy ra C
Tc la menh e phc hp [(A ==> B) and (B ==> C) and A] ==> C .
Noi chung mot ly luan se c chuyen thanh mot menh e phc vi dang :
[ (tien e 1) and (tien e 2 ) and ... ] ====> ket luan .

3. Yngha cua cac lien t Logic. Bang chan tr.


Cac lien t noi ket cac menh e thanh phan tao nen menh e mi, ma tnh ung
sai cua no c xac nh t tnh ung sai cua cac menh e thanh phan theo qui luat
c khai quat trong cac bang gia tr ung sai sau ay :

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 98 -

p and q

p or q

p ==> q

F
F
T
T

F
T
F
T

F
F
F
T

F
T
T
T

T
T
F
T

p <==> q
T
F
F
T

P not P
-----------T
F
-----------F
T

4. Ly luan ung.
Mot ly luan co the c bieu dien bi mot menh e phc trong o cac tien e c
noi ket vi nhau bang lien t and va cac tien e noi ket vi ket luan bang lien t
==>
nh ngha : Mot ly luan la ung (valid) neu va ch neu vi moi bo gia tr (ung,
sai) co the cua cac menh e thanh phan, no luon luon ung (true)
V du 1: Ly luan (4) ung v vi moi kha nang cua A,B,C menh e :
[ (A ==> B) and (B ==> C) and A] ==> C eu co ga tr ung.
Bang chan tr sau khang nh ieu o:

F
F
F
F
T
T
T
T

F
F
T
T
F
F
T
T

C
F
T
F
T
F
T
F
T

[ (A ==> B) and (B ==> C) and A ] ==> C


[
[
[
[
[
[
[
[

T
T
T
T
F
F
T
T

and
and
and
and
and
and
and
and

T and
T and
F and
T and
T and
T and
F and
T and

F ] ==> F
F ] ==> T
F ] ==> F
F ] ==> T
T ] ==> F
T ] ==> T
T ] ==> F
T ] ==> T

(T)
(T)
(T)
(T)
(T)
(T)
(T)
(T)

V du 2: Ly luan (3) la sai .


at : A : hom nay tri ep
B : Toi i chi
C : Toi ve tre
Dang ly luan (3) la : [(A ==> B) and (B ==> C) and C ] ==> A
la sai v vi A, B False , C true th menh e :
[(A ==> B) and (B ==> C) and C ] ==> A nhan ga tr False

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

B
F

- 99 -

[(A ==> B) and (B ==> C) and C ] ==> A

[ T

and

and T ] ==> F

5. Tng ng (Equivalence).
a) nh ngha:
Hai menh e P va Q c goi la tng ng nhau (ky hieu P Q), neu menh e
P <==> Q luon nhan gia tr ung (True) vi moi kha nang ung sai cua cac menh e
thanh phan .
Ta co the chng minh mot s tng ng bang cach lap bang chan tr .
V du: chng minh : p and q not( not p or not q ).

p
F
F
T
T

q
F
T
F
T

Bang chan tr :
p and q
not ( not p
F
not ( T
F
not ( T
F
not ( F
T
not ( F

or not q )
or T )
or
F )
or T )
or F )

b) Mot so tng ng hu ch.


( hay chng minh chung bang cach lap bang chan tr)
Cac hang : P or true true
P or false p
p and true p
p and false false
true ==> p p
false ==> p true
p ==> true
true
p ==> false not p
Luat loai tr trung gian :
p or not p true
Luat ve mau thuan
:
p and not p false
Luat phu nh
:
not not p
p
Luat Ket hp
:
p or (q or r) (p or q) or r
p and (q and r) (p and q) and r
p <==> (q <==> r) (p <==> q) <==> r
q and p
Luat giao hoan
:
p and q
p or q
q or p

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

luat phan phoi

Luat ong nhat

Luat De Morgan

Luat ham y

luat neu va ch neu

- 100 -

p <==> q q <==> p
p and (q or r) (p and q) or (p and r)
p or (q and r) (p or q) and (p or r)
p or p p
p and p p
not (p or q) not p and not q
not (p and q) not p or not q
p ==> q not p or q
p ==> q not q ==> p
(p and q) ==> r ) (p ==> (q ==> r) )
p <==> q ( (p ==> q) and (q ==> p) )
p <==> q ((p ==> q) and (not p ==> not q))
p <==> q ((p and q) or (not p and not q))

6. Tnh thay the, tnh truyen va tnh oi xng.


Khi 2 menh e P va Q la tng ng th ta co the thay the cai nay bi cai kia
trong mot menh e bat ky ma khong lam sai tr cua no.
Ta co the chng minh tnh chat cua mot menh e bang cach bien oi no thanh cac
menh e tng ng.
V du: ta chng minh rang (p and (p ==> q)) ==> q la mot ly luan hp logic bang
cach bien oi tng ng.
(p and (p ==> q)) ==> q (p and (not p or q)) ==> q (ham y)
((p and not p) or (p and q)) ==> q (phan phoi)
(false or (p and q)) ==> q (mau thuan)
(p and q) ==> q (hang)
not (p and q) or q (ham y)
(not p or not q) or q (De Morgan)
not p or (not q or q) (ket hp)
not p or (q or not q) (giao hoan)
not p or true
true
Quan he "tng ng" gia cac menh e co tnh :
+ Phan xa : p p
+ oi xng : neu p q th ta cung co q p
+ Bac cau : neu p q va q r th ta cung co p r.

7. Bai toan suy dien logic.


Xet bai toan : Tren hon ao co hai loai ngi sinh song : quan t va tieu nhan.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 101 -

Quan t luon noi that va tieu nhan luon noi doi. Mot ngi hoi mot dan c A tren
ao : "co phai anh la mot quan t ?". A ap :"neu toi la quan t th toi thua tien anh
". Hay chng minh rang : A nhat nh phai thua tien.
Ta mo hnh hoa bai toan nh sau :
at cac menh e P : A la quan t. Q : A phai tra tien.
Ket luan phai chng minh la Q.
Khao sat gia thiet cua bai toan:
+ Menh e khang nh : " A la tieu nhan " la not P
+ A phat bieu mot menh e S. gia thiet cho biet : Neu A la quan t th S phai
ung tc la : P ==> S
+ Neu A la tieu nhan th S phai sai : not p ==> not s
+ S la mot ham y : " Neu A la quan t th A phai tra tien".
Ta bieu th S bi : p ==> q
Nh vay tien e la : (P ==> S) and (not P ==> not S)
theo luat tng ng (k) ta co the viet la : P <==> S.
Bai toan c phat bieu di dang thuan tuy logic nh sau :
Cho tien e P <==> (P ==> Q)
Co the suy dien c ket luan Q khong ?
Ta se xac lap rang (ly luan tren la ung) menh e (P <==>(p ==> Q)) ==> Q
la ung vi moi bo gia tr ung sai cua cac menh e thanh phan .
Co hai cach :
(a) Dung bang gia tr ung sai .
P
Q
( P <==> ( P ==> Q ) ) ==> Q

T
T
( T <==>
T
) ==> T
F
T
( F <==>
T
) ==> T
T
F
( T <==>
F
) ==> F
F
F
( F <==>
T
) ==> F
(b) Dung cach thay the bang cac menh e tng ng .
P <==> (P ==> Q) P <==> (not P or Q)
(ham y)
[(P and (not P or Q)] or [not P and not (not P or Q )]
(tng ng)
ma not P and not (not P or Q) not P and (not not P and not Q)

not P and ( P and not Q)

(not P and P) and not Q

false and not Q


false
va P and (not P or Q)
(P and not P) or (P and Q)

false or (p and Q)
P and Q
Nh vay P <==> (P ==> Q) P and Q
T o [P<==>(P ==>Q)] ==> Q (P and Q) ==> Q

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 102 -

not (P and Q) or Q
(not P or not Q) or Q
not P or (not Q or Q)
not P or true
true
Vi cac bai toan ch lien quan en t menh e nh trong v du tren, cach dung bang
chan tr n gian hn . Nhng nen co gang s dung cach bien oi tng ng, bi v
ap dung thc tien cua no la ln hn nhieu.

8. Cac luat suy dien (rules of inference).


Tng t nh bai toan muc tren, trong nhieu lnh vc, ngi ta can phai xuat phat
t mot tap hp cac tien e, va tm cach khang nh mot ket luan co phai la he qua cua
cac tien e o khong ?
Cach giai quyet la ngi ta xay dng cho lnh vc o mot he thong cac tien e
(axioms), tc la cac khang nh c xem nh ng nhien ung (valid) va mot tap
hp cac luat suy dien (rules of inference tap cac qui tac cho phep xay dng cac
khang nh ung mi xuat phat t cac tien e va cac khang nh a co ) .
Trong khung canh nay, mot khang nh c thiet lap nh vay c goi la mot nh
ly . Mot chng minh hnh thc (formal proof) la mot day co th t cua cac khang nh,
ma moi khang nh hoac la tien e, hoac c suy dien t cac khang nh i trc,
bang mot luat suy dien nao o.
a) He luat suy dien cua Gentden cho logic menh e. Trong o moi luat suy dien se
c viet di dang :
S1 , S2 , . . . ,Sn
S
dien ta neu a co cac menh e dang S1, S2,..., Sn th ta co the suy ra S
Cac luat them vao
and_I

or_I

==>_I

p, q
_______
p and q

Cac nh luat loai bo


and_E

or_E
p
______
p or q

q
______
p or q

[p] q
______
p ==> q

not_I

Tran Hoang Tho

==>_E

p and q
_______
p

p and q
_______
q

p or q , [p] r , [q] r
________________
r
p , p ==> q
__________
q

not_E

Khoa Toan - Tin

Ky thuat lap trnh nang cao

[p] false
_______
not p
<==>_I

p ==> q , q ==> p
_______________
p <==> q

- 103 -

p ,not p
false
not not p
_______
____
_______
false
p
p
<==>_E
p <==> q
p <==> q
_______
_______
p <==> q
p <==> q

Cac luat c chia lam cac luat them va cac luat loai bo : Cac luat them vao cho
phep suy ra mot khang nh mi trong o co xuat hien them mot lien t logic. Con cac
luat loai bo th loai bo mot lien t logic.
Luat and_I noi rang neu co the chng minh c p va q th ta suy c ra p and q .
Luat and_E noi rang neu chng minh c p and q th ta suy c tng thanh
phan p va q .
Luat or_E s dung 3 tien e : a co p or q , neu gia nh p ung th chng minh
c r , neu gia nh q ung th chng minh c r. khi o luat nay cho phep ket
luan r ung. ay chnh la phan tch theo trng hp (case analysis) van thng c
dung trong ly luan hang ngay .
Luat ==>E thng c goi la modusponens (tam oan luan). No noi rang co q
neu chng minh c p va p ==> q .
Luat not_I noi rang neu xuat phat t gia nh p ma co mau thuan th cho ta ket
luan not p .
Cung vi luat nay , can bo sung them luat ve loai tr trung gian true
p or not p
c phat bieu nh tien e (tc la luat suy dien khong can tien e).

III. LOGIC TAN T.


1. Khai niem
Trong logic menh e , moi menh e co gia tr xac nh hoac la T (ung) hoac la
F (sai) . Trong thc te ngi ta hay gap va can lam viec vi nhng khang nh ma tnh
ung sai cua no phu thuoc vao cac oi tng thc s c thay the .
V du xet phat bieu sau : x la so nguyen to .
Goi menh e nay la P(x), ay la mot menh e ma tnh ung sai cua no ch
c xac nh hoan toan khi ta "the" mot gia tr hang cho "bien" x.
V du P(5) la T (dung) , P(6) la F (sai) .
Trong logic tan t , ngi ta phat bieu cac menh e bang cach s dung nhng
khai niem sau:

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 104 -

a) Cac hang: la cac oi tng cu the ton tai trong lnh vc ma ngi ta ang
khao sat .
V du : + Cac hang so 5,6,10.2,...
+ Cac hang logic T(ung) , F(sai)
Trong trng hp tong quat ,ngi ta thng ai dien cho cac hang bang cac
ch cai viet thng o au bang t vng: a,b,c...,a1 ,b1 , c1 ,...
b) Cac bien (Variable): la cac ten tng trng . Moi bien c an nh mot
mien gia tr la tap cac oi tng ma no co the nhan.
V du:
+ Cac bien so nguyen n, j , k ,. . . vi cac tap tr la cac tap con cua
tap so nguyen Z .
+ Cac bien so thc x, y, z, . vi cac tap tr la cac tap con cua tap so
thc R .
+ Cac bien vec t V, W, . . . vi cac tap tr la cac tap con cua tap tch
eCac
R X R X R X ... X R ( Rn )
Thng dung cac ch cai viet thng cuoi bang t vng e bieu th cac bien :
x,y,z,...,x1 ,y1 ,z1 ,... T day ve sau ,moi bien neu khong c noi ro eu c xem la
bien nguyen .
c) Cac toan t (Operotors , hay ham (functions)) la cac anh xa t cac tap hp oi
tng vao cac tap hp oi tng trong lnh vc ang khao sat. Ta se thng dung
cac toan t toan hoc sau : + , - , * , / , div , mod
Mot toan t co the co mot hay nhieu toan hang (ngoi) .
V du :
+ Toan t "oi" (bieu th bi -) la mot ngoi : -x
+ Toan t - ,+, - , * , / , div, mod la hai ngoi : 2 + 3 , x * y
d) Cac ham logic hay cac tan t (predicates) . o la cac anh xa t tap hp cac
oi tng vao tap boolean {true,false}, ta se thng dung cac tan t la cac quan he
toan hoc nh sau :
+ Cac quan he so sanh : = , <> , > , >= , < , <=
+ Cac quan he tap hp : , , . . .
+ Cac quan he khac : odd(x) kiem tra xem x co le khong ?
even(x) kiem tra xem x co chan khong ?
e) Cac lien t logic : ay la cac toan t tren tap boolean ma ta gap trong logic
menh e: and , or , not , ==> , <==>.
f) Cac lng t pho dung va ton tai (se noi ro muc sau)
Cac bien logic , cac tan t trong o co cha cac hang hay bien hay ham c goi
la cac cong thc c s (formule elementaire)
V du : Cac cong thc c s
- Bien logic : hom-nay-tri-ep , toi-ve-luc-8-gi ,...
- tan t
: 5>2
x>5
x+5>y-3

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 105 -

T cac cong thc c s nay,ngi ta co the thanh lap cac cong thc phc hp
(formule complexe) bang cach noi ket chung dung cac lien t logic va cac lng t
. Moi cong thc phc hp co the xem la mot tan t mi.
V du : Cong thc phc hp
a) Hom_nay_tri_ep and x > y
b) x > y ==> x > z

2. Cac lng t logic


Ngoai cac lien t logic , ngi ta co the tao ra cac cong thc phc hp bang cach
gan vi cac cong thc cac lng t logic .
a) Lng t pho dung.
e noi rang moi phan t cua mot tap eu co tnh chat P ta dung lng t pho
dung ( oc la vi moi ) .
V du e noi rang tat ca cac phan t cua array a la khong am ta viet :
( i : 0 <= i < n : a [i] >= 0)
Bieu thc nay c oc nh sau :
(i
Vi moi (so nguyen) i
: 0 <= i < n
sao cho i nam gia 0 va n-1
: a[i] >= 0
th a [i] la khong am
Dang chung : (danh sach bien : R : P)
Vi : R la tan t han che tap hp c xet trong khong gian nh bi danh sach
bien , P la tan t ma moi phan t trong tap c xet phai thoa.
Menh e pho dung ch ung khi moi phan t trong tap xac nh bi R eu thoa P.
V du : Cho a la array [0...n-1] of Integer
- Khang nh : "a [k] la phan t ln nhat trong array"
( i : 0 <= i < n : a [k] >= a [i] )
- Khang nh : "cac phan t cua a tao thanh cap so cong b,b+d, b+2d, . .
( i : 0 <= i < n : a [i] = b + i*d)
- Khang nh : "a dc sap theo th t khong n gian" :
(i,j : 0 <= i <n and 0 <= j <n : i <j ==> a[i] <= a [j])
neu R = true , ta co the bo qua : (d :: 0 = d*0)
b) Lng t ton tai.
e khang nh co mot phan t cua tap hp co tnh chat P ta dung lng t ton tai
( oc la: co mot hoac ton tai ).
V du : e khang nh co ga tri x trong array a ta viet :
(i : 0 <= i < n : a [i] = x)
Bieu thc nay c oc nh sau :
(i
ton tai mot (so nguyen) i
: 0<= i < n
sao cho i nam gia 0 va n-1

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 106 -

: a[i] = x
thoa ieu sau a[i] bang x
Dang chung la : ( danh sach bien : R : P )
Menh e ton tai ch ung khi co mot phan t trong mien xac nh bi R thoa P.
khi R = true th ta co the viet : (danh sach bien :: P)
V du : cho hai array a va b
- Khang nh :"trong array a khong co th t tang"
( i : 0 <= i < n - 1 : a [i] >a [i+1])
- Khang nh : "co t nhat mot phan t cua a ln hn moi phan t cua b"
( i : 0 <= i <n : (j : 0 <= j < n : a[i] > b[j] ))
(m :: n = 2*m)
- Khang nh "n la chan" :
c) Mot so tnh chat:
-

(i : R : P) (i :: R and P)
(i : R : P) not (i :: R and not P)
(i : R : P)
not (i : R : not P)

d) Cac bien t do va b buoc (free and band variables), phep the(substitution)


Trong bieu thc Q(i: r(i) : p(i)) ( ay ta xet Q la hay ) bien i c goi
la b buoc (band) vao lng t Q .
Nhng xuat hien cua mot bien i khong b buoc vao mot lng t nao o trong
bieu thc R,c goi la t do (free) trong R.
V du trong bieu thc : (d : p = q*d)
cac bien p va q la t do , con bien d la b buoc . Cac bien b buoc ch ong vai tro
"gi cho" va co the c oi ten , neu ten nay khong trung vi mot bien t do a co.
V vay , bieu thc tren tng ng vi :
(m :: p = q*m) nhng hoan toan khac vi : (p :: p = q*p)
Ve nguyen tac , mot ten bien co the va t do va b buoc trong cung mot bieu thc
.
V du :
Trong bieu thc ( 0<i ) and ( i : 0 <= i < n : a [i] = 0 )
xuat hien th nhat cua i la t do , con xuat hien con lai la b buoc.
Mac du y ngha cua bieu thc la ro rang nhng nen tranh v de gay nen lam lan .
Xet mot tan t cha bien t do .
(d :: p = q*d)
V du :
is-divisor(q)
Ta co the thay cac xuat hien t do cua mot bien bang mot bieu thc e c mot
tan t mi.
V du: the 2*q cho q ta se c tan t is-divisor(2*q) ma dang bieu thc cua no
(d :: p = (2*q)*d)
la :
is-divisor(2*q)
Chu y rang trong (d :: p = q*d) bien p cung t do , nhng v ta khong quan tam
en phep the cho p nen trong tan t is-divisor(q) ta ch neu q e giam bt i cac chi
tiet khong can thiet trong dien giai.

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 107 -

3. Tap hp va tan t.
Moi bien co the lay gia tr trong mot tap hp xac nh . Tap tr ma mot day cac
bien co the nhan c la tch Descarters cac tap tr cua tng bien .
ng vi mot tan t P(i), vi i la (danh sach) bien t do ma moi phep the i bang
mot hang se cho gia tr ung hay sai , ta co mot tap hp tat ca cac ham ma phep the
i trong P cho gia tr ung .
ky hieu tap o la :
{ i : P(i) }
V du : { i : i >= 0 } "tap cac (so nguyen) i sao cho i khong am "
{ i,j : i < j }
"tap cac (so nguyen) i,j sao cho i nho hn j"
Ngc lai ng vi moi tap S , ta xay dng tan t ac trng cho S o la:
P(i) = ( i S )
Gia cac phep toan tap hp va cac phep toan logic co quan he chat che.
{ i : P(i) or Q(i) } { i : P(i) } U { i : Q(i) }
{ i : P(i) and Q(i) } { i : P(i) } { i : Q(i) }
Phan t trung hoa cua phep toan giao : tap vu tru (tch Descarters cua cac tap tr
ng vi cac bien trong danh sach bien) ng vi i chnh la: { i : true }
Phan t trung hoa cua phep toan hoi la :
{ i : false }

4. Cac lng t so hoc.


s dung y tng cua va ta at them cac lng t so hoc e dn gian hoa
cach viet va de dang ap dung cac phep bien oi .
Moi lng t sau se bieu th mot ham so hoc :
- Lng t tong S (sumation)
S( i: r(i): f(i) ) chnh la
f (i ) vi i chay tren tap hp thoa r(i)

- Lng t tch P (product)


P( i: r(i): f(i) ) chnh la

f (i )

vi i chay tren tap hp thoa r(i)

Qui c :
S( i: false: f(i) ) = 0
P( i: false: f(i) ) = 1
- Lng t MAX va MIN
MAX ( I: r(i): f(i)) la gia tr ln nhat cua f(i) trong cac i thoa r(i).
MIN ( I: r(i):f(i) ) la gia tr nho nhat cua f(i) trong cac i thoa r(i).
Qui c :
MAX ( i: false: f(i) ) = -
MIN ( i: false: f(i) ) =
- Lng t N
N ( i:r(i): P(i)) so gia tr i trong mien r(i) thoa P(i)
Tc la : N ( i: r(i): P(i)) = S(i: r(i) and p(i): 1)

Tran Hoang Tho

Khoa Toan - Tin

Ky thuat lap trnh nang cao

- 108 -

Moi lng t ma ta xet ngoai tr N la s khai quat cua cac phep toan hai ngoi
co tnh giao hoan va ket hp thanh phep toan tren mot tap bat ky.
V du :
S la khai quat cua phep cong ( + ), P la khai quat cua phep nhan ( * ).

Tran Hoang Tho

Khoa Toan - Tin

You might also like