Professional Documents
Culture Documents
F7G
GIAO TRNH
2002
-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 -
-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 -
-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
-4-
-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.
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
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
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)
-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
and
and T ) ==> F
-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 :
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 )
-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))
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.
- 10 -
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.
- 11 -
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 .
- 12 -
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 .
- 13 -
p or not p
c phat bieu nh tien e (tc la luat suy dien khong can tien e).
- 14 -
$3.LOGIC TAN T .
- 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)
- 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
- 17 -
- 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.
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)
f (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
- 19 -
$ 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 .
- 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
- 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).
- 22 -
PHAN II
- 23 -
E QUY
- 24 -
- 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) ) ;
- 26 -
- Day cac to hp :
1
1
vi n > = 0
Cnm = 0
vi m > n > 0
Cn0 = 1
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 .
- 27 -
- 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 .
-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);
- 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 ;
- 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)) ;
}
- 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)
. 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 .
- 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) ;
}
- 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 ;
- 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++ :
- 35 -
- 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;
- 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) ;
}
}
- 38 -
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 :
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)
- 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 .
- 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 .
- 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)))
- 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)) ;
}
- 44 -
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)
if x <> 0 then
{ A[m] := x mod k ;
Convert(x div k , m-1) ;
}
endif ;
- 45 -
- 46 -
Luc o :
f(Xo ) = a(Uk )
(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 :
- 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) ;
}
- 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
- 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 :
- 50 -
(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
.......................................................................................................
.......................................................................................................
(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 .
- 51 -
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)
- 52 -
POP(S,X) ;
C(f(X)) = False
B(U)
POP(S,U) ;
C(f(U)) = False
B(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 ) ;
}
- 53 -
if C(X) then
D(X)
else
{ A(X) ; P(f(X)) ;
B(X) ; P(g(X)) ;
}
endif ;
( III.3a - 1)
- 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 )
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 )
- 56 -
____________________________________
$ 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
- 57 -
- 58 -
- 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
- 60 -
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
e) P
if ( i > 0 ) then
repeat
A;
- 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 :
- 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 .
- 63 -
- 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]
- 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.
- 66 -
- 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 ) }
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}
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).
- 68 -
{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 :
{P} S {R}
(4.2)
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.
- 69 -
(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 ; 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}
(4.5)
- 70 -
Th suy ra rang :
{P}
if B then S1 else S2
{Q}
3.2b
{ P and B } S {Q} , { P and (not B) } => {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)}
- 71 -
(4.7)
- 72 -
- 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 :
- 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
- 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 .
- 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
----->
- 77 -
S -------->
------> ....
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.
- 78 -
- 79 -
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 } .
- 80 -
- 81 -
- 82 -
- 83 -
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 ).
c)
- 84 -
(5.4)
(5.5)
(5.6)
WP( S1 ; S2 , Q)
WP(S1 , WP(S2,Q))
(5.7)
V du :
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.
- 85 -
- 86 -
- 87 -
(5.10)
V du :
- 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:
- 89 -
- 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 ).
- 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 :
- 92 -
if B
- 93 -
- 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 )}
- 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
- 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 ;
- 97 -
- 98 -
(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;
- 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 ;
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 )}
- 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 )}
))}
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 )
- 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}
(1)
- 103 -
{P1 } S1 {Q}
(2)
(1')
(2')
then Sn
else Sn+1
{ P } case ... { Q }
(vi i=1...n)
c) Luat ve lenh lap Repeat.
{P} S {Q}
{Q and not B} S {Q}
- 104 -
S ).
va :
{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)
15) Xay dng lc o chng minh cho {P} if B then S {Q} . Roi s dung
e chng minh cac khang nh sau :
- 105 -
{ 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.
- 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
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
- 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 = 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 .
- 108 -
- 109 -