You are on page 1of 110

TRNG AI HOC A LAT

F7G

GIAO TRNH

KY THUAT LAP TRNH


NANG CAO

TRAN HOANG THO

2002

Ky thuat lap trnh nang cao

-1-

MUC LUC
MUC LUC ............................................................................................................- 1 LI NOI AU ..................................................................................................- 3 PHAN I : MOT SO KIEN THC VE LOGIC ...................................................- 4 $1. Logic toan hoc . ..........................................................................................- 4 $2. Logic menh e (proposition logic)..............................................................- 4 I. Phan tch ....................................................................................................- 4 II. CAC LIEN T LOGIC. ...........................................................................- 5 III. Y NGHA CUA CAC LIEN T LOGIC . BANG CHAN TR ( TRUE
TABLE ). ......................................................................................................- 5 IV. LY LUAN UNG (valid argument) ....................................................- 6 V. TNG NG (Equivalence). ...........................................................- 8 VI. TNH THAY THE , TNH TRUYEN VA TNH OI XNG .........- 9 VII. BAI TOAN SUY DIEN LOGIC . ......................................................- 9 VIII. CAC LUAT SUY DIEN (rules of inference) . ................................- 11 IX. CHNG MINH HNH THC VA PHI HNH THC ..................- 13 $3.LOGIC TAN T . ....................................................................................- 14 I . KHAI NIEM .........................................................................................- 15 II. CAC LNG T LOGIC..................................................................- 16 III. TAP HP VA TAN T . ................................................................- 18 IV. CAC LNG T SO HOC . ............................................................- 18 $ 4 . BAI TAP .................................................................................................- 19 I. Bai tap logic menh e .............................................................................- 19 II. Bai tap logic tan t . ...............................................................................- 21 PHAN II
E QUY ....................................................................................- 23 $1 . KHAI NIEM E QUY .........................................................................- 23 I . M au ...................................................................................................- 23 II . Mo ta e quy cac cau truc d lieu .........................................................- 24 III . Chng trnh con e quy ......................................................................- 24 $ 2 . BAI TOAN E QUY ...........................................................................- 30 I . Cac bc can lam e giai mot bai toan bang e quy . ............................- 30 II . Mot so bai toan giai bang giai thuat e quy . .......................................- 31 $ 3. C CHE THC HIEN GIAI THUAT E QUY . ...................................- 38 $4. KH E QUY .........................................................................................- 41 I . Dan nhap ................................................................................................- 41 II . Cac trong hp kh e quy n gian bang cau truc lap . .................- 41 III . Kh e quy ham ARSAC . .................................................................- 47 IV . Kh e quy cho mot so dang thu tuc e quy thng gap . ...............- 51 $ 5 . BAI TAP ................................................................................................- 56 Phan III : KIEM CHNG CHNG TRNH..................................................- 61 $1 . CAC GIAI OAN TRONG CUOC SONG CUA MOT PHAN MEM .....- 61 $2. AC TA....................................................................................................- 62 I . ac ta bai toan :.....................................................................................- 62 II. ac ta chng trnh (TCT). .................................................................- 63 -

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

-2-

III. ac ta oan chng trnh : ....................................................................- 64 $3. NGON NG LAP TRNH ........................................................................- 66 $4 . CHNG MINH TNH UNG CUA CHNG TRNH.........................- 66 I. Ky hieu { P } S {Q}...............................................................................- 66 II. He luat Hoare ( Hoares inference rules)...............................................- 67 III. Kiem chng oan chng trnh khong co vong lap :.............................- 72 IV . Kiem chng oan chng trnh co vong lap . ......................................- 75 $5. CAC PHEP BIEN OI TAN T . .......................................................- 82 I. WP...........................................................................................................- 82 II . Tnh chat cua WP . ................................................................................- 83 III. Toan t gan ( tien e gan ) ...................................................................- 84 IV. Toan t tuan t ....................................................................................- 84 V. Toan t ieu kien . .................................................................................- 85 VI. Toan t lap while .................................................................................- 86 $6. LC O CHNG MINH VA CAC IEU KIEN CAN KIEM CHNG. - 89
I . Dan nhap . ..................................................................................................- 89 II. Kiem chng tnh ung da vao lc o chng minh hp ly . .................- 90 III. Tap toi tieu cac ieu kien can kiem chng . ........................................- 95 TAI LIEU THAM KHAO ............................................................................. - 108 -

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

-3-

LI NOI AU
Cuon sach c bien soan theo chng trnh mon hoc : Ky Thuat Lap Trnh Nang
Cao vi 4 n v hoc trnh ,nham lam tai lieu tham khao cho mon hoc.
Giao trnh gom 3 phan :
Phan I : cac kien thc chung ve Logic .
Bao gom nhng kien thc then chot ve logic menh e va logic tan t c s
dung trc tiep trong 2 phan sau cua giao trnh . Giao trnh cung cap mot tai lieu co
ong ve chu e o e sinh vien da vao o on lai cac tri thc toan can thiet khi bat
au nghien cu noi dung chnh cua mon hoc . Thay giao nen co nhng hng dan
on tap thch hp cho phan nay nham tao ieu kien thuan li e truyen at cac noi
dung mi cua giao trnh.
Phan II : e Quy
Trnh bay noi dung ve chu e lap trnh theo phng phap e quy :
- Khai niem e quy va vai tro cua no trong lap trnh.
- Cach xay dng mot giai thuat theo phng phap e quy.
- C che thc hien mot giai thuat e quy.
- Kh e quy.
Phan III : 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 bai toan kiem chng trong lap trnh.
- Cac phng phap dung e kiem chng
- He luat cua Hoare va nhng ap dung cua no vao kiem chng.
- He luat Dijkstra va nhng ap dung cua no vao vao kiem chng.
- Dang tong quat cua bai toan kiem chng va phng phap thc hien - cac
lc o kiem chng va tap toi thieu cac ieu kien can kiem chng.
Cung vi nhng trnh bay ly thuyet tong quat , ngi viet co gang a vao mot so
thoa ang cac v du minh hoa nham giup ngi hoc tm hieu ban chat cua cac khai
niem mi va tap lam quen vi nhng cach s dung cac ket qua mi . Khi tham khao
cac ban nen co gang oc va hieu cho c cac v du nay .
V trnh o con nhieu han che chac chan giao trnh con nhieu khiem khuyet . Rat
mong tat ca moi ngi s dung chan thanh gop y . Tac gia se biet on va tran trong
tat ca cac y kien ong gop .
Tac ga chan thanh cam n cac ban ong nghiep trong khoa Toan _ Tin a ong
gop nhieu y kien cho viec hnh thanh cau truc chi tiet cua noi dung mon hoc , chan
thanh cam n thac sy Vo Tien a ong gop nhieu y kien quy bau giup chnh ly
nhieu khiem khuyet trong ban thao .
a Lat ngay 01 - 01 - 1999
TRAN HOANG THO

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

-4-

PHAN I : MOT SO KIEN THC VE LOGIC

$1. Logic toan hoc .


Trong i song hang ngay, ngi ta can co nhng ly luan (argument) 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 (proof) vi s chu y en dang (form) lc bo i s
viec cu the.

$2. Logic menh e (proposition logic)


I. 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 hoc

Ky thuat lap trnh nang cao

-5-

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.

II. CAC LIEN T LOGIC.


ky hieu
y ngha la
and
va
or
hay
not
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 .

III. Y NGHA CUA CAC LIEN T LOGIC . BANG CHAN TR (


TRUE TABLE ).
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 hoc

Ky thuat lap trnh nang cao


P

not P

T
F

F
T

-6-

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

T thay cho ung (True) , F thay cho sai (False)

IV. LY LUAN UNG (valid argument)


Mot ly luan (argument) 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
T
F
T
T
T
F
T

and
and
and
and
and
and
and
and

F )
F )
F )
F )
T )
T )
T )
T )

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

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

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


at : A : hom nay tri ep

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

-7-

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
A

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

Tran Hoang Tho

and

and T ) ==> F

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

-8-

V. TNG NG (Equivalence).
Cho hai menh e P , Q.
1. nh ngha :
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
Bang chan tr :

not (not p or not q ).

p and q

not ( not p

or

not q )

F
F
T
T

F
T
F
T

F
F
F
T

not ( T
not ( T
not ( F
not ( F

or
or
or
or

T )
F )
T )
F )

2. Mot so tng ng hu ch.


( hay chng minh chung bang cach lap bang chan tr)
a) Cac hang :
P or true true
P or false p
p and true p
p and false false
true ==> p p
false ==> p true
true
p ==> true
p ==> false not p
b) Luat loai tr trung gian :
p or not p true
c) Luat ve mau thuan
:
p and not p false
p
d) Luat phu nh
:
not not p
e) 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
f) Luat giao hoan
:
p and q
q and p
p or q
q or p
p <==> q q <==> p
g) luat phan phoi
:
p and (q or r) (p and q) or (p and r)
p or (q and r) (p or q) and (p or r)
h) Luat ong nhat
:
p or p p
p and p p
i) Luat De Morgan
:
not (p or q) not p and not q
not (p and q) not p or not q

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao


j) Luat ham y

k) luat neu va ch neu

-9-

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

VI. 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 menh e o.
Ta co the chng minh tnh chat (v du tnh hang ung) cua mot menh e bang
cach bien oi no thanh cac menh e tng ng.
V du : chng minh ( 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 :
+ 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.

VII. BAI TOAN SUY DIEN LOGIC .


Xet bai toan : Tren hon ao co hai loai ngi sinh song : quan t va tieu nhan.
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

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 10 -

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

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 11 -

VIII. 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).
- Mot tap hp cac luat suy dien (rules of inference), tc la cac qui tac cho phep
xay dng cac khang nh ung mi xuat phat t cac tien e va cac khang nh a
at c .
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:
S 1 ,S 2 ,...,S n
Trong o moi luat suy dien se c viet di dang :

S
dien ta y la neu a co cac menh e dang S1, S2,..., Sn th ta co the suy ra S ; dau
[ ] bieu th mot gia nh .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

Cac luat them vao


(introduction ruler)

- 12 -

Cac nh luat loai bo


(Elimination rules)

and_I

and_E
p and q

or_I

or_E

p, q

p and q

p or q

p or q

p or q , [p] r , [q] r

==>_I
[p] q

p ==> q

==>_E

not_I
[p] false

not p

not_E

<==>_I
p ==> q , q ==> p

p <==> q

p and q

p , p ==> q

p ,not p
false

false
p
not not p

p
<==>_E
p <==> q

p ==> q

p <==> q

q ==> p

Cac luat c chia lam cac luat them va cac luat loai bo : Cac luat them vao
cho phep suy ra mot khang nh moi 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 .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 13 -

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

IX. CHNG MINH HNH THC VA PHI HNH THC .


Gia s co 2 bnh : bang vang va bang bac. Ben trong mot trong hai bnh nay co
ng mot bc tranh, tren moi bnh co ghi :
- Bnh vang :" Bc tranh khong co ay."
- Bnh bac :" co ung mot trong cac cau thong bao la ung"
Hoi cau co the ung hay sai . Hoi bnh nao ng bc tranh ?
ay la mot chng minh phi hnh thc :
A. Neu bc tranh khong nam trong bnh vang th cau ghi tren bnh vang la ung
.
B. Neu cau tren bnh bac la ung th cau ghi tren bnh vang phai sai .
C. Cung vay ,neu cau ghi tren bnh bac la sai th cau ghi tren bnh vang phai
sai.
D. T B va C , cau tren bnh vang phai sai .
E. Bay gi, gia s bc tranh khong trong bnh vang.
F. T A va E,cau tren bnh vang phai ung .
G. T D va F, ta thay co mau thuan .
H. vay ket luan rang bc tranh trong bnh vang.
Muon co mot chng minh hnh thc , ta phai khai trien chi tiet hn moi bc lap
luan tren .
at G "bc tranh trong bnh vang"
S "bc tranh trong bnh bac"
V "cau tren bnh vang la ung"
B "cau tren bnh bac la ung"
Tien e la : 1. (G and not S) or (S and not G)
( ch co mot trong hai bnh cha bc tranh)
2. V ==> not G
( neu cau tren bnh vang la ung th bc tranh khong co tren bnh vang va ngc
lai)
3. notG ==> V

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 14 -

4. B ==> ((V and not B) or (B and not V))


5. ((V and not B) or (B and not V)) ==> B
( cau ghi tren bnh bac ung neu va ch neu co ung mot trong V va B ung)
ket luan la bc tranh ang nam trong bnh vang : G.
Bc A chnh la tien e 3 .
Bc B c chng minh nh sau :
Gia nh 6. B
7. (V and not B) or (B and not V) (4 va 6 and_E)
Gia nh 8.V and not B
9.not B
(8,and_E)
10.false
(9 va 6,not_E)
11.not V
(10,not_E)
Gia nh 12.B and not V
13.not V
(12,and_E)
14.not V
(7,11,va 13,or_E)
15. B==> not V
(6 va 14,==>_I)
Bc C
Gia nh 16.not B
Gia nh 17.V
18.V and not B
(16 va 17,and_I)
19.(V and not B) or (B and not V) (18,or_I)
20.B
(5 va 19,==>_E)
21.false
(16 va 20,not_E)
22.not V
(17 va 21,not_E)
23. B==> not V
Bc D c suy trc tiep t 15,23, va luat loai tr trung gian dung or_E
24.not V
Nhng bc con lai cua chng minh hnh thc trung khp vi cac ly luan phi
hnh thc .
Gia nh 26.not G
27.V
(3 va 26,==>_E)
28.false
(24 va 27,not_E)
29.G
(26 va 28,not_I)
T v du nay ta thay rang mot chng minh hnh thc can rat nhieu chi tiet, nhng
nh the ma cac bc rat chat che, khong s sai lam. Khita lam chu c cac ky
thuat chng minh,ta co the ch can a ra cac bc chng minh ln, nhng chi tiet
se c nham tnh va c lam ro khi can thiet.

$3.LOGIC TAN T .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 15 -

I . KHAI NIEM
Trong logic menh e , moi menh e co gia tr ay u , 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:
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
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 , ==> , <==>. Trong trng hp khong s nham
lan ,ta se dung dau phay e thay cho lien t and.
f) Cac lng t pho dung va ton tai
(se noi ro muc sau)

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 16 -

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
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
1) Hom_nay_tri_ep and x > y
2) x > y ==> x > z

II. 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 .
1. Lng t pho dung : e noi rang moi phan t cua mot tap eu mot tnh chat
P ta
dung lng t pho dung c oc la vi moi .
V du e noi rang moi phan t cua mot 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
a) Khang nh : "a [k] la phan t ln nhat trong array"
( i : 0 <= i < n : a [k] >= a [i] )
b) 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)
c) 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)
2. Lng t ton tai : e khang nh co mot phan t cua tap hp co tnh chat P ta
dung lng t ton tai , c oc la: co mot hoac ton tai .
V du : e khang nh co ga tri x trong array a ta viet :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 17 -

(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
: 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
a) Khang nh :"trong array a khong co th t tang"
( i : 0 <= i < n - 1 : a [i] >a [i+1])
b) 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] ))
c) Khang nh "n la chan" :
(m :: n = 2*m)
3. Mot so tnh chat :
a) (i : R : P) (i :: R and P)
b) (i : R : P) not (i :: R not P)
va (i : R : P) not (i : R : not P)
4. 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.
(m :: p = q*m)
v vay , bieu thc tren tng ng vi :
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 .
V du :
is-divisor(q) (d :: p = q*d)
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
la :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 18 -

is-divisor(2*q) (d :: p = (2*q)*d)
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.

III. 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 { 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 }

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

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 19 -

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)
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 ( * ).
Tong quat : Neu q la phep toan 2 ngoi co tnh giao hoan va ket hp .
tc la :
a q b = b q a
(a q b)q c = a q (b q c)
th Q bieu th phep toan khai quat cua q tren tap bat ky , Q( i : r(i) : f(i) ) bieu th
tac ong cua q tren cac f(i) vi i thoa r(i). Trong bieu thc tren co 3 phan : phan
bien b buoc , phan mien r(i) , va phan ham f(i).
________________________

$ 4 . BAI TAP
I. Bai tap logic menh e .
1) . Vi moi ly luan sau hay xac nh cac menh e n , cac tien e va ket luan.
theo ban th ly luan nao hp logic (ung ) :
a) x ,y , z khong the cung dng . Neu chung cung dng th bao gi cung co
x ln hn ca y lan z . V vay x khong the ln hn mot trong 2 ga tr y va z.
b) Chng trnh khong bao gi dng hoac la gia tr n roi se bang khong . Neu
gia tr n bang khong th gia tr m roi cung bang khong . Chng trnh dng v vay
gia tr cua m se bang khong .
2). Neu A va B la cac menh e ung , X va Y la cac menh e sai, moi menh e
sau la ung hay sai ?
a) (not A) or (not X)
b) A or (X and Y)
c) (A or X) and (B or Y)
d) not (A or X) and not (A or Y)
e) (A ==> B) ==> X
f) ( (not (A ==> X) and B ) ==> Y
g) not (A or B) <==> ( (not A) and (not B) )
h) (A ==> X) ==> ( (not A) and X )
i) (X ==> Y) <==> not (X or Y)
3).Dung bang chan tr e ch ra cac ly luan sau co hp logic hay khong ?
a) Neu x = 0 th y > 0 hay z < 0 .Biet z < 0 , nh vay neu y > 0 th x <> 0 .
b) Neu x = 0 th neu y > 0 se co z < 0 . Biet y > 0 , v vay x = 0 hoac z < 0 .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 20 -

c) Neu cac lenh khi ong trc vong lap la ung va neu vong lap dng th
ieu kien cuoi c am bao .ieu kien cuoi a c am bao v vay neu biet lenh
khi ong trc vong lap la ung th vong lap phai dng .
4) . Dung bien oi tng ng , hay bien oi cac menh e sau :
a) P or (q and p ) p
b) ( (p and q) <==> p ) q
c) not (p <==> q) p <==> not q
d) ( (p and q ) <==> r ) and ((p and not q) <==> not r ) ) ( q <==> r )
e) ( (p ==>q) and (not p ==> r) ) ( ( p and q ) or ( not p and r ) )
5). nhng ieu nao ung trong cac ieu sau :
a) ( (p ==>q ) ==> r ) ( p ==> (q ==> r ) )
b) ( (p <==> q ) <==> r ) ( p <==> (q <==> r ) )
c) ( (p <==> q ) <==> r ) ( p <==>q) and (q <==> r ) )
6). Gia s gap hai ngi tren ao A va B . A noi :"Neu B la quan t th toi la tieu
nhan". Hoi A va B la g ?
7). Gia s gap ba ngi tren ao A,B va C. A noi:"Tat ca chung toi eu la tieu
nhan". B noi:"Ch co ung mot trong chung toi la quan t". Hoi A,B va C la g ?
8). Gia s gap ba ngi tren ao. Mot ngi la hoi ngi A :"Anh la quan t hay
tieu nhan ?".A tra li nhng khong ro . V vay ngi la hoi B :"Anh A a noi g ?".
B tra li :"A noi rang anh ay la tieu nhan.".Vao luc ay C noi rang :"ng tin B
anh ta noi doi ay !". Hoi A,B va C la g ?
9). Hay bo xung giai thch cho moi chng minh sau :
a) Gia nh : 1. (not A or B) and A
2. not A or B
3.A
gia nh 4.B
gia nh 5.not A
6.false
7.B
8.B
9. ( (not A or B) and A ) ==> B
b) Gia nh
1. (A or B) and (A ==> C) and (B ==> D)
2.A or B
3.A ==> C
4.B ==> D
Gia nh 5.A
6.C
7.C or D
gia nh 8.B
9.D
10.C or D

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 21 -

11.C or D
12.[(A or B) and (A ==> C) and (B ==> D) ==>(C or D)
c) Gia nh 1.A ==> (B and C)
Gia nh 2.A
3.B and C
4.B
5.A ==> B
Gia nh 6.A
7.B and C
8.C
9.A ==> C
10.(A ==> B) and (A ==> C)
11. ( A ==> (B and C) ) ==> ( (A ==> B) and (A ==> C) )
10). Dung cac luat suy dien e chng minh :
a) ( (A ==> B) and (A ==> C) ) ==> ( A ==> (B and C) )
b) ( (A ==> B) and (C ==> D) and (not B or not D) ) ==> (not A or not C)
c) ( (not A==>(B==>C)) and (not D==>(C==>B)) and (A ==>B) and (not D) )
===> (B ==> E)
11). Gia s co ba bnh , thay v hai , vi cac cau sau:
Bnh vang : "Bc tranh ay"
Bnh bac : "Bc tranh ay"
Bnh ch : "t nhat hai trong ba bnh nay mang phat bieu sai"
Hoi bnh nao cha bc tranh ? Hay a ra mot chng minh phi hnh thc.
12). Bay gi can chon bnh nao khong cha bc tranh. cac cau la:
Bnh vang : "Bc tranh trong bnh nay"
Bnh bac : "Bc tranh khong trong bnh nay"
Bnh ch : "nhieu nhat la mot trong ba bnh nay mang cau ung"
Hay a ra mot ly luan phi hnh thc . Phat bieu mot cach hnh thc nhng tien e
ma ly luan cua anh s dung. Hay dung G (hay S,L) e bieu th bc tranh trong
bnh vang (bac hay ch).

II. Bai tap logic tan t .


1) Vi moi tan t sau , hay xac nh tnh ung sai cua chung sau khi cac bien
c the bang cac hang tng ng .
a) P(x,y,z) ( x > y ) or ( y > z ) .
Xet P(1,2,3), P(3,2,1), P(3,-5,7)
b) P(x,y) ( 5 > x ) or ( 10 < y ) or not(x < y) .
Xet P(5,6) , P(10,5)
c) P(x,y) ( ( x=y ) ==> (5 < y ).
Xet P(5,6), P(5,5), P(6,6)
2) Hay dung bieu thc toan hoc e dn gian hoa cac tan t sau :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 22 -

a) P(x,y) x > y and y >= z


b) P(x,y,z) ( x = 2*y ) and ( y = 2*z ) and ( z = 2*x )
c) P(x,y) ( x > y) and ((y = 2*x ) or (x < 0) )
d) P(x,z) (x=z) or (y :: y=x and y=-z)
3) Cac tan t sau cha cac bien nguyen . Vi moi tan t , tm tap tr thoa ung va
tap tr lam tan t sai .
a) ( (n = 0 ) and (m = 1)) ==> (m = 1 )
b) (m=1) ==> ((n = 0) and (m = 1) )
c) ((n = k*(k -1)/2 + j ) and (j = k) ==> (n = k*(k+1)/2 )
d) ( n = k*(k+1)/2 ) ==> ( (n = k*(k -1)/2 + j ) and ( j = k) )
e) ((n = k -1) and (j = k+1)) ==> ( j -n = -2 )
f) (i+j = 0 ) and (i - j = 0 )
4 ) Hay nh ngha cac tan t sau (tren tap so nguyen ) :
a) tan_cung_bang_O(x)
b) co_cung_ky_so_hang_chuc(x,y)
c) la_nam_nhuan(n)
5) Cho array [0..n-1] of integer. Hay viet cac tan t dien at khang nh:
a) Moi phan t trong a eu khac nhau
b) a la ban sao cua b
c) Moi phan t cua a eu nho hn moi phan t cua b
d) Moi phan t cua a eu ln hn (t nhat ) mot phan t cua b va nho hn mot
phan t khac .
e) Cac phan t co ch so le lap thanh day tang
f) Neu a co th t tang th b cung vay
g) Moi phan t cua a khac vi moi phan t cua b
h) b[i] cha v tr cua phan t th i trong a.

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

PHAN II

- 23 -

E QUY

$1 . KHAI NIEM E QUY .


I . M au .
1. Mo ta e quy .
Trong nhieu tnh huong viec mo ta cac bai toan , cac s kien , s vat , cac qua
trnh , cac cau truc , . . . se n gian va hieu qua hn neu ta nhn c no di mot
goc o mang tnh e qui.
Mot mo ta (nh ngha ) mang tnh e qui ve mot oi tng la mo ta trong o
phan tch oi tng thanh nhieu thanh phan ma trong so cac thanh phan co nhng
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 :
+ So 1 la so t nhien
+ So tiep theo cua so t nhien la so t nhien (so t nhien = so t nhien + 1)
- Mo ta e quy cau truc xau (list) kieu T :
+ Cau truc rong la mot xau kieu T.
+ S ghep noi mot thanh phan kieu T vi mot xau kieu T tao thanh 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 dan 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 : 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 xep 2 day tang a[x : y], a[(y+1) :
z] e c mot day a[x : z] tang.
- inh ngha e quy ham n !
+ 1!=1
+ n!=n*(n-1)!
Phng phap e quy manh cho no cho phep mo ta mot tap ln cac oi tng ch
bi mot so hu han cac menh e hoac mo ta mot tap ln cac thao tac bang mot
chng trnh con e quy

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 24 -

Mot mo ta e quy thng gom 2 phan :


- Phan neo : mo ta cac trng hp suy bien cua cac oi tng qua cac cau truc
cu the xac nh (thng la n gian ).
v du : 1 la so t nhien , cau truc rong la mot xau kieu T, 1 ! = 1 ,
SM(a[x:x]) la thao tac rong.
- Phan quy nap : mo ta oi tng trong trng hp chung thong qua chnh oi
tng o mot cach trc tiep hoac gian tiep . Neu trong mo ta khong co phan neo
th oi tng mo ta co cau truc ln vo han .
v du : cau truc to tien .
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 kieu 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 ) ( xem lai cac v du tren ).
- e quy gian tiep la kieu e quy ma oi tng c mo ta gian tiep qua no ;
A mo ta qua A1,A2,.... Trong o co mot Ai c mo ta qua A.
V du : Dang tong quat cua mot chng trnh viet bang NNLT Pascal c mo
ta nh sau :
Mot Chng trnh Pascal gom :
a) au CT (head) : Program Ten ;
b) Than CT ( blok ) :
b1) Khai bao unit , nh ngha hang , nhan , kieu d lieu , khai bao bien.
b2) nh ngha cac chng trnh con gom :
b21) au CT con : Procedure Ten thu tuc( danh sach thong so ) ;
hoac Function Ten ham( danh sach thong so ) : Kieu ;
b22) Than CT con ( Blok ).
b23) Dau ;
b3) Phan lenh : la mot lenh ghep dang :
Begin S1 ; S2 ; . . . ; Sn End
c) Dau . ket thuc CT

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 . 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 thu tuc e qui . Mot cau truc d lieu e quy se gom mot so thanh phan
cung kieu .
V du : 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 ) vi 2 cay nh phan
kieu T ri nhau ( cay con phai , cay con trai ) ket hp vi nhau .

III . Chng trnh con e quy


1 . Giai thuat e quy.

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 25 -

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 chng trnh con e quy .
Mot cach tong quat mot giai thuat e quy c bieu dien nh mot bo P gom cac
menh e Si (khong cha yeu to e quy ) va P : P P[ Si , P ] .
Phng tien e mo ta giai thuat e quy trong cac ngon ng lap trnh la chng
trnh con e quy : chng trnh con co cha lenh goi en no trc tiep hoac gian tiep
.
Mot giai thuat e quy cung co the dan ti mot qua trnh goi e quy khong ket thuc
,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 chng trnh con P ngi ta thng gan thao
tac goi P vi viec kiem tra mot ieu kien B , 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[ Si , P ] hoac P P[ Si , if B then P ]
Thong thng vi mot gai thuat e quy P , e ch ra rang P se dng sau n lan goi
ta se chon B la ( n >0 ) . Mo hnh gai thuat e quy khi o se co dang :
P(n) If ( n > 0 ) then P[ Si , P(n - 1)] ;
hoac
P(n) P[ Si , if (n >0) then P(n - 1) ] ;
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 . Cac chng trnh con e qui.
a) Cac ham e quy.
nh ngha ham so bang e quy thng gap trong toan hoc . Dang pho bien la cac
ham cua oi so nguyen mo ta cac day so hoi quy .
V du :
- Day cac giai tha : 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 )) ;
- Day so Fibonaci : 1 ,1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 , 233 , 377 , . .
.

+ F(0 ) = F(1 ) = 1 ;
+ F(n ) = F(n - 1 ) + F( n - 2 ) ; vi n > = 2
Giai thuat e quy tnh F( n ) la :
F(n) If ((n = 0 ) or ( n = 1 )) then Return 1 ;
else Return ( F(n - 1) + F(n - 2) ) ;

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 26 -

- Day cac to hp :

1
1

vi n > = 0

Cnm = 0

vi m > n > 0

Giai thuat e quy tnh Cnm

Cn0 = 1

Cnm = Cnm11 + Cnm1

1
2

1
4

1
1

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 :
+ Mot so cac trng hp suy bien ma ga tr ham tai o a c biet hoac co
the tnh mot cach n gian (khong e quy ) .
V du : FAC(0) = 1 , F(0) = F(1) = 1 , Cn0 = 1 .
+ Trng hp tong quat viec tnh ham se c a ve tnh ham mc n
gian hn .
V du : FAC(n ) = n * FAC(n - 1 ) ; F(n) = F(n -1) + F( 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 :
- Thu tuc bau c trong mot nc theo phng thc ai c tri : Tng nhom c tri
bau ra ai c tri , ai c tri bau ra tong thong.
- Thu tuc chon 1 phan t ln nhat trong mot danh sach : chia danh sach lam
M danh sach , chon phan t ln nhat trong tng phan , roi chon trong nhng cai a
chon c.
Thu tuc e qui ac biet thch hp khi s ly tren cac cau truc d lieu co tnh e
qui .
- Mot day n phan t a[1:n] la s ket hp gia day a[1:n-1] va a[n] .
Do do :
+ Phep tm 1 phan t ln nhat trong 1 day a[1:n] ( thu tuc TMax) co the
c xac nh 1 cach e qui :
TMax(a[1:n] ) max(a[n],TMax(a[1:n-l]) )
vi :
TMax(a[m:m] cho a[m] , max la phep tm max cua 2 so .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 27 -

+ Phep tm tong cac phan t (TSUM)


TSUM(a[1:n]) Tg(a[n] ,TSUM(a[1:n-1]) )
vi TSUM(a[m:m]) cho a[m] Tg la phep tm tong 2 so .
- Mot day a[m : (m+n)] la s ket noi gia hai day: day a[m:((m+n) div 2)]
va day a[(((m+n) div 2)+1) : (m+n)], nen phep tnh tong cac phan t (TSUM) la :
TSUM(a[m : (m+n)]) Tg(TSUM(a[m:((m+n) div 2)]) , TSUM(a[((m+n) div
2)+1:n)]))

- Thu tuc quet cay nhi nhan theo th t gia (LNF) la :


+ Quet cay con trai theo th t gia (L) ;
+ Tham nut goc (N) ;
+ Quet cay con phai theo th t gia (F) ;
Nhan xet :
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 :
a) 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}
b)
S1 ; { Khong e quy }
While B do Sdq ; {phan lenh co lenh goi e qui}
S2 ; {phan khong co lenh goi e qui}
3. Hai dang chng trnh con e qui :
- e qui trc tiep : Chng trnh con P c goi la e quy trc tiep neu trong
P co lenh goi den P mot cach tng minh .
V du : Cac ham va thu tuc neu cac v du tren .
- e qui gian trc tiep : Chng trnh con P c goi la e quy gian tiep neu
trong P co lenh goi den P mot cach khong tng minh . Nh P goi Q va Q goi P.
V du :
Procedure
A(x : . . . ) ;
...
Begin
...
B(f(x),. . .);
...
end ;
Procedure B(y : . . . );
...
Begin
...

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 28 -

A(g(y), . . . );
...
end ;
Khi thc hien A co lenh goi B khi thc hien B lai co lenh goi A . Ca A va B eu la
thu tuc e quy gian tiep .
Trong trng hp chng trnh con P la e quy gian tiep , s xuat hien lenh
goi P co the xay ra sau khi i qua 1 day chuyen nhieu bc trung gian .

4 . The hien e qui trong NNLT PASCAL va C++ :


NN LT Pascal va C++ eu cho phep to chc chng trnh con e quy nh vao
c che tao vung nh Stak cua phan mem ngon ng .
a) Trong NN LT Pascal :
Pascal co 2 hnh thc chng trnh con e quy la : ham e quy va thu tuc e quy .
Lenh goi e quy cung phai tuan theo quy luat tam vc cua ngon ng : mot CT
PASCAL , ch co the thc hien lenh goi en mot chng trnh con a c khai
bao trong khoi cha lenh goi .
V du : Vi mo hnh chng trnh sau .
Trong phan lenh cua khoi A co the goi en :
Program
+ Cac thu tuc , ham con trc tiep cua no :
E
goi c B nhng khong goi c C
+ Goi chnh A ( goi e quy trc tiep )
A
+ Goi thu tuc ham cung cap nhng phai
c
B
khai bao trc goi c E nhng khong goi
C
c D , muon goi D phai dung forward
e
khai bao trc .

-D

Khai bao 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 khai bao lai hoan chnh D th ch can khai bao t
khoa PROCEDURE ( hoac FUNCTION ) , ten cua D ( khong can danh sach
thong so) roi en phan than cua D.
V du :
procedure second (var M,N : integer ; p : char) ; Forward ;
procedure first (A,B:integer; var X : real);

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 29 -

var ...
begin
...
second(W,Y,Z) ;
...
end ;
procedure second ;
var ...
begin
...
end ;
b) Trong NNLT C++
NNLT C++ cho phep to chc chng trnh con e quy thuan li hn . Bi v moi
ham con trong C++ eu phai khai bao trc tieu e nen khong co s phan biet nao
ve viec khai bao oi vi ham con thng va ham con e quy.
5. Cac v du ve cac chng trnh con e qui trong PASCAL va C++ .
V du 1 : Ham F(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(n :int)
{ if ( n < 2 ) return 1 ;
else return (F(n -1) + F(n -2)) ;
}
V du 2 : Chng trnh ao ngc mot cau (s dung CT con e quy ) : oc vao
mot cau ket thuc bang dau .xuat ra man hnh theo th t ngc .
( v du : nhap : good _ bye see You agean .
xuat : . naega ees eyb_doog )
+ Chng trnh trong Pascal :
Program VD1;
Uses crt ;
Procedure DAO ;
var kt : char ;
Begin read(kt) ;
if(kt <> .) then DAO ;
write(kt) ;
end ;
Begin (* main program *)
clrscr ;
writeln( go vao mot cau ket thuc bang dau . ) ;
DAO ;

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 30 -

readln ;

end .
+ Chng trnh trong C++ :
# include <iostream.h>
# include <conio.h>
void DAO(void) ;
int main()
{ clrscr() ;
cout << nhap vao 1 cau ket thuc bang dau . \n ;
DAO ;
getch() ;
return 1 ;
}
void DAO()
{ char kt ;
cin >> kt ;
if(kt != .) DAO ;
cout << kt ;
}
vi du 3 : Chng trnh con tnh USCLN cua 2 so da vao thuat toan Euclide :
USCLN(a,b) = USCLN(b,a mod b ) vi a <> 0 , b <> 0
USCLN(n,0) = n
+ Dang ham trong Pascal :
Function USCLN(a,b : integer ) : integer ;
begin
if(b = 0 ) then USCLN := a
else USCLN := USCLN(b , a mod b ) ;
end ;
+ Dang ham trong C++ :
int USCLN(int a , int b )
{ if(b = 0 ) return (a) ;
else return ( USCLN(b , a mod b)) ;
}

$ 2 . BAI TOAN E QUY


I . Cac bc can lam e giai mot bai toan bang e quy .
e xay dng gai thuat giai mot bai toan bang e quy ta can thc hien tuan t 3
bc sau :
1. Thong so hoa bai toan .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 31 -

Tm ra cac thong so can thiet cho bai toan , ac biet la cac thong so bieu th kch
thc bai toan (cac thong so ieu khien), cac ai lng ma kch thc cua chung
ac trng cho o phc tap cua bai toan , va b giam i qua nhng lan goi e qui .
V du : n trong ham FAC(n) , a , b trong ham USCLN(a,b) .
2 . Phat hien cac trng hp tam thng va tm thuat giai cho cac trng hp
nay .
ay la phan suy bien cua bai toan, c thc hien khong e qui, la cac trng hp
tng ng vi cac ga tr bien cua cac bien ieu khien ( trng hp kch thc bai
toan la nho nhat ).
V du : tnh FAC(1) , tnh USCLN(a,0)

3. Phan ra trng hp tong quat .


Tm phng an e 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) , ( vi n > 1 ).
USCLN(a , b ) = USCLN(b , a mod b ) , ( vi a <> b ) .

II . Mot so bai toan giai bang giai thuat e quy .


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 n = 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 phai 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 64 a th en ngay tan the !.
Nh se ch ra sau nay vi 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 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 ) mot cach de dang ng vi n
= 1,
n = 2 , n = 3 . Vi n = 4 bai toan a tr nen phc tap . Tuy nhien giai thuat cua bai
toan lai c tm thay rat nhanh khi ta khai quat so a la n bat ky va nhn bai
toan bang quan niem e quy nh sau :
a) Thong so hoa bai toan .
Xet bai toan mc tong quat nhat : chuyen n a t cot X sang cot Z lay
cot Y lam trung gian .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 32 -

Ta goi giai thuat giai bai toan mc tong quat la thu tuc THN(n ,X,Y,Z) vi n
thuoc tap so t nhien N ; X ,Y,Z thuoc tap cac 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) Cac trng hp suy bien va cach giai .
Vi n =1 bai toan suy bien thanh bai toan rat n gian : tm day thao tac e
chuyen chong 1 a t cot X sang cot Z lay cot Y lam trung gian . Giai thuat la thc
hien 1 thao tac c ban : Chuyen 1 a t X sang Z ( ky hieu la Move(X , Z) ) .
THN(1,X,Y,Z) la : Move( X, Z )
Chu y ta cung co the m rong suy luan e quan nien trng hp suy bien la bai
toan chuyen n = 0 a t X sang Z lay Y lam trung gian ma giai thuat thc hien
la thc hien thao tac rong ( khong lam g ca ) .
THN(0,X,Y,Z) la thao tac rong .
c) Phan ra bai toan :
Ta co the phan ra bai toan chuyen n a t cot X sang cot Z lay cot Y lam
trung gian ( TH N(n,X,Y,Z)) thanh day tuan t 3 cong viec sau :
+ Chuyen (n -1) a t cot X sang cot Y lay cot Z lam trung gian :
THN(n -1,X,Z,Y)
+ Chuyen 1 a t cot X sang cot Z : Move( X, Z ).
+ Chuyen (n - 1 ) a t cot Y sang cot Z lay cot X lam trung gian :
THN( n -1,Y,X,Z) .
Vay giai thuat trong trng hp tong quat la :
THN(n,X,Y,Z)

{ THN(n -1,X,Z,Y) ;
Move ( X, Z ) ;
THN(n -1,Y,X,Z) ;
}

d ) Giai thuat THN trong NNLT Pascal :


Thu tuc THN c viet bang ngon ng PASCAL nh sau :
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 a lam trng hp neo )
Hoac
procedure THN (n : integer ; X,Y,Z : char) ;
begin
if (n = 1) then Move(X, Z)

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao


else

- 33 -

begin
THN (n -1 , X , Z ,Y ) ;
Move(X , Z );
THN (n -1 ,Y, X , Z );
end ;

end;
( lay trng hp 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 .
Vi n a th can bao nhieu bc chuyen_mot_a ? Thc chat trong thu
tuc THN cac lenh goi e qui ch nham sap sep trnh t cac thao tac
chuyen_mot_a. moi lan goi thu tuc, can co them chi ph truyen thong so . So
bc chuyen_mot_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(n) = 2f(n-1) + 1
vi n>0
Do o :
f(n) = 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 .
e) 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 ;
}
2 . Bai toan chia thng : Co 64 vat ( phan thng ) em chia cho 12 hoc sinh
goi 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.
a) Thong so hoa .
Ta se giai bai toan mc o tong quat : Tm so cach chia m vat cho n oi tng
.
Goi PART la so cach chia khi o PART la ham cua 2 bien m , n .
Tc la : PART = PART(m ,n )
Ta ma hoa n hoc sinh la : 1, 2 , 3 , . . . n ; Si la so vat ma hoc sinh th i nhan
c .
Khi o cac ieu kien rang buoc len cach chia la :
m >= 0 , n >= 0 ;
Si >= 0 ;

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 34 -

S1 + S2 + . . . + Sn = m ;
S1 >= S2 >=
>= Sn .
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 ngi eu nhan c 0 vat .
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 .
c ) Phan ra bai toan trong trng hp tong quat :
+ m < n khi so o vat m nho hn so ngi n th n - m ngi cuoi se luon
khong nhan c g ca .
Vay : PART(m , n ) = PART(m , m ) khi n > m .
+ Trong trng hp so vat chia ln hn hoac bang so ngi (m >= n ) ta chia
cac cach chia lam 2 loai :
* Loai th nhat khong danh cho ngi cuoi cung vat nao ca ( Sn = 0 ) .
So cach chia nay se bang so cach chia m vat cho n -1 ngi ( PART(m , n -1 ) ) .
* Loai th 2 co phan cho ngi cuoi cung ( Sn > 0 ) . De thay rang so
cach chia nay se bang so cach chia m - n vat cho n ngi ( PART(m - n , n ) ) .
T cac phan tch tren ta co :
PART(m , n ) = PART(m , n -1 ) + PART(m - n , n ) .
d ) Dang ma gia cua ham PART
PART(m , n ) = if(m = 0 ) then return 1 ;
else if( n = 0 ) then return 0 ;
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 Pasal
Function PART(m , n : integer ) : integer ;
Begin
if(m=0) then PART := 1
else if(n = 0 ) then PART := 0
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++ :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 35 -

int PART( int m , int n )


{ if(m == 0 ) return 1 ;
else if(n == 0) return 0 ;
else if(m < n ) retrun ( PART(m , m )) ;
else return ( PART(m , n -1 ) + PART( m -n , n ) ) ;
}
3 . Giai thuat sap xep mot array bang phng phap tron (Sort-Merge)
e sap xep 1 danh sach gom n phan t ngi ta thng chia danh sach thanh
nhieu phan nho , sap xep tng phan , roi tron chung theo th t .
Bai toan la : sap theo th t khong giam mang : a : array[1..k ] of T
a) Bc 1 : thong so hoa : bai toan c khai quat thanh sap xep mot day con
lien tuc cua a t ch so m en ch so n vi 1 <= m <= n <= k .
b) Bc 2 : trng hp tam thng : o la khi n - m <= 0 . Luc o khong can
lam g ca (thao tac rong ) .
c ) Bc 3 : phan ra trng hp tong quat :
Khi n - m > 0 ,ta thc hien cac cong viec sau :
+ Chia day : a[m] ,a[m+1], . . . , a[n] thanh 2 day con
a[m] , . . , a[r] va a[r+1] , . . . , a[n]
+ Sap xep tng day con thanh cac day co th t
+ 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 , r , n) . Ta can chon r e c 2 day con
giam han ve kch thc so vi day ban au , tc la chon r : m <= r < r+1 <= n .
Ta se chon phan t chia oi : r = ( m + n ) div 2 .
Thu tuc Sort_Merge(m,n) tren mang a : array[ 1..k ] of T viet bang ngon
ng PASCAL nh sau :
procedure sort_merge (m,n: index);
var r : index ;
begin
if ( n > m ) then
begin
r := (m+n) div 2;
Sort_Merge (m,r) ;
Sort_Merge (r+1,n) ;
Merge (m,r,n) ;
end ;
end ;
e sap mang a (day a[1:k]) ta goi Sort_Merge(1,k)
4. Giai thuat tm nghiem xap x .
a) Bai toan : ham f(x) lien tuc tren oan [ao,bo] , tm mot nghiem xap x vi o
chnh xac epsilon tren [ao,bo].

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 36 -

Ta biet neu f(ao).f(bo) >= 0 th ham f co nghiem trong [ao,bo] .Ta quan tam en
nghiem xap x nen neu bo - ao < epsilon th ta co the ket luan ao (hay bo) la
nghiem .
Neu f(ao).f(bo)>0 th bang cach chia nho oan [ao,bo],ta hy vong co the tm c
nghiem tren cac oan con nay .
Ta se xay dng mot ham e qui tra ve gia tr la 1 nghiem xap x cua f (neu
co) ,hay mot hang e ( u ln) neu f khong co nghiem xap x tren [ao,bo] .
Bc 1 : Thong so hoa : Xet ham ROOT tren oan [a , b] bat ky .
Tc la xet ham ROOT vi 2 thong so la a , b ,(ROOT(a,b) . Hay tm nghiem
xap x cua f(x) tren mot oan con bat ky cua oan [a,b] .
Bc 2 : Trng hp tam thng : o la khi b - a < epsilon .
Khi o :
if ( f(a)* f(b) ) <= 0 then ROOT(a,b) = a ; (* a la nghiem xap x cua f
*)
else ROOT(a,b) = e ; (* f khong co nghiem xap x
*)
Bc 3 : Phan ra trng hp tong quat : khi b - a >= epsilon , ta phan [a,b]
lam 2 oan [a,c] va [c,b] vi c = (a + b)/2.
- Neu f(a) * f(c) <= 0 ( hay f(c) * f(b) <= 0 ) th bai toan tr thanh bai toan
tm nghiem tren oan [a , c] (hay [c , b]) .
- Neu ca hai tch eu > 0 th ta phai th tm nghiem tren tng oan [a, c] roi
[c, b].
b) Chng trnh con tm nghiem xap x tren NN Pascal co dang :
const epsilon = ;
e = ;
Function ROOT(a,b) : real ;
var c , R : real ;
begin
if ((b-a) < epsilon ) then if ( f(a)*f(b) <= 0 ) then ROOT := a
else ROOT := e
else
begin
c := (a + b)/2 ;
if ( f(a) * f(c) <= 0 ) or (f(c) * f(b) <= 0 )
then if ( f(a) * f(c) <= 0 ) then ROOT :=
ROOT(a,c)
else ROOT := ROOT(c,b)
else
(* tim nghiem tren [a,c] *)
begin
R := ROOT (a,c) ;
if R = e then R := ROOT(c,b);
ROOT := R
end;

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 37 -

end;

end ;
c) 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 (e ) ;
else
{ double c = (a + b ) / 2 ;
if((f(a) * f(c) <= 0) || (f(c) * f(b) <= 0)) if(f(a) * f(c) <= 0) return
(ROOT(a,c)) ;
else return ( ROOT(c , b) ) ;
else { double R = ROOT(a , c);
if( R == e ) R == ROOT(c ,b ) ;
return ( R );
}
}
}
5 . Xuat tat ca cac hoan v cua mot day N phan t .
V du : vi N = 3 va A[1]=1, A[2]=2, A[3]=3 th ta can xuat 6 hoan v :
1 2 3 2 1 3
3 1 2
1 3 2
2 3 1
3 2 1
a) Thong so hoa .
Goi HV(V ,n ) ( vi V : array[1 . . N] of integer , n : integer ) la thu tuc xuat
tat ca cac dang khac nhau cua day V vi hoan v n phan t au ( e giai bai toan
at ra ta goi thu tuc HV(V,N) ).
b) Trng hp thoai hoa tng ng vi n =1 ( HV(V,1) ) la thao tac xuat ra day V
:
HV(V,1) print(V) for k := 1 to N do write(V[k]) ;
c) Phan ra bai toan .
HV(V,n) for i := 1 to n do {SWAP(V[i],V[n]) ; (* thu tuc trao oi V[i] cho
V[n] *)
HV(V,n - 1) ;
}
( moi hoan v n phan t au cua day se c xuat ra bang cach lan lt trao oi V[i]
cho V[n] va goi thu tuc HV(V,n-1) ) .
d ) Dang ma ga cua thu tuc :
HV(V,n) { if ( n = 1 ) then print(V)
else for i := 1 to n do { SWAP(V[i],V[n]) ;
HV(V,n - 1) ;
}
}

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 38 -

$ 3. C CHE THC HIEN GIAI THUAT E QUY .


Trang thai cua mot chng trnh ( CT chnh hay CT con ) mot thi diem trong
qua trnh thc thi c ac trng bi noi dung cac bien cua no va lenh can thc
hien ke tiep.
Trong trng hp e qui, mot CT con e qui tng thi iem thc hien, can lu
tr
nhieu trang thai hoat ong ang con dang d .
a) Xet ham giai tha :
FAC ( n ) = if(n = 0 ) then retrun 1 else retrun ( n * FAC (n - 1)) ;
S o qua trnh tnh ga tr 3 ! bang ham e quy FAC ( 3 ) :
FAC ( 3 ) =

3 * FAC (2 ) = 6

FAC (2 )

2 * FAC (1 ) = 2

FAC (1 )

1 * FAC (0 ) =

FAC (0 ) =
1
{ Phan neo }
Khi li goi FAC (3) xay ra th no se phat sinh loi goi FAC (2 ) , ong thi van
phai lu gi 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 trang thai x ly con dang d ( FAC (2 ) = 2 * FAC ( 1 ) ) ,.. . C nh vay cho ti
khi gap li goi thi hanh trng hp neo ( FAC (0 ) = 1 ) . Tiep theo 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 .
ong thi vi qua trnh x ly ngc la qua trnh xoa bo cac lu tr thong tin x
ly trung gian con dang d ( qua trnh thu hoi vung nh ) .
b ) Xet thu tuc de 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) ;
}
Gia s can chuyen 3 a t cot A sang cot C dung cot B lam trung gian .
Ta dung lenh goi :
THN (3,A,B,C)
S o thc hien li goi THN(3,A,B,C) la :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

Li goi cap 0

Li goi cap 1

- 39 -

Li goi cap 2

THN(1,A,B,C)
THN(2,A,C,B)

THN(3,A,B,C)

A ---> B

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

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)

Li goi cap 3

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

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 40 -

Mot 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 loai
bo cac lu tr trung gian.
T ac iem cua qua trnh x ly giai thuat e quy ta thay la can co c che thoa
cac yeu cau sau ay :
- moi lan goi thu tuc ,phai lu tr trang thai con dang d cua thu tuc thi
iem
goi . So trang thai nay bang so lenh goi thu tuc cha c hoan tat .
- Khi thc hien xong mot lenh goi thu tuc , can hoi phuc lai trang thai trc khi
goi . Do tnh chat la lenh goi thu tuc cuoi cung se c hoan tat trc tien , nen
trang thai c hoi phuc au tien la trang thai lu tr cuoi cung .
Cau truc d lieu cho phep lu tr thong tin theo phng phap LIFO (Last In Firt
Out ) nh vay la cau truc chong (stack).
Vi mot chong S, cho phep chung ta thc hien cac thu tuc va ham sau :
+ Thu tuc :
Creat_stack(S) : tao chong S rong .
push(X,S) : Chen - Lu tr them noi dung X vao nh stack S
( X la d lieu n gian hoac co cau truc )
pop(X,S) : Xoa - lay gia tr ang lu nh S cha vao trong bien X va
loai
bo gia tr nay khoi S va lui nh S xuong mot mc .
+ Ham : empty(S) : Ham boolean - Kiem tra tnh rong cua S : cho gia tr
ung neu S rong ,sai neu ngc lai .
size (S) : Ham integer , cho so phan t ang c lu trong S
- 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 chong S ma moi phan t la mot oi tng d lieu thuoc kieu T
trong PASCAL nh sau :
type stack = record
st : array [1..n ] of T ;
top : 0..n ;
end ;

3
3
2 2
2 X1
2
1 0 1 Xo 1 1 Xo 2 1 Xo 1
S.st
S.top
S.st S.top
S.st S.top
S.st S.top
initstack(S)
push(Xo ,S)
push(X1 ,S)
pop(Y,S)
{sau lenh pop (Y , S ) bien Y nhan ga tr X1 }
NNLT PASCAL va C++ thc hien c c che e qui nh trong qua trnh bien dch
, no t ong phat sinh ra cau truc stack e quan ly cac thao tac goi e quy chng
trnh con .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 41 -

Khi mot lenh goi thu tuc c thc hien, cac bien a phng (gom ca thong so) se
c cap phat vung nh mi tren nh stack .
Nh vay cac tac ong a phng se khong lam thay oi cac trang thai can lu tr
.

$4. KH E QUY
I . Dan nhap
e quy la mot 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 chng trnh tren cac NNLT) . Nhng nh a ch ra tren viec x ly giai
thuat e quy lai rat kho khan cho may tnh (ton khong gian nh va thi gian x ly
e lu tr va x ly cac trang thai trung gian con dang d moi lan goi ) , hn na
khong phai moi NNLT eu cho phep to chc chng trnh e quy (v du :
FORTRAN ) . V vay viec thay the mot chng trnh e quy bang mot chng
trnh khong e quy cung la mot van e quan trong c dat ra .
Mot cach tong quat ngi ta a chng minh c rang : Moi giai thuat e quy
eu co the thay the bang mot giai thuat lap .
Nh vay s o e xay dng chng trnh cho mot bai toan kho thng se la :
- Dung quan niem e quy e tm giai thuat cho bai toan .
- Dung cac ky thuat kh e quy e co c mot chng trnh khong e quy .
Rat tiec la viec kh e quy cung la mot bai toan kho va v vay oi khi ta cung
phai chap nhan chng trnh e quy .

II . Cac trong hp kh e quy n gian bang cau truc lap .


1. Cac ham tnh cac ga tri cua cac day d lieu mo ta bang hoi quy .
a) C s ly luan .
Xet mot vong lap trong o s dung 1 tap hp bien W , gom tap hp U cac bien
b thay oi trong vong lap va V la cac bien con lai ( W = (V , U ) ).
Dang tong quat cua vong lap la :
W := Wo ; { Wo = ( Uo,Vo) }
while C(U) do U := f(W)
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
(4.1)
Uk = f(Uk-1 , Vo ) vi k = 1 .. n
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 ) .
Nhan xet nay ch ra rang oan chng trnh tnh ga tr day so c nh ngha
bi quan he dang (4.1) la :
(U,V) := (Uo ,Vo) ;

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 42 -

While C (U ) do U := f (U,Vo) ;
b) Dang ham tnh ga tr cua day hoi quy thng gap :
C
khi n = no { C la mot hang }
f(n ) =
g(f(n -1))
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)
S1 = 1
Sk = Sk-1 + (- 1) k+1 *( 2*k-1)
vi k > 1
c ) Dang ma ga cua ham e quy f(n)
f(n) = if(n = no) then return C ;
else return (g(f(n -1)) ;
d) oan lenh lap tnh gia tri f(n)
{ k := no ; F := C ;
While( k < n ) do { k := k + 1 ;
F := g (F ) ;
}
f(n) := F ;
}
Thc vay :

W = U = ( k ,F )
Wo = Uo = ( no,C )
C(U) = ( k < n)
f(W) = f(U) = f(k,F) = (k+1,g(F)))

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


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

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 43 -

+ Trong NN LT C++
long int FAC ( int n )
{ int k = 0 ;
long int t = 1 ;
while ( k < n ) ++k * t ;
return (t ) ;
}
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 ;

+ 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 ) ;
}
2 ) Cac thu tuc e qui dang e qui uoi.
Xet thu tuc P dang :
P(X) if B(X)

endif ;

then D(X)
else { A(X) ;
P(f(X)) ;
}

Trong o : P(X) la thu tuc e quy phu thuoc X


X
la tap bien cua P (la mot hoac mot bo nhieu bien )

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 44 -

A(X) ; D(X) la cac 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 au tien (th 0 )
P(X)
P1 la lan goi P lan 2
( th 1 )
P(f(X))
Pi la lan goi P lan i + 1 ( th i ) P(f(f(...f(X)...) { P(fi (X)) }
( i lan ham f )
i
Trong lan goi Pi neu B(f (X)) sai th thi hanh lenh A va goi Pi+1 ; neu
B(fi(X)) ung 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 n +1 (th n ) Pn th
n
B(f (X)) ung , lenh D c thi hanh va cham dt thao tac goi thu tuc P .
Qua trnh thc hien thao tac goi thu tuc P(X) co dang sau :

true

B(X)

D(X)

false

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

ENDIF
Tng ng vi vong lap sau :
While ( not B(X) ) do { A(X) ;
X := f(X) ;
}
Endwhile ;
D(X) ;
V du 1 :
Cho bien A : array[1..n] of 0..k -1 (* vi n u ln *)
e oi 1 so nguyen khong am x c so 10 sang dang c so k ( 2 <= k <= 9 )
vi viec dung mang A e cha cac ky so k phan ( vi quy c ky so co y ngha
thap c cha ch so cao ),ta xay dng thu tuc e quy Convert(x,m) e tao day
ky so k phan :
A[0] , A[1] , . . . , A[m] nh sau :
Convert(x,m)

Tran Hoang Tho

if x <> 0 then
{ A[m] := x mod k ;
Convert(x div k , m-1) ;
}
endif ;

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 45 -

Vi lenh goi Convert(y,n) dung e oi so y sang c so k


Ta co : X
la ( x, m ) ;
B(X) la bieu thc not( x <> 0 )
A(X)
la lenh gan A[m] := x mod k ;
f(X)
la ham f(x,m ) = ( x div k , m - 1 ) ;
D(X)
la lenh rong
oan lenh lap tng ng vi thu tuc Convert(x,m) la :
While (x <> 0) then { A[m] := x mod k ;
x := x div k ;
m := m - 1 ;
}
Endwhile ;
V du 2 :
Tm USCLN cua 2 so nguyen da vao thuat toan Euclide :
USCLN(m,n,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 )

a) oan lenh lap tng ng la :


While (n <> 0 ) do { sd := m mod n ;
m := n ;
n := sd ;
}
Endwhile ;
us := m ;
b) Thu tuc khong e quy tng ng trong Pascal
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 ;

c) Ham con khong e quy tng ng trong C++

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 46 -

void USCLN(int m , int n , int& us )


{ while(n != 0 ) { int sd = m % n ;
m = n ;
n = sd ;
}
us = m ;
}
3 ) Cac ham e qui dang e qui uoi (tail-recusive).
Xet ham e qui dang :
f(g(X)) khi C (X) ung
f(X) =
a (X )
khi C (X) sai
Tc la :
f(X) =
if(! C(X) ) then return( a(X))
else return( f(g(x)) )
Tnh f(Xo ) ,
Ta co :
f(Xo ) = f(g(Xo ))
neu C(Xo ) ung .
= f(g(g(Xo )))
neu C(g(Xo )) ung .
= ...
= f(gk (Xo ))
neu C(gk-1 (Xo )) ung .
= a(gk (Xo ))
neu c(gk (Xo )) sai.
( Vi 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 :
U o = Xo
Ui = g(Ui-1 )

Luc o :

i = 1 ... k . Vi k la so nho nhat ma C(Uk ) sai

f(Xo ) = a(Uk )

Vay oan chng trnh tnh f(Xo) la :


U := Xo ;
while C(U) do U := g(U) ;
f := a(U) ;
{ f = f(xo) }

(4.3)

V du : vi m , n > = 0
USCLN(m ,n ) = if (m <> 0 ) then return(USCLN ( abs(m - n) , min(m , n)
) ;

else return n ;
Trong trng hp nay :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 47 -

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 ;
a) oan chng trnh tnh USCLN(a ,b) la :
m := a ; n := b ;
while ( m <> 0 ) do {
t1 := m ;
t2 := n ;
m := abs(t1,t2 ) ;
n := min(t1,t2 ) ;
}
USCLN := n ;
b ) 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 ;
c) Dang ham tng ng trong C++
int USCLN(int m , int n)
{ while( n != 0) { int t1 = m ; int t2 = n ;
m = abs(t1,t2) ;
if(t1<t2) n = t1 ; else n = t2 ;
}
return(m) ;
}

III . Kh e quy ham ARSAC .


Khao sat ham e qui :
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 .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 48 -

ay la dang tong quat cua mot ham e quy ch goi en chnh no mot lan .
1 ) S o tong quat tnh ga tr A(Xo) :
Goi Uo = Xo la ga tr oi so can tnh cua ham A . Viec thc hien A(Uo)
se phat sinh lenh goi tnh A vi oi so mi U1 = CS(Uo) , ( ga s C(Uo) la true
).
C nh vay , khi ma C(Ui-1 ) con ung th viec tnh A(Ui-1 ) se phat sinh
lenh
tnh A vi oi so mi la Ui =CS(Ui-1 ).
Vi gia thiet la Uo = Xo thuoc mien xac nh cua A , th qua trnh lap lai
cac lenh goi nay phai dng lai sau k lan goi ( khi o C(Uk) false ) .
Ta co day so :
Uo = Xo { cho trc }
Ui = CS(Ui-1)
i=1.. k
( 1 -1)
C(Ui) = true vi i < k , C(Uk) = false ;
Goi :
Vo = A(Uo) = A(Xo) ( ga tr can tnh ).
Vk = BS(Uk) ( C(Uk) = false )
(1 -2)
Vi = A(Ui) = DS(Vi+1 , FS(Ui+1 , Ui ) ) vi i < k
Hai day so {Ui } ,{Vi} c nh ngha nh tren ( (1-1) va (1 -2) ) se c
tnh theo giai thuat sau :
- Tnh va ghi nh cac Ui vi i lan lt t 0 en k theo cong thc (1 -1).
( Vi C(Uo) = C(U1) = ...= C(Uk-1) = True , C(Uk) = False )
- S dung day ga tr Ui e tnh lan ngc Vi vi i t k xuong 0 , Vo chnh
la ga tr can tnh ( Vo = A(Xo) ).
2 ) C che ghi nh day Ui : cau truc stack .
( Giai thuat khong e quy tnh ga tr ham Arsac bang cach s dung cau truc
Stack )
e thc hien giai thuat tren th day Ui phai c tnh va lu tr dan trong mot
cau truc d lieu thch hp , e khi can en chung lai c lay ra s dung . ac
iem quan trong cua day Ui la : th t lay ra s dung ngc vi th t tao sinh .
Cau truc d lieu cho phep lu tr day phan t thoa quy luat vao sau ra trc (
Last In First Out ) la cau truc Stack ( chong ) .
Vi moi Stack S co 2 thao tac c ban la :
+ a mot phan t d lieu X vao cha trong Stack S : push(S,X).
+ Lay ra khoi stack S phan t d lieu c a vao sau cung ( nh ) va
cha no vao bien X , pop(S,X).
Giai thuat khong e qui tnh Vo = A(Xo) da tren 2 cong thc (1 -1 ) , (1- 2 ) va
s dung Stack S la :
* Bc 1 : tnh Ui bat au t Uo theo (1-1) lu vao Stack S
U := Xo ; push(S,U) ; k :=0 ;
while C(U) do begin

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 49 -

U := CS(U) ;
push (S,U) ;
k := k+1 ;
end ;
* Bc 2 : Lay d lieu trong Stack S tnh Vi theo (1 - 2)
pop(S,X) ; V := BS(X) ; {Vk = BS (Uk)}
for i := k -1 downto 0 do
begin
Y := X ;
{ Y := Ui+1}
pop(S,X) ;
{ X := Ui }
V := DS(V,FS(Y,X)) ; { Vi = DS(Vi+1,FS(Ui+1,Ui)) }
end ;
{ V cha ket qua can tnh V = A(Xo) }
C che chong la mot han che nghiem trong cua viec s dung e qui , no chiem
qua nhieu bo nh . V vay ngi ta thng tm cach loai tr no .
3 ) Mot so trng hp kh e qui qua trnh tnh ga tr ham Arsac khong dung
Stack .
3a ) Trng hp thu tuc CS co thu tuc ao .
Trong trng hp nay CS la ham mot mot t mien D len mien D ( CS co ham
ngc )
Goi ham ngc cua ham CS ( CS-1 ) la ham CSM1 .
Ta co
: CSM1(CS(X)) = X vi moi X thuoc D .
Khi o ta khong can lu gi cac gia tr trung gian cua day { Ui } ma ch can
xuat phat t Uk dung CSM1 e khoi phuc lai cac ga tr Ui voi i<k .
Giai thuat tnh A(Xo) se tr thanh :
+ Bc 1 : Da vao (1) tnh Uk
U := Xo ; k := 0 ;
while C(U) do begin U := CS(U) ; k := k+1 end ;
+ Bc 2 : Tnh Vk , Vk-1, .. V1 , Vo da vao Uk ,(2) va CSM1
V := BS(U) ; {Vk := BS(Uk)}
for i := k -1 downto 0 do
begin
Y := U ;
{ Y = Ui+1 }
U := CSM1(U) ;
{Ui = CSM(Ui+1) }
V := DS(V,FS(Y,U)) ;
{ Vi = DS(Vi+1,FS(Ui+1 ,Ui) }
end ;
{V chnh la ket qua can tnh V = Vo = A(Xo)}
3b) 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 :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 50 -

Vo = DS(V1 , FS(U1 ,Uo) = DS(V1 ,Uo ) = V1 T Uo


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 :
Vo = ( V2 T U1 ) T Uo
= ( V2 T Uo ) 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
.......................................................................................................
.......................................................................................................

Vo = ( .... ((( 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 :
Wo = 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(Xo ) ) 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 cong thc ( 3
- 3)
Ket luan : A(Xo) = Vo = Wk .
Giai thuat khong e qui tng ng dc xem nh bai tap .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 51 -

IV . Kh e quy cho mot so dang thu tuc e quy thng gap .


1 ) 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 LT nao co kha nang
tao vung nh stack th mi co the cho phep to chc cac chng trnh con e quy .
Thc hien mot chng trnh con e quy theo cach nguyen thuy rat ton bo nh v
cach t 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 stack cho tng chng trnh con e quy .
Trong phan tiep theo ta se kh e quy cho mot so dang thu tuc e quy theo hng
nay .
2 ) 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)


else { A(X) ;
P(f(X)) ;
B(X) ;
}
Endif ;
(III.2.1)

Vi : X
la bien n hoac bien vec t.
C(X) la mot bieu thc boolean cua X .
A(X) , B(X) , D(X) la nhom lenh khong e quy ( khong cha lenh goi en
P ).
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 B(Y) lai c sinh ra .
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 : B(X) , B(f(X)) , B(f(f(X))) , . . . , B(fi(X)), . . . , B(fk -1(X))
theo th t B(fi(X) trc B(fi -1(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)

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao


C(X) = False
B(X)

- 52 -

A(X) ; ------> P(f(X)) ; Push(S,X)

POP(S,X) ;

C(f(X)) = False
B(U)

A(f(X)) ;--------> P(f(f(X)) ; Push(S,U=f(X))

POP(S,U) ;

C(f(U)) = False
B(U)

A(f(U)) ;--------> P(f(f(U)) : Push(S,U=f(U))

POP(S,U) ;

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------C(f(U)) = True
D(f(U))
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 { A(X) ;
Push(S,X) ; (* cat ga tr X vao stack S *)
X := f(X) ;
}
Endwhile ;
D(X) ;
While(not(EmptyS(S))) do { POP(S,X) ; (* lay d lieu t S *)
B(X) ;
}
Endwhile ;
}
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 { Binary( m div 2 ) ;
write( m mod 2 ) ;
}

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

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 53 -

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
{ sdu := m mod 2 ;
Push(S,sdu) ;
m := m div 2 ;
}
While( not(EmptyS(S)) do { POP(S,sdu) ;
Write(sdu) ;
}
}
3 ) Nhieu lenh goi e quy trc tiep
3a) 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
{ A(X) ; P(f(X)) ;
B(X) ; P(g(X)) ;
}
endif ;
( III.3a - 1)

Qua trnh thc hien thu tuc (III.3a - 1) 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 (III.3a) la :
{ Creat_Stact (S) :
Push (S, (X,1)) ;
Repeat
While ( not C(X) ) do { A(X) ;
Push (S, (X,2)) ;
X := f(X) ;
}
D(X) ;
POP (S, (X,k)) ;
If ( k <> 1) then
{ B(X) ;
X := g(X) ;
}
until ( k = 1 ) ;

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 54 -

}
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 { THN ( n - 1 , X , Z , Y ) ;


Move ( X , Z ) ;
THN ( n - 1 , Y , X , Z ) ;
}
Endif ;

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 { Push (S ,(n,X,Y,Z,2)) ;
n := n - 1 ;
Swap (Y,Z ) ; (* Swap(a,b) la thu tuc hoan oi
}
noi dung 2 bien a ,b *)
POP (S,(n,X,Y,Z,k)) ;
If ( k <> 1 ) then { Move (X ,Z ) ;
n := n - 1 ;
Swap (X ,Y ) ;
}
until ( k = 1 ) ;
}

3b) Trng hp n lan goi e quy trc tiep .


Thu tuc e quy trong trng hp nay co dang :
P(X)
if C(X) then
D(X)
else
{ A1 (X) ; P(f1 (X)) ;
A2 (X) ; P(f2 (X)) ;
............................
Ai (X) ; P(fi (X)) ;

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

Endif ;

- 55 -

............................
An (X) ; P(fn (X)) ;
An +1 (X) ;
}
(III.3b)

Cung giong nh trong trng hp (III.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 { A1 (X) ;
Push (S,(X,2)) ;
X := f1 (X) ;
}
D(X) ;
POP(S,(X,k)) ;
While( k = n+1 ) do { An +1 ;
POP(S,(X,k)) ;
}
If ( k > 0 ) then
{ Ak (X) ;
Push (S,(X,k+1));
X := fk (X)
}
until (k = 1 ) ;
}
V du : Kh e quy cho thu tuc hoan v .
+ Thu tuc hoan v di dang e quy :
HVI(V ,n) If (n = 1 ) then Print ( V )
else for i := 1 to n do
{ Swap (V[n],V[i] ) ;
HVI(V ,n - 1) :
}
Endif ;
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 )

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 56 -

Dang lap cua thu tuc la :


{ Creat_Stack (S) ;
Push (S,(V ,n ,1)) ;
Repeat
While ( n > 1 ) do { Swap(V[n] ,V[1] ;
Push (S ,V , n ,2) ;
n := n -1 ;
}
Print (V) ;
POP (S ,(V ,n ,k)) ;
While ( k = n +1 ) do POP(S ,(V ,n ,k) ;
If(k <> 1 ) then { Swap(V[n] ,V[k]) ;
Push (S ,(V ,n ,k+1) ;
n := n - 1 ;
}
until(k = 1 ) ;
}

____________________________________

$ 5 . BAI TAP
1) Tnh cac e qui sau :
a) Ham ACKERMANN :
A(m,n) = if ( m = 0 ) then n+1
else if (n = 0 ) then A(m -1,1)
else A(m-1,A(m,n-1))
tnh A(0,10) , A(4,0) , A(3,5)
b) f(n,b) = if (n = 0 ) then 0
else 10 * f(n div b,b) + n mod b
Tnh f(1,2) , f(6,7) , f(6,2) .
2) Tm mien gia tr cua cac ham tren.
3) Chuyen cac ham sau ay sang chng trnh PASCAL va C++ :
a) Ham Eckermann
b) Ham tnh MAX cua mot day so thc
c) Ham tnh SUM(tong) cua mot day so thc

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 57 -

4) Hay cho biet ket qua in ra cua chng trnh sau :


program De_qui ;
uses crt ;
procedure second ( i : integer ) ; forward ;
procedure first ( N : integer );
var j , k : integer ;
begin
for j := 1 to N do
begin writeln('= ', 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 ;
begin
clrscr ;
first(5)
end .
5) Cho ham sau :
function CQD(x,y : integer) : integer ;
begin
if (x = 0 ) then CQD := 1
else CQD := x * CQD(x-1,CQD(x,y+1))
end ;
a) Tm mien xac nh cua ham .
b) Hay so sanh vi ham sau dung x nh la bien toan bo:
function CQD1 (y:integer) : integer ;
begin
if (x = 0 ) then CQD1 := 1
else begin
x := x -1;
CQD1 := (x+1) * CQD1(y+1)
end
end

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 58 -

6) Ham sau hoat ong the nao :


function count : integer ;
var letter : char;
begin
read (letter) ;
write letter < > '.' do begin
count := count +1 ;
read(letter)
end
end;
7) Hay lap cac nh ngha ham e qui trong ngon ng PASCAL hoac C++ va
chng trnh tng ng bang vong lap cho moi bai toan sau
a) Tnh so hang th n roi tong n so hang au tien cua cac day so sau :
a1) 1 , 4 , 7 , 10 , 13 , . . .
a2) 20 , 22 , 26 , 28 , 32 , . . .
a3) 3 , 9 , 27 , 81 , . . .
a4) 25 , 5 , 16 , 4 , 9 , . . .
b) Cung nh bai a. Nhng cho cac day so c nh ngha hoi qui nh sau :
b1) Tnh gan ung 1/x vi 0< x < 1 bang day so :
Ao = 1 , Co = 1 - x
Ai = Ai -1 * (1 + Ci -1 )
i>0
Ci = Ci -1 * Ci - 1
i>0
b2) Tnh sqrt(x) vi 0<x<2 bang day so :
a o = x , co = 1 - x
ai = ai -1 * (1 + ci -1 /2)
i>0
ci = ci -1 * (3 + ci -1 )/4
( Th lim an = sqrt(x) khi n dan ti vo han va cn ai dien sai so ).
c) Tnh xap x sin(x) bang :
sin(x) ~ x - x3 /3! + x5 /5! ... + (-1) 2*i -1 * xi -1 ) /(2*i-1)! ...
d) Tnh xap x cos(x) bang :
cos(x) ~ 1 - x2/2! + x4 /4! ...
e) e tnh gia tr cua a thc
F(x) = an xn + . . . + a2 x2 + a1 x + ao tai xo vi t phep tnh ,ngi ta
thng trnh theo s o Horner:
F(xo) = (...((an * xo + an -1 ) * xo + an -2 ) * xo + . . . + a1 ) * xo + ao
8) Vi moi bai toan sau , hay dung quan niem e qui e giai bai toan roi chuyen
thanh vong lap while .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 59 -

a) co 2 array a , b : array [1..n ] of 1..k -1 ang cha cac ky so cua 1 so bieu dien
di dang k phan vi ky so thap nhat v tr ch so cao nhat .
Hay cong a vi b roi cha trong c (hay chnh a) .
b) cung nh cau a nhng la toan nhan
c) array a , kem vi mot so k bieu th a thc .
A(x) = a[0] + a[1] * x + a[2] * x2 + . . . + a[k] * xk
Hay tnh ao ham bac m cua a(x) (cha trong a)
d) co hai a thc A(x) , B(x) c bieu dien nh cau c . Hay tnh thng va
d Q(x) va R(x) trong phep chia A(x) cho B(x) .
Tc la : A(x) = Q(x) B(x) + R(x) vi bac R < bac B
9). Hay chuyen thanh vong lap thu tuc sau :
procedure P(a : integer ; var b :real) ;
begin
if a > 0 then
begin
b := b+2 ;
P(a -1,b)
end
end
10). Loai bo lenh goi e qui cuoi trong bai toan Thap ha noi .
11). Loai bo lenh goi e qui cuoi trong thu tuc sau (quicksort) nham xap xep th
t mot mang T
procedure quicksort (inf,sup : integer) ;
var i : integer ;
begin
if (inf < = sup ) then begin
i := segment (inf,sup) ;
quicksort (inf, i -1) ;
quicksort (i+1, sup)
end
end
Voi segment la mot ham tac ong len mang T va cho ve mot gia tr ch so. Ham
nay khong co lenh goi e qui .
12) Vi moi trng hp di ay,moi ham se c cho bang cach nhan xet tnh e
qui cua no.Hay viet nh ngha ham e qui tng ng,nhan nh tnh chat cua moi
ham nay
Viet chng trnh e qui tng ng bang ngon ng PASCAL (hoac C++) , va sau
o viet chng trnh di dang khong e qui tng ng :
a) Phep nhan :
cach 1 : TICH(a,b) = 0
neu b=0

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 60 -

= a + TICH(a,b -1) neu b>0


cach 2 : TICH(a,b) = 0
neu b=0
= 2 * TICH(a,b div 2) + a * (b mod 2) neu b>0
b) Tnh USCLN cua 2 so : ham USCLN vi hai oi so nguyen khong am a,b .
cach 1 : USCLN(a,b) = USCLN(b,a)
= a
neu b = 0
= USCLN (b,a - b) neu a > b
cach 2 : USCLN(a,b) = USCLN (b,a)
= a
neu b = 0
= USCLN(b,a mod b) neu a > b>0
13) Kh e quy cho thu tuc dang
a) P(x) begin
if cd(x) then A(x)
else begin
B(x) ; P ; C(x)
end;
D(x) ;
end
b) P

c) P

begin
I(x) ;
if cd(x) then A(x)
else begin
B(x) ; P ; C(x)
end ;
D(x)
end ;
if cd(x) then begin
B(x) ; P ; C(x)
end;

d) P

if cd(x) then begin


P ; C(x)
end
else A(x) ;

e) P

if ( i > 0 ) then

Tran Hoang Tho

repeat
A;

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 61 -

P;
B;
until cd ;
else C ;
14) Kh e quy cho bai toan thap Ha noi
15) Kh e quy cho bai toan SortMerge
________________________________

PHAN III :

KIEM CHNG CHNG TRNH

$1 . CAC GIAI OAN TRONG CUOC SONG CUA MOT PHAN


MEM
Viec s dung may tnh e giai quyet mot bai toan thc te thng bao gom
nhieu viec. Trong cac cong viec o cong viec ma 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
bc sau :
Bc 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).
Bc 2 : Xay dng he thong :
Trong bc nay se tuan t thc hien cac cong viec sau :
- Thiet ke : Xay dng mot mo hnh mot 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 cung nh moi tng tac cua moi module vi cac module
khac. Chc nang cua moi module se c nh ro bi ac ta cua module.
- Trien khai tng module va th nghiem :
Viet chng trnh thc hien "ung" cac ac ta a c at ra, thng th tnh
ung nay c thuyet phuc bang viec th chng trnh tren nhieu bo d lieu th.
e co tnh thuyet phuc cao, ngi ta can th nghiem cang nhieu lan cang tot. Khi
th neu co sai th phai sa lai chng trnh . Giai oan th nghiem nay thng
rat ton thi gian va cong sc.
- Th nghiem mc o he thong :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 62 -

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.
Bc 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 yeu cau cua bai toan,
hay phat hien loi sai cua chng trnh. Khi o can xem lai chng trnh va sa oi
chung.
T mo ta tren, ta rut ra c 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
can oi hoi mot phng phap tot khi xay dng cac he phan mem : can chia cat tot
he thong; can s dung cac cau truc n gian, chuan va co he thong khi viet
chng trnh; can co su lieu ay u.
b) Can am bao tnh ung. Lam the nao e xay dng mot chng trnh "ung"
?
Mot chan ly n gian la :
- Phep th chng trnh ch cho kha nang phat hien chng trnh sai ch
khong chng minh c chng trnh ung .
- Khong the th het c moi trng hp .Ngay ca khi chng trnh n
gian .
Ngi ta luon mong muon chng minh chng trnh ung bang logic thay v th
nghiem chng trnh.
Co 2 cach chnh c s dung e am bao tnh ung cua phan mem trong qua
trnh xay dng he thong (bc 2) :
- 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 tnh ung luon la mot chu e suy ngh cua nhng ngi lap trnh .

$2. AC TA
I . ac ta bai toan :
1 . 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 cac d kien nhap thoa man nhng ieu kien nhat nh.
- Xay ra trong mot khung canh moi trng c han che nhat nh.
- Se san sinh ra mot tap hp d kien xuat c quy nh trc ve cau truc va
co moi quan he vi d kien nhap va moi trng c xac nh trc .
Nhng kha canh tren c the hien trong ac ta bai toan (TBT) .
2 . Tac dung cua ac ta bai toan .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 63 -

- 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 ngi giai bai toan trien khai cac giai phap cua mnh .
- La c s e ngi giai bai toan kiem chng ket qua .
- La phng tien e nhieu ngi (co ca nhng ngi ngoai) 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) .

II. ac ta chng trnh (TCT).


TCT gom cac phan sau :
- D kien 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 kien nhap : la nhng ieu kien ma d lieu nhap
phai thoa e chng trnh hoat ong ung . Chng trnh khong bao am cho ket
qua ung neu d kien khong thoa cac ieu kien nay .
Trong phan mo ta d kien nhap can neu c :
+ Cau truc : kieu d lieu, cac thanh phan, s ket noi cac thanh phan.
+ Cac rang buoc tren ka tr cua chung .
- D kien xuat : Cac d kien ma chng trnh tao ra . Cung nh phan d kien
nhap, can neu ro danh sach d kien xuat, cau truc cua chung, co khi can neu
phng tien xuat cua moi d kien xuat.
- ieu kien rang buoc tren d kien xuat : Nhng ieu kien rang buoc ma d kien
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 kien nhap .
V du :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 64 -

a) Viet chng trnh oc vao mot so nguyen dng N roi xuat ra N so nguyen to
au tien.
ac ta chng trnh :
+ D kien nhap : mot so nguyen N .
+ ieu kien nhap : N > 0 .
+ D kien xuat : mot danh sach gom N so nguyen .
+ ieu kien xuat : o la N so nguyen to au tien .
b) Viet chng trnh oc vao mot day N so nguyen , xuat day a sap xep theo
th t khong giam.
ac ta chng trnh :
+ D kien nhap : mot array A co N phan t la so nguyen .
+ ieu kien nhap : khong co .
+ D kien xuat : array A' co N phan t la so nguyen.
+ ieu kien xuat : A' la mot hoan v cua A va A' la mot day khong giam,
tc la : 1 <= i < j <= N ==> A'[i] <= A'[j]

III. ac ta oan chng trnh :


Moi chng trnh s dung mot tap cac bien. Moi bien thuoc mot kieu xac nh.
Moi kieu xac nh mot tap ga tr ma moi bien thuoc kieu co the nhan (mien xac
nh ).
Tap gia tr lien ket vi 1 bien S ma no co the nhan goi la khong gian trang thai
(state space) cua S . Neu chng trnh s dung cac bien a , b , c ,. . . vi cac khong
gian trang thai tng ng la : A , B , C ,... th khong gian trang thai cua ca chng
trnh la tch Decartes cua A,B,C,... ( A X B X C X ..) .
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
chng trnh ), ket thuc tai trang thai cuoi ( trang thai khi chng trnh ket thuc).
tng thi iem trc hoac sau khi thc hien mot lenh , ngi ta can 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>0) and (y=b>0) and (u+x*y = a*b) } < Cac rang buoc trung gian :
repeat
{ u+x*y = a*b and y>0 } <
trang thai cua CT,
u := u + a ;
(bat chap k nhap )
y := y - 1 ;
thi iem nay phai thoa
{(u+x*y = a*b) and (y >= 0) }
<
cac rang buoc nay
until (y= 0)
{u= a*b} < rang buoc tren trang thai xuat
Moi tan t trong v du tren bieu th tap hp cac trang thai co the co c iem
o.

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 65 -

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 can 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 ky hieu 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 = xo * 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 ) }
Nhn chung ngi ta can khao sat mot oan chng trnh S vi 2 ieu kien : ieu
kien i trc P va ieu kien i sau Q, dang :
{P}
S
{Q } .
can chng minh rang neu S bat au t trang thai thoa P th can phai ri vao mot
trang thai cua Q. P c goi la ieu kien au (k) (precondition).
Q c goi la ieu kien cuoi (postcondition)(kc). Cap (P,Q), c goi ac ta cua
oan lenh S.
Viec thiet lap cac khang nh nhng iem khac nhau trong chng trnh la nham
e :
+ Hoac la ac ta mot oan chng trnh can phai xay dng : co P, Q tm S.
+ Hoac la c s e chng minh tnh ung cua oan chng trnh ( oan chng
trnh thoa man ac ta ).
+ Hoac e ghi chu (thc hien su lieu chng trnh) nham muc ch lam ngi
oc hieu c y ngha cua oan chng trnh.

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 66 -

$3. NGON NG LAP TRNH


e kiem chng tnh ung cua mot oan chng trnh,au tien ta 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 x ly c s va cac
cau truc ieu khien c ban .
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>
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 ';'

$4 . CHNG MINH TNH UNG CUA CHNG TRNH


I. Ky hieu { P } S {Q}

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 67 -

P va Q la cac tan t tren cac bien cua chng trnh va co the bao gom cac bien
gia (ghost variable) .
{P} S {Q} la cach viet gon cua phat bieu sau :
Neu trang thai ban au cua cac bien chng trnh thoa man tan t P va gia
nh oan lenh S dng vi cac gia tr nay cua cac bien, th sau khi S c thi
hanh, trang thai cuoi cua cac bien cua chng trnh se thoa man tan t Q.
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 k P bao am s dng cua S.
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 )

khi

khi

b) {( t = x = xo ) and (y = yo ) }

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

x := y
{ (t = xo ) and (x = y = yo ) }

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

y := t
{( y = xo ) and (x = yo ) }

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

Cac phat bieu a, b, c la ung theo cam tnh cua ta ve lenh gan.
( ti ay ta cha co u c s ly luan e khang nh tnh ung cua a, b, c )
d) { x > 0 }
x := x-1
{x>0}

Neu (x > 0 ) trc khi


x := x-1 c thc hien
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 ti trang thai x = 0 khong thoa Q ( x >
0).

II. He luat Hoare ( Hoares inference rules)


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 cau truc cua ngon ng (cac
lenh c ban ) dung viet chng trnh ( ay la ngon ng cot loi a c gii thieu
$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 ) se c xet di ay .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 68 -

1) Cac luat he qua (Consequence rules)


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

{P} S {R}

( 4.1)

Neu k P manh hn ieu kien Q - tc la 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) CM : { x = 3 } x := 5 ; y := 2 { x = 5, y = 2 }
V : {true} x := 5 ; y := 2 { x = 5 ; y = 2 } (a) ( cong nhan)
va ( x = 3 ) => true
(b) (hien nhien )
T a ,b va luat he qua 1a ta suy ra :
{ x = 3 } x := 5 ; y := 2 { x = 5, y = 2 } (pcm )
2) CM : { x > 3 } x := x -1 { x > 0 }
V : { x > 1 } x := x-1 { x > 0 } (a) ( cong nhan )
va ( x > 3 ) => ( x > 1)
(b) (hien nhien )
T a ,b va luat he qua 1a ta suy ra :
{ x > 3 } x := x -1 { x > 0 }
( pcm )
1b.

V du :

Q => R , {P} S {Q}

{P} S {R}

(4.2)

1) CM : { true } x := 5 ; y := 2 { odd(x) and even(y) }


V {true} x := 5 ; y := 2 { x = 5 , y = 2 } (a) (cong nhan )
va ( (x = 5) and (y = 2)) => odd(x) and even(y) (b) ( hien nhien )
T a ,b va da vao luat he qua 1b ta suy ra :
{ true } x := 5 ; y := 2 { odd(x) and even(y) } (pcm)
2) CM : { x > 1 } x := x -1 { x >= 1 }
V { x > 1 } x := x-1 { x > 0 } (a) ( cong nhan )
va ( x > 0 ) => ( x >= 1)
(b) ( hien nhien )
T a,b va da vao luat he qua 1b ta suy ra :
{ x > 1 } x := x -1 { x >= 1 }
(pcm )

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.

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 69 -

2) Tien e gan ( The Assignement Axiom )

{ P(expr) } x := expr { P(x) }

(4.3)

T (4.3) ta suy ra neu trc lenh gan x := expr ; trang thai chng trnh lam
P(expr) sai (thoa not P(expr) ) th sau lenh gan P(x) cung sai (thoa not P(x)).
Vay tac dung cua lenh gan c mo ta bi tien e gan la : Lenh gan x := expr ;
xoa gia tr cu cua bien x , va cho x nhan gia tr mi la tr cua bieu thc gan
(expr ), con tat ca cac bien khac van gi gia tr nh cu.
V du : 1) { x = x } y := x { x = y }
2) { 0 <= s + t - 1 } s := s + t - 1 { 0 <= s }
3) { i = 10 } j := 25 { i = 10 }
3) Cac luat ve cau truc ieu khien ngon ng
3.1 Luat ve day lenh tuan t ( Rules on Sequential Composition )

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

{P} S1 ; S2 {Q}

(4.4)

Gia nh co tnh dng cua S1 va S2, luat nay mo ta noi dung sau :
Neu : i) Thi hanh S1 vi k P am bao kc R
va
ii) Thi hanh S2 vi k R am bao kc Q
Th : Thi hanh S S1 ; S2 vi k P am bao kc Q
V du : CM : {true} x := 5 ; y := 2 { x = 5, y = 2 }
ta co : { 5 = 5 } x := 5 { x= 5}
(1) (tien e gan )
true => 5 = 5
(2) (hien nhien )
( x = 5) => ( (x = 5) and (2 = 2) )
(3) (hien nhien )
T 1,2,3 theo luat he qua, ta co :
{true} x := 5 { x = 5, 2 = 2 }
(4)
{ x = 5 , 2 = 2 } y := 2 { x = 5, y = 2 } (5) (tien e gan )
T 4,5 theo luat tuan t
{true} x := 5 ; y := 2 { x = 5, y = 2 }
(6) (pcm)
3.2) Luat ve ieu kien (chon) (Rule for conditionals)
3.2a
{ P and B } S1 {Q} , { P and (not B) } S2 {Q}

{P} if B then S1 else S2 {Q}

Tran Hoang Tho

(4.5)

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 70 -

Y ngha luat nay la :


Neu chng minh c :
{ P and B }
+ Neu xuat phat t trang thai thoa P and B
S1
thi hanh S1
{Q}
th se ti trang thai thoa Q
Va
{ P and notB }
S2
{Q}

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


thi hanh S2
th se ti trang thai thoa Q

Th suy ra rang :
{P}
if B then S1 else S2
{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 .

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

{P} if B then S {Q}

(4.6)

V du :
(1) CM : { i> 0 } if ( i= 0 ) then j := 0 else j := 1 {j=1}
T : ((i> 0) and (i = 0)) false
suy ra : {(i> 0 ) and (i = 0)} j := 0 {j=1} (a)
( {false } S {Q} ung vi moi S , moi Q )
T : ( (i> 0) and not(i = 0)) ( i > 0 ) (i > 0 ) and (1 = 1)
==> ( 1 = 1 )
va : { 1 = 1 } j := 1 {j=1}
(theo tien e gan va luat he qua)
suy ra : {(i >0) and not(i = 0)} j := 1 {j=1} (b)
T a ,b da vao luat ve ieu kien 3.2a suy ra pcm .
(2) CM {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}
(tien e gan)
((i >= j -1) and (i > j)) ==> (i >= j+1)
(bien oi)
{(i >= j -1) and (i > j)} j := j + 1 {i >= j} (a) (Luat he qua)
{i+1 >= j} i := i+1 {i >= j}
(tien e gan)
((i >= j -1) and not(i > j)) ==> (i+1 >= j)
{(i >= j-1) and not(i > j)} i := i + 1 {i >= j} (b) (Luat he qua)
T a , b s dung 3.2a ta suy ra pcm .
(3) CM {true} if odd(x) then x := x+1 {even(x)}

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 71 -

T : {even(x+1)} x := x+1 {even(x)}


(tien e gan)
va : true and odd(x) ==> even(x+1)
(tnh chat even)
suy ra : {true and odd(x)} x := x+1 {even(x)} (a) (luat he qua)
Va :
true and not odd(x) ==> even(x) (b) ( hien nhien )
T (a) va (b) dung luat dieu kien 3.2b suy ra PCM .
3.3) Luat ve lenh lap While
{ I and B } S { I }

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

(4.7)

ay thay cho P va Q tong quat, ta co k va kc cung da tren mot khang


nh, thc ra kc khac k khang nh not B ch v not B la ieu kien dng cua
vong lap.
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.
V ly do nay I c goi la bat bien (invariant) cua vong lap.
Chu y rang khang nh : {P} while B do S {Q} ch xac nh tck
(conditionnal correctness). e chng minh tnh ung (correctness) thc s ta can
bo sung chng minh lenh lap dng.
V du :
(1) CM : {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}
(de kiem chng)
Nen {I} while ( i < n ) do i := i+1 { I and not(i<n)}
Ma I and not(i<n) (i <= n) and ( i >= n ) ==> i=n
Ta co ieu phai chng minh.
(2) CM : { tg = 0 , i = 0 , n > 0}
while ( i <> n ) do begin i := i + 1 ; tg := tg + i end
{tg = n * (n+1)/2}
( tc tg = 1 + 2 + ..... + n )
ay : I la ( tg = i * (i+1)/2 )
De kiem chng
{tg = i*(i+1)/2 , i<>n} i := i+1 ; tg := tg + i { tg = i*(i+1)/2} (a)
(tien e gan va tuan t )
( tg = 0) and (i = 0) and (n >0) ==> tg = i*(i+1)/2 (b) ( hien nhien )
( tg = i*(i+1)/2) and not(i<>n) ) ==> tg = n*(n+1)/2 (c) ( hien nhien )
(a) cho ta khang nh { I and B } S { I }
(b) cho ta khang nh P ==> I
(c) cho ta khang nh I and not B ==> Q
T a theo luat lap ta suy ra : { I } While B do S { I and not B } (d)
T b ,d ,c du2ng cac luat he qua ta suy ra : {P } While B do S {Q } ( pcm )

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 72 -

III. Kiem chng oan chng trnh khong co vong lap :


(Verification of nonlooping programs)
Cho : P, Q la cac tan t tren cac bien cua chng trnh , S la mot lenh to hp t
cac lenh gan va lenh ieu kien dung cau truc tuan t. Chng minh : {P} S {Q}.
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 .
1) Bai toan 1 : S la day tuan t cac lenh gan .
V du : 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
1. {(x = yo ) and ( t = xo) } y := t {(x = yo ) and ( y = xo ) } (tien e gan)
2. {(y = yo ) and ( t = xo ) } x := y {(x = yo ) and ( t = xo ) } (tien e gan)
3. {(y = yo ) and ( t = xo ) } x := y ; y := t {(x = yo) and ( y = xo ) }
( 2,1 va tuan t )
4. {(y = yo ) and ( x = xo ) } t := x {(y = yo ) and ( t = xo ) } (tien e gan)
5. ( (x = xo ) and (y = yo ) ) ==> ( ( y = yo ) and ( x = xo ) }
(giao hoan)
6. {( x = xo ) and (y = yo ) } t := x {(y = yo ) and ( t = xo ) } (4, 5 va luat he
qua)
7. {(x = xo ) and ( y = yo ) } t := x ; x := y ; y := t {(x = yo ) and ( y = xo ) }
( pcm )
(6, 3 va luat tuan t)
k
b) CM : { (m :: k=2*m) and (y * z = c)}
k := k div 2 ;
z := z * z ;
{ y * zk = c}
Chng minh :
1. {y * (z*z)k = c} z := z * z {y*zk = c}
(tien e gan)
k div 2
k
2. {y * (z*z)
= c} k := k div 2 {y*(z*z) = c} (tien e gan)
3. {y * (z*z)k div 2 = c} k := k div 2 ; z := z*z {y*z)k = c}
(1., 2. luat tuan t)
4. (m :: k = 2*m) and ( y * zk = c ) ==> (y*z2m = c) and ( m = k div 2 )
==> y * (z*z)k div 2 = c
5. T 3, 4 va luat he qua ta co pcm .
Nhan xet :
Vi day tuan t cac lenh gan, viec chng minh {P} S1; ...;Sn {Q} 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}
tien e gan
{Pn-1 } Sn-1 {Pn-1 }
tien e gan
{Pn-1 } Sn-1 ; Sn {Q}
luat ve day lenh tuan t
...

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 73 -

...
{P1 } S1 ;...; Sn {Q} (a)
sau n-1 lan tng t nh tren.
Sau o chng minh logic rang :(dung cac tnh chat cua d kien)
P ==> P1 (b)
T a ,b, da vao luat he qua ta co :
{P} S1 ;...; Sn {Q} (pcm )
2) Bai toan 2 :
2a) {P} if B then S1
else S2 {Q}
Vi S1, S2 la nhom cac lenh gan , B la bieu thc boolean.
Cach chng minh :
+ Tm P1, P2 thoa :
{P1} S1 {Q} (a1)
{P2} S2 {Q} (b1)
+ Chng minh ( dung cac tnh chat logic va ai so )
P and B
==> P1 (a2)
P and (not B) ==> P2 (b2)
+ Suy ra t luat he qua
a1, a2 suy ra
{P and B} S1 {Q} (a)
b1 ,b2 suy ra
{P and (not B)} S2 {Q} (b)
+ T a , b va luat ve ieu kien suy ra :
{P} if B then S1 else S2 {Q} (pcm )
2b) {P} S1 ;
if B then S2 else S3 {Q}
(*)
(vi S1, S2, S3 la day cac lenh gan.)
V du :
{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} S1 {R}
va {R} if B then S2 else S3 {Q} roi dung luat he qua e co (*)
Lam the nao e tm c R ? Do S2 va S3 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} (a)
va
{V} S3 {Q} (b)
D nhien ta muon U va V la cac ieu kien tong quat nhat (tc la U , V la cac
tan t yeu nhat thoa a , b ). 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)
( ly luan chat che se c ch ra cac phan sau )
U,V, R c xay dng nh vay la yeu nhat (weakest precondition) e at c Q
tng ng vi cac lenh S2, S3 va if B then S2 else S3, thng c ky hieu la :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 74 -

WP(S2,Q), WP(S3,Q) va WP(if B then S2 else S3,Q) tng ng. (Tnh chat
cua toan t wp se c nghien cu mot muc sau) .
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 )
S1 la lenh gan : x := y - 1 ;
S2 la lenh gan : x := x * x ;
S3 la lenh gan : y := y - 1 ;
1. {x2 >= y} x := x*x {x >= y} (tien e gan )
vay :
U x2 >= y
2. {x >= y-1} y := y-1 {x >= y} (tien e gan )
vay :
V x >= y-1
at R ((y > 3) ==> (x2 >= y)) and ((y <= 3) ==> (x >= y-1))
Ta chng minh c de dang.
3. R and (y>3) ==> (x2 >= y)
4. R and (not(y>3)) ==> (x >= y-1)
nen theo luat he qua
5. {R and y>3} S2 {x >= y}
( {R and B} S2 {Q} )
6. {R and not(y>3)} S3 {x >= y} ( {R and (not B)} S3 {Q} )
Theo luat ve lenh chon
7. {R} if ( y>3) then x := x*x else y := y-1 {x >=y}
theo tien e gan.
8. {((y>3) ==> ((y-1) 2 >=y)) and ((y <=3) ==> ((y-1) >= (y-1)))} x := y -1
{R}
De kiem chng c
9. (y>3) ==> ((y-1) 2 >= y ) not(y>3) or ((y-1) 2 >= y ) true
10. (y<=3) ==> (y -1) >= y-1 ) not(y<=3) or (y >= y )
true
2
Nen : 11. (y >0) ==> ((y>3) ==>((y-1) >=y)) and ((y<=3) ==> ((y-1) >=(y-1)))
Theo luat he qua ta co :
12. {y > 0}
x := y-1;
if (y>3) then x := x*x else y := y-1
{ x >= y}
(pcn )
V du 2 :
kiem chng ac ta :
{ true }
if ( i <= j) then if (j<k ) then m := k
else m := j
else if( i<k) then m := k

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 75 -

else m := i
{(m >= i) and (m >= j) and (m >= k)}
at Q(m) ( m >= i) and (m >= j) and (m >= k)
1. {Q(i)} m := i {Q(m)}
(tien e gan)
2. {Q(k)} m := k {Q(m)}
(tien e gan)
3. 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 m := k else m := i {Q(m)}
4. Tng t at R2 ( ( j<k) ==> Q(k) ) and ((j >= k) ==> Q(j))
Ta co: {R2} if (j < k ) then m := k else m := j {Q(m)}
5. Dung bien oi ai so va logic e chng minh
5a. ( true and ( i <= j)) ==> R2
5b. ( true and ( i > j )) ==> R1
6. T 3,4, va 5, theo luat ve lenh chon ta co pcm.
Nhan xet :
e chng minh {P} S {Q} vi S la to hp lenh gom ch cac lenh gan va ieu
kien. Ta thc hien cong viec xac nh 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. Giai
thuat tm P1 c trnh bay di dang mot ham e quy nh sau :
Function DKDYN (S : nhom_lenh ; Q : tan_t ) : tan_t ;
var e : cau lenh ;
begin
if (S <> rong ) then
begin
e := lenh_cuoi(S);
S := S - e ;
if ( e = lenh_gan(x:=expr)) then DKDYN := DKDYN(S,Q( x ^ expr
))
else {lenh if}
DKDYN := (ieu_kien(e)==>DKDYN(phan_ung(e),Q)
and not ieu_kien(e)==>DKDYN(phan_sai(e),Q))
end
else DKDYN := Q
end ;
Vi Q(x^expr) la tan t co c bang thay bien x trong Q bang expr .
DKDYN(phan_ung(e) ,Q ) la ga tr ham tm DKDYN ng vi oan lenh sau t
khoa THEN cua lenh ieu kien e va Q , DKDYN(phan_sai(e) ,Q ) la ga tr ham
tm DKDYN ng vi oan lenh sau t khoa ELSE cua lenh ieu kien e va Q .

IV . Kiem chng oan chng trnh co vong lap .


1. Bat bien

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 76 -

Mot tnh chat ac thu cua lao ong tr oc la no thng thoat khoi cong viec cu the
ma no ang thc hien, khao sat ket qua ma no a tm c va luon luon tm kiem,
va thng phat hien c, cac khuon mau (bat bien ). 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.
V du : 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 : kicked, jumped, walked ... bang cach 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 biet 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 xem 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. Vay hnh ke tiep se la hnh vuong .
(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 en. Vay hnh ke tiep se la hnh vuong nho
mau en .
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
bien thien lien tuc trong trang thai cac bien, 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 (bat bien) nao o the hien bi ac
ta cua no.
Mo hnh bien oi trang thai Ct cua vong lap while B do S

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao


Trang thai

----->

trc vong lap


Trang thai
sau lan lap th ------> 1

- 77 -

S -------->

------> ....

S -------> Trang thai


sau vong lap

Viec nhan thc 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 ;
for i := 1 to n do tg := tg + a[i] ;
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])
2. Ly luan quy nap (Inductive Responding) va chng minh bang quy nap (Proof by
Induction)
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) cac 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.
Nguyen ly cua Quy nap toan hoc n gian :
(Principle of simple Mathemmatics Induction)
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 hoc

Ky thuat lap trnh nang cao

- 78 -

+ 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 .
T (i) va (ii) va da vao nguyen ly quy nap toan hoc , ta ket luan P(n) ung vi
moi so t nhien n >= 1 .
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.
3.1. 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 .
e chng minh W thoa ung ac ta P,Q ta can ch ra 2 ieu :
(a) 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 ).
(b) {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 (b) ta co the dung he luat Hoare ma chu yeu la phai phat hien
c bat bien I.
e chng minh W dng ta can da tren cac bien b thay oi trong vong lap
thng da vao mot ham f nhan ga tri nguyen cua cac bien chng trnh va ch ra
rang :
(i) au moi lan lap, neu B thoa th f > 0 .
Tc la : I and B ==> f > 0
(ii) Moi lan thc hien S se lam giam thc s gia tr cua f.
Neu (i) va (ii) thoa th S khong the lap vo tan c (v sau hu han lan thc
hien S th f < 0 tc la B se nhan ga tr false ).

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 79 -

V du : Cac vong lap sau ay dng :


a) {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
k. f giam sau moi lan lap ( v k := k - 1 ). Vay vong lap dng .
b) {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 la max(a,b). Ta luon co bat bien max(a,b) > 0 au vong lap, f giam
sau moi lan lap.
3.2. V du ve chng minh chng trnh co vong lap .
Xet ac ta oan chng trnh sau nham tnh tch 2 so nguyen M va N vi N >=
0

( dung thuat toan cong e thc hien phep toan nhan )


{ N >= 0 }
R := 0 ;
X := N ;
while (X <>0 ) do begin
R := R + M ;
X := X - 1 ;
end ;
{R=M*N }

Ta co :

k P la ( N >= 0 )
kc Q la ( R = M * N )
a) Chng minh tnh ung co ieu kien {P} S {Q}
* oan lenh trc vong lap :
Ta co : ( N = N ) and (0 = 0 ) and ( N >= 0 ) ==> ( N >= 0 ) (a) (hien nhien )
{( N = N ) ,(0 = 0 ) , ( N >= 0 ) } R := 0 ; X := N { ( X = N ) , (R = 0 ) , ( N >= 0 )
}
(b) (tien e gan, luat tuan t ) .
T a ,b dung luat he qua ta suy ra :
{N >= 0 } R := 0 ; X := N { ( X = N ) , (R = 0 ) ,( N >= 0 ) } (1) .
* Vong lap :
{ P } While BT do S { Q } .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 80 -

Vi P ( X = N ) and ( R = 0 ) and ( N >= 0 )


Q (R = M*N)
BT ( X <> 0 )
S R := R + M ; X := X - 1 ;
+ Phat hien bat bien :
Bat bien ay la : so lan X b giam i chnh la so lan R c cong them M .
Tc la : R luon co ga tr M * ( N - X ) )
Ta xem bat bien la : I ( R = M * (N - X) ) and ( X >= 0 )
( khang nh (X >= 0 ) c them vao e chng minh vong lap dng )
+ Chng minh vong lap gi c bat bien I :
( Tc la CM { I and BT } S { I } ung )
Ta co : I and BT ( R = M * ( N - X ) ) and ( X >= 0 ) and ( X <> 0 )
( R + M = M * N - M * X + M ) and ( X > 0 )
(R + M = M * N - M * ( X - 1 )) and ( X - 1 > = 0 )
{ (R + M = M * N - M * ( X - 1 )) , ( X - 1 > = 0 ) }
R := R +M ; X := X - 1
{ (R = M * N - M * X ) , ( X > = 0 ) } (2) ( tien e gan va tuan t )
(2) chnh la { I and BT } S {I }
T 2 theo luat ve lenh lap ta co :
{ I } While BT do S { I and not(BT) }
Tc la :
{(R = M*(N -X)) and (X > = 0 )}
While (X <> 0 ) do begin R := R +M ; X := X - 1 ; end
{(R = M*(N -X)) and (X > = 0 ) and not(X<>0 ) } (3)
T (1) va (3) ta co :
{ N >= 0 }
R := 0 ; X := N ;
{ (X = N) and (R =0) and (N >= 0 ) } (2)
{(R = M*(N -X)) and (X > = 0 )}
(2a)
While (X <> 0 ) do begin R := R +M ; X := X - 1 ; end
{(R = M*(N -X)) and (X > = 0 ) and not(X<>0 ) } (3)
{ R = M * N } (3a)
e hoan tat chng minh tck ta can ch ra :
( (X = N) and (R =0) and (N >= 0 ) ) ==> ((R = M*(N -X)) and (X > = 0 )) (4)
va :
( (R = M*(N -X)) and (X > = 0 ) and not(X<>0 ) ) ==> ( R = M * N } (5)
Tnh ung cua 4 ,5 c khang nh de dang (da vao cac tnh chat ai so va logic
cua cac bieu thc ).
b. Chng minh tnh dng :
at f X , ta co :
(i) I and BT ( R = M * (N - X) ) and ( X >= 0) and (X<>0 )
=> (X > 0 ) => ( f > 0 )

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 81 -

(ii) Moi lan lap, f b giam mot n v.


T (i) va (ii) ta ket luan c tnh dng . T (a) va (b) ta suy ra tnh ung ay u
cua ac ta oan chng trnh tren oi vi k P, kc Q.
3.3. Nhan xet :
Ta co the chng minh tck cua oan chng trnh tren bang cach sau :
* Bc 1 : Xay dng mot lc o chng minh n hp ly bang cach chen them
cac khang nh trung gian co c nh s dung cac tien e gan, va cac tien e ve
cac cau truc ieu khien.
Bang cach o ta co lc o chng minh sau :
{ N >= 0 } ( { P } )
{(0 = M * (N - N)) and (N >= 0)}
(5)
R := 0 ;
{(R = M * (N - N)) and (N >= 0)}
(4)
X := B ;
{( R = A*(B - X )) and (X >= 0)} ( {I} ) (1)
while (X <>0 ) do
begin
{( R = M*(N - X)) and (X >= 0) and (X<>0)} ( {I and BT } ) (2)
{(R+M = M*(N - (X -1)) and (X -1 >= 0)} (7)
R := R + M ;
{(R = M*(N - (X -1)) and (X -1 >= 0)} (6)
X := X -1 ;
{(R = M*(N -X)) and (X >= 0)} ({I}) (1)
end
{( R = M*(N -X)) and (X >= 0) and (X <> 0)} ({ I and not(BT) }) (3)
{ R = M*B}
Ly le e bo sung la :
1 do phat hien c bat bien I
2 ,3 da vao luat lap
4, 5 va 6 ,7 do tien e gan
* Bc 2 : Da vao lc o chng minh tnh ung ma cong viec la : chng minh 2
khang nh i lien nhau dang {T} {U} xuat hien trong lc o th thoa T ==> U
Tc la chng minh cac quan he sau :
( N >= 0 ) ==> (0 = M * (N - N)) and (N >= 0)
( hien nhien )
( R = M*(N - X)) and (X >= 0) and (X<>0) ==>
(R+M = M*(N - (X -1)) and (X -1 >= 0) (hien nhien )
( ( R = M*(N -X)) and (X >= 0) and (X <> 0)} ==> ( R = M* N ) (hien nhien
)

T lc o chng minh va cac khang nh tnh ung va ch ra da vao cac luat


he qua ta suy ra tnh ung co ieu kien cua ac ta oan chng trnh .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 82 -

$5. CAC PHEP BIEN OI TAN T .


I. WP
1 . at van e .
Ta thng gap bai toan sau : Vi tan t Q tren cac bien chng trnh mo ta
trang thai cuoi cung 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 : {P} S
{Q}.
De thay rang bai toan se co nhieu li giai. Xuat phat t mot cap Q va S , co
nhieu P co the c chon .
V du : Vi Q la tan t ( x > 0 ) ; S la lenh gan x := x-1 ;
Cac tan t P lan lt sau ay eu co the c chon :
(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 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 CT.
Y ngha cua quan he yeu ay la :
P yeu hn Q khi va ch khi Q ==> P
hoac tap { Q } la tap con cua tap { P }
2 . nh ngha WP(S,Q) .
Cho Q la mot tan t tren cac bien chng trnh va S la mot oan lenh .ieu kien
au yeu nhat cua oan lenh S da tren kc Q (the weakest precondition of S with
respect to Q)( ky hieu la WP(S,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 bat
ky thuoc tap o eu c bao am la se dng trong mot trang thai thoa Q ( thuoc
tap {Q} ).
Khai niem WP la c s cho mot he thong quy tac chng minh tnh ung cho
oan chng trnh cua Dijkstra c goi la cac phep bien oi tan t (predicate
transformers ).
Ta se tm hieu he thong tien e 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 cua CT.
3 . He qua cua nh ngha :
+ { WP(S,Q) } S { Q }
(5.1)
+ Va WP(S,Q) bao am tnh dng cua S .
Tc la S hoat ong ung (correctness) thc s vi k WP(S,Q) va kc Q .
Trong moi quan he vi ky hieu {P} S {Q}, ta co :
+ {wp(S,Q)} S {Q}
+ Neu P bao am S dng va thoa {P} S {Q} th P ==> WP(S,Q).
( tap { P } la tap con cua tap { WP(S,Q) } )

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 83 -

ay la 2 dau hieu ac trng e nhan ra WP(S,Q)


4 . Cac v du :
V du 1 : V du sau cho ta thay s khac biet gia tck va tnh ung ay u
(vi
khai niem wp)
+ Da vao he luat Hoare ta co the chng minh :
{true} while (n<>0) do n := n -1 {n = 0} (a)
( v :
{true and ( n<>0) } n := n-1 {true}
suy ra : {true} while (n<>0) do n := n -1 {true and n = 0}
{true} while n<>0 do n := n -1 { n = 0} )
+ Da vao nh ngha WP ta co :
wp(while (n<>0) do n := n -1 , n = 0 ) ( n >= 0 )
Tc la : wp(while (n<>0) do n := n -1 , n<>0) ===> true
V du 2 :
a) 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
True la tan t mo ta tat ca cac trang thai co the . Tc la tap ieu kien au thoa ay
u
S, Q la tap vu tru .
b) S i := 0 ; Q ( i = 1 ) ; Tnh wp(S,Q) .
ay la trng hp ngc vi v du a. 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?
a) Luat loai tr trng hp ky d (The law of the excluded miracle ).
+ Quy c :

WP(S,false)

false

(5.3)

+ Theo nh ngha : 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 )
b) Tnh phan phoi cua and (and - distributivity ).

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

c)

- 84 -

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

(5.4)

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

(5.5)

d) Tnh phan phoi cua or (or - distributivity ) .


wp(S,Q or R)

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

(5.6)

III. Toan t gan ( tien e gan ) .

WP(x := expr, Q(x)) = Q(expr)


V du :

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


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

IV. Toan t tuan t .

WP( S1 ; S2 , Q)

WP(S1 , WP(S2,Q))

(5.7)

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)
V du :
S dung khai niem WP chng minh tnh ung cua 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 pcm.

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 85 -

V. Toan t ieu kien .


1. WP(if B then S1 else S2, Q) (B ==> WP(S1, Q) and (not B ==>
2. S2,Q))
V du :
a) Tmh 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 (not(i = 0) ==> true)
( not(i=0) or false) and true ( i <> 0 )
b) 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 )
2. nh ly sau ay chng minh tnh ung an cua toan t ieu kien neu chap
nhan he tien e cua Hoare.
nh ly :
WP( if B then S1 else S2 , Q ) ( B==> wp(S1,Q)) and (not B ==>
wp(S2,Q) )
Chng minh :
at : P ( B==> wp(S1,Q)) and (not B ==> wp(S2,Q) )
e CM
WP(if B then S1 else S2, Q) P
Th ta phai CM :
+ {P} if B then S1 else S2 {Q}
(a)
+ Vi gia nh S1 va S2 dng va vi moi R ma
{R} if B then S1 else S2 {Q}
th R ==> P (b)
* CM (a) : Theo nh ngha cua wp, neu R1 ==> wp(S,Q1) th {R1} S {Q1}
Ma ta co :
P and B B and ( ( B==> wp(S1,Q)) and (not B ==> wp(S2,Q)) )
==> wp(S1,Q)
V vay : {P and B} S1 {Q}
Tng t :
P and not B not B and ( ( B==> wp(S1,Q)) and (not B ==> wp(S2,Q)) )
==> wp(S2,Q)
v vay : {P and (notB)} S2 {Q}

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 86 -

Do o theo luat ve lenh chon cua Hoare, ta co : {P} if B then S1 else S2


{Q}
*CM (b) : 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))
( R and B ==> WP(S1,Q) not(R and B) or WP(S1,Q)
not R or not B or WP(S1,Q)
R ==>( B ==> WP(S1,Q) ) not R or ( not B or not WP(S1,Q) ) )
V vay R ==> (B ==> wp(S1,q)) and (not B ==> wp(S2,Q))
T (a) , (b) ta suy ra pcm.
Ta cung co tnh chat ngc lai : Neu chap nhan (5.7) nh la tien e th co the
chng minh rang luat ve lenh chon cua Hoare la ung :
nh ly : Chap nhan (5.8) la ung. Gia s S1, S2 luon luon dng.
Neu {P and B} S1 {Q}
va {P and not B1} S2 {Q}
th {P} if B then S1 else S2 {Q}
Chng minh : (Bai tap)

VI. Toan t lap while .


1. Ta nhac lai 2 nh ngha quan trong nhat, trong cac muc (II.4), (II.5),
a) {P} S {Q} co ngha la neu viec thc hien S bat au t mot trang thai
thoa P va neu S dng th trang thai cuoi se thoa Q.
b) {WP(S,Q) } la tap hp tat ca cac trang thai ban au bao am s dng cua
S mot trang thai thoa Q.
Nh vay :
+ Khang nh { P } S { Q } la khang nh tnh ung co ieu kien (ck ) cua
ac ta P,S,Q . Tc la chng minh rang S thoa ac ta P , Q vi gia nh no dng.
+ Khang nh P ==> wp(S,Q) la khang nh tnh ung ay u ( ) cua
ac ta P,S,Q . Tc la chng minh S thoa ac ta P,Q va dng.
S khac biet gia 2 khai niem nay thay ro nhat khi S co cha cau truc lap.
2. Xay dng toan t lap WP(while B do S ,Q ) .
Xet vong lap W while B do S , va tan t xac nh kc Q.
Xay dng tan t : WP(while B do S, Q) .
WP(while B do S , Q ) phai bao am W dng sau mot so hu han lan lap lai S
va ti trang thai thoa Q .
Goi k la so lan lap (so lan thc hien lenh S than vong lap).

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 87 -

Ta ly luan quy nap theo k :


(0) : Vi k = 0 : Tap hp ln nhat cac trang thai bao am S lap ung 0 lan va
ti trang thai thoa Q la :
Po (not B) and Q
(1) : Vi k = 1 : Tap hp 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 ).
(2) : Vi k = 2 : Tap hp 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 ).
.........................................................
.........................................................
(K) : Mot cach tong quat vi k >= 1 th tap hp 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 :
WP(while B do S , Q) (k : k >= 0 : Pk )

(5.10)

V du :

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 = im )
(n = m -1) and (k = (im - 1)/(i-1)) and (j = im-1 )
Tng t :
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 )
3. Moi quan he gia toan t lap WP(while B do S , Q ) va luat ve lenh lap cua he
luat Hoare .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 88 -

Ta tach viec khao sat tnh ung ay u cua mot vong lap thanh hai phan o la :
+ Phan quan sat s bien oi cua vong lap e dan ti khang nh no dng.
+ Phan quan sat tnh bat bien cua vong lap e khang nh tnh ung cua vong
lap.
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.
a) Vi lenh bat ky S1, ieu kien yeu nhat e am bao S1 dng la khong rang
buoc trang thai g sau khi dng. Tc la : WP(S1,true) la tan t tren khong gian
trang thai cua chng trnh mo ta tap hp tat ca cac trang thai au ma xuat phat t
o th bao am S1 dng.
Ta co :
WP(W,true) (k : k >= 0 : P k )
(5.11)
Vi
Po (not B) and true (not B)
( ieu kien e khong thc hien lan nao lenh S than vong lap )
P1 B and wp(S,Po ) B and wp(S,not B)
( ieu kien e thc hien ung 1 lan lenh S than vong lap )
Pk B and wp(S,Pk-1 )
( ieu kien e thc hien ung k lan lenh S than vong lap )
V du :
W while ( n <> m) do begin j := j* i ; k := k+j ; n := n+1 end
Ta tnh ieu kien e W dng (WP(W ,True ) ) nh sau :
Po not (n <> m) ( n = m )
P1 B and wp(S,Po) ( n <> m) and ( n+1 = m ) ( n+1 = m )
Gia s quy nap rang Pk (n+k = m) .
Ta co :
Pk+1 B and wp(S,Pk ) ( n <> m) and ((n+1)+k = m) ( n+(k+1) = m )
Vay : Pi ( n+i = m )
Do o :
WP(While B do S , true) (i : i >= 0 ; n +i = m) ( n >= m )
b. Quan he gia { P } S { Q } va WP(S,Q)
Theo nh ngha cua {P} S1 {Q} : S1 c goi la ung co ieu kien da tren
ieu kien au P va ieu kien cuoi Q thi hoi (va) cua P va ieu kien yeu nhat bao
am s dng cua S ham y (manh hn) ieu kien yeu nhat e bao am S dng
trong mot trang thai thoa Q.
Tc la : {P} S1 {Q} suy ra P and wp(S1 , true) ==> wp(S1 , Q)
(5.12)
Nh vay :
{ I and B } S { I } suy ra I and B and wp(S,true) ==> wp(S,I)
{I} while B do S {I and not B} suy ra I and wp(W,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)
c . 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:

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 89 -

Gia s : I and B and wp(S,true) ==> wp(S,I)


( {I and B } S { I } )
th :
I and wp(W,true) ==> wp(W,I and notB)
( {I} while B do S { I and notB } } )
vi W la cau lenh while B do S
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 W dng sau ung k lan lap trong mot
trang thai thoa man Q.
(i) Bc 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)
( a ung vi k = 0 )
(ii) Bc quy nap : Gia s co : I and Pk(true) ==> Pk(I and not B)
Ta co :
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))
(tam thng)
B and I and B and wp(S,true and Pk(true))
B and I and B and wp(S,true) and wp(S,Pk(true))
(phep phan phoi _and)
==> B and wp(S,I) and wp(S,Pk(true))
(ga thiet)
B and wp(S,I and Pk(true))
(phep phan phoi _and)
==> B and wp(S,Pk(I and not B))
(gia thiet quy nap va phep phan phoi ==>)
Pk+1(I and not B)
Tc la: I and Pk +1(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. )

$6. LC O CHNG MINH VA CAC IEU KIEN CAN KIEM


CHNG.
I . Dan nhap .
e chng minh tnh ung cua oan chng trnh vi ac ta {P } S {Q } ta can :
- Thiet lap cac khang nh ve trang thai chng trnh nhieu iem trung
gian.
- Chng minh chi tiet cho tnh ung cua cac khang nh o.

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 90 -

Nhng khang nh ve trang thai chng trnh nhng iem trung gian khong ch
nham phuc vu viec kiem chng tnh ung cua ac ta ma con co muc tieu giup
ngi oc chng trnh ve sau hieu c ng ngha 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 va su lieu chng trnh ay la cho lam sao a vao cac
khang nh trung gian va u : qua nhieu se lam kho oc , kho kiem chng , con
qua t th khong u.
Trong phan nay ta thao luan cac tom tat chng minh cua oan chng trnh
trong dang lc o chng minh (Proof tableaux).
Mot lc o chng minh (lcm) la mot day lan lon gia cac khang nh
(assertion) va lenh (statement) cua mot oan chng trnh vi bat au va ket
thuc bang cac khang nh.
Da vao cac he tien e a neu ta thay rang : Mot lcm la ung (valid) neu :
a) Vi moi bo ac ta dang {P} S {Q} xuat hien trong lcm th bo nay phai
la mot khang nh ung.
b) Vi moi cap khang nh lien tuc dang {P} {R} xuat hien trong lcm th
eu thoa : P ==> R la ung ( P yeu hn R ).
( Neu co ong thi 2 khang nh a ,b th ta suy ra tnh ung cua oan chong trnh
bang cach s dung thch hp luat he qua va luat tuan t )
Da vao cac noi dung tren , mot lcm co the bien dang theo nhieu mc chi
tiet. T mot bo ac ta gom lenh S, k P , kc Q se co nhieu dang lcm
+ Dang tho nhat ch co mot khang nh au va mot cuoi la mot phat bieu
ve tnh ung an cua ca oan chng trnh co dang : { P } S { Q } . No chnh la
ac ta cua oan chng trnh .
+ Dang min nhat la lcm ma moi lenh eu b kem gia 2 khang nh no la
mot lc o chng minh ay u ve tck (complete proof of conditional
correctness) mc chi tiet nhat ( lcmct).
+ Trung gian gia hai dang lc o tren la dang lc o chng minh hp ly
(lcmhl) ch co cac khang nh trung gian nhng cho can thiet ( nhng cho then
chot, nhng cho quan trong nhat cua oan chng trnh - nham am bao tnh de
hieu cua oan chng trnh ).

II. Kiem chng tnh ung da vao lc o chng minh hp ly .


1 . Y chung .
e kiem chng tnh ung cua mot oan chng trnh chung ta can thc hien
cac viec sau :
+ Xay dng lc o chng minh hp ly xuat phat t ac ta oan chng
trnh ( khang nh dang {P} S {Q} ve tck cua ca oan chng trnh S ).
+ Chng minh tnh ung cua lc o chng minh a xay dng.
( Chng minh tnh ung cua moi ac ta trung gian dang {Pi} Si {Qi} xuat hien
trong lc o , chng minh cac cap khang nh ng lien nhau trong lc o dang
{Pi} { Ri} eu hp ly tc la thoa he thc Pi ==> Ri ) .
Trong 2 cong viec tren th viec xay dng lc o chng minh hp ly la viec
chiem nhieu thi gian va cong sc .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 91 -

Viec xay dng lc o chng minh hp ly se khac nhau phu thuoc vao cau truc
cua lenh S song thng c tien hanh theo 2 bc sau :
- Bc 1 : T ac ta xay dng lc o chng minh chi tiet bang cach da vao
cac luat cua he Hoare a vao cac khang nh trung gian .
- Bc 2 : T lc o cm chi tiet xay dng lc o cm hp ly bang cach da
vao cac luat cua he Hoare bo i cac khang nh trung gian nhng ni khong quan
trong ( nhng khang nh trung gian ma tnh ung cua no la ro rang va ta de
dang khoi phuc no ) . Gi lai nhng khang nh trung gian nao trong lc o cm
hp ly la mot trong nhng nghe thuat cua ngi xay dng lc o )
2. Thc hien kiem chng trong trng hp S la mot day lenh tuan t .
- ac ta : { P } S1 ; S2 ; . . . ; Sn { Q }
- Xay dng lc o cm hp ly :
+ Xay dng lc o cm chi tiet : ap dung lien tuc cac tien e gan (muc
II.4.3) t lenh cuoi ( bat au t cap S , Q ).
V du : kiem chng ac ta sau :
{even(k) and (0 < k ) and (y*zk = xn )} (c)
k := k div 2 ;
(6.1)
z := z*z ;
{(0 <= k ) and (y * zk ) = xn )}
(kc )
k
n
Ta co : {even(k) and (0 < k ) and (y*z = x )}
(c)
k div 2
n
{(0 <= k div 2 ) and ( y * ( z * z )
=x )
(2)
k := k div 2 ;
(6.2 )
k
n
{(0 <= k) and ( y * ( z * z ) = x )
(1)
z := z*z ;
{(0 <= k ) and (y * zk ) = xn )}
(kc )
Ta co (6.2) la mot lc o chng minh chi tiet no cha tat ca cac chi tiet can thiet
e xay dng mot chng minh ve tck cua ac ta (6.1)
- Xay dng lc o cm hp ly : Da vao luat tuan t bo i khang nh (1) ta co :
{even(k) and (0 < k ) and (y*zk = xn )}
(c)
k div 2
n
{(0 <= k div 2 ) and ( y * ( z * z )
=x )
(2)
k := k div 2 ;
(6.3 )
z := z*z ;
{(0 <= k ) and (y * zk ) = xn )}
(kc )
(6.3) la lc o cm hp ly .
- Chng minh tnh ung :
+ Chng minh tnh ung cua ac ta trung gian :
{(0 <= k div 2 ) and ( y * ( z * z ) k div 2 = xn )
(2)
k := k div 2 ;
z := z*z ;
(6.4)
k
n
{(0 <= k ) and (y * z ) = x )}
(kc )
Tnh ung cua ac ta 6.4 c bao am da vao cach xay dng .
+ Kiem chng tnh hp ly cua hai khang nh i lien nhau :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 92 -

{ even(k) and ( 0 < k ) and (y * zk ) = xn ) }


{ ( 0 <= k div 2 ) and (y*(z*z)k div 2 = xn )
Thc vay :
even(k) and ( 0 < k ) and (y * zk = xn ) ==> (0 <= k div 2 ) and (y*(z*z)k div 2 = xn
)
c suy ra t tnh chat ai so va logic .
Chu y : e tang tnh hnh thc cua qua trnh xay dng lc o ngi ta thng
a vao cac cach viet hnh thc . Nh v du tren bang cach viet lai ieu kien cuoi
cung ky hieu sau :
I(z,k) ( 0 <= k ) and (y*zk = xn )
Nh vay (6.2) co the viet thanh :
{even(k) and (0<k) and I(z,k)}
{I(z*z,k div 2 )}
(6.3)
k := k div 2 ;
{I(z*z,k )}
z := z*z ;
{I(z,k)}
Lc o cm hp ly (6.4) co dang :
{even(k) and (0 < k) and I(z,k)}
{I(z*z,k div 2 )}
(6.4)
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)
ay ch la cach noi hnh thc cua s kien la (z*z)k div 2 = zk khi k la so
nguyen chan. ieu nay la mau chot e hieu c tac ong cua hai lenh gan.
3. Thc hien kiem chng trong trng hp S la lenh ieu kien .
Khi oan chng trnh cha cau lenh ieu kien th ta them cac khang nh trung
gian vao phan lenh ieu kien da vao cac luat ve cau truc ieu kien.
T ac ta co dang :
{P} if B then S1 else S2 {Q}
Ta xay dng lc o dang :
{P} if B then {P and B}
S1 {Q}
else {P and not B} S2 {Q}
con vi ac ta tng ng lenh ieu kien khong co phan else
{P} if B then S {Q}
th ta c xem nh no co mot phan else rong va lcm tng ng la :
{P}

if B

then {P and B} S {Q}


else {P and not B} {Q}
Chu y la cap {P and not B} {Q} lien tuc chnh la mot kckc P and not B ==>Q
V du : Kiem chng tnh ung ac ta :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 93 -

{ ( k > 0 ) and (y*zk = xn ) }


if even(k) then begin
k := k div 2 ;
z := z*z ;
end
else begin
k := k -1 ;
y := y*z ;
end
{ ( k >= 0 ) and (y*zk = xn ) }
Bang cach at I(y,z,k) ( k >= 0 ) and (y*zk = xn )
Ta co lcm :
{( k > 0 ) and I(y,z,k)}
if even(k) then begin
{even(k) and ( k > 0 ) and I(y,z,k)}
k := k div 2 ;
z := z*z ;
{I(y,z,k)}
end
else begin
{(not even(k)) and ( k > 0 ) and I(y,z,k)}
k := k -1 ;
y := y*z ;
{I(y,z,k)}
end
4. Trng hp oan chng trnh S co cha lenh lap while B do S
- Cach th nhat (da vao he toan t Dijkstra) :
+ Xay dng WP(while B do S , Q )
+ Chen khang nh { WP(while B do S , Q ) vao trc vong lap
- Cach 2 (da vao cac he luat Hoare ) :
+ Phat hien bat bien I cua vong lap
+ Chen bat bien I vao lc o theo luat lap nh sau :
{(Invariant) I}
while B do
{I and B} S {I}
{I and not B }
{Q}
ieu kien can kiem chng duy nhat la : I and not B ==> Q.
Chu y : Neu xay dng lc o da vao he luat Hoare th ta con phai kiem chng
tnh dng cua vong lap .
V du : Cho ac ta sau :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 94 -

{ 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 vong lap la :
I(y,z,k) ( k >= 0 ) and (y*zk = xn )
Ta xay dng lcm theo cac bc sau :
+ Chen I(y,z,k) vao vong lap
{0 <= n}
y := 1 ;
z := x ;
k := n ;
{(Invariant ) I(y,z,k)}
while ( k <> 0 ) do
begin
{I(y,z,k) and (k <> 0 )}
k := k -1 ; y := y*z ;
{I(y,z,k)}
end
{I(y,z,k) and not(k <> 0 )}
{y = xn }
+ Dung tien e gan ta a vao cac khang nh trung gian
{0 <= n}
{I(1,x,n)}
y := 1 ;
{I(y,x,n)}
z := x ;
{I(y,z,n)}
k := n ;
{(Invariant ) 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 )}

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 95 -

{y = xn }
+ Da vao luat tuan t bo i cac khan nh trung gian
{0 <= n}
{I(1,x,n)}
y := 1 ;
z := x ;
k := n ;
{(Invariant ) 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 }
Ba ieu kien can kiem chng la :
+ Phan chuan b trc vong lap :
(0 <= n ) ==> I(1,x,n)
+ Phan ket thuc vong lap
: I(y,z,k) and (k = 0 ) ==> y = xn .
+ Phan trong vong lap :
I(y,z,k) and (k <> 0 ) ==> I(y*x,z,k-1)
The
I(y,z,k) ( k >= 0 ) and (y*zk = xn ) ta co ba ckc la :
(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) (hien nhien
)

III. Tap toi tieu cac ieu kien can kiem chng .
Mot lcm ay u trong o moi lenh eu c kem gia bi hai khang nh ro
rang la chi tiet qua mc. Neu ta s dung tri thc cua ta ve cac k yeu nhat cua
nhng lenh khac lenh lap ( c xac lap n gian bang cac phep bien oi tan t cua
he Dijkstra ) , ta co mot giai thuat n gian e san sinh ra mot lc o cm hp ly
hoan chnh theo kieu Hoare ve tnh ung co ieu kien cua (nhom) lenh S da tren
ieu kien au P va kc Q, vi gia nh duy nhat la la moi vong lap while trong S
c cung cap kem theo bat bien cua no. V vay, ve nguyen tac mot bo chng
minh t ong (theorem prover), vi kha nang kiem chng cac ieu kien co dang P

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 96 -

==> R co the c dung e chng minh mot cach t ong tnh ung co ieu kien
cua 1 oan chng trnh .
iem quan trong ma ta rut ra t nhan xet nay 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 lc o chng minh kieu
Hoare, thay vao o ta se tru tng hoa t no qua trnh san sinh ra tap hp cac
kckc.
Xet mot oan chng trnh S bat ky vi cac k P va kc Q. Ta se xay dng t
P, S va Q bang quy nap mot k da vao S va Q, ky hieu la pre(S,Q), va hai tap
hp cac ieu kien can kiem chng V'(S,Q) va V(P,S,Q) nh sau :
1. Neu S la lenh gan x := e th
pre(S,Q) la wp(S,Q)
va V'(S,Q) la tap rong.
2. Neu S co dang S1 ; S2 th
pre(S,Q) la pre(S1, pre(S2,Q))
va V'(S,Q) la hp (hoi) cua V'(S2,Q) va V'(S1,pre(S2,Q)).
3. Neu S co dang if B then S1 else S2 th
pre(S,Q) la (not B or pre(S1,Q)) and ( B or pre(S2,Q))
va V'(S,Q) la hoi cua V'(S1,Q) va V'(S2,Q).
4. Neu S co dang while B do S1 va I la bat bien c cho cua S th
pre(S,Q) la I
va V'(S1,Q) la hoi cua V(I and B, S1,I) va tap hp ch gom mot
ieu kien 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).
Cac chc nang cua V'(S, Q), pre(S,Q), va V(S,P,Q) trong qua trnh kiem chng
tnh ung c mo ta bi cac menh e sau :
(P1) Neu moi ieu kien can kiem chng trong tap hp V(S,Q) eu ung th S
la ung co ieu kien da tren k pre(S,Q) va kc Q.
(P2) Neu moi ieu kien can kiem chng trong tap hp V(P,S,Q) eu ung th S
la ung co ieu kien da tren k P va kc Q.
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 trong oan lenh S co lenh
while. ieu nay xac nhan la trong trng hp tong quat, khong co kha nang tao lap
mot cong thc ong (closed formula) 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 :
a) Vi day lenh tuan t S la :
tg := tg + a[k] ; k := k+1 ;

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao


kc
k

- 97 -

Q I(k,tg) (tg = S(i : 0 <= i < k : a[i]))


P I(k,tg) and (k <> n )

Ap dung cac bc 1 va 2 c V'(S1, I(k, s)) la tap rong


pre(S, I(k, tg)) I(k+1,tg+a[k])
va 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]) ).
(a)
b) Xet ac ta oan chng trnh tnh tong cac phan t cua mot array
{0 <= n}
k := 0 ; s := 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 CT au tien thanh nhom lenh tuan t :
So k := 0 ; tg := 0 ;
va lenh while la :
W while k <> n do begin
s := s + a[k] ; k := k+ 1
end
Theo quy tac 2, ta can tnh pre(W,Q) va V'(W,Q) vi Q la :
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]) )
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 :
I(k,tg) and (k = n ) ==> ( tg = S(i : 0<= i <n : a[i]) ) (b)
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))
(c)
Nh vay, co 3 ieu kien can kiem chng cho oan CT o la :
(tg = S(i : 0<= i< k : a[i]) and (k <> n ))
==> ( (tg + a[k]) = S( i: 0 <= i <= k+1 : a[i]) ).
(a)

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao


(b)

- 98 -

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


( 0 <= n) ==> pre(So, I(k,tg))

(c)

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

$ 7 . BAI TAP .
1) ac ta moi bai toan sau:
a) Tnh tch hai so nguyen dng
b) Tm c so chung ln nhat cua hai so nguyen dng.
c) Xac nh xem hai so nguyen dng co phai nguyen to cung nhau khong ?
d) Xac nh xem phng trnh bac hai co nghiem thc hay khong?
2) Tm ieu kien au va ieu kien cuoi cho moi oan chng trnh can xay dng
e
giai quyet tng bai toan sau.
Gia s a , b : array[1 . . n ] of integer ; u , x : integer ;
a) Tnh c u la tong cac phan t cua a
b) Tnh c u la tong cac phan t khong am cua a
c) Tnh c u la chieu dai cua day dai nhat cac phan t nam lien tuc va tang
cua a.
d) Ket qua u = true neu x co trong a , ngc lai u = false.
e) Tnh c u la mot phan t lap lai nhieu lan nhat trong a,con x la so lan lap
o.
f) Ket qua u = true neu cac phan t cua a oi xng tc la : a[i]=a[n-i+1] ;
u = false neu khong.
g) Cho trc a, tnh c b vi b[i] la so lan lap lai cua a[i] trong a
h) Tnh c k la so phan t khac nhau cua a;b[1],...,b[k] chnh la cac phan
t khac nhau o.
i) Tnh c a cha n so nguyen to au tien.
3) Vi moi oan chng trnh sau suy ngha xem no lam g , roi thiet lap at ta
cua no.
a) x := 0 ;
y := x+1 ;
z := x*y+x ;
b) If odd(x) then k := 0
else k := k+1 ;
c) t := z ;
z := x;
x := y;

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 99 -

y := t
d) If ( x >= y ) then z := x
else z := y ;
e) If (x >= y ) then begin
t := x ;
x := y ;
y := t ;
end ;
f) If ( x >= y ) then If (z >= y ) then If (z >= x ) then
Begin
exchange(x,z) ;
exchange(z,y) ;
End
else
exchange(y,z)
else If (z >= y ) then
Begin
exchange(x,z);
exchange(z,y)
End
else
Begin
exchange(x,z);
exchange(x,y);
end;
Vi : exchange(a,b) la oi noi dung cua hai bien a,b .
4) Hay tm tan t bieu dien trang thai cuoi cua moi oan chng trnh sau , xuat
phat t ieu kien au tng ng. Co gang tm tan t manh nhat co the .
a) {x = 5} x := a ;
b) {x = 3}
While (x > 0 ) do x := x -2 ;

c) {x = 5 }
u := 0 ;
While ( x >0 ) do begin
x := x - 2 ;
u := u + x ;
end ;
d) { x = xo ,xo > 0, u = uo }
While (x > 0 ) do begin
x := x - 2 ;
u := u+x ;
end ;

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao


e) { x > 0 , t = 5}
If ( x > 0 ) then

begin
t := x ;
x := y ;
y := t
end ;

f) { i = j } i := 5 ;
g) { i = j }

i := i + 1 ;

h) { P(i) }

i := f(i) ;

i) { i = j }

- 100 -

i := abs(i) ;

5) Hay xay dng tan t rang buoc trang tha au cua moi oan chng trnh sau
e sau khi thc hien oan chng trnh (ga s tnh dng c thoa man) trang thai
cuoi cua no thoa ieu kien cuoi tng ng .Co gang tm tan t yeu nhat co the .
a) x := a ;
{x > 0 }
b) x := k div 2 ;
x := x*2 ;
{x=k}
c) i := i + 1 ; {i = j}
d) i := abs(i) ; {i = j}
e) u := 0 ;
While ( x > 0 ) do

begin
x := x - 2 ;
u := u + x
end ;

{u=6}
f) If ( x > 0 ) then

begin
t := x ;
x := y ;
y := t ;
end ;
{x>y}

6) Hay xay dng mot oan chng trnh thoa ac ta a c at ra trong cau 2
7) Hay chng mimh rang cac khang nh sau la ung:
a) { true } if (x >= y ) then x := x - y else y := y - x {(y >= 0 ) or (x >= 0 )}

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 101 -

b) { yi = c }
if even(i) then begin
i := i div 2 ;
y := y*y
end ;
i
{y =c}
c) {((i = j ) and (k = j)) or ((i <> j ) and (k = m)) }
If (i = j ) then m := k else j := k
{(k = j) and ( j = m )}

))}

d) {( x = xo) and (y = yo) }


if ( x <= y ) then begin
t := y ;
y := x ;
x := t
end ;
{((xo >= yo) and (x = xo) and (y = yo )) or ((xo < yo ) and (x = yo) and (y = xo

8) Tm tan t Q khang nh ket qua sau khi thc hien moi lenh S vi k P
tng ng , roi chng minh {P} S {Q}. Co gang tm khang nh Q manh nhat :
a) S if ( x > 1 ) then x := x*x
else x := 1/x
P (x>0)
b) S If even(x) then begin
x := x div 2
y := y*2
end ;
P (u =x*y)
9) Tm tan t P la ieu kien au cua moi lenh S sau ng vi ieu kien cuoi Q
roi chng minh {P} S {Q}. Co gang tm khang nh P yeu nhat.
a) S If ( x = y ) then equal := true
Q ( equal <==> (x = y ) )
b) S If ( j = k+1 ) then begin
i := i+1 ;
k := 0
end
else k := k+1
Q ( m = i*j + k )

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 102 -

10) CMR moi vong lap sau gi cac bat bien tng ng (k,m la so nguyen)
a) I (y = xk )
While ( k <> m ) do begin
y := y*x ;
k := k+1
end
k
m
b) I (y*x = x )
While ( k <> 0 ) do begin
k := k - 1 ;
y := y*x
end
11) Hay tm bat bien cua moi vong lap sau
a) Nhan hai so t nhien
Begin
z := 0 ; u := x ; v := y ;
While (u <> 0 ) do begin
If odd(u) then z := z+v;
u := u div 2 ;
v := z*v
end
{ z = x*y}
End
b) Tm USCLN cua hai so
a := x ; b := y ;
While (a <> b ) do If ( a > b ) then a := a - b
else b := b - a
{ (USCLN(x,y) = a ) and ( a = b )}
c) Tm USCLN cua 2 so:
a := x ; b := y;
While ( a <> b ) do begin
While (a > b ) do a := a - b
While (b > a ) do b := b - a
end
{ (a = b ) and ( b = USCLN(x,y) )}
12) Chng minh rang cac luat sau co the thay the lan nhau c
a) Luat ve lenh chon
{P1 } S1 {Q} , {P2 } S2 {Q}

{(B ==> P1 ) and (not(B) ==> P2 )} if B then S1 else S2 {Q}

Tran Hoang Tho

(1)

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao


va :

- 103 -

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

{P} if B then S1 else S2 {Q}

{P1 } S1 {Q}

{(B ==> P 1 ) and (not(B) ==> Q)} if B then S1 {Q}


va :

{P and B} S1 {Q} , P and not B ==> Q

{P} if B then S1 {Q}

(2)

(1')

(2')

b) Neu ta nh ngha mot cau truc cu phap mi nh sau :


Case
B1 : S1 ;
B2 : S2 ;
...........
...........
Bn : Sn ;
Otherwise Sn+1 ;
end ;
Vi ng ngha tng ng vi
If B1 then S1
else If B2 then S2
else
If ...
.................
If Bn
Hay chng minh luat sau :

then Sn
else Sn+1

{P and Bi } Si {Q} , {P and (and (... not Bi ))} Sn+1 {Q}

{ P } case ... { Q }
(vi i=1...n)
c) Luat ve lenh lap Repeat.
{P} S {Q}
{Q and not B} S {Q}

{ P} Repeat S until B {Q and B}

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 104 -

(xet tren moi quan he Repeat S until B tng ng vi S;While not B do

S ).

va :

{P} S {Q}, Q and not B ==> P

{P} Repeat S until B {Q and B}

13) Chng minh cac khang nh sau:


a) {s = i*(i+1) / 2} i := i+1 ; s := s+i { s = i*(i+1) /2}
b) {i = jk } k := k+1 ; i := i*j {i = jk }
c) {( s = i*(i+1)*(2*i+1)/6 ) and ( j = i2 ) }
i := i+1 ; j := j+2*i -1 ; s := s+j
{ (s = i*(i+1)*(2*i+1)/6 ) and ( j = i2 ) }
d) { (s = n3 ) and ( i = 2*n ) and (k = n*(n+1)+1) }
i := i+2 ; s := s+n*i+k ; k := k+i ; n := n+1
{ ( s = n3 ) and (i = 2*n ) and ( k = n*(n+1)+1) }
e) {( 0 <= s) and ( s < n ) }
q := s div (n-1) ; p := q+1 ; t := s+1 - q*(n-1)
{(1 <= t ) and ( t < n ) and (q > 0 ) and (p = q+1 ) and (s = p*(t-1)+q*(n-t) ) }
g)

{i>j}
if (i > 1 ) then begin
i := i+1 ; j := j+1
end
else begin
i := Abs(i) ; j := j -2
end
{ j<= i+1}
14) Goi interchange(x,y) la day ba lenh nham hoan v noi dung cua x va y .
Q(x,y) la mot tan t vi cac bien t do x,y . Chng minh rang :
a) { Q(x,y) } interchange(x,y) { Q(x,y) }.
b)

{ (x > y ) and ( z > y ) }


if (x > z ) then interchange(y,z)
else begin
interchange(x,z);
interchange(z,y);
end
{(x >= y ) and (y >= z )}

15) Xay dng lc o chng minh cho {P} if B then S {Q} . Roi s dung
e chng minh cac khang nh sau :

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 105 -

a) { (i > 2 ) and (j < n ) }


if ( i > 1 ) then begin
i := i+1 ; j := j+1
end
{j <= i+1}
b) {x > y} if (z > x ) then begin
max := z ; min := y
end
{( max = max(x,y,z) ) and (min = min(x,y,z) )}
16) Chng minh rang :
a)
{ true }
if ( (x <= y) or (x <= z) ) then begin
if (y >= z ) then interchange(x,y)
else interchange(x,z)
end ;
{ (x >= y ) and (x >= z ) }
b).

{ true }
if ( i < j ) then interchange(i,j) ;
if ( j < k ) then interchange(j,k) ;
if ( i < j ) then interchange(i,j) ;
{ (i >= j ) and ( j >= k ) }

c)

{ p = m*n }
if Odd(m) then x := 1 else x := 0 ;
if Odd(n) then y := 1 else y := 0 ;
if Odd(p) then z := 1 else z := 0 ;
{z=x*y}
17) Xay dng lc o chng minh hp ly t lc o sau. Neu cac ieu kien can
kiem chng .
{(0 <> k ) and I(y,z,k) }
If Odd(k) then begin
k := k -1 ;
y := y*z ;
end ;
{ Even(k) and I(y,z,k)}
k := k div 2 ;
z := z*z
{ I(y,z,k) }
18) Xac nh wp(S,Q) cho cac S va Q sau ay, da tren hieu biet cua ban ve hoat
ong cua S.

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 106 -

S
Q

(a)
i := i + 1
i>0
(b)
i := i + 1; j := j - 1
i+j =0
(c)
i := i + 1; j := j - 1
i*j =0
(d)
i := i - 1, z := z * j
z * ji = 0
(e)
a[a[i]] := i
a[i] = i

19) Theo ban ieu nao sau ay ung:


a) wp(S, not Q) ==> not wp(S,Q)
b) Not wp(S,Q) ==> wp(S; Not Q)
c) wp(S,Q => R) ==> ( wp(S,Q) ==> wp(S,R) )
d) ( wp(s,Q =>R) ==> wp(S,Q) ) ==> wp(S,R)
20) Gia s {P} S {False} ung. Ban co the noi g ve P va Q hay la S ?
Tng t, ban co the noi g ve P va Q hay la S trong trng hp {P} S {True}
ung.
21) Dung cac tnh chat cua wp e chng minh cac khang nh sau
a) { (j = in ) and (k = (in +1 - 1) / (i -1) )}
i := J*i ; k := k+j ; n := n+1
{ (j = in ) and (k = (in +1 -1)/(I-1) ) }
b) {(S = n3 ) and (i = 2*n ) and (k = n*(n+1) +1)}
i := i+2 ; S := S+n*i+k ; k := k+i ; n := n+1
{ (S = n3 ) and (i = 2*n ) and (k = n*(n+1)+1)}

22) Tnh : wp(if even(i) then begin i := i div 2 ; y := y*y end , (yi = i) )
23) Chng minh :
Neu S la i := i + 2 ; s := s + n*i+ k ; k := k+i ; n :=n+1
Q la (s = m3 ) and (i = 2*m) and (k = m*(m+1)+1)
W la While (n <> m ) do S
th wp(W,Q) (n<m ) and (s = n3 ) and (i = 2*n) and (k = n*(n+1)+1)
24) Tnh wp(W,Q) cho moi trng hp sau:
W
(a) While (i <> n ) do begin
k := -k ; s := s+k ; i := i+1
End

Q
S=0

(b) While not odd(x) do begin

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 107 -

y := 2*y ; x := x div 2
end
begin
w(b) ;
c := c - y ; x := x -1
end ;
Vi w(b) la lenh While cho (b).

c = x*y

(c) While (x <> 0 ) do

c = x*y

25) Khao sat cach chng minh dung he luat Hoare ve he tnh ung cua vong
lap.
Khi o, ta tach viec khao sat mot vong lap thanh 2 phan hp ly, o la:
(a) Phan quan sat s bien oi cua vong lap e dan ti khang nh o dng .
(b) Phan quan sat s bat bien cua vong lap e chng minh ket qua cuoi cung
cua no. Hay co gang tach wp(W,Q) vi W la While B do S thanh cac thanh phan
tng ng va khao sat moi lien he .

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

- 108 -

TAI LIEU THAM KHAO


LARRY NYOFF
SANFORD LEESTMA
Lap trnh nang cao bang Pascal vi cac cau truc d lieu .
Scitec _ 1991
NGUYEN XUAN HUY
Thuat toan
Nha xuat ban thong ke Ha - Noi _ 1988
GUY CCUSINNEAU
Lap trnh e qui :
Cac kha canh ly thuyet va thc tien
Vien khoa hoc tnh toan va ieu khien - Ha - Noi _1980
NIKLAUS WIRTH
Cau truc du lieu + Giai thuat = Chng trnh
Nha xuat ban giao duc Ha - Noi _ 1993

Tran Hoang Tho

Khoa Toan Tin hoc

Ky thuat lap trnh nang cao

Tran Hoang Tho

- 109 -

Khoa Toan Tin hoc

You might also like