Professional Documents
Culture Documents
F7G
GIAO TRNH
KY THUAT LAP TRNH
NANG CAO
2002
Ky thuat lap trnh nang cao -2-
MUC LUC
LI NOI AU ........................................................................................................................ 4
PHAN I.................................................................................................................................... 5
CHNG I ............................................................................................................................. 5
I. M AU ........................................................................................................................... 5
1. Mo ta e quy ................................................................................................................ 5
2. Cac loai e quy ............................................................................................................ 6
II. MO TA E QUY CAC CAU TRUC D LIEU................................................................... 7
III. MO TA E QUY GIAI THUAT ........................................................................................ 7
1. Giai thuat e quy.......................................................................................................... 7
2. Chng trnh con e quy.............................................................................................. 8
3. Ma hoa giai thuat e qui trong cac ngon ng lap trnh. ............................................. 11
4. Mot so dang giai thuat e quy n gian thng gap . .............................................. 13
CHNG II ........................................................................................................................... 16
I. CAC NOI DUNG CAN LAM E TM GIAI THUAT E QUY CHO MOT BAI TOAN. ..... 16
1. Thong so hoa bai toan. .............................................................................................. 16
2. Phat hien cac trng hp suy bien (neo) va tm giai thuat cho cac trng hp nay.16
3. Phan ra bai toan tong quat theo phng thc e quy. .............................................. 16
II. MOT SO BAI TOAN GIAI BANG GIAI THUAT E QUY IEN HNH. .......................... 17
1. Bai toan thap Ha Noi . ............................................................................................... 17
2. Bai toan chia thng. ................................................................................................. 19
3. Bai toan tm tat ca cac hoan v cua mot day phan t................................................. 21
4. Bai toan sap xep mang bang phng phap tron (Sort-Merge). ................................. 24
5. Bai toan tm nghiem xap x cua phng trnh f(x)=0 . ............................................... 25
CHNG III .......................................................................................................................... 28
I. C CHE THC HIEN GIAI THUAT E QUY................................................................ 28
II. TONG QUAN VE VAN E KH E QUY..................................................................... 32
III. CAC TRNG HP KH E QUY N GIAN. ......................................................... 33
1. Cac trng hp kh e quy bang vong lap . ............................................................ 33
2. Kh e quy ham e quy arsac .................................................................................. 41
3. Kh e quy mot so dang thu tuc e quy thng gap. ............................................... 45
Phan II .................................................................................................................................. 52
CHNG IV.......................................................................................................................... 52
I. CAC GIAI OAN TRONG CUOC SONG CUA MOT PHAN MEM ................................. 52
1) ac ta bai toan .......................................................................................................... 52
2) Xay dng he thong .................................................................................................... 52
3) S dung va bao tr he thong ...................................................................................... 53
II. AC TA ......................................................................................................................... 53
1. ac ta bai toan........................................................................................................... 53
2. ac ta chng trnh (TCT)....................................................................................... 54
3. ac ta oan chng trnh .......................................................................................... 55
III. NGON NG LAP TRNH.............................................................................................. 57
CHNG V.......................................................................................................................... 59
I. CAC KHAI NIEM VE TNH UNG. ................................................................................ 59
II. HE LUAT HOARE (HOARES INFERENCE RULES). ................................................... 59
1. Cac luat he qua (Consequence rules) ....................................................................... 60
LI NOI AU
Giao trnh c viet theo noi dung mon hoc Ky thuat lap trnh nang cao vi muc
ch lam tai lieu tham khao chnh cho mon hoc.
Giao trnh gom 2 phan chnh va mot phu luc :
Phan I. e quy.
Trnh bay ve chu e e quy trong lap trnh bao gom cac noi dung sau :
- Khai niem e quy va vai tro cua no trong lap trnh.
- Cach xay dng mot giai thuat cho mot bai toan bang phng phap e quy.
- C che thc hien mot giai thuat e quy.
- Kh e quy.
Phan II. Kiem chng chng trnh.
Trnh bay ve chu e kiem chng tnh ung cua chng trnh bao gom cac noi dung
sau:
- Vai tro cua van e kiem chng trong lap trnh.
- Cac phng phap dung e kiem chng tnh ung .
- He luat Hoare va ap dung cua no vao kiem chng tnh ung co ieu kien.
- He luat Dijkstra va ap dung cua no vao kiem chng tnh ung ay u.
- Dang tong quat cua bai toan kiem chng va phng phap kiem chng. Cac lc
o kiem chng va tap toi thieu cac ieu kien can kiem chng.
Phu luc . Cac kien thc chung ve logic.
Trnh bay cac kien thc ban au ve logic menh e va logic tan t. Phu luc cung cap
mot mot tai lieu co ong ve cac kien thc logic ap dung trc tiep trong phan I va phan
II ( no la mot phan noi dung cua giao trnh nhap mon toan) ngi hoc can danh thi
gian thch hp on lai e co the theo kp hng tiep can cua giao trnh.
Cung vi nhng trnh bay ly thuyet tong quat, tac ga a vao mot so thoa ang cac
v du chon loc nham giup ngi hoc nam bat c ban chat cua cac khai niem, cac
phng phap mi va lam quen vi cach s dung cac ket qua mi. Khi hoc trc khi tm
cach giai cac bai tap cua thay gao cung cap cac ban co gang oc va hieu het cac v du
minh hoa.
V nhieu le chac chan giao trnh con nhieu khiem khuyet. Rat mong tat ca moi
ngi s dung chan thanh gop y.
Tac gia chan thanh cam n cac ong nghiep trong khoa Toan_Tin a ong gop
nhieu y kien quy bau cho viec hnh thanh cau truc chi tiet cho noi dung giao trnh,
chan thanh cam n thac sy Vo Tien a ong gop nhieu y kien quy bau trong cau truc
giao trnh, giup chnh ly nhieu khiem khuyet trong ban thao.
PHAN I
E QUY
CHNG I
KHAI NIEM E QUY
I. M AU
1. Mo ta e quy
Trong nhieu tnh huong viec mo ta cac bai toan, cac giai thuat, cac s kien, cac s
vat cac qua trnh, cac cau truc, . . . se n gian va hieu qua hn neu ta nhn c no
di goc o mang tnh e qui.
Mo ta mang tnh e qui ve mot oi tng la mo ta theo cach phan tch oi tng
thanh nhieu thanh phan ma trong so cac thanh phan co thanh phan mang tnh chat cua
chnh oi tng c mo ta. Tc la mo ta oi tng qua chnh no.
Cac v du :
- Mo ta e quy tap so t nhien N :
+ So 1 la so t nhien ( 1 N) .
+ So t nhien bang so t nhien cong 1 .
( n N ( n +1 ) N )
- Mo ta e quy cau truc xau (list) kieu T :
+ Cau truc rong la mot xau kieu T.
+ Ghep noi mot thanh phan kieu T(nut kieu T ) vi mot xau kieu T ta co mot
xau kieu T.
- Mo ta e quy cay gia pha : Gia pha cua mot ngi bao gom mgi o va gia pha
cua cha va gia pha cua me.
- Mo ta e quy thu tuc chon hoa hau :
+ Chon hoa hau cua tng khu vc.
+ Chon hoa hau cua cac hoa hau.
- Mo ta e quy thu tuc sap tang day a[m:n] ( day a[m], a[m+1], . . . , a[n] ) bang
phng phap Sort_Merge (SM) :
SM (a[m:n]) Merge ( SM(a[m : (n+m) div 2]) , SM (a[(n+m) div 2 +1 : n] )
Vi : SM (a[x : x]) la thao tac rong (khong lam g ca ).
Merge (a[x : y] , a[(y+1) : z]) la thu tuc tron 2 day tang a [x : y] , a[(y+1) :
z] e c mot day a[x : z] tang.
- inh ngha e quy ham giai tha FAC( n) = n !
0!=1
n!=n*(n-1)!
Phng phap e quy manh cho no cho phep mo ta mot tap ln cac oi tng ch bi
mot so t cac menh e hoac mo ta mot giai thuat phc tap bang mot so t cac thao tac
(mot chng trnh con e quy).
Mot mo ta e quy ay u gom 2 phan :
- Phan neo : mo ta cac trng hp suy bien cua oi tng (giai thuat) qua mot
cau truc (thao tac) cu the xac nh .
v du: 1 la so t nhien, cau truc rong la mot xau kieu T, 0 ! = 1 , SM (a[x:x])
la thao tac rong.
- Phan quy nap: mo ta oi tng (giai thuat) trong trng hp pho bien thong qua
chnh oi tng (giai thuat ) o mot cach trc tiep hoac gian tiep.
V du : n! = n * (n 1) !
SM (a[m:n]) Merge (SM (a[m:( m+n) div 2] , SM (a[(m+n) div 2 +1 : n]) )
Neu trong mo ta khong co phan neo th oi tng mo ta co cau truc ln vo han, giai
thuat mo ta tr thanh cau truc lap vo tan.
Trong toan hoc , trong lap trnh ngi ta thng s dung e quy e mo ta cac
cau truc phc tap, co tnh e quy . Bi mo ta e quy khong ch la cach mo ta ngan gon
cac cau truc phc tap ma con tao kha nang e xay dng cac thao tac x ly tren cac cau
truc phc tap bang cac giai thuat e qui . Mot cau truc d lieu co tnh e quy thng
gom mot so thanh phan d lieu cung kieu c ghep noi theo cung mot phng thc .
V du 1:
Mo ta e quy cay nhi phan :
Cay nhi phan kieu T :
+ Hoac la mot cau truc rong (phan neo).
+ Hoac la mot nut kieu T (nut goc) va 2 cay nh phan kieu T ri nhau (cay
con nh phan phai, cay con nh phan trai) ket hp vi nhau .
V du 2:
Mo ta e quy mang nhieu chieu :
+ Mang mot chieu la day co th t cac thanh phan cung kieu .
+ Mang n chieu la mang 1 chieu ma cac thanh phan co kieu mang n-1 chieu .
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 .
+ Mot so cac trng hp suy bien ma ga tr ham tai o a c biet trc hoac
co the tnh mot cach n gian (khong e quy ) .
Nh :
FAC(0 ) = 1 , FIBO(0) = FIBO(1) = 1 , Cn0 = 1 , Cnm = 0 vi m > n > 0 .
+ Trng hp tong quat viec tnh ham se c a ve tnh ham gia tr be
hn (gan vi gia tr neo) cua oi so .
Nh :
FAC(n ) = n * FAC(n - 1 ) ;
FIBO(n) = FIBO(n -1) + FIBO( n - 2 ) .
Trong tap bien cua ham co mot nhom ma o ln cua no quyet nh o phc tap cua
viec tnh ga tr ham . Nhom bien o goi la nhom bien ieu khien . Ga tr bien cua
nhom bien ieu khien ng vi trng hp suy bien . Ga tr cua nhom bien ieu khien
se thay oi qua moi lan goi e quy vi xu hng tien en ga tr bien ( tng ng vi
cac trng hp suy bien cua ham ).
Do o :
- Thu tuc tm max trong day a[1:n] ( thu tuc Tmax1) co the thc hien theo luat
e qui :
+ Tm max trong day con trai a[m:((m+n) div 2)]
(goi e quy Tmax1(a[m:((m+n) div 2)] ) ).
+ Tm max trong day con phai a[(((m+n) div 2)+1) :n] .
(goi e quy Tmax1(a[(((m+n) div 2)+1) :n] ).
+ Tm max cua 2 so : Tmax1(a[m:((m+n) div 2)] ) va
Tmax1(a[(((m+n) div 2)+1) :n] ). (giai thuat khong e quy).
Tc la :Tmax1(a[m:n]) =
max(Tmax1(a[m:((m+n) div 2)] ) ,Tmax1(a[(((m+n) div 2)+1) :n]) ).
vi Tmax1(a[m:m] = a[m] ; ( trng hp neo )
max(x,y) = x > y ? x : y ;
- Thu tuc tnh tong cac phan t ( TSUM1 ) co the thc hien theo luat e quy :
+ Tm tong day con trai a[m:((m+n) div 2)]
(goi e quy TSUM1 (a[m:((m+n) div 2)] ) ).
+ Tm tong day con phai a[(((m+n) div 2)+1) :n] .
(goi e quy TSUM1 (a[(((m+n) div 2)+1) :n] ) ).
+ Tm tong cua 2 so :
TSUM1 (a[m:((m+n) div 2)] ) va TSUM1 (a[(((m+n) div 2)+1) :n] ).
Tc la : TSUM1 (a[m:n]) =
TSUM1 (a[m:((m+n) div 2)]) + TSUM1 (a[(((m+n) div 2)+1) :n] )
vi TSUM1 (a[m:m]) = a[m]
V du 3 :
Cay nh phan tm kiem kieu T(BST) la mot cau truc gom : mot nut kieu T ket noi
vi 2 cay con nhi phan tm kiem kieu T nen :
- Thu tuc quet cay nhi nhan tm kiem theo th t gia (LNF) la :
+ Quet cay con trai theo th t gia ;
+ Tham nut goc ;
+ Quet cay con phai theo th t gia ;
- Thu tuc tm kiem gia tri o tren cay nh phan tm kiem Root la :
Neu Root th thc hien thao tac rong (khong lam g )
Con khong
neu gia tr tai nut goc = o th thong bao tm thay va dng
Con khong
neu gia tr tai nut goc < o th tm cay con trai
Con khong th tm cay con phai .
Nhan xet :
Trong mot thu tuc e qui, e cho viec goi e quy dng lai sau hu han lan goi no
can cha ieu kien kiem tra (mot bieu thc boolean B tren mot nhom bien ) , e khi
ieu kien nay khong con thoa th viec goi e qui ket thuc .
Dang thng gap cua thu tuc e qui la :
S1 ; ( khong cha yeu to e qui )
if B then S2 ( phan lenh trc tiep , khong co lenh goi e qui )
else Sdq ; ( phan lenh co lenh goi e qui )
S3 ; (khong co goi e qui )
D
Khai bao trc FORWARD .
e t thu tuc ham A co the goi en D la thu tuc ham cung cap nhng c mo ta sau
A, ta can co mot khai bao trc cua D pha trc cua A . Khai bao nay gom : tieu e
cua D, vi danh sach thong so cua D, tiep theo la t khoa FORWARD . Sau o luc
mo ta lai D th ch can khai bao t khoa PROCEDURE ( hoac FUNCTION ) , ten cua
D ( khong co danh sach thong so ) , phan than cua D.
V du : Vi 2 thu tuc goi e quy ho tng nhau FIRST,SECOND se c khai bao
nh sau :
procedure SECOND (i : integer ) ; Forward ;
procedure FIRST (n : integer ; var X : real);
var j, k : interger ;
begin
for j := 1 to n do begin
writeln( j = , j ) ;
k := n 2* j ;
SECOND( k );
end ;
end ;
procedure second ;
begin
if ( i > 0 ) then begin
writeln( i= , i );
FIRST( i 1 ) ;
end ;
end ;
else { tg = 0 ;
for i = 0 to n-1 do tg = tg + (n-i)2 Xi ;
return tg ;
}
CHNG II
BAI TOAN E QUY
e xay dng giai thuat giai mot bai toan co tnh e quy bang phng phap e quy ta
can thc hien tuan t 3 noi dung sau :
- Thong so hoa bai toan .
- Tm cac trng hp neo cung giai thuat giai tng ng .
- Tm giai thuat giai trong trng hp tong quat bang phan ra bai toan theo kieu
e quy.
2. Phat hien cac trng hp suy bien (neo) va tm giai thuat cho cac
trng hp nay.
ay la cac trng hp suy bien cua bai toan tong quat , la cac trng hp tng ng
vi cac ga tr bien cua cac bien ieu khien (trng hp kch thc bai toan nho nhat),
ma giai thuat giai khong e qui (thng rat n gian).
V du :
FAC(1) =1 , USCLN(a,0) = a , SM(a[x:x] ,TSUM(a[m:m]) = a[m]
II. MOT SO BAI TOAN GIAI BANG GIAI THUAT E QUY IEN
HNH.
THN(1,X,Y,Z) { Move( X, Z ) }
Chu y : Hoan toan tng t ta cung co the quan nien trng hp suy bien la trng
hp n= 0 tng ng vi bai toan THN(0,X,Y,Z) : chuyen 0 a t X sang Z lay Y lam
trung gian ma giai thuat tng ng la khong lam g ca ( thc hien thao tac rong ) .
THN(0,X,Y,Z) { }
c) Phan ra bai toan :
Ta co the phan ra bai toan TH N (k,X,Y,Z) : chuyen k a t cot X sang cot Z
lay cot Y lam trung gian thanh day tuan t 3 cong viec sau :
+ Chuyen (k -1) a t cot X sang cot Y lay cot Z lam trung gian :
THN (k -1,X,Z,Y) (bai toan THN vi n = k-1,X= X , Y = Z , Z = Y )
+ Chuyen 1 a t cot X sang cot Z : Move ( X, Z ) (thao tac c ban ).
+ Chuyen (k - 1 ) a t cot Y sang cot Z lay cot X lam trung gian :
THN( k -1,Y,X,Z) ( bai toan THN vi n = k-1 , X = Y , Y = X , Z = Z ) .
Vay giai thuat trong trng hp tong quat (n > 1) la :
d) Chng trnh con ma hoa giai thuat THN trong NNLT Pascal :
procedure THN (n : integer ; X,Y,Z : char)
begin
if n > 0 then begin
THN (n-1 ,X,Z,Y) ;
Move( X, Z);
THN (n-1 ,Y,X,Z);
end ;
end ;
( Lay trng hp chuyen n = 0 lam trng hp neo )
e) Chng trnh con ma hoa giai thuat THN trong NNLT C++ :
Trong C++ ham con thc hien giai thuat THN co dang :
void THN( int n , char X,Y,Z)
{ if(n > 0)
{ THN(n -1,X,Z,Y ) ;
Move ( X , Z ) ;
THN(n - 1,Y,X,Z ) ;
}
return ;
}
hoac :
void THN( int n , char X,Y,Z)
{ if(n = = 1) Move ( X , Z ) ;
else
{ THN(n -1,X,Z,Y ) ;
Move ( X, Z ) ;
THN(n - 1,Y,X,Z ) ;
}
return ;
}
a) Thong so hoa.
Ta se giai bai toan mc o tong quat : Tm so cach chia m vat (phan thng ) cho n
oi tng (hoc sinh ) co th t .
Goi PART la so cach chia khi o PART la ham cua 2 bien nguyen m , n ( PART(m
,n )) .
Ta ma hoa n oi tng theo th t xep hang 1, 2 , 3 , . . . n ; Si la so phan thng ma
hoc sinh i nhan c .
Khi o cac ieu kien rang buoc len cach chia la :
Si >= 0
S1 >= S2 >= >= Sn .
S1 + S2 + + Sn = m
V du :
Vi m = 5 , n = 3 ta co 5 cach chia sau :
5 0 0
4 1 0
3 2 0
3 1 1
2 2 1
Tc la PART(5,3 ) = 5
2 1 3 4 2 1 4 3 4 1 3 2 2 4 3 1
1 3 2 4 1 4 2 3 1 3 4 2 4 3 2 1
3 1 2 4 4 1 2 3 3 1 4 2 3 4 2 1
3 2 1 4 4 2 1 3 3 4 1 2 3 2 4 1
2 3 1 4 2 4 1 3 4 3 1 2 2 3 4 1
b) Trng hp neo.
Vi m = 1 : HV(v,1) la thu tuc giai bai toan xuat tat ca cac dang cua v co c
bang cach hoan v 1 phan tu au . Vay HV(v,1) la thu tuc xuat v.
HV(v,1) print(v) for k:= 1 to N do write(v[k])
...........................
...........................
SWAP (V[m],v[2] ) ; HV(V,m 1) ;
SWAP( V[m],v[1] ) ; HV(V,m 1) ;
}
( SWAP(x , y ) la thu tuc hoan oi gia tr cua 2 oi tng d lieu x ,y )
Vay :
HV(V , m ) for k := m downto 1 do begin
SWAP( V[m], V[k] ) ;
HV(V,m 1) ;
end ;
d) Thu tuc hoan v tren NNLT Pascal.
..................
const size = Val ; (* Val la hang ga tr *)
type vector = array[1. . size] of typebase; (* typebase la mot kieu d lieu co th
t *)
......................
procedure Swap( var x , y : typebase ) ;
var t : typebase ;
begin
t := x ; x := y ; y := t ;
end ;
......................... .
procedure print( A : vector ) ;
var i : integer ;
begin
for i:= 1 to size do write( A[i] : 3 );
writeln ;
end ;
......................... .
a) Thong so hoa:
Xet ham ROOT vi 3 thong so la g , a,b ,(ROOT(g,a,b)) tra ve gia tr nghiem xap x
cua phng trnh g(x) =0 tren oan [a,b] hoac gia tr C neu phng trnh xet khong
co nghiem xap x . e giai bai toan ban au ta goi ham ROOT(f,ao,bo) .
b) Trng hp tam thng:
o la khi b - a < epsilon .
Khi o :
if ( g(a).g(b) ) <= 0 then ROOT(g,a,b) = a ; // a la nghiem xap x
else ROOT(g,a,b) = E ; // khong co nghiem xap x
c) Phan ra trng hp tong quat:
khi b - a >= ta phan [a,b] lam 2 oan [a,c] va [c,b] vi c = (a + b) / 2.
- Neu ROOT(g , a ,c) < E th ROOT(g , a , b ) = ROOT(g ,a ,c) (bai toan tm
nghiem tren oan [a,c] ) .
- con khong th ROOT(g , a , b ) = ROOT(g ,c ,b) (bai toan tm nghiem tren
oan [c ,b] ) .
double R = ROOT(a,c) ;
if( R< E ) return R ;
else return ( ROOT(c , b) ) ;
}
}
CHNG III
KH E QUY
Trang thai cua tien trnh x ly mot giai thuat mot thi iem c ac trng bi
noi dung cac bien va lenh can thc hien ke tiep. Vi tien trnh x ly mot giai thuat
e qui tng thi iem thc hien, con can lu tr ca cac trang thai x ly ang con
dang d .
FAC(3 ) = 3 * FAC( 2 )
FAC( 2 ) = 2 * FAC( 1
FAC( 1 ) = 1 * FAC( 0
FAC( 0 ) = 1
Khi thc hien li goi FAC (3 ) se phat sinh loi goi FAC (2 ) , ong thi phai lu gi
thong tin trang thai x ly con dang do ( FAC ( 3 ) = 3 * FAC ( 2 ) ) . en lt mnh
li goi FAC ( 2 ) lai lam phat sinh li goi FAC (1 ) ,ong thi van phai lu tr thong
tin trang thai x ly con dang d ( FAC (2 ) = 2 * FAC ( 1 ) ) ,.. . C nh vay cho ti
khi gap li goi
trng hp neo ( FAC (0 ) = 1 ) .
Tiep sau qua trnh goi la mot qua trnh x ly ngc c thc hien :
- Dung gia tr FAC ( 0 ) e tnh FAC ( 1 ) theo s o x ly con lu tr .
- Dung gia tr FAC ( 1 ) e tnh FAC ( 2 ) theo s o x ly con lu tr .
- Dung gia tr FAC ( 2 ) e tnh FAC ( 3 ) theo s o x ly con lu tr .
ong thi vi qua trnh x ly ngc la qua trnh xoa bo cac thong tin ve giai thuat x
ly trung gian ( qua trnh thu hoi vung nh ) .
S o tnh FIB(5) :
FIB(1) = FIB(2) = FIB(0) + FIB(1) FIB(2) = FIB(0) + FIB(1) FIB(3) = FIB(2) + FIB(1)
FIB(0) = 1 FIB(1) =
e chuyen 3 a t cot A sang cot C dung cot B lam trung gian ta goi : THN
(3,A,B,C)
S o thc hien li goi THN (3,A,B,C) la :
THN(0,A,C,B)
THN(1,A,B,C) A ---> C
THN(0,B,A,C)
THN(2,A,C,B) A ---> B
THN(0,C,B,A)
THN(1,C,A,B) C --->B
THN(0,A,C,B)
THN(3,A,B,C) A ---> C
THN(0,B,A,C)
THN(1,B,C,A) B ---> A
THN(0,C,B,A)
THN(2,B,A,C) B ---> C
THN(0,A,C,B)
THN(1,A,B,C) A ---> C
THN(0,B,A,C)
Li goi cap 0 :
THN(3 , A , B , C ) se lam nay sinh hai li goi cap 1 : THN (2 ,A, C, B) ;
THN (2 , B , A , C ) cung vi cac thong tin cua qua trnh x ly con dang d .
Do ac iem cua qua trnh x ly mot giai thuat e quy la : viec thc thi li goi e
quy sinh ra li goi e quy mi cho en khi gap trng hp suy bien (neo ) cho nen e
thc thi giai thuat e quy can co c che lu tr thong tin thoa cac yeu cau sau :
+ moi lan goi phai lu tr thong tin trang thai con dang d cua tien trnh
x ly thi iem goi. So trang thai nay bang so lan goi cha c hoan tat .
+ Khi thc hien xong (hoan tat) mot lan goi, can khoi phuc lai toan bo
thong tin trang thai trc khi goi .
+ Lenh goi cuoi cung (ng vi trng hp neo) se c hoan tat au tien ,
th t day cac lenh goi c hoan tat ngc vi th t goi, tng ng day thong tin
trang thai c hoi phuc theo th t ngc vi th t lu tr .
Cau truc d lieu cho phep lu tr day thong tin thoa 3 yeu cau tren la cau truc lu tr
thoa luat LIFO (Last In Firt Out ) . Mot kieu cau truc lu tr thng c s dung
trong trng hp nay la cau truc chong (stack).
Vi mot chong S thng cho phep chung ta thc hien cac thao tac sau tren no :
- Thu tuc Creatstack(S) : Tao chong S rong .
- Thu tuc Push(x,S) : Lu tr them d lieu x vao nh stack S
( x la d lieu kieu n gian gian hoac co cau truc )
- Thu tuc Pop(x,S) : Lay gia tr ang lu nh S cha vao trong oi tng d
lieu x va loai bo gia tr nay khoi S ( lui nh S xuong mot mc ) .
- Ham Empty(S) : ( kieu boolean ) Kiem tra tnh rong cua S : cho gia tr ung
neu S rong , sai neu S khong rong .
Cai at cu the cua S co the thc hien bang nhieu phng phap phu thuoc vao tng
ngon ng lap trnh va tng muc ch s dung cu the .
V du :
Cai at ( bang cau truc mang ) chong S ma moi phan t la mot oi tng d lieu
thuoc kieu T trong PASCAL nh sau :
Const sizestack = . . . ;
Type stackType = record
St : array [1 . . sizestack ] of T ;
Top : 0 . . sizestack ;
end ;
S.St[S.Top +1] := x ;
S.Top := S.Top + 1 ;
End;
Thu tuc Pop(x,S) : Xoa - Lay gia tr ang lu nh S cha vao trong oi
tng d lieu x va loai bo gia tr nay khoi S ( lui nh S xuong mot mc ) .
Procedure Pop( var S : StackType ; var x : T ) ;
Begin
x := S.St[S.Top] ;
S.Top := S.Top - 1 ;
End;
Ham Empty(S) : ( Ham boolean ) Kiem tra tnh rong cua Stack S
Function Empty( S : StackType ) : boolean ;
Begin
Empty := ( S.Top = 0 ) ;
End ;
NNLT PASCAL va C++ thc hien c c che e qui nh trong qua trnh bien dch,
phan mem ngon ng t ong phat sinh ra cau truc stack e quan ly cac lenh goi
chng trnh con. Khi mot lenh goi chng trnh con thc hien, cac bien a phng
(gom ca cac thong so) se c cap phat vung nh mi nh stack. Nh vay cac tac
ong a phng cua thu tuc se khong lam thay oi cac trang thai x ly con dang d.
e quy la phng phap giup chung ta tm giai thuat cho cac bai toan kho . Giai
thuat giai bai toan bang e quy thng rat ep (gon gang, de hieu ,de chuyen thanh
chng trnh tren cac NNLT) . Nhng nh a ch ra tren viec x ly giai thuat e quy
lai thng gay kho khan cho may tnh (ton khong gian nh va thi gian x ly), hn na
khong phai moi NNLT eu cho phep ma hoa giai thuat e quy (v du : FORTRAN) . V
vay viec thay the mot chng trnh e quy ( co cha chng trnh con e quy ) bang
mot chng trnh khong e quy cung la mot van e c quan tam nhieu trong lap
trnh .
Mot cach tong quat ngi ta a ch ra rang : Moi giai thuat e quy eu co the thay
the bang mot giai thuat khong e quy . Van e con lai la ky thuat xay dng giai thuat
khong e quy tng ng thay the giai thuat e quy . Rat ang tiec viec xay dng giai
thuat khong e quy thay the cho mot giai thuat e quy a co lai la mot viec khong
phai bao gi cung n gian va en nay van cha co giai phap thoa ang cho trng
hp tong quat.
S o e xay dng chng trnh cho mot bai toan kho khi ta khong tm c giai
thuat khong e quy thng la :
+ Dung quan niem e quy e tm giai thuat cho bai toan .
+ Ma hoa giai thuat e quy .
+ Kh e quy e co c mot chng trnh khong e quy .
Tuy nhien do viec kh e quy khong phai bao gi cung de va v vay trong nhieu
trng hp ta cung phai chap nhan s dung chng trnh e quy .
k := k + 1 ;
F := F * k ;
end ;
FAC := F ;
end ;
hoac :
Function FAC ( n : integer ) : longint ;
var k : integer ;
F : longint ;
Begin
F := 1 ;
For k:= 1 to n do F := F * k ;
FAC := F ;
end ;
+ Trong NN LT C++
long int FAC ( int n )
{ int k = 0 ;
long int F = 1 ;
while ( k < n ) F = ++k * F ;
return (F) ;
}
Hoac :
long int FAC ( int n )
{ long int F = 1 ;
for ( int k = 1; k <= n ; k++) F = k * F ;
return (F) ;
}
+ 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 ) ;
}
P(X)
B(X)
True
A(X) ;
False X : = f(X)
D(X)
END
V du 1 :
e oi 1 so nguyen khong am y c so 10 sang dang c so k ( 2 <= k <= 9 ) vi
viec dung mang A ( A : array[1 . . size ] of 0..k -1 , size la mot hang c khai bao
trc ) e cha cac ky so trong he k phan ( vi quy c ky so co y ngha thap c
cha ch so cao ) khi o thu tuc e quy Convert(x,m) e tao day ga tr : A[0] ,
A[1] , . . . , A[m] nh sau (hay t giai thch ) :
Convert(n,m) if n <> 0 then Begin
A[m] := n mod k ;
Convert(n div k , m -1) ;
End ;
Ta co quan he sau :
Uo = Xo
Ui = g(Ui-1 ) i = 1 ... k . Vi k la so nho nhat ma C(Uk ) sai .
Luc o : f(Xo ) = a(Uk )
Vay oan chng trnh tnh f = f(Xo) la :
U := Xo ;
while C(U) do U := g(U) ;
f := a(U) ;
V du :
Vi m , n > = 0 ta co ham e quy tnh USCLN(m,n) la :
USCLN(m ,n ) if (m <> 0 ) then return(USCLN ( abs(m - n) , min(m , n) ) ;
else return n ;
Trong trng hp nay :
X la (m ,n ) ;
C (X) = C(m ,n) la m <> 0 ;
g(X) = g(m ,n ) = (abs(m -n ) , min (m ,n ) ) ;
a(x) = a(m ,n ) = n ;
m = abs(t1-t2) ;
if(t1<t2) n = t1 ; else n = t2 ;
}
return(m) ;
}
= DS(A(Ui+1),FS(Ui+1,Ui))
= DS(Vi+1,FS(Ui+1,Ui)) vi 0< i < k ( v C(Ui) ung )
Vk = BS(Uk) ( v C(Uk) = false )
Da vao 2 day so {Ui } ,{Vi} ( mo ta bi (2.1) va (2.2) ) ta tnh A(X ) theo giai thuat
sau :
- Tnh va ghi nh cac Ui t 0 en k theo (2.1).
( Vi C(Uo) = C(U1) = ...= C(Uk-1) = True , C(Uk) = False )
- S dung day ga tr Ui e tnh lan ngc Vi t k xuong 0 theo (2.2) , Vo chnh
la ga tr can tnh ( Vo = A(X ) ).
c) Giai thuat khong e quy tnh ga tr ham Arsac bang s dung cau truc
Stack .
e thc hien giai thuat tren th day Ui phai c tnh va lu tr trong mot cau
truc d lieu thch hp , e khi can en (khi tnh Vi ) de lay ra s dung . ac iem quan
trong cua day Ui la thoa luat LIFO : th t s dung ngc vi th t tao sinh . Cau
truc d lieu cho phep lu tr thuan li day phan t thoa luat LIFO ( vao sau ra
trc - Last In First Out ) la cau truc Stack .
( Tren cau truc Stack 2 thao tac c ban ac trng la :
+ Push(S,X) : Chen phan t d lieu X vao nh Stack S .
+ Pop(S,X) : Lay ra khoi stack S phan t d lieu nh va cha no
vao bien X ).
Giai thuat khong e qui tnh Vo = A(X) da tren 2 cong thc (2.1 ) , (2. 2 ) va s
dung Stack S la :
+ Bc 1 : tnh Ui bat au t Uo theo (2.1) lu vao Stack S
CreateStack(S) ; ( tao stack rong S )
k := 0 ;
U := X ; ( Uo = X )
push(S,U) ; ( chen UO vao nh stack S )
while C(U) do begin
k := k+1 ;
U := CS(U) ; ( Uk+1 = CS(Uk))
push (S,U) ; ( chen Uk+1 vao nh Stack S )
end ;
pop(S,U) ; ( U = Ui )
V := DS(V,FS(Y,U)) ; ( C(Ui) ung ; Vi = DS(Vi+1,FS(Ui+1,Ui)) )
end ;
{ V = A(Xo) }
Hoac :
+ Bc 1 : tnh Ui bat au t Uo theo (2.1) lu vao Stack S
CreateStack(S) ; ( tao stack rong S )
U := Xo ; ( Uo = Xo )
push(S,U) ; ( chen UO vao nh stack S )
while C(U) do begin
U := CS(U) ; ( UK+1 = CS(UK))
push (S,U) ; ( chen Uk+1 vao nh Stack S )
end ;
+ Bc 2 : Lay d lieu trong Stack S tnh Vi theo (2. 2)
pop(S,U) ; ( U = Uk )
V := BS(U) ; ( C(Uk) sai ; V=Vk = BS (Uk))
While(not emptystack(S)) do
begin
Y := U ; ( Y = Ui+1)
pop(S,U) ; ( U = Ui )
V := DS(V,FS(Y,U)) ; ( C(Ui) ung ; Vi =
DS(Vi+1,FS(Ui+1,Ui)) )
end ;
{ V = A(Xo) }
C che lu tr day d lieu LIFO bang Stack la mot ac trng cua qua trnh x ly
giai thuat e quy ieu can quan tam la cau truc stack thng chiem nhieu bo nh . V
vay ngi ta luon tm cach tranh dung no khi con tranh c .
Khi o ta khong can lu gi cac gia tr trung gian cua day { Ui } ma ch can
xuat phat t Uk dung ham CSM1 e khoi phuc lai cac ga tr Ui voi i<k .
Giai thuat tnh A(X ) se tr thanh :
+ Bc 1 : Da vao (2.1) tnh Uk
U := X ; ( Uo = X )
k := 0 ;
while C(U) do begin
k := k+1 ;
U := CS(U) ; ( UK+1 = CS(UK))
end ;
Vo = V1 T U0 = ( V2 T U1) T Uo = ( V2 T U0 ) T U1
= ( ( V3 T U2) T Uo) T U1 = ((V3 T U2) T Uo ) T U1
= ( (V3 T Uo) T U2 ) T U1
= ( (V3 T Uo) T U1 ) T U2
.......................................................................................................
.......................................................................................................
(3 - 2) la mot day lien tiep ( mot tong ) k phep toan T ma ta a biet giai thuat
tnh. Thc vay :
Thiet lap day Wi nh sau :
W0 = Vk
Wi = Wi-1 T Ui-1 vi i = 1..k
Tc la : Wo = Vk = BS(Uk ) (3 - 3 )
Wi = Wi-1 T Ui-1 = DS(Wi-1,FS(Ui,Ui-1)) i=1..k
Wk chnh la ga tr Vo can tnh .
Nh vay giai thuat tnh Wk ( Vo = A(X ) ) gom 2 bc :
Bc 1: Xac nh k va Uk theo cong thc ( 1 - 1 )
Bc 2: Tnh day Wi , trong luc tnh th phai tnh lai day Ui ,theo ( 3 - 3)
A(X ) = Vo = Wk .
Giai thuat khong e qui tng ng dc xem nh bai tap .
b) Thu tuc e qui chi co mot lenh goi e quy trc tiep .
Mo hnh tong quat cua thu tuc e quy ch co mot lenh goi e quy trc tiep la :
P(X) if C(X) then D(X)
else begin
A(X) ; P(f(X)) ; B(X) ;
end ;
Vi :
X la mot bien n hoac bien vec t.
C(X) la mot bieu thc boolean cua X .
A(X) , B(X) , D(X) la cac nhom lenh khong e quy ( khong cha lenh goi en
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 thong tin giai thuat B(Y) lai
c sinh ra (nhng cha thc hien ) .
Ga s qua trnh e quy ket thuc sau k lan goi e quy th ta phai thc hien
mot day k thao tac B theo th t : B(fk-1(X)) , B(fk-2(X)) , . . . ,B(f(f(X)))
,B(f(X)),B(X).
e thc hien day thao tac { B(fi(X)) } theo th t ngc vi th t phat sinh ta can
day d lieu {fi(X) } truy xuat theo nguyen tac LIFO. Ta se dung mot Stack e lu tr
day { fi(X) } { X , f(X) , f(f(X)) , . . . , fi(X) , . . . , fk-1(X) }
Trnh t thc hien P(X) c dien ta bang mo hnh sau :
P(X)
------------------------------------------------------------------------------------------------
{ Creat_Stact (S) :
Push (S, (X,1)) ;
Repeat
While ( not C(X) ) do begin
A(X) ;
Push (S, (X,2)) ;
X := f(X) ;
end ;
D(X) ;
POP (S, (X,k)) ;
if ( k <> 1) then begin
B(X) ;
X := g(X) ;
end ;
until ( k = 1 ) ;
}
{ Creat_Stack (S) ;
Push (S ,(n,X,Y,Z,1)) ;
Repeat
While ( n > 0 ) do begin
Push (S ,(n,X,Y,Z,2)) ;
n := n - 1 ;
Swap (Y,Z ) ; (* Swap(a,b) la thu tuc hoan
end ; oi noi dung 2 bien a ,b *)
POP (S,(n,X,Y,Z,k)) ;
if ( k <> 1 ) then begin
Move (X ,Z ) ;
n := n - 1 ;
Swap (X ,Y ) ;
end ;
until ( k = 1 ) ;
}
Cung giong nh trong trng hp (3a) la khi quay tr lai sau khi thc hien mot lan
e quy, can biet o la lenh goi thuoc nhom th may trong day lenh goi e biet thao
tac can thc hien tiep. V vay trong chong can gi them v tr nhom lenh goi .
Dang lap tng ng la :
{ Creat_Stack (S) ;
Push(S,(X,1)) ;
Repeat
While (not C(X) ) do begin
A1(X) ;
Push (S,(X,2)) ;
X := f1(X) ;
end ;
D(X) ;
POP(S,(X,k)) ;
While( k = n+1 ) do begin
An+1 ;
POP(S,(X,k)) ;
end ;
if ( k > 0 ) then begin
Ak(X) ;
Push (S,(X,k+1));
X := f k (X)
end ;
until (k = 1 ) ;
}
{ Creat_Stack (S) ;
Push (S,(V ,n ,1)) ;
Repeat
While ( n > 1 ) do begin
Swap(V[n] ,V[1] ;
Push (S ,V , n ,2) ;
n := n -1 ;
end ;
Print (V) ;
POP (S ,(V ,n ,k)) ;
While ( k = n +1 ) do POP(S ,(V ,n ,k) ;
if(k <> 1 ) then begin
Swap(V[n] ,V[k]) ;
Push (S ,(V ,n ,k+1) ;
n := n - 1 ;
end ;
until(k = 1 ) ;
PHAN II
CHNG IV
CAC KHAI NIEM
I. CAC GIAI OAN TRONG CUOC SONG CUA MOT PHAN MEM
Viec s dung may tnh e giai mot bai toan thc te thng bao gom nhieu viec.
Trong cac cong viec o cong viec ma ngi ta quan tam nhat la viec xay dng cac he
thong phan mem (cac he thong chng trnh giai bai toan ).
e xay dng mot he thong phan mem , ngi ta thng thc hien trnh t cac cong
viec sau : ac ta bai toan, xay dng he thong, s dung va bao tr.
1) ac ta bai toan
Gom viec phan tch e nam bat ro yeu cau cua bai toan va dien at chnh xac lai
bai toan bang ngon ng thch hp va thch ng vi chuyen nganh tin hoc va co tnh
ai chung ( de hieu oi vi nhieu ngi).
- Th nghiem mc o he thong : Sau khi tng module hoat ong tot, ngoi ta can
th s hoat ong phoi hp cua nhieu module, th nghiem toan bo he thong phan mem.
Th nghiem tnh ung theo bat c cach nao th cung rat ton thi gian va cong sc
nhng lai la mot viec phai lam cua ngi lap trnh v ngi lap trnh luon luon phai
bao am chng trnh mnh tao ra thoa ung ac ta.
II. AC TA
1. ac ta bai toan
a) Khai niem.
Khi co mot van e ( mot bai toan) can c giai quyet , ngi ta phat bieu bai toan
bang mot van ban goi la ac ta bai toan (problem specification).
Cac bai toan at ra cho nhng ngi lam cong tac tin hoc thng co dang sau : Xay
dng mot he thong x ly thong tin ma hoat ong cua no :
- Da tren tap d lieu nhap (thong tin vao) thoa man nhng ieu kien nhat nh.
- Xay ra trong mot khung canh moi trng han che nhat nh.
- Mong muon san sinh ra mot tap d lieu xuat (thong tin ra ) c quy nh trc
ve cau truc va co moi quan he vi d lieu nhap va moi trng c xac nh trc .
Nhng kha canh tren c the hien trong ac ta bai toan (TBT) .
- ieu kien rang buoc tren d lieu xuat: Nhng ieu kien rang buoc ma d lieu xuat
phai thoa. Chung the hien yeu cau cua ngi s dung oi vi chng trnh. Cac ieu
kien nay thng lien quan en d lieu nhap .
V du 1 :
Viet chng trnh oc vao mot so nguyen dng N roi xuat ra man hnh N so
nguyen to au tien.
ac ta chng trnh :
+ D lieu nhap : mot so nguyen N .
+ ieu kien nhap : N > 0 , nhap vao t ban phm.
+ D lieu xuat : mot day gom N so nguyen .
+ ieu kien xuat : la day N so nguyen to au tien , xuat ra mam hnh .
V du 2 :
Viet chng trnh oc vao mot day N so nguyen , xuat ra man hnh day a sap xep
theo th t khong giam.
ac ta chng trnh :
+ D lieu nhap : mot array A co N phan t la so nguyen .
+ ieu kien nhap : nhap t ban phm .
+ D lieu xuat : array A' co N phan t la so nguyen.
+ ieu kien xuat : xuat ra man hnh ,A' la mot hoan v cua A , A' la mot
day khong giam. ( 1 <= i < j <= N ==> A'[i] <= A'[j] )
Chu y : Mot ac ta tot cho mot nh hng ung ve s dung hp ly cac cau truc d
lieu va mot gi y tot ve hng xay dng giai thuat cho bai toan.
tng thi iem trc hoac sau khi thc hien mot lenh , ngi ta quan tam en tap
hp cac trang thai co the cua chng trnh. Tap hp cac trang thai nay se c bieu
th bi cac tan t bac nhat vi cac bien la cac bien cua chng trnh.
V du 1 : oan chng trnh sau tnh tch cua hai so nguyen dng a va b
{ ( a > 0) and (b > 0) } // rang buoc tren trang thai au .
x := a ;
y := b ; u := 0 ;
{ ( x = a ) and (y = b ) and ( (u + x*y ) = (a*b) ) } // rang buoc trung gian tren
repeat {(u+x*y = a*b) and ( y>0 ) } trang thai cua CT.
u := u + a ;
y := y - 1 ;
{(u+x*y = a*b) and (y >= 0) } // rang buoc trung gian tren trang
thai
until (y= 0) cua chng trnh.
{u= a*b} // rang buoc tren trang thai xuat
Moi tan t trong v du tren mo ta mot tap cac trang thai co the co iem o.
V du 2 : oan chng trnh hoan oi noi dung cua 2 bien x va y, dung bien t lam
trung gian.
{( x = xo) and (y = yo ) } // x , y mang gia tr ban au bat ky nao o
t := x ;
x := y ;
y := t
{ (x = yo ) and (y = xo ) } // x , y sau cung mang gia tr hoan oi cua nhau.
Trong v du nay e bieu dien quan he gia noi dung cac bien vi noi dung cua mot
so bien b gan tr, ngi ta can phai dung cac bien gia (ghost variable). V du ay
la xo va yo bieu th noi dung cua x va y trc khi thc hien oan chng trnh.
V du 3 :
Nhan 2 so nguyen dng x , y, ket qua cha trong u .
{ (x = xo > 0) and (y = yo > 0 )}
u := 0 ;
repeat
u := u + x ;
y := y - 1 ;
until (y = 0)
{ u = x o * yo }
That ra ay tap hp cac trang thai xuat thc s la nho hn, bieu th bi mot ieu
kien chat hn, o la : {( u = xo * yo ) and (y = 0) and (x = xo ) }
Tong quat ta can khao sat mot oan chng trnh S vi 2 ieu kien i trc P va
i sau Q . Can chng minh rang neu xuat phat t trang thai thoa P thi hanh lenh S th
Viec thiet lap cac khang nh nhng iem khac nhau trong chng trnh nham e :
+ Hoac la ac ta mot oan chng trnh can phai xay dng : tm S thoa P, Q cho
trc.
+ Hoac la c s e chng minh tnh ung cua oan chng trnh S ( oan chng
trnh S thoa ac ta ).
+ Hoac e ac ta ng ngha oan chng trnh (thc hien su lieu chng trnh)
nham muc ch lam ngi oc hieu c y ngha cua oan chng trnh
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>
CHNG V
KIEM CHNG TNH UNG CO IEU KIEN
Xet bo 3 gom : oan lenh S, cac tan t tren cac bien cua chng trnh (co the bao
gom cac bien gia) P, Q ( P mo ta ieu kien au , Q mo ta ieu kien cuoi ).
Bo 3 : { P } S { Q } tao nen ac ta oan lenh S .
ac ta : { P } S { Q } c goi la thoa ay u ( ung ay u ) neu xuat
phat t bat ky 1 trang thai thoa P thc hien oan lenh S th viec x ly se dng trang
thai thoa Q .
ac ta : { P } S { Q } c goi la thoa co ieu kien ( ung co ieu kien ck )
neu xuat phat t bat ky 1 trang thai thoa P thc hien oan lenh S neu viec x ly dng
th trang thai cuoi thoa Q ( tnh dng cua S cha c khang nh ).
Khang nh { P } S { Q } dien at tnh ung co ieu kien (condition
correctness) (tck) cua S. Tnh ung cua S da tren k P va kc Q vi gia nh
rang tnh dng cua S a co.
V du : a) { (x = xo ) and (y = yo ) } Neu (x = xo ) va (y = yo ) trc khi
t := x t := x c thi hanh
{( t = x = xo ) and (y = yo ) } Th sau o ( t = x = xo ) va (y = yo )
e co the thc hien chng minh hnh thc ve tnh ung cua cac oan chng
trnh, ta can co nhng tien e mo ta tac ong cua cac thao tac x ly c ban (lenh c
ban ) cua ngon ng dung viet chng trnh ( ay la ngon ng cot loi a c gii
thieu IV.3 ). Mot he tien e co tac dung nh the cua Ca. Hoare , c trnh bay di
dang mot he luat suy dien (inference rules ) c xet di ay .
1a.
P => Q , { Q } S { R }
(1a)
{P} S {R}
1b.
Q => R , { P } S { Q }
(1b)
{P} S {R}
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.
T (2 ) ta suy ra neu trc lenh gan x := bt ; trang thai chng trnh lam P(bt) sai
(thoa not P(bt) ) th sau lenh gan P(x) cung sai (thoa notP(x)).
Lenh gan x := bt xoa gia tr cu cua x , sau lenh gan x mang gia tr mi la tr cua
bieu thc bt , con tat ca cac bien khac van gi gia tr nh cu.
V du : Tnh ung co ieu kien cua cac ac ta sau c khang nh da vao tien e
gan
a) { x = x } y := x { x = y }
b) { 0 <= s + t - 1 } s := s + t - 1 { 0 <= s }
c) { i = 10 } j := 25 { i = 10 }
{ P } S1 { R } , { R } S2 {Q }
(3.1)
{ P } S1 ; S2 { Q }
Gia nh co tnh dng cua S1 va S2, luat nay phat bieu y sau :
Neu: i) Thi hanh S1 vi k P am bao kc R ( ac ta { P } S1 { R } c k )
ii) Thi hanh S2 vi k R am bao kc Q ( ac ta { R } S2 { Q } c k)
Th : thi hanh S S1 ; S2 vi k P am bao kc Q ( ac ta { P } S1 ; S2 { Q }
c k )
V du : Kiem chng tck ac ta :
{true} x := 5 ; y := 2 { x = 5, y = 2 }
Ta co : { 5 = 5 } x := 5 { x= 5} (a) // tien e gan
true =>( 5 = 5 ) va ( x = 5) => ( (x = 5) and (2 = 2) ) (b) // hien nhien
{true} x := 5 {( x = 5) and ( 2 = 2) } (c) //theo luat he qua
{ x = 5 , 2 = 2 } y := 2 {( x = 5) and ( y = 2) } (d) // tien e gan
{true} x := 5 ; y := 2 { x = 5, y = 2 } // theo luat tuan t
b2)
{ I and B } S { I }
------ (3.3)
{ I } while B do S { I and (not B ) }
Luat nay noi rang neu I khong b thay oi bi mot lan thc hien lenh S th no
cung khong b thay oi bi toan bo lenh lap While B do S. Vi y ngha nay I c goi
la bat bien (invariant) cua vong lap.
Chu y rang khang nh : { P } while B do S { Q } thoa da vao he luat Hoare
ch xac nh tck (conditionnal correctness). e chng minh tnh ung (correctness)
thc s ta can bo sung chng minh lenh lap dng.
V du1 :
Kiem chng tnh ung co ieu kien cua ac ta :
{i<=n} while (i < n ) do i := i+1 {i=n}
Xem I la ( i <= n ) th :
{ I and ( i < n )} i := i+1 {I} (a) // de kiem chng
Nen {I} while ( i < n ) do i := i+1 { I and not(i<n)} (b) // luat 3.3
Cho : P, Q la cac tan t tren cac bien cua chng trnh , S la mot lenh to hp t cac
lenh gan vi cau truc ieu kien va tuan t. Chng minh ac ta : { P } S { Q}
ung ay u .
ay v moi lenh ch c thi hanh mot lan nen tnh dng cua oan lenh S c suy
ra t tnh dng cua lenh gan ma luon c xem la hien nhien . V vay trong trng hp
nay tnh ung co ieu kien trung vi tnh ung au u.
1) Bai toan 1 : S la day tuan t cac lenh gan .
V du1 : Kiem chng tnh ung cua oan lenh hoan oi noi dung 2 bien x va y
a) {(x=xo) and ( y = yo ) }
t := x ; x := y ; y := t ;
{(x=yo ) and (y = xo ) }
Chng minh
{(x = yo ) and ( t = xo) } y := t {(x = yo ) and ( y = xo ) } (a) // tien e gan
{(y = yo ) and ( t = xo ) } x := y {(x = yo ) and ( t = xo ) } (b ) // tien e gan
{(y = yo ) and ( t = xo ) } x := y ; y := t {(x = yo) and ( y = xo ) } (c) // a , b , luat
tuan t
{(y = yo ) and ( x = xo ) } t := x {(y = yo ) and ( t = xo ) } (d) // tien e gan
( (x = xo ) and (y = yo ) ) ( ( y = yo ) and ( x = xo ) } (e ) // giao hoan
{( x = xo ) and (y = yo ) } t := x {(y = yo ) and ( t = xo ) } (g) // d ,e, luat he
qua
2) Bai toan 2 :
a) Kiem chng ac ta : {P} if B then S1 else S2 {Q}
Vi S1, S2 la nhom cac lenh gan , B la bieu thc boolean.
Cach chng minh :
+ Bc 1 : Tm P1, P2 thoa : {P1} S1 {Q} (1a)
{P2} S2 {Q} (1b)
+ Bc 2 : Chng minh ( dung cac tnh chat logic va ai so )
P and B ==> P1 (2a)
P and (not B) ==> P2 (2b)
+ Bc 3 : Dung luat he qua suy ra :
{P and B} S1 {Q} ( 3a) // 1a ,2a , va luat he qua
{P and (not B)} S2 {Q} ( 3b) // 1b ,2b , va luat he qua
+ Bc 4 : Dung (3a) , (3b) , luat ieu kien suy ra :
1. Bat bien
Mot tnh chat ac thu cua tr tue la no thoat khoi cong viec ma no ang thc hien,
khao sat ket qua ma no a lam va luon luon tm kiem, va thng phat hien c, cac
khuon mau (Douglas R. Hofstadter).
Mot bat bien la mot tnh chat khong thay oi ton tai trong mot khung canh, mot s
kien mot qua trnh thay oi thng xuyen.
Mot ieu co ve nghch ly la trong mot the gii, thay oi va can thiet phai thay oi
nhanh chong, cac bat bien lai co y ngha rat quan trong oi vi chung ta.
Mot em be trong mot nc noi tieng Anh hoc cach thanh lap dang so nhieu cua
danh t : dogs, cats, hands, arms ..., cach thanh lap dang qua kh cua ong t :
kicked, jumped, walked ... bang hoc luat khong oi (them s, them ed), kem theo
vi viec hoc thuoc mot so trng hp ngoai le. Hay tng tng viec hoc se kho nh
the nao neu khong co cac luat khong oi (bat bien ) nay.
Viec nhan thc c cac bat bien thng dan ti nhng li giai n gian cho cac
bai toan kho.
au oc con ngi dng nh co mot kha nang ac biet e nhan thc cac bat bien
hay cac "khuon mau".
Hay quan sat 2 day cac hnh sau :
(a)
(b)
Hnh ke tiep trong moi day hnh tren la g ? Tnh chat bat bien cua moi day la g ?
(a) Lap lai bo 3 hnh vuong, tron, tam giac.
(b) Ve dang th la s lap lai cua cap 2 hnh vuong ln va nho. Ve mau th la s lap
lai cua mot mau trang va 2 mau sam.
Trong lnh vc chng trnh cho may tnh, ta cung can nhan thc cac s viec bang
cach phat hien cac bat bien. oi vi mot chng trnh, ta co nhieu lan may tnh thi
hanh no, moi lan thi hanh c goi la mot qua trnh (process) va tac ong tren cac d
kien khac nhau. Tnh bat bien cua cac qua trnh nay chnh la ac ta cua chng trnh.
Ben trong mot chng trnh co the co cac vong lap. Viec thc hien vong lap lam
bien thien nhieu lan trang thai cac bien chng trnh (cac oi tng d lieu ) , ma so
lan bien thien thng khong biet trc c. Lam the nao e hieu c tac ong cua
vong lap va i en chng minh vong lap thc hien mot tnh chat (gi mot bat bien) nao
o the hien bi ac ta cua no.
Mo hnh bien oi trang thai chng trnh cua vong lap while B do S
{P} { P1 } { P2 }. . . . . . . . { Pn }
{Q} S S S S
k P B >= 0
kc Q R=A*B
Bc 1: Kiem chng tnh ung co ieu kien cua ac ta {P} S {Q}
+ Kiem chng oan lenh trc vong lap : Chng minh ac ta sau ung .
{ B >= 0 }
R := 0 ; (*)
X := B ;
{X = B , R = 0, B >= 0 }
Ta co :
{0 = 0 , B >= 0} R := 0 {R = 0 , B >= 0} (1) tien e gan
{0 = 0 , B >= 0} { B >= 0} (2) hien nhien
{B >= 0} R := 0 {R = 0, B >= 0} (3) luat he qua da vao (1),(2)
{B = B , R = 0 , B >= 0} X := B {X = B , R = 0 , B >= 0} (4) tien e gan
{B =B , R =0 , B >= 0} { R = 0 , B >= 0 } (5) hien nhien
{R = 0 , B >= 0} X := B {X := B , R = 0 , B >= 0} (6) Luat he qua da vao
(4),(5)
{B >= 0} X := 0 ; X :=B {X = B , R = 0 , B >= 0} (7) luat tuan t da vao (3),(6).
Nh vay vi ieu kien au B >= 0 th sau khi thc hien xong 2 lenh khi ong, ta co
khang nh X = B, R = 0, B >= 0 ac ta (*) ung .
+ Kiem chng vong lap :
- Phat hien c bat bien cua vong lap.
Bat bien ay la : so lan X b giam i chnh la so lan A c cong vao R
Tc la : I ( R = A*(B-X) ) and ( X >= 0 )
Khang nh (X >= 0 ) c them vao e chng minh vong lap dng.
- Chng minh I la bat bien cua vong lap :
{( R + A = A*B - A*X + A ) and ( X >0 )}
R := R + A
{(R = A*B - A*X + A ) and ( X > 0 )} (8) tien e gan
{ ( R = A*(B - X)) and ( X > 0 )}
R := R + A
{ ( R = A*B - A*X + A ) and ( X > 0 )} (9) bien oi t (8)
{ ( R = A*B - A*X + A ) and ( X > 0 )}
{ ( R = A*(B -(X - 1)) ) and ( (X 1 ) >= 0 )}(10)
{ ( R = A*(B -(X - 1)) ) and (( X 1 ) >= 0 )}
X := X 1
{( R = A*(B - X)) and ( X>=0 ) } (11) tien e gan
{( R = A*B - A*X + A) and (X > 0)}
X := X 1
{( R = A*(B X ) ) and ( X >= 0 )} (12) luat he qua
{(R = A*(B X )) and ( X > 0 )}
R : = R+A ; X := X - 1
{( R = A*(B X )) and ( X >= 0 )} (13) luat tuan t da vao (9 ),(12)
{(R = A*(B X )) and (X >= 0 ) and (X<>0)} ==> {(R =A*(B X )) and (X >0 )}(14)
{(R = A*(B X )) and (X >= 0) and (X<>0)}
R := R+A ; X := X-1
{(R = A*(B X )) and (X >= 0)} (15) luat he qua da vao (13 ),(14)
Hay {I and C} R := R + A ; X := X 1 {I}
vi C la ieu kien vong lap X<>0
Do luat lap ta co :
CHNG VI
KIEM CHNG TNH UNG AY U
2. nh ngha WP(S,Q).
Neu Q la mot tan t tren cac bien chng trnh va S la mot oan lenh th ieu kien
au yeu nhat cua S da tren Q (the weakest precondition of S with respect to Q ) la
mot tan t tren cac bien chng trnh mo ta tap hp moi trang thai ban au sao cho
viec thi hanh S bat au mot trang thai thoa no eu c bao am la se dng trong
mot trang thai thoa tan t cuoi Q ( thuoc tap {Q} ),va c ky hieu la WP(S ,Q )
Khai niem WP la c s cho viec mo ta mot he thong quy tac kiem chng tnh ung
ay u oan chng trnh cua Dijkstra . Ta se tm hieu noi dung cua he thong nay
trong moi tng quan vi he luat cua Hoare.
Viec ket hp cac quy tac cua 2 he thong nay se cho ta mot phng tien hp ly e
chng minh tnh ung ay u cua oan chng trnh.
4. Cac v du.
V du 1 : Tnh WP(while n<>0 do n := n 1, n = 0 ) va so sanh vi tan t yeu
nhat thoa co ieu kien lenh lap while n<>0 do n := n 1 vi ieu kien cuoi n = 0
+ Da vao quy luat cua Hoare th ta co :
{true} while n<>0 do n := n -1 { n = 0}
Thc vay :
T : {true and ( n<>0) } n := n-1 {true}
( xem bat bien vong lap la : I true )
ta suy ra : {true} while (n<>0) do n := n -1 {true and n = 0}
+ T inh ngha WP ta suy ra :
wp (while (n<>0) do n := n -1 , n = 0 ) ( n >= 0 )
Ta co :
wp (while (n<>0) do n := n -1 , n = 0) ===> true
Tc la : tan t yeu nhat thoa ay u ac ta {P} S {Q} manh hn tan t yeu nhat
thoa co ieu kien ac ta ( tc la tap ieu kien au ln nhat thoa ay u la tap con cua
tap ieu kien au thoa co ieu kien )
V du 2 :
S i := 0 ; Q ( i = 0 ) ;
Tm wp (S,Q) .
V : + P ==> true vi moi P nen ta cung co wp(S,Q) ==>true (a)
+ true bao am S dng va moi trang thai au eu dan en Q nen
true ==> wp(S,Q) (b)
T (a),(b) ta suy ra : wp(i:=0, i = 0) true
V du 3 :
S i := 0 ; Q ( i = 1 ) ;
Tnh wp (S,Q) .
ay la trng hp ngc vi v du 2. Bat chap trang thai trc lenh gan la g,
lenh gan i := 0 khong the nao bao am i=1.
V vay : wp(i:= 0 , i=1) false
false mo ta tap hp trang thai rong. Tc la tap ieu kien au thoa S,Q la tap rong .
Quan he gia WP oi vi cac toan t logic cau tao nen tan t Q nh the nao?
1. Cac quy c :
WP(S,false) false
b) WP(S,true) la tan t xac nh tap cac trang thai bao am tnh dng cua S
V du : WP(while (n<>0 ) do n := n -1, true) ( n >= 0 )
2. Tnh phan phoi cua and : wp(S,Q) and wp(S,R) wp(S,Q and R)
V du :
WP(i := i -1, i = 0) ( i-1 = 0 ) ( i = 1 ) .
WP(i := (l+u) div 2, l <= i <= u) l <= ((l+u) div 2) <= u
WP(i := 1, i =1 ) 1 = 1 true
2. Toan t tuan t.
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 :
Chng minh tnh ung ay u ac ta sau :
{ S=i*(i+1)/2 }
i := i+1;
S := S+i;
{ S = i*(i+1)/2 }
Ta co :
wp(i := i+1 ; S := S+i, S=i*(i+1)/2)
wp(i := i+1, wp(S := S+i, S=i*(i+1)/2))
wp(i := i+1, S+i = i*(i+1)/2)
S +i+1 = (i+1)*(i+1)+1)/2
S = i*(i+1)/2)
Theo nh ngha cua wp ta co :
{ wp(i := i+1 ; S := S+i, S=i*(i+1)/2) }
i := i+1;
S := S+i;
{ S = i*(i+1)/2 }
ung ay u . Suy ra PCM.
WP(if B then S1 else S2, Q) (B ==> WP(S1 , Q) and (not B ==> WP(S2 , Q) )
V du 1 :
Tnh WP(if ( i= 0) then j := 0 else j := 1, j=1)
Ta co : WP(j := 0, j = 1) (1 = 0 ) false
WP(j := 1 , j = 1) (1 = 1 ) true
Nen : WP(if ( i = 0) then j := 0 else j := 1, j=1)
((i = 0) ==> false) and ((i<>0) ==> true)
( not(i=0) or false) and true ( i <> 0 )
V du 2:
Tnh WP(if ( i>j ) then j := j+1 else i := i+1, i >= j)
Ta co : WP(j := j+1, i >= j) i >= j+1 i > j
WP(i := i+1 , i >= j) i+1 >= j i >= j -1
Nen WP(if ( i>j ) then j := j+1 else i := i+1, i >= j)
((i > j) ==> (i > j)) and ((i <= j) ==> (i >= j -1))
true and ( not(i <= j) or (i >= j -1))
(i > j) or ( i >= j - 1) ( i > j )
b) nh ly sau ay chng minh s ung an cua toan t ieu kien neu chap
nhan he tien e cua Hoare va tnh dng.
nh ly :
Goi P ( B==> WP(S1 ,Q )) and (not B ==> WP(S2 , Q) )
Th ta co : + {P} if B then S1 else S2 {Q} ck (1)
va + Vi gia nh S1 va S2 dng neu {R} if B then S1 else S2 {Q}
th R ==> P ( P la tan t yeu nhat thoa ay u ac ta ) (2)
( Tc la : WP(if B then S1 else S2 , Q ) P
( B==> WP(S1 ,Q )) and (not B ==> WP(S2
Q) ) Chng minh :
Theo nh ngha cua WP, neu R ==> WP(S,Q) th {R} S {Q} thoa ck
Ma ta co P and B B and WP(S1 ,Q )) ==> WP(S1 ,Q )
V vay : {P and B} S1 {Q} thoa ck
Tng t {P and (notB)} S2 {Q} thoa ck
Do o, theo luat ve lenh chon cua Hoare, ta co : {P} if B then S1 else S2 {Q}
(1)
Gia s S1 va S2 luon luon dng va {R} if B then S1 else S2 {Q}
Th : {R and B} S1 {Q}
{R and (not B)} S2 {Q}
va : if B then S1 else S2 luon luon dng.
V vay theo nh ngha cua WP ta co : R and B ==> WP(S1 ,Q )
va R and (notB) ==> WP(S2 ,Q )
Hai khang nh tren tng ng vi : R ==> (B ==> WP(S1 ,Q ) )
va R ==> (not B ==> WP(S2 ,Q ) )
V vay R ==> (B ==> WP(S1 ,Q ) ) and (not B ==> WP(S2 ,Q )) ) (2)
T (1) va (2) ta suy ra : P WP(if B then S1 else S2 , Q ) .
4. Toan t lap.
a) Xay dng WP(while B do S ,Q ) .
Xet vong lap W while B do S , vi kc Q.
Xay dng tan t : WP(while B do S, Q)
No phai bao am W dng sau mot so hu han lan lap lai S va ti trang thai thoa Q .
Goi k la so lan lap (so lan thc hien lenh S than vong lap). Ta xay dng quy nap
theo k :
Bc 0 : ( k = 0 ) tan t yeu nhat mo ta tap ln nhat cac trang thai bao am S lap
ung 0 lan va ti trang thai thoa Q la : Po (not B) and Q
Bc 1 : ( k = 1) tan t yeu nhat mo ta tap ln nhat cac trang thai bao am S lap
ung mot lan va ti trang thai thoa Q la : P1 B and WP(S,Po )
( tc la sau khi thc hien mot lan S th trang thai chng trnh se thoa Po ).
Bc 2 : ( k = 2 ) tan t yeu nhat mo ta tap ln nhat cac trang thai bao am S lap
ung 2 lan va ti trang thai thoa Q la : P2 B and WP(S,P1 )
( tc la sau khi thc hien mot lan S th trang thai chng trnh se thoa P1 ).
.........................................................
.........................................................
Bc k : Mot cach tong quat vi k >= 1 th tan t yeu nhat mo ta tap ln nhat cac
trang thai bao am S lap ung k lan va ti trang thai thoa Q la : Pk B and
WP(S,Pk-1 )
Nh vay mot trang thai au lam W dng mot trang thai thoa Q khi va ch khi no
thoa khang nh sau : (k : k >= 0 : Pk )
Tc la : WP(while B do S , Q) (k : k >= 0 : Pk )
not B and Q vi k = 0
Vi Pk =
WP(S,Pk-1 ) vi k > 0
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 =
m
i )
(n = m -1) and (k = (im - 1)/(i-1)) and (j = im-1 )
Tng t :
b) Moi lien he gia toan t lap va tien e lenh lap cua he luat Hoare .
Ta tach viec khao sat tnh ung mot vong lap thanh hai phan :
+ Phan quan sat s bien oi cua vong lap e dan ti khang nh no dng (tnh dng ).
+ Phan quan sat s bat bien cua vong lap e chng minh ket qua cuoi cung cua no
(ck)
Vi y tng o ta tach WP(W,Q) ( vi W la while do S) thanh cac thanh phan tng
ng va khao sat moi quan he gia WP(W,Q) va cac khang nh cua he luat Hoare.
) Vi lenh bat ky S, ieu kien yeu nhat e am bao S dng la khong rang
buoc g sau khi dng. Tc la WP(S,true) la tan t mo ta tap hp tat ca cac trang thai
ma xuat phat t o th bao am S dng.
Ta co : WP(W,true) (k : k >= 0 :P k )
Vi Po (not B) and true (not B)
Pk B and WP(S,Pk-1 ) vi k > 0
( Po la ieu kien e khong thc hien S lan nao, P1 la ieu kien e thc hien S
ung mot lan , Pk la ieu kien e thc hien S ung k lan.
V du :
W while ( n <> m) do begin
j := j* i ; k := k+j ; n := n+1 ;
end ;
Ta tnh ieu kien au e W dng nh sau :
Po not (n <> m) ( n = m )
P1 B and WP(S,Po) ( n <> m) and ( n+1 = m ) ( n+1 = m )
Gia thiet quy nap rang Pk (n+k = m) .
Ta co :
Ga thiet ung vi k = 0 v Po (n = m) ( n + 0 = m )
Ga s ga thiet a ung vi k . Tc la : Pk ( ( n+k ) = m )
Chng minh ga thiet ung vi k+1. Thc vay:
Pk+1 B and WP(S,Pk ) ( n <> m) and ((n+1)+k = m) ( n+(k+1) = m)
( WP(S,Pk ) WP (j := j* i ; k := k+j ; n := n+1 ,( (n + k ) = m ) ) = (n + ( k +1))
=m)
Vay : Pi ( n+i = m )
Tc la : WP(W,true) (i: i>=0; n+i =m) ( n >= m )
) Quan he gia { P } S { Q } va WP(S,Q)
1. Lc o kiem chng.
e chng minh tnh ung cua ac ta oan chng trnh ngi ta thng :
- Thiet lap cac khang nh ve trang thai chng trnh cac iem trung gian
can thiet.
- Chng minh tnh ung cua cac khang nh o.
Nhng khang nh ve trang thai chng trnh nhng iem trung gian khong ch
nham phuc vu viec kiem chng ma con co muc tieu la giup ngi s dung chng trnh
hieu c ng ngha cua oan chng trnh . Tc la gop phan xay dng mot chng
trnh co dang thc tot ( de oc, de hieu ). Nghe thuat cua viec chng minh tnh ung
cua chng trnh va xay dng su lieu cho chng trnh ( ay la a ra nhng ghi
chu vao chng trnh) la cho lam sao chen vao cac khang nh trung gian va u :
qua nhieu se lam kho oc, mat nhieu thi gian kiem tra, con qua t th khong u ac ta
ng ngha .
Trong phan nay ta thao luan y tng chng minh tnh ung cua oan chng trnh
trong dang lc o kiem chng tnh ung (Proof tableaux).
Cac khai niem.
- Lc o kiem chng tnh ung (lkc) cua mot oan chng trnh la mot day
an xen gia cac khang nh (assertion) va lenh (statement) cua oan chng trnh,
vi bat au va ket thuc bi cac khang nh.
- Mot lc o kiem chng la ung (valid) neu khi ta bo i cac khang nh trung
gian th no tr thanh mot ac ta ung. T nhng kien thc a trnh bay cac phan tren
ta suy ra: Mot lc o kiem chng la ung khi va ch khi :
+ Moi bo ac ta dang {P} S {Q} xuat hien trong lkc eu la nhng
ac ta ung.
+ Moi cap khang nh ng lien nhau dang {H} {T} trong lkc th
eu thoa quan he P ==> Q ung.
T nh ngha tren ta thay : mot lkc co the bien dang theo nhieu mc chi tiet. T
mot bo ba ac ta gom : oan lenh S , tan t mo ta ieu kien au P , tan t mo ta ieu
kien cuoi Q ( ac ta {P} S {Q} ) ta co the xay dng nhieu dang lkc khac nhau bang
cac cach chen khac nhau cac khang nh trung gian .
Dang tho nhat cua lkc chnh la ac ta tnh ung cua oan chng trnh no ch
cha 2 khang nh : mot au oan chng trnh va mot cuoi oan chng trnh .
Dang min nhat cua lkc la lkc ma moi lenh eu b kem gia hai khang nh (
ac ta ng ngha ti tng cau lenh ) no la lc o kiem chng mc chi tiet nhat
(lc o kiem chng chi tiet - lkcct).
Trung gian gia hai dang lkc tren ngi ta thng s dung lkc ch co cac
khang nh trung gian nhng cho can thiet ( nhng cho quan trong , nhng cho
ngoat trong noi dung ng ngha cua oan chng trnh ).
Viec chng minh tnh ung ay u cua lkc phu thuoc vao cau truc oan lenh S va
he tien e ma ta a s dung e xay dng lc o kiem chng hp ly.
- Trng hp 1 : Neu oan lenh S khong cha mot lenh lap nao ca th tnh dng
c xem la hien nhien, khi o 2 he tien e la hoan toan tng ng .
- Trng hp 2 : Neu oan lenh S co cha lenh lap th tnh dng khong phai
bao gi cung c thoa nen ta can phai ch ra . Khi o 2 he tien e la khong tng
ng .
+ Neu trong suot qua trnh xay dng lc o kiem chng ta ch s dung he tien
e Dijikstra th khong phai kiem chng lai tnh dng na .
+ Neu trong qua trnh xay dng lc o kiem chng ta co s dung (du ch mot
lan ) tien e cua he Hoare th phai kiem chng lai tnh dng ( v tien e Hoare khong
bao am tnh dng ) .
b) Kiem chng tnh ung ac ta {P} S {Q} khi S la mot day lenh tuan t.
( S { S1 ; S2 ; .. . ; Sn } )
Kiem chng tnh ung ac ta : { P } S1 ; S2 ; .. . ; Sn { Q }
V du :
Kiem chng ac ta :
{even(k) and (0 < k ) and (y*zk = xn )} (1)
k := k div 2 ;
z := z*z ;
{(0 <= k ) and (y * zk ) = xn )} (2)
Bai giai :
Cach 1 : Xay dng lkc hp ly da vao he Haore .
- Bc 1 : Xay dng lc o kiem chng hp ly.
+ Xay dng lc o kiem chng chi tiet :
T (1) ta suy ra :
{even(k) and ( 0 < k ) and (y * zk ) = xn )} (2a)
k n
{(0 <= k div 2 ) and (y * (z*z) div 2 = x ) } (2d)
k := k div 2 ; (2)
k n
{(0 <= k ) and (y * (z*z) = x ) } (2c)
z := z*z ;
{(0 <= k ) and (y * zk = xn ) } (2b)
Dien giai : T (2b) va lenh gan z := z*z dung tien e gan ta suy ra (2c)
T (2c) va lenh gan k := k div 2 dung tien e gan ta suy ra (2d)
+ Xay dng lkc hp ly t lkc chi tiet :
T (2) ta suy ra :
{even(k) and ( 0 < k ) and (y * zk ) = xn )} (2a)
k n
{(0 <= k div 2 ) and (y * (z*z) div 2 = x ) } (2d)
k := k div 2 ; (3)
z := z*z ;
{(0 <= k ) and (y * zk = xn ) } (2b)
c) Kiem chng khi oan chng trnh co cha cau lenh ieu kien
{P} if B then S1 else S2 {Q}
Khi o ta them cac khang nh trung gian dang:
{P} if B then {P and B} S1 {Q}
else {P and not B} S2 {Q}
( hoac :
{P} if B then {P and B} S {Q}
else {P and not B} {Q}
khi khong co phan else )
vao ni co lenh ieu kien tng ng ta co lkc trung gian thch hp .
V du : Kiem chng oan chng trnh :
{(0 < k ) and ( y * zk = xn}
if even(k) then begin
k := k div 2 ;
z := z*z ;
end
else begin
k := k -1 ;
y := y*z ;
end
{(0 <= k ) and ( y * zk = xn )}
Cach 1: Dung he tien e Hoare.
+ Bc 1 : Xay dng lkc hp ly.
at I(y,z,k) ( 0 <= k) and (y*zk = xn )
ac ta co dang : {(0 < k ) and I(y,z,k)}
if even(k) then begin
k := k div 2 ;
z := z*z ;
end
else begin
k := k -1 ;
y := y*z ;
end
{I(y,z,k)}
Chen cac khang nh trung gian (da vao tien e gan cua Hoare)
{(0 < k ) and I(y,z,k)}
if even(k) then {even(k) and (0 < k ) and I(y,z,k)}
begin
{ I(y ,z*z , k div 2 ) }
k := k div 2 ;
{ I( y , z*z , k ) }
z := z*z ;
end;
{I(y,z,k)}
else
{(not even(k)) and (0 < k ) and I(y,z,k)}
begin
{ I(y*z ,z , k 1) }
k := k -1 ;
{ I(y*z , z , k ) }
y := y*z ;
end
{I(y,z,k)}
Bo i cac khang nh trung gian tam thng (da vao luat tuan t cua Haore) ta co
lkc hp ly : {(0 < k ) and I(y,z,k)}
if even(k) then {even(k) and (0 < k ) and I(y,z,k)}
k := n ;
{ I(y,z,k)}
while (0 <> k ) do begin
{I(y,z,k) and (k <> 0 )}
{I(y*z,z,k-1)}
k := k -1 ;
{I(y*z,z,k)}
y := y*z ;
{I(y,z,k)}
end
{I(y,z,k) and (k = 0 )}
{y = xn }
PHU LUC
MOT SO KIEN THC VE LOGIC
I. LOGIC TOAN.
Trong i song hang ngay, ngi ta can co nhng ly luan e t cac ieu kien c
biet hay c gia nh (cac tien e - premises) co the suy ra cac ket luan (conclusion)
ung. Hay xet 2 ly luan sau :
Ly luan (1) : - Cac tien e :
+ Neu hom nay tri ep th toi i chi.
+ Neu toi i chi th hom nay ve tre .
- Ga thiet : Hom nay tri ep .
- ket luan : Hom nay toi se ve tre .
Ly luan (2) : - Cac tien e :
+ Neu hom nay rap hat khong ong ca thi toi se xem phim.
+ Neu toi xem phim th toi se khong soan kp bai .
- Ga thiet : Hom nay rap hat khong ong ca .
- ket luan : Hom nay toi se khong soan kp bai.
Hai ly luan tren la ung va co cung dang ly luan. Chung ung v co dang ly luan
ung, bat ke y ngha ma chung e cap en.
Con ly luan sau :
Ly luan (3) : - Cac tien e :
+ Neu tri ep th toi i chi.
+ Neu toi i chi th toi se ve tre.
- Gia thiet : Hom nay toi ve tre.
- ket luan : Hom nay tri ep .
la ly luan sai va moi ly luan dang nh vay eu sai .
Logic toan hoc quan tam en viec phan tch cac cau (sentences), cac menh e
(propositions) va chng minh vi s chu y en dang (form) lc bo i s viec cu the.
1. Phan tch
Phan tch ly luan (1) ta thay no s dung cac menh e c s sau :
. Hom nay tri ep
. Toi i chi
. Toi se ve tre.
Moi menh e (proposition) la mot phat bieu ung (true) hay sai (false).
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.
ky hieu y ngha la
and va
or hay
not khong
==> neu...th...
<==> ...neu va ch neu...
4. Ly luan ung.
Mot ly luan co the c bieu dien bi mot menh e phc trong o cac tien e c
noi ket vi nhau bang lien t and va cac tien e noi ket vi ket luan bang lien t
==>
nh ngha : Mot ly luan la ung (valid) neu va ch neu vi moi bo gia tr (ung,
sai) co the cua cac menh e thanh phan, no luon luon ung (true)
V du 1: Ly luan (4) ung v vi moi kha nang cua A,B,C menh e :
[ (A ==> B) and (B ==> C) and A] ==> C eu co ga tr ung.
Bang chan tr sau khang nh ieu o:
5. Tng ng (Equivalence).
a) nh ngha:
Hai menh e P va Q c goi la tng ng nhau (ky hieu P Q), neu menh e
P <==> Q luon nhan gia tr ung (True) vi moi kha nang ung sai cua cac menh e
thanh phan .
Ta co the chng minh mot s tng ng bang cach lap bang chan tr .
V du: chng minh : p and q not( not p or not q ).
Bang chan tr :
p q p and q not ( not p or not q )
F F F not ( T or T )
F T F not ( T or F )
T F F not ( F or T )
T T T not ( F or F )
p <==> q q <==> p
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)
Luat ong nhat : p or p p
p and p p
Luat De Morgan : not (p or q) not p and not q
not (p and q) not p or not q
Luat ham y : p ==> q not p or q
p ==> q not q ==> p
(p and q) ==> r ) (p ==> (q ==> r) )
luat neu va ch neu : p <==> q ( (p ==> q) and (q ==> p) )
Quan t luon noi that va tieu nhan luon noi doi. Mot ngi hoi mot dan c A tren
ao : "co phai anh la mot quan t ?". A ap :"neu toi la quan t th toi thua tien anh
". Hay chng minh rang : A nhat nh phai thua tien.
Ta mo hnh hoa bai toan nh sau :
at cac menh e P : A la quan t. Q : A phai tra tien.
Ket luan phai chng minh la Q.
Khao sat gia thiet cua bai toan:
+ Menh e khang nh : " A la tieu nhan " la not P
+ A phat bieu mot menh e S. gia thiet cho biet : Neu A la quan t th S phai
ung tc la : P ==> S
+ Neu A la tieu nhan th S phai sai : not p ==> not s
+ S la mot ham y : " Neu A la quan t th A phai tra tien".
Ta bieu th S bi : p ==> q
Nh vay tien e la : (P ==> S) and (not P ==> not S)
theo luat tng ng (k) ta co the viet la : P <==> S.
Bai toan c phat bieu di dang thuan tuy logic nh sau :
Cho tien e P <==> (P ==> Q)
Co the suy dien c ket luan Q khong ?
Ta se xac lap rang (ly luan tren la ung) menh e (P <==>(p ==> Q)) ==> Q
la ung vi moi bo gia tr ung sai cua cac menh e thanh phan .
Co hai cach : (a) Dung bang gia tr ung sai .
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.
and_I and_E
p, q p and q p and q
_______ _______ _______
p and q p q
or_I or_E
p q p or q , [p] r , [q] r
______ ______ ________________
p or q p or q r
==>_I ==>_E
[p] q p , p ==> q
______ __________
p ==> q q
not_I not_E
Cac luat c chia lam cac luat them va cac luat loai bo : Cac luat them vao cho
phep suy ra mot khang nh mi trong o co xuat hien them mot lien t logic. Con cac
luat loai bo th loai bo mot lien t logic.
Luat and_I noi rang neu co the chng minh c p va q th ta suy c ra p and q .
Luat and_E noi rang neu chng minh c p and q th ta suy c tng thanh
phan p va q .
Luat or_E s dung 3 tien e : a co p or q , neu gia nh p ung th chng minh
c r , neu gia nh q ung th chng minh c r. khi o luat nay cho phep ket
luan r ung. ay chnh la phan tch theo trng hp (case analysis) van thng c
dung trong ly luan hang ngay .
Luat ==>E thng c goi la modusponens (tam oan luan). No noi rang co q
neu chng minh c p va p ==> q .
Luat not_I noi rang neu xuat phat t gia nh p ma co mau thuan th cho ta ket
luan not p . Cung vi luat nay , can bo sung them luat ve loai tr trung gian true
p or not p
c phat bieu nh tien e (tc la luat suy dien khong can tien e).
1. Khai niem
Trong logic menh e , moi menh e co gia tr xac nh hoac la T (ung) hoac la
F (sai) . Trong thc te ngi ta hay gap va can lam viec vi nhng khang nh ma tnh
ung sai cua no phu thuoc vao cac oi tng thc s c thay the .
V du xet phat bieu sau : x la so nguyen to .
Goi menh e nay la P(x), ay la mot menh e ma tnh ung sai cua no ch
c xac nh hoan toan khi ta "the" mot gia tr hang cho "bien" x.
V du P(5) la T (dung) , P(6) la F (sai) .
Trong logic tan t , ngi ta phat bieu cac menh e bang cach s dung nhng
khai niem sau:
a) Cac hang: la cac oi tng cu the ton tai trong lnh vc ma ngi ta ang
khao sat .
V du : + Cac hang so 5,6,10.2,...
+ Cac hang logic T(ung) , F(sai)
Trong trng hp tong quat ,ngi ta thng ai dien cho cac hang bang cac
ch cai viet thng o au bang t vng: a,b,c...,a1 ,b1 , c1 ,...
b) Cac bien (Variable): la cac ten tng trng . Moi bien c an nh mot
mien gia tr la tap cac oi tng ma no co the nhan.
V du: + Cac bien so nguyen n, j , k ,. . . vi cac tap tr la cac tap con cua
tap so nguyen Z .
+ Cac bien so thc x, y, z, . vi cac tap tr la cac tap con cua tap so
thc R .
+ Cac bien vec t V, W, . . . vi cac tap tr la cac tap con cua tap tch
eCac R X R X R X ... X R ( Rn )
Thng dung cac ch cai viet thng cuoi bang t vng e bieu th cac bien :
x,y,z,...,x1 ,y1 ,z1 ,... T day ve sau ,moi bien neu khong c noi ro eu c xem la
bien nguyen .
c) Cac toan t (Operotors , hay ham (functions)) la cac anh xa t cac tap hp oi
tng vao cac tap hp oi tng trong lnh vc ang khao sat. Ta se thng dung
cac toan t toan hoc sau : + , - , * , / , div , mod
Mot toan t co the co mot hay nhieu toan hang (ngoi) .
V du : + Toan t "oi" (bieu th bi -) la mot ngoi : -x
+ Toan t - ,+, - , * , / , div, mod la hai ngoi : 2 + 3 , x * y
d) Cac ham logic hay cac tan t (predicates) . o la cac anh xa t tap hp cac
oi tng vao tap boolean {true,false}, ta se thng dung cac tan t la cac quan he
toan hoc nh sau :
+ Cac quan he so sanh : = , <> , > , >= , < , <=
+ Cac quan he tap hp : , , . . .
+ Cac quan he khac : odd(x) kiem tra xem x co le khong ?
even(x) kiem tra xem x co chan khong ?
e) Cac lien t logic : ay la cac toan t tren tap boolean ma ta gap trong logic
menh e: and , or , not , ==> , <==>.
f) Cac lng t pho dung va ton tai (se noi ro muc sau)
Cac bien logic , cac tan t trong o co cha cac hang hay bien hay ham c goi
la cac cong thc c s (formule elementaire)
V du : Cac cong thc c s
- Bien logic : hom-nay-tri-ep , toi-ve-luc-8-gi ,...
- tan t : 5>2
x>5
x+5>y-3
T cac cong thc c s nay,ngi ta co the thanh lap cac cong thc phc hp
(formule complexe) bang cach noi ket chung dung cac lien t logic va cac lng t
. Moi cong thc phc hp co the xem la mot tan t mi.
V du : Cong thc phc hp
a) Hom_nay_tri_ep and x > y
b) x > y ==> x > z
3. Tap hp va tan t.
Moi bien co the lay gia tr trong mot tap hp xac nh . Tap tr ma mot day cac
bien co the nhan c la tch Descarters cac tap tr cua tng bien .
ng vi mot tan t P(i), vi i la (danh sach) bien t do ma moi phep the i bang
mot hang se cho gia tr ung hay sai , ta co mot tap hp tat ca cac ham ma phep the
i trong P cho gia tr ung .
ky hieu tap o la : { i : P(i) }
V du : { i : i >= 0 } "tap cac (so nguyen) i sao cho i khong am "
{ i,j : i < j } "tap cac (so nguyen) i,j sao cho i nho hn j"
Ngc lai ng vi moi tap S , ta xay dng tan t ac trng cho S o la:
P(i) = ( i S )
Gia cac phep toan tap hp va cac phep toan logic co quan he chat che.
{ i : P(i) or Q(i) } { i : P(i) } U { i : Q(i) }
{ i : P(i) and Q(i) } { i : P(i) } { i : Q(i) }
Phan t trung hoa cua phep toan giao : tap vu tru (tch Descarters cua cac tap tr
ng vi cac bien trong danh sach bien) ng vi i chnh la: { i : true }
Phan t trung hoa cua phep toan hoi la : { i : false }
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 ( * ).