Professional Documents
Culture Documents
F7G
GIAO TRNH
2002
-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
-3-
-4-
LI NOI AU
Giao trnh c viet theo noi dung mon hoc Ky thuat lap trnh nang cao vi muc
ch lam tai lieu tham khao chnh cho mon hoc.
Giao trnh gom 2 phan chnh va mot phu luc :
Phan I. e quy.
Trnh bay ve chu e e quy trong lap trnh bao gom cac noi dung sau :
- Khai niem e quy va vai tro cua no trong lap trnh.
- Cach xay dng mot giai thuat cho mot bai toan bang phng phap e quy.
- C che thc hien mot giai thuat e quy.
- Kh e quy.
Phan II. Kiem chng chng trnh.
Trnh bay ve chu e kiem chng tnh ung cua chng trnh bao gom cac noi dung
sau:
- Vai tro cua van e kiem chng trong lap trnh.
- Cac phng phap dung e kiem chng tnh ung .
- He luat Hoare va ap dung cua no vao kiem chng tnh ung co ieu kien.
- He luat Dijkstra va ap dung cua no vao kiem chng tnh ung ay u.
- Dang tong quat cua bai toan kiem chng va phng phap kiem chng. Cac lc
o kiem chng va tap toi thieu cac ieu kien can kiem chng.
Phu luc . Cac kien thc chung ve logic.
Trnh bay cac kien thc ban au ve logic menh e va logic tan t. Phu luc cung cap
mot mot tai lieu co ong ve cac kien thc logic ap dung trc tiep trong phan I va phan
II ( no la mot phan noi dung cua giao trnh nhap mon toan) ngi hoc can danh thi
gian thch hp on lai e co the theo kp hng tiep can cua giao trnh.
Cung vi nhng trnh bay ly thuyet tong quat, tac ga a vao mot so thoa ang cac
v du chon loc nham giup ngi hoc nam bat c ban chat cua cac khai niem, cac
phng phap mi va lam quen vi cach s dung cac ket qua mi. Khi hoc trc khi tm
cach giai cac bai tap cua thay gao cung cap cac ban co gang oc va hieu het cac v du
minh hoa.
V nhieu le chac chan giao trnh con nhieu khiem khuyet. Rat mong tat ca moi
ngi s dung chan thanh gop y.
Tac gia chan thanh cam n cac ong nghiep trong khoa Toan_Tin a ong gop
nhieu y kien quy bau cho viec hnh thanh cau truc chi tiet cho noi dung giao trnh,
chan thanh cam n thac sy Vo Tien a ong gop nhieu y kien quy bau trong cau truc
giao trnh, giup chnh ly nhieu khiem khuyet trong ban thao.
aLat ngay 01 thang 12 nam 2002
TRAN HOANG THO
-5-
PHAN I
E QUY
CHNG I
-6-
Phng phap e quy manh cho no cho phep mo ta mot tap ln cac oi tng ch bi
mot so t cac menh e hoac mo ta mot giai thuat phc tap bang mot so t cac thao tac
(mot chng trnh con e quy).
Mot mo ta e quy ay u gom 2 phan :
- Phan neo : mo ta cac trng hp suy bien cua oi tng (giai thuat) qua mot
cau truc (thao tac) cu the xac nh .
v du: 1 la so t nhien, cau truc rong la mot xau kieu T, 0 ! = 1 , SM (a[x:x])
la thao tac rong.
- Phan quy nap: mo ta oi tng (giai thuat) trong trng hp pho bien thong qua
chnh oi tng (giai thuat ) o mot cach trc tiep hoac gian tiep.
V du : n! = n * (n 1) !
SM (a[m:n]) Merge (SM (a[m:( m+n) div 2] , SM (a[(m+n) div 2 +1 : n]) )
Neu trong mo ta khong co phan neo th oi tng mo ta co cau truc ln vo han, giai
thuat mo ta tr thanh cau truc lap vo tan.
-7-
-8-
Trong cac ng dung thc te so lan goi e quy (o sau e quy) khong nhng phai hu
han ma con phai u nho . Bi v moi lan goi e quy se can mot vung nh mi trong khi
vung nh cu van phai duy tr .
Cnm = 0
vi m > n > 0
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 :
-9-
+ Mot so cac trng hp suy bien ma ga tr ham tai o a c biet trc hoac
co the tnh mot cach n gian (khong e quy ) .
Nh :
FAC(0 ) = 1 , FIBO(0) = FIBO(1) = 1 , Cn0 = 1 , Cnm = 0 vi m > n > 0 .
+ Trng hp tong quat viec tnh ham se c a ve tnh ham gia tr be
hn (gan vi gia tr neo) cua oi so .
Nh :
FAC(n ) = n * FAC(n - 1 ) ;
FIBO(n) = FIBO(n -1) + FIBO( n - 2 ) .
Trong tap bien cua ham co mot nhom ma o ln cua no quyet nh o phc tap cua
viec tnh ga tr ham . Nhom bien o goi la nhom bien ieu khien . Ga tr bien cua
nhom bien ieu khien ng vi trng hp suy bien . Ga tr cua nhom bien ieu khien
se thay oi qua moi lan goi e quy vi xu hng tien en ga tr bien ( tng ng vi
cac trng hp suy bien cua ham ).
b) Cac thu tuc e quy.
Thu tuc e quy la thu tuc co cha lenh goi en no . Thu tuc e quy thng c s
dung e mo ta cac thao tac tren cau truc d lieu co tnh e quy
V du 1 :
Xem day n phan t a[1:n] la s ket hp gia day a[1:n-1] va a[n] .
Do o :
- Thu tuc tm max trong day a[1:n] ( thu tuc TMax) co the thc hien theo
luat e qui :
+ Tm max trong day con a[1:n] (goi e quy Tmax(a[1:n-1] ) ).
+ Tm max cua 2 so : Tmax(a[1:n-1]) va a[n] (giai thuat khong e quy).
Tc la :
TMax(a[1:n]) = max(TMax(a[1:n-l]) , a[n] )
vi
TMax(a[m:m] = a[m] ; ( trng hp neo )
max(x,y) = x > y ? x : y ;
( giai thuat tnh max 2 so : if (x>y) then
max(x ,y) = x else max(x ,y) = y )
- Thu tuc tnh tong cac phan t ( thu tuc TSUM ) co the thc hien theo luat e
quy :
+ Tm tong day con a[1:n] (goi e quy TSUM(a[1:n-1]) ).
+ Tm tong cua 2 so : TSUM(a[1:n-1]) va a[n] (giai thuat khong e
quy).
Tc la :
TSUM(a[1:n]) = a[n] + TSUM(a[1:n-1]
vi TSUM(a[m:m]) = a[m]
V du 2 :
Xem day a[m : n] la s ket noi gia hai day: day a[m:((m+n) div 2)] va
day a[(((m+n) div 2)+1) :n] .
- 10 -
Do o :
- Thu tuc tm max trong day a[1:n] ( thu tuc Tmax1) co the thc hien theo luat
e qui :
+ Tm max trong day con trai a[m:((m+n) div 2)]
(goi e quy Tmax1(a[m:((m+n) div 2)] ) ).
+ Tm max trong day con phai a[(((m+n) div 2)+1) :n] .
(goi e quy Tmax1(a[(((m+n) div 2)+1) :n] ).
+ Tm max cua 2 so : Tmax1(a[m:((m+n) div 2)] ) va
Tmax1(a[(((m+n) div 2)+1) :n] ). (giai thuat khong e quy).
Tc la :Tmax1(a[m:n]) =
max(Tmax1(a[m:((m+n) div 2)] ) ,Tmax1(a[(((m+n) div 2)+1) :n]) ).
vi
Tmax1(a[m:m] = a[m] ; ( trng hp neo )
max(x,y) = x > y ? x : y ;
- Thu tuc tnh tong cac phan t ( TSUM1 ) co the thc hien theo luat e quy :
+ Tm tong day con trai a[m:((m+n) div 2)]
(goi e quy TSUM1 (a[m:((m+n) div 2)] ) ).
+ Tm tong day con phai a[(((m+n) div 2)+1) :n] .
(goi e quy TSUM1 (a[(((m+n) div 2)+1) :n] ) ).
+ Tm tong cua 2 so :
TSUM1 (a[m:((m+n) div 2)] ) va TSUM1 (a[(((m+n) div 2)+1) :n] ).
Tc la :
TSUM1 (a[m:n]) =
TSUM1 (a[m:((m+n) div 2)]) + TSUM1 (a[(((m+n) div 2)+1) :n] )
vi TSUM1 (a[m:m]) = a[m]
V du 3 :
Cay nh phan tm kiem kieu T(BST) la mot cau truc gom : mot nut kieu T ket noi
vi 2 cay con nhi phan tm kiem kieu T nen :
- Thu tuc quet cay nhi nhan tm kiem theo th t gia (LNF) la :
+ Quet cay con trai theo th t gia ;
+ Tham nut goc ;
+ Quet cay con phai theo th t gia ;
- Thu tuc tm kiem gia tri o tren cay nh phan tm kiem Root la :
Neu Root th thc hien thao tac rong (khong lam g )
Con khong
neu gia tr tai nut goc = o th thong bao tm thay va dng
Con khong
neu gia tr tai nut goc < o th tm cay con trai
Con khong th tm cay con phai .
Nhan xet :
- 11 -
Trong mot thu tuc e qui, e cho viec goi e quy dng lai sau hu han lan goi no
can cha ieu kien kiem tra (mot bieu thc boolean B tren mot nhom bien ) , e khi
ieu kien nay khong con thoa th viec goi e qui ket thuc .
Dang thng gap cua thu tuc e qui la :
S1 ; ( khong cha yeu to e qui )
if B then S2 ( phan lenh trc tiep , khong co lenh goi e qui )
else Sdq ; ( phan lenh co lenh goi e qui )
S3 ; (khong co goi e qui )
Program
- 12 -
E
A
B
C
D
Khai bao trc FORWARD .
e t thu tuc ham A co the goi en D la thu tuc ham cung cap nhng c mo ta sau
A, ta can co mot khai bao trc cua D pha trc cua A . Khai bao nay gom : tieu e
cua D, vi danh sach thong so cua D, tiep theo la t khoa FORWARD . Sau o luc
mo ta lai D th ch can khai bao t khoa PROCEDURE ( hoac FUNCTION ) , ten cua
D ( khong co danh sach thong so ) , phan than cua D.
V du : Vi 2 thu tuc goi e quy ho tng nhau FIRST,SECOND se c khai bao
nh sau :
procedure SECOND (i : integer ) ; Forward ;
procedure FIRST (n : integer ; var X : real);
var j, k : interger ;
begin
for j := 1 to n do begin
writeln( j = , j ) ;
k := n 2* j ;
SECOND( k );
end ;
end ;
procedure second ;
begin
if ( i > 0 ) then begin
writeln( i= , i );
FIRST( i 1 ) ;
end ;
end ;
- 13 -
- 14 -
else { tg = 0 ;
for i = 0 to n-1 do
return tg ;
}
- 15 -
tg = tg + (n-i)2 Xi ;
- 16 -
CHNG II
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]
- 17 -
II. MOT SO BAI TOAN GIAI BANG GIAI THUAT E QUY IEN
HNH.
1. Bai toan thap Ha Noi .
Truyen thuyet ke rang : Mot nha toan hoc Phap sang tham ong Dng en mot ngoi
chua co Ha Noi thay cac v s ang chuyen mot chong a quy gom 64 a vi kch
thc khac nhau t cot A sang cot C theo cach :
- Moi lan ch chuyen 1 a .
- Khi chuyen co the dung cot trung gian B .
- Trong suot qua trnh chuyen cac chong a cac cot luon c xep ung (a
co kch thc be c at tren a co kch thc ln ) .
Khi c hoi cac v s cho biet khi chuyen xong chong a th en ngay tan the !.
Nh se ch ra sau nay vi chong gom n a can 2 n - 1 lan chuyen c ban (chuyen 1
a ).
Gia s thi gian e chuyen 1 a la t giay th thi gian e chuyen xong chong 64 a
se la :
. 4 * 1019 * t S
T = ( 2 64 1 ) * t S = 18
Vi t = 1/100 s th T = 5.8*109 nam = 5.8 ty nam .
Ta co the tm thay giai thuat (day cac thao tac c ban ) cho bai toan mot cach de
dang ng vi trng hp chong a gom 0, 1, 2, 3 a . Vi chong 4 a giai thuat bai
toan a tr nen phc tap . Tuy nhien giai thuat cua bai toan lai c tm thay rat de
dang nhanh chong khi ta khai quat so a la n bat ky va nhn bai toan bang quan niem
e quy .
a) Thong so hoa bai toan .
Xet bai toan mc tong quat nhat : chuyen n (n>=0) a t cot X sang cot Z
lay cot Y lam trung gian .
Ta goi giai thuat giai bai toan mc tong quat la thu tuc THN(n ,X ,Y,Z) cha 4
thong so n,X,Y,Z ; n thuoc tap so t nhien N (kieu nguyen khong dau ); X ,Y,Z thuoc
tap cac ky t (kieu ky t ).
Bai toan co tren se c thc hien bang li goi THN(64,A,B,C) .
De thay rang : trong 4 thong so cua bai toan th thong so n la thong so quyet nh o
phc tap cua bai toan ( n cang ln th so thao tac chuyen a cang nhieu va th t thc
hien chung cang kho hnh dung ) , n la thong so ieu khien .
b) Trng hp suy bien va cach giai .
Vi n =1 bai toan tong quat suy bien thanh bai toan n gian THN (1,X,Y,Z) : tm
day thao tac e chuyen chong 1 a t cot X sang cot Z lay cot Y lam trung gian . Giai
thuat giai bai toan THN (1,X,Y,Z) la thc hien ch 1 thao tac c ban : Chuyen 1 a t
X sang Z ( ky hieu la Move (X , Z) ) .
- 18 -
THN(1,X,Y,Z) { Move( X, Z ) }
Chu y : Hoan toan tng t ta cung co the quan nien trng hp suy bien la trng
hp n= 0 tng ng vi bai toan THN(0,X,Y,Z) : chuyen 0 a t X sang Z lay Y lam
trung gian ma giai thuat tng ng la khong lam g ca ( thc hien thao tac rong ) .
THN(0,X,Y,Z) { }
c) Phan ra bai toan :
Ta co the phan ra bai toan TH N (k,X,Y,Z) : chuyen k a t cot X sang cot Z
lay cot Y lam trung gian thanh day tuan t 3 cong viec sau :
+ Chuyen (k -1) a t cot X sang cot Y lay cot Z lam trung gian :
THN (k -1,X,Z,Y) (bai toan THN vi n = k-1,X= X , Y = Z , Z = Y )
+ Chuyen 1 a t cot X sang cot Z : Move ( X, Z ) (thao tac c ban ).
+ Chuyen (k - 1 ) a t cot Y sang cot Z lay cot X lam trung gian :
THN( k -1,Y,X,Z) ( bai toan THN vi n = k-1 , X = Y , Y = X , Z = Z ) .
Vay giai thuat trong trng hp tong quat (n > 1) la :
THN(n,X,Y,Z)
{ THN (n -1,X,Z,Y) ;
Move ( X, Z ) ;
THN (n -1,Y,X,Z) ;
}
Vi n a th can bao nhieu bc chuyen 1 a? Thc chat trong thu tuc THN cac
lenh goi e qui ch nham sap sep trnh t cac thao tac chuyen 1 a
So lan chuyen 1 a c thc hien la ac trng cho o phc tap cua giai thuat .
Vi n a , goi f(n) la so cac thao tac chuyen _mot_a .
Ta co :
f(0) = 0 .
f(1) =1 .
f(n) = 2f(n -1) + 1
vi n > 0
Do o :
f(n) = 1+ 2 + 2 2 +
+ 2 n-1 = 2 n - 1
e chuyen 64 a can 2 64 - 1 bc hay xap x 10 20 bc . Can khoang 10 trieu
nam vi mot may tnh nhanh nhat hien nay e lam viec nay .
d) Chng trnh con ma hoa giai thuat THN trong NNLT Pascal :
procedure THN (n : integer ; X,Y,Z : char)
begin
if n > 0 then begin
THN (n-1 ,X,Z,Y) ;
Move( X, Z);
THN (n-1 ,Y,X,Z);
end ;
end ;
( Lay trng hp chuyen n = 0 lam trng hp neo )
- 19 -
Hoac :
- 20 -
a) Thong so hoa.
Ta se giai bai toan mc o tong quat : Tm so cach chia m vat (phan thng ) cho n
oi tng (hoc sinh ) co th t .
Goi PART la so cach chia khi o PART la ham cua 2 bien nguyen m , n ( PART(m
,n )) .
Ta ma hoa n oi tng theo th t xep hang 1, 2 , 3 , . . . n ; Si la so phan thng ma
hoc sinh i nhan c .
Khi o cac ieu kien rang buoc len cach chia la :
Si >= 0
S1 >= S2 >=
>= Sn .
S1 + S2 +
+ Sn = m
V du :
Vi m = 5 , n = 3 ta co 5 cach chia sau :
5 0 0
4 1 0
3 2 0
3 1 1
2 2 1
Tc la PART(5,3 ) = 5
b) Cac trng hp suy bien :
+ m = 0 th se co duy nhat 1 cach chia : moi hoc sinh eu nhan c 0 phan
thng .
Vay : PART(0 , n ) = 1 vi moi n
+ n = 0 , m <> 0 th se khong co cach nao e thc hien viec chia .
Vay : PART(m , 0 ) = 0 vi moi m <> 0 .
( ta co the thay trng hp neo PART(m ,0) = 0 hoac trng hp neo PART(m , 1)
=1)
c ) Phan ra bai toan trong trng hp tong quat :
+ m < n khi so phan thng m nho hn so hoc sinh n th n - m hoc sinh xep
cuoi se luon khong nhan c g ca trong moi cach chia .
Vay :
khi n > m th PART(m , n ) = PART(m , m ) .
+ Trong trng hp m >= n : so vat chia (phan thng ) ln hn hoac bang so
hoc sinh (oi tng ) ta phan cac cach chia lam 2 nhom :
* Nhom th nhat khong danh cho hoc sinh xep cuoi cung phan thng nao
ca
( Sn = 0 ) . So cach chia nay se bang so cach chia m phan thng cho n -1 hoc sinh .
Tc la : So cach chia trong nhom th nhat = PART(m , n -1 ) .
- 21 -
2
1
3
3
2
1
3
1
2
3
3
2
2
1
1
4
4
4
4
4
2
1
4
4
2
1
4
1
2
4
4
2
2
1
1
- 22 -
3
3
3
3
3
4
1
3
3
4
1
3
1
4
3
3
4
4
1
1
2
2
2
2
2
2
4
3
3
2
4
3
4
2
3
3
2
2
4
4
1
1
1
1
1
- 23 -
...........................
...........................
SWAP (V[m],v[2] )
; HV(V,m 1) ;
SWAP( V[m],v[1] )
; HV(V,m 1) ;
}
( SWAP(x , y ) la thu tuc hoan oi gia tr cua 2 oi tng d lieu x ,y )
Vay :
HV(V , m ) for k := m downto 1 do begin
SWAP( V[m], V[k] ) ;
HV(V,m 1) ;
end ;
d) Thu tuc hoan v tren NNLT Pascal.
..................
const size = Val ; (* Val la hang ga tr *)
type vector = array[1. . size] of typebase; (* typebase la mot kieu d lieu co th
t *)
......................
procedure Swap( var x , y : typebase ) ;
var t : typebase ;
begin
t := x ; x := y ; y := t ;
end ;
......................... .
procedure print( A : vector ) ;
var i : integer ;
begin
for i:= 1 to size do write( A[i] : 3 );
writeln ;
end ;
......................... .
Procedure HV( V : vec tor ; m :integer ) ;
var k : integer ;
begin
if (m = 1 ) then print(V)
else
for k := m downto 1 do begin
Swap(V[m] , V[k]);
HV(V , m 1) ;
end ;
end ;
- 24 -
4. Bai toan sap xep mang bang phng phap tron (Sort-Merge).
Y tng : e sap xep 1 danh sach gom n phan t bang phng phap tron
ngi ta chia danh sach thanh 2 phan (tong quat la nhieu phan ) , sap xep tng phan,
roi tron chung .
Bai toan : sap theo th t khong giam mang a : VectorT bang phng phap tron.
( VectorT = array[1 . . size] of T).
a) Thong so hoa:
Bai toan c khai quat thanh sap xep mot day con cua day V : VectorT t ch so
m en ch so n vi 1 <= m <= n <= size . Ta at ten cho bai toan dang tong quat
la : SM(V,m,n).
Bai toan ban au : sap day A se c thc hien bang li goi : SM(A ,1,size).
b) Trng hp tam thng:
o la khi n = m (day sap ch co 1 phan t ), khi o khong can lam g ca (thao tac
rong) .
- 25 -
- 26 -
a) Thong so hoa:
Xet ham ROOT vi 3 thong so la g , a,b ,(ROOT(g,a,b)) tra ve gia tr nghiem xap x
cua phng trnh g(x) =0 tren oan [a,b] hoac gia tr C neu phng trnh xet khong
co nghiem xap x . e giai bai toan ban au ta goi ham ROOT(f,ao,bo) .
b) Trng hp tam thng:
o la khi b - a < epsilon .
Khi o :
if ( g(a).g(b) ) <= 0 then ROOT(g,a,b) = a ; // a la nghiem xap x
else ROOT(g,a,b) = E ; // khong co nghiem xap x
c) Phan ra trng hp tong quat:
khi b - a >= ta phan [a,b] lam 2 oan [a,c] va [c,b] vi c = (a + b) / 2.
- Neu ROOT(g , a ,c) < E th ROOT(g , a , b ) = ROOT(g ,a ,c) (bai toan tm
nghiem tren oan [a,c] ) .
- con khong th ROOT(g , a , b ) = ROOT(g ,c ,b) (bai toan tm nghiem tren
oan [c ,b] ) .
d) Ham tm nghiem xap x tren NN Pascal co dang:
const epsilon = ;
E = ;
Function ROOT(a,b :real ) :real ;
var c , R : real ;
begin
if ((b-a) < epsilon ) then if ( f(a)*f(b) <= 0 ) then ROOT := a
else ROOT := L
else
begin
c := (a + b)/2 ;
if ( ROOT(a ,c ) < E ) then ROOT := ROOT(a,c)
else ROOT := ROOT(c,b)
end;
e) Chng trnh con tm nghiem xap x trong NN LT C++
const double epsilon =
;
const double
E =
;
double ROOT(double a , double b )
{ if((b - a) < epsilon ) if(f(a)*f(b) <= epsilon return (a ) ;
else return ( L ) ;
else
{ double c = (a + b ) / 2 ;
- 27 -
double R = ROOT(a,c) ;
if( R< E ) return R ;
else return ( ROOT(c , b) ) ;
}
}
- 28 -
CHNG III
KH E QUY
I. C CHE THC HIEN GIAI THUAT E QUY.
Trang thai cua tien trnh x ly mot giai thuat mot thi iem c ac trng bi
noi dung cac bien va lenh can thc hien ke tiep. Vi tien trnh x ly mot giai thuat
e qui tng thi iem thc hien, con can lu tr ca cac trang thai x ly ang con
dang d .
a) Xet giai thuat e quy tnh giai tha:
FAC ( n ) if(n = 0 ) then retrun 1 ;
else retrun ( n * FAC (n 1)) ;
S o qua trnh tnh ga tr 3 ! theo giai thuat e quy :
FAC(3 ) = 3 * FAC( 2 )
FAC( 2 ) = 2 * FAC( 1
FAC( 1 ) = 1 * FAC( 0
FAC( 0 ) =
Khi thc hien li goi FAC (3 ) se phat sinh loi goi FAC (2 ) , ong thi phai lu gi
thong tin trang thai x ly con dang do ( FAC ( 3 ) = 3 * FAC ( 2 ) ) . en lt mnh
li goi FAC ( 2 ) lai lam phat sinh li goi FAC (1 ) ,ong thi van phai lu tr thong
tin trang thai x ly con dang d ( FAC (2 ) = 2 * FAC ( 1 ) ) ,.. . C nh vay cho ti
khi gap li goi
trng hp neo ( FAC (0 ) = 1 ) .
Tiep sau qua trnh goi la mot qua trnh x ly ngc c thc hien :
- Dung gia tr FAC ( 0 ) e tnh FAC ( 1 ) theo s o x ly con lu tr .
- Dung gia tr FAC ( 1 ) e tnh FAC ( 2 ) theo s o x ly con lu tr .
- Dung gia tr FAC ( 2 ) e tnh FAC ( 3 ) theo s o x ly con lu tr .
- 29 -
ong thi vi qua trnh x ly ngc la qua trnh xoa bo cac thong tin ve giai thuat x
ly trung gian ( qua trnh thu hoi vung nh ) .
b) Xet giai thuat e quy tnh gia tr ham FIBONACCI .
FIB(n) if ((n = 0 ) or ( n = 1 )) then return 1 ;
else return ( FIB(n - 1) + FIB(n - 2)) ;
S o tnh FIB(5) :
FIB(5) = FIB(3) + FIB
( )
FIB(4) = FIB(2) + FIB(3)
FIB(1) =
FIB(1) =
FIB(1) =
FIB(1) =
if (n > 0 ) then
{ THN(n-1,X ,Z ,Y) ;
Move(X, Z) ;
THN(n-1,Y,X,Z) ;
}
e chuyen 3 a t cot A sang cot C dung cot B lam trung gian ta goi : THN
(3,A,B,C)
S o thc hien li goi THN (3,A,B,C) la :
Li goi c/0
Li goi c/1
THN(2,A,C,B)
THN(3,A,B,C)
- 30 -
Li goi c/2
Li goi c/3
THN(1,A,B,C)
THN(0,A,C,B)
A ---> C
THN(0,B,A,C)
A ---> B
THN(1,C,A,B)
THN(0,C,B,A)
C --->B
THN(0,A,C,B)
THN(1,B,C,A)
THN(0,B,A,C)
B ---> A
THN(0,C,B,A)
A ---> C
THN(2,B,A,C)
B ---> C
THN(1,A,B,C)
THN(0,A,C,B)
A ---> C
THN(0,B,A,C)
- 31 -
Do ac iem cua qua trnh x ly mot giai thuat e quy la : viec thc thi li goi e
quy sinh ra li goi e quy mi cho en khi gap trng hp suy bien (neo ) cho nen e
thc thi giai thuat e quy can co c che lu tr thong tin thoa cac yeu cau sau :
+ moi lan goi phai lu tr thong tin trang thai con dang d cua tien trnh
x ly thi iem goi. So trang thai nay bang so lan goi cha c hoan tat .
+ Khi thc hien xong (hoan tat) mot lan goi, can khoi phuc lai toan bo
thong tin trang thai trc khi goi .
+ Lenh goi cuoi cung (ng vi trng hp neo) se c hoan tat au tien ,
th t day cac lenh goi c hoan tat ngc vi th t goi, tng ng day thong tin
trang thai c hoi phuc theo th t ngc vi th t lu tr .
Cau truc d lieu cho phep lu tr day thong tin thoa 3 yeu cau tren la cau truc lu tr
thoa luat LIFO (Last In Firt Out ) . Mot kieu cau truc lu tr thng c s dung
trong trng hp nay la cau truc chong (stack).
Vi mot chong S thng cho phep chung ta thc hien cac thao tac sau tren no :
- Thu tuc Creatstack(S) : Tao chong S rong .
- Thu tuc Push(x,S) : Lu tr them d lieu x vao nh stack S
( x la d lieu kieu n gian gian hoac co cau truc )
- Thu tuc Pop(x,S) : Lay gia tr ang lu nh S cha vao trong oi tng d
lieu x va loai bo gia tr nay khoi S ( lui nh S xuong mot mc ) .
- Ham Empty(S) : ( kieu boolean ) Kiem tra tnh rong cua S : cho gia tr ung
neu S rong , sai neu S khong rong .
Cai at cu the cua S co the thc hien bang nhieu phng phap phu thuoc vao tng
ngon ng lap trnh va tng muc ch s dung cu the .
V du :
Cai at ( bang cau truc mang ) chong S ma moi phan t la mot oi tng d lieu
thuoc kieu T trong PASCAL nh sau :
Const sizestack = . . . ;
Type stackType = record
St : array [1 . . sizestack ] of T ;
Top : 0 . . sizestack ;
end ;
Thu tuc Creatstack(S) : tao chong S rong :
Procedure Creatstack( var S : StackType )
Begin
S.Top := 0 ;
End;
Thu tuc Push(x,S) : Chen - Lu tr them d lieu x vao nh stack S
( x la d lieu kieu n gian gian hoac co cau truc )
Procedure Push( var S : StackType ; x : T) ;
Begin
- 32 -
S.St[S.Top +1] := x ;
S.Top := S.Top + 1 ;
End;
Thu tuc Pop(x,S) : Xoa - Lay gia tr ang lu nh S cha vao trong oi
tng d lieu x va loai bo gia tr nay khoi S ( lui nh S xuong mot mc ) .
Procedure Pop( var S : StackType ; var x : T ) ;
Begin
x := S.St[S.Top] ;
S.Top := S.Top - 1 ;
End;
Ham Empty(S) : ( Ham boolean ) Kiem tra tnh rong cua Stack S
Function Empty( S : StackType ) : boolean ;
Begin
Empty := ( S.Top = 0 ) ;
End ;
Mo hnh stack S va tac dung cac thao tac tren no .
3
3
3
2
2
2 x 1
1
1 x o 1 x o
Createstack(S)
( S.top = 0 )
S.top := 1
Push(S, xo ) ;
S.St[1] := xo
S.top := 2
3
2
1 x o
Push(S,x1 )
;
S.St[2] := x1
S.Top := 1 ;
pop(S,y)
y := x1
NNLT PASCAL va C++ thc hien c c che e qui nh trong qua trnh bien dch,
phan mem ngon ng t ong phat sinh ra cau truc stack e quan ly cac lenh goi
chng trnh con. Khi mot lenh goi chng trnh con thc hien, cac bien a phng
(gom ca cac thong so) se c cap phat vung nh mi nh stack. Nh vay cac tac
ong a phng cua thu tuc se khong lam thay oi cac trang thai x ly con dang d.
- 33 -
chng trnh tren cac NNLT) . Nhng nh a ch ra tren viec x ly giai thuat e quy
lai thng gay kho khan cho may tnh (ton khong gian nh va thi gian x ly), hn na
khong phai moi NNLT eu cho phep ma hoa giai thuat e quy (v du : FORTRAN) . V
vay viec thay the mot chng trnh e quy ( co cha chng trnh con e quy ) bang
mot chng trnh khong e quy cung la mot van e c quan tam nhieu trong lap
trnh .
Mot cach tong quat ngi ta a ch ra rang : Moi giai thuat e quy eu co the thay
the bang mot giai thuat khong e quy . Van e con lai la ky thuat xay dng giai thuat
khong e quy tng ng thay the giai thuat e quy . Rat ang tiec viec xay dng giai
thuat khong e quy thay the cho mot giai thuat e quy a co lai la mot viec khong
phai bao gi cung n gian va en nay van cha co giai phap thoa ang cho trng
hp tong quat.
S o e xay dng chng trnh cho mot bai toan kho khi ta khong tm c giai
thuat khong e quy thng la :
+ Dung quan niem e quy e tm giai thuat cho bai toan .
+ Ma hoa giai thuat e quy .
+ Kh e quy e co c mot chng trnh khong e quy .
Tuy nhien do viec kh e quy khong phai bao gi cung de va v vay trong nhieu
trng hp ta cung phai chap nhan s dung chng trnh e quy .
f(n)
=
=
C
g(n,f(n -1))
- 34 -
V du :
Ham giai tha FAC (n) = n ! = 1 khi n = 0
= n * FAC(n - 1) khi n > 0
Tong n so au tien cua day an dau sau :
Sn = 1 - 3 + 5 - 7 .. + (-1)n+1 * (2n-1)
S(k) = 1 khi k =1
= S(k-1) + (- 1)k+1 *(2*k-1) vi k > 1
- Giai thuat e quy tnh gia tr f(n)
f(n) = if(n = no) then return C ;
else return (g(n,f(n -1)) ;
- Giai thuat lap tnh gia tri f(n)
k := no ; F := C ;
{ F = f(no) }
While( k < n ) do begin
k := k +1 ;
F := g(k,F ) ;
end ;
{ F = f(n) }
Hoac : F := C ;
For k := no to n -1 do begin
k := k + 1 ;
F := g(k,F) ;
end ;
Trong trng hp nay :
W = U = ( k ,F )
Wo = Uo = ( no,C )
C(U) = ( k < n)
f(W) = f(U) = f(k,F) = (k+1,g(k,F)))
- 35 -
k := k + 1 ;
F := F * k ;
end ;
FAC := F ;
end ;
hoac :
Function FAC ( n : integer ) : longint ;
var k : integer ;
F : longint ;
Begin
F := 1 ;
For k:= 1 to n do F := F * k ;
FAC := F ;
end ;
+ Trong NN LT C++
long int FAC ( int n )
{ int k = 0 ;
long int F = 1 ;
while ( k < n ) F = ++k * F ;
return (F) ;
}
Hoac :
long int FAC ( int n )
{ long int F = 1 ;
for ( int k = 1; k <= n ; k++) F = k * F ;
return (F) ;
}
V du 2 : Dang ham Sn khong e quy
+ tren NN LT Pascal :
Function S(n : integer ) : integer ;
var k ,tg : integer ;
Begin
k := 1 ; tg := 1 ;
while ( k < n ) do begin
k := k + 1 ;
if odd (k) then tg := tg + (2 * k - 1 )
else tg := tg - (2 * k - 1 ) ;
end ;
S := tg ;
end ;
- 36 -
+ Trong NN LT C++
int S ( int n )
{ int k = 1 , tg = 1 ;
while ( k < n ) { k ++ ;
if (k%2) tg + = 2 * k - 1 ;
else
tg - = 2 * k + 1 ;
}
return ( tg ) ;
}
b) Cac thu tuc e qui dang e qui uoi.
Xet thu tuc P dang :
P(X) if B(X)
then D(X)
else { A(X) ;
P(f(X)) ;
}
Trong o :
X la tap bien ( mot hoac mot bo nhieu bien ).
P(X)
la thu tuc e quy phu thuoc X
A(X) ; D(X) la cac nhom thao tac (lenh ) khong e quy
f(X)
la ham bien oi X
Xet qua trnh thi hanh P(X) :
goi Po la lan goi P th 0 (au tien ) P(X)
P1 la lan goi P th 1 (lan 2)
P(f(X))
Pi la lan goi P th i ( lan i + 1)
P(f(f(...f(X)...)
( P(fi(X)) hp i lan ham f )
Trong lan goi Pi neu B(fi(X)) khong ung (false) th thi hanh lenh A va goi Pi+1 ;
neu B(fi(X)) ung (true) th thi hanh lenh D va ket thuc qua trnh goi .
Gia s P c goi ung n +1 lan . Khi o trong lan goi cuoi cung (th n ) Pn th
B(fn(X)) ung , lenh D c thi hanh va cham dt thao tac goi thu tuc P .
S o khoi qua trnh thc hien lenh goi thu tuc P(X) co dang sau :
- 37 -
P(X)
True
D(X)
B(X)
False
A(X) ;
X : = f(X)
END
Tng ng vi vong lap sau :
While ( not B(X) ) do begin
A(X) ;
X := f(X) ;
end ;
D(X) ;
V du 1 :
e oi 1 so nguyen khong am y c so 10 sang dang c so k ( 2 <= k <= 9 ) vi
viec dung mang A ( A : array[1 . . size ] of 0..k -1 , size la mot hang c khai bao
trc ) e cha cac ky so trong he k phan ( vi quy c ky so co y ngha thap c
cha ch so cao ) khi o thu tuc e quy Convert(x,m) e tao day ga tr :
A[0] ,
A[1] , . . . , A[m] nh sau (hay t giai thch ) :
Convert(n,m) if n <> 0 then Begin
A[m] := n mod k ;
Convert(n div k , m -1) ;
End ;
- 38 -
day
ky so trong mang A ;
Trong v du nay ta co :
X
la ( n, m ) ;
B(X) la bieu thc boolean not( n <> 0 )
A(X)
la lenh gan A[m] := n mod k ;
f(X)
la ham f(n,m ) = ( n div k , m - 1 ) ;
D(X)
la lenh rong
oan lenh lap tng ng vi thu tuc Convert(x,m) la :
if ( n = 0 ) then us := m
else USCLN(n , m mod n , us ) ;
- 39 -
Tnh f(Xo ) .
Ta co :
f(Xo ) = f(g(Xo ))
= f(g(g(Xo )))
= ...
= f(gk (Xo ))
= a(gk (Xo ))
f(g(X))
a (X )
v C(Xo )
ung .
vi C(g(Xo )) ung .
vi C(gk-1 (Xo )) ung .
vi C(gk (Xo )) sai.
- 40 -
Uo = Xo
Ui = g(Ui-1 ) i = 1 ... k . Vi k la so nho nhat ma C(Uk ) sai .
Luc o : f(Xo ) = a(Uk )
Vay oan chng trnh tnh f = f(Xo) la :
U := Xo ;
while C(U) do U := g(U) ;
f := a(U) ;
V du :
Vi m , n > = 0 ta co ham e quy tnh USCLN(m,n) la :
USCLN(m ,n ) if (m <> 0 ) then return(USCLN ( abs(m - n) , min(m , n) ) ;
else return n ;
Trong trng hp nay :
X
la (m ,n ) ;
C (X) = C(m ,n) la m <> 0 ;
g(X) = g(m ,n ) = (abs(m -n ) , min (m ,n ) ) ;
a(x) = a(m ,n ) = n ;
- oan chng trnh tnh USCLN(a ,b) la :
m := a ; n := b ;
while ( m <> 0 ) do begin
t1 := m ;
t2 := n ;
m := abs(t1 - t2 ) ;
n := min(t1,t2 ) ;
end ;
USCLN := n ;
- Ham khong e qui tng ng trong Pascal.
Function USCLN(m , n : integer ) : integer ;
var t1 , t2 : integer ;
begin
while (n <> 0 ) do begin t1 := m ; t2 := n ;
m := abs(t1 - t2 ) ;
if(t1 < t2 ) then n := t1
else n := t2 ;
end ;
USCLN := m ;
- Dang ham tng ng trong C++
int USCLN(int m , int n)
{ while( n != 0) { int t1 = m ; int t2 = n ;
- 41 -
m = abs(t1-t2) ;
if(t1<t2) n = t1 ; else n = t2 ;
return(m) ;
}
A(X) =
DS(A(CS(X) ) , FS(CS(X) , X ) ) )
BS(X)
- 42 -
= DS(A(Ui+1),FS(Ui+1,Ui))
= DS(Vi+1,FS(Ui+1,Ui)) vi 0< i < k ( v C(Ui) ung )
Vk = BS(Uk)
( v C(Uk) = false )
Da vao 2 day so {Ui } ,{Vi} ( mo ta bi (2.1) va (2.2) ) ta tnh A(X ) theo giai thuat
sau :
- Tnh va ghi nh cac Ui t 0 en k theo (2.1).
( Vi C(Uo) = C(U1) = ...= C(Uk-1) = True , C(Uk) = False )
- S dung day ga tr Ui e tnh lan ngc Vi t k xuong 0 theo (2.2) , Vo chnh
la ga tr can tnh ( Vo = A(X ) ).
c) Giai thuat khong e quy tnh ga tr ham Arsac bang s dung cau truc
Stack .
e thc hien giai thuat tren th day Ui phai c tnh va lu tr trong mot cau
truc d lieu thch hp , e khi can en (khi tnh Vi ) de lay ra s dung . ac iem quan
trong cua day Ui la thoa luat LIFO : th t s dung ngc vi th t tao sinh . Cau
truc d lieu cho phep lu tr thuan li day phan t thoa luat LIFO ( vao sau ra
trc - Last In First Out ) la cau truc Stack .
( Tren cau truc Stack 2 thao tac c ban ac trng la :
+ Push(S,X) : Chen phan t d lieu X vao nh Stack S .
+ Pop(S,X) : Lay ra khoi stack S phan t d lieu nh va cha no
vao bien X ).
Giai thuat khong e qui tnh Vo = A(X) da tren 2 cong thc (2.1 ) , (2. 2 ) va s
dung Stack S la :
+ Bc 1 : tnh Ui bat au t Uo theo (2.1) lu vao Stack S
CreateStack(S) ; ( tao stack rong S )
k := 0 ;
U := X ; ( Uo = X )
push(S,U) ; ( chen UO vao nh stack S )
while C(U) do begin
k := k+1 ;
U := CS(U) ; ( Uk+1 = CS(Uk))
push (S,U) ; ( chen Uk+1 vao nh Stack S )
end ;
+ Bc 2 : Lay d lieu trong Stack S tnh Vi theo (2. 2)
pop(S,U) ; ( U = Uk )
V := BS(U) ; ( C(Uk) sai ; V=Vk = BS (Uk))
for i := k -1 downto 0 do
begin
Y := U ;
( Y = Ui+1)
pop(S,U) ;
V := DS(V,FS(Y,U)) ;
end ;
{ V = A(Xo) }
- 43 -
( U = Ui )
( C(Ui) ung ; Vi = DS(Vi+1,FS(Ui+1,Ui)) )
Hoac :
+ Bc 1 : tnh Ui bat au t Uo theo (2.1) lu vao Stack S
CreateStack(S) ; ( tao stack rong S )
U := Xo ; ( Uo = Xo )
push(S,U) ; ( chen UO vao nh stack S )
while C(U) do begin
U := CS(U) ; ( UK+1 = CS(UK))
push (S,U) ; ( chen Uk+1 vao nh Stack S )
end ;
+ Bc 2 : Lay d lieu trong Stack S tnh Vi theo (2. 2)
pop(S,U) ; ( U = Uk )
V := BS(U) ; ( C(Uk) sai ; V=Vk = BS (Uk))
While(not emptystack(S)) do
begin
Y := U ;
( Y = Ui+1)
pop(S,U) ;
( U = Ui )
V := DS(V,FS(Y,U)) ; ( C(Ui) ung ; Vi =
DS(Vi+1,FS(Ui+1,Ui)) )
end ;
{ V = A(Xo) }
C che lu tr day d lieu LIFO bang Stack la mot ac trng cua qua trnh x ly
giai thuat e quy ieu can quan tam la cau truc stack thng chiem nhieu bo nh . V
vay ngi ta luon tm cach tranh dung no khi con tranh c .
d) Mot so ham Arsac ac biet ma viec kh e qui giai thuat tnh ga tr
ham co the khong dung Stack .
d1) Trng hp thu tuc CS la song anh .
Trng hp CS la song anh t mien D len mien D th ham CS co ham ngc
-1
CS . Goi ham ngc cua ham CS la ham CSM1 .
Ta co : CSM1(CS(X)) = CS-1(CS(X)) = X vi X D .
Nen :
CSM1(Ui+1) = CS-1(CS(Ui)) = Ui vi i = k-1, . . ,1,0
Khi o ta khong can lu gi cac gia tr trung gian cua day { Ui } ma ch can
xuat phat t Uk dung ham CSM1 e khoi phuc lai cac ga tr Ui voi i<k .
Giai thuat tnh A(X ) se tr thanh :
+ Bc 1 : Da vao (2.1) tnh Uk
- 44 -
U := X ; ( Uo = X )
k := 0 ;
while C(U) do begin
k := k+1 ;
U := CS(U) ; ( UK+1 = CS(UK))
end ;
+ Bc 2 : Tnh Vk , Vk-1, .. V1, Vo da vao Uk ,(2.2) va CSM1
V := BS(U) ; ( V=Vk = BS (Uk) )
for i := k -1 downto 0 do begin
Y := U ;
( Y = Ui+1 )
U := CSM1(U) ; (Ui = CSM1(Ui+1) )
V := DS(V,FS(Y,U)) ;
( Vi = DS(Vi+1,FS(Ui+1,Ui) )
end ;
{ V = Vo = A(X )}
d2) Trng hp thu tuc DS co tnh hoan v .
Xet cong thc tnh :
Vi = DS(Vi+1,FS(Ui+1,Ui)) vi moi i<k
at :
Ui = FS(Ui+1,Ui )
DS(Vi+1,Ui) = Vi+1 T Ui
Ta co :
Vo = DS(V1, FS(U1,Uo) = DS(V1,Uo) = V1 T U0
V1 = DS(V2, FS(U2,U1) = DS(V2,U1) = V2 T U1
V2 = DS(V3, FS(U3,U2) = DS(V3,U2) = V3 T U2
..............................................................................
..............................................................................
Vi = DS(Vi+1, FS(Ui+1,Ui) = DS(Vi+1,Ui) = Vi+1 T Ui
..............................................................................
..............................................................................
(3-1)
- 45 -
Vo = V1 T U0 = ( V2 T U1) T Uo = ( V2 T U0 ) T U1
= ( ( V3 T U2) T Uo) T U1 = ((V3 T U2) T Uo ) T U1
= ( (V3 T Uo) T U2 ) T U1
= ( (V3 T Uo) T U1 ) T U2
.......................................................................................................
.......................................................................................................
V0 =
(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 .
else
P ).
- 46 -
begin
A(X) ; P(f(X)) ; B(X) ;
end ;
Vi :
X la mot bien n hoac bien vec t.
C(X) la mot bieu thc boolean cua X .
A(X) , B(X) , D(X) la cac nhom lenh khong e quy ( khong cha lenh goi en
C(X) = False
C(U) = False
A(X) ;
A(U) ;
POP(S,U) ; B(U)
------------------------------------------------------------------------------------------------
POP(S,U) ; B(U)
( U=fk-1(X) )
- 47 -
V du :
Thu tuc e quy chuyen bieu dien so t c so thap phan sang nh phan co dang :
Binary(m) if ( m > 0 ) then begin
Binary( m div 2 ) ;
write( m mod 2 ) ;
end;
Trong trng hp nay :
X la m .
P(X) la Binary(m) .
A(X) ; D(X) la lenh rong .
B(X) la lenh Write(m mod 2 ) ;
C(X) la ( m <= 0 ) .
f(X) = f(m) = m div 2 .
Giai thuat thc hien Binary(m) khong e quy la :
Binary (m ) { Creat_Stack (S) ;
While ( m > 0 ) do begin
sdu := m mod 2 ;
Push(S,sdu) ;
m := m div 2 ;
end;
While( not(EmptyS(S)) do begin
POP(S,sdu) ;
Write(sdu) ;
end;
}
- 48 -
- 49 -
P(X)
- 50 -
Cung giong nh trong trng hp (3a) la khi quay tr lai sau khi thc hien mot lan
e quy, can biet o la lenh goi thuoc nhom th may trong day lenh goi e biet thao
tac can thc hien tiep. V vay trong chong can gi them v tr nhom lenh goi .
Dang lap tng ng la :
{ Creat_Stack (S) ;
Push(S,(X,1)) ;
Repeat
While (not C(X) ) do begin
A1(X) ;
Push (S,(X,2)) ;
X := f1(X) ;
end ;
D(X) ;
POP(S,(X,k)) ;
While( k = n+1 ) do begin
if ( k > 0 ) then
until (k = 1 ) ;
}
An+1 ;
POP(S,(X,k)) ;
end ;
begin
Ak(X) ;
Push (S,(X,k+1));
X := f k (X)
end ;
- 51 -
HVI(V ,n)
if (n = 1 ) then Print ( V )
else for i := n downto 1 do
begin
Swap (V[n],V[i] ) ;
HVI(V ,n - 1) :
end ;
trong trng hp nay th :
X la bo (V ,n ) . (* vector V va so nguyen n *)
C(X) la ( n = 1 ) .
D(X) la Print (V) . (* xuat vector V *)
Ai(X) la thu tuc Swap(V[n] ,V[i] ) ( i = 1 .. n ) .
An+1 la thao tac rong .
fi(X) = f(V, n ) = ( V, n - 1) .( vi i = 1 . . n )
Dang lap cua thu tuc la :
{ Creat_Stack (S) ;
Push (S,(V ,n ,1)) ;
Repeat
While ( n > 1 ) do begin
Swap(V[n] ,V[1] ;
Push (S ,V , n ,2) ;
n := n -1 ;
end ;
Print (V) ;
POP (S ,(V ,n ,k)) ;
While ( k = n +1 ) do POP(S ,(V ,n ,k) ;
if(k <> 1 ) then begin
Swap(V[n] ,V[k]) ;
Push (S ,(V ,n ,k+1) ;
n := n - 1 ;
end ;
until(k = 1 ) ;
- 52 -
PHAN II
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).
- 53 -
- Th nghiem mc o he thong : Sau khi tng module hoat ong tot, ngoi ta can
th s hoat ong phoi hp cua nhieu module, th nghiem toan bo he thong phan mem.
Th nghiem tnh ung theo bat c cach nao th cung rat ton thi gian va cong sc
nhng lai la mot viec phai lam cua ngi lap trnh v ngi lap trnh luon luon phai
bao am chng trnh mnh tao ra thoa ung ac ta.
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 .
- 54 -
Nhng kha canh tren c the hien trong ac ta bai toan (TBT) .
b) Tac dung cua ac ta bai toan .
- La c s e at van e, e truyen thong gia nhng ngi at bai toan va nhng
ngi giai bai toan .
- La c s e nhng ngi giai bai toan trien khai cac giai phap cua mnh .
- La c s e nhng ngi giai bai toan kiem chng tnh ung cua phan mem tao ra
.
- La phng tien e nhieu ngi hieu tnh nang cua he thong tin hoc ma khong
can (thng la khong co kha nang) i vao chi tiet cua he thong .
e at c 4 muc tieu tren, TBT can gon, ro va chnh xac .
e at c muc tieu th 2, th 3 th ngon ng e viet TBT can phai co tnh hnh
thc (formal) va tren ngon ng nay can co cac phng tien e thc hien cac chng
minh hnh thc . Ngon ng thch hp vi yeu cau nay la ngon ng toan hoc va he
logic thch hp la logic toan hoc. Ngi ta thng s dung ngon ng bac nhat (vi
cac khai niem va toan t toan hoc) va logic bac nhat .
Tuy theo mc o phc tap cua bai toan ma phng tien dien at TBT co nhng
mc o phc tap va mc o hnh thc khac nhau .
mc bai toan ln, trong moi quan he gia ngi s dung va ngi phan tch,
ngi ta dung : sach hp ong trach nhiem (cahier des charges), s o to chc, bieu o
luan chuyen thong tin ... Gia nhng ngi phan tch, ngi ta dung phieu phan tch
cac n v chc nang, bieu o chc nang...
Ket qua phan tch c chuyen thanh yeu cau vi ngi lap trnh bang cac ac ta
chng trnh (TCT - program specification) .
- 55 -
- ieu kien rang buoc tren d lieu xuat: Nhng ieu kien rang buoc ma d lieu xuat
phai thoa. Chung the hien yeu cau cua ngi s dung oi vi chng trnh. Cac ieu
kien nay thng lien quan en d lieu nhap .
V du 1 :
Viet chng trnh oc vao mot so nguyen dng N roi xuat ra man hnh N so
nguyen to au tien.
ac ta chng trnh :
+ D lieu nhap : mot so nguyen N .
+ ieu kien nhap : N > 0 , nhap vao t ban phm.
+ D lieu xuat : mot day gom N so nguyen .
+ ieu kien xuat : la day N so nguyen to au tien , xuat ra mam hnh .
V du 2 :
Viet chng trnh oc vao mot day N so nguyen , xuat ra man hnh day a sap xep
theo th t khong giam.
ac ta chng trnh :
+ D lieu nhap : mot array A co N phan t la so nguyen .
+ ieu kien nhap : nhap t ban phm .
+ D lieu xuat : array A' co N phan t la so nguyen.
+ ieu kien xuat : xuat ra man hnh ,A' la mot hoan v cua A , A' la mot
day khong giam. ( 1 <= i < j <= N ==> A'[i] <= A'[j] )
Chu y : Mot ac ta tot cho mot nh hng ung ve s dung hp ly cac cau truc d
lieu va mot gi y tot ve hng xay dng giai thuat cho bai toan.
- 56 -
tng thi iem trc hoac sau khi thc hien mot lenh , ngi ta quan tam en tap
hp cac trang thai co the cua chng trnh. Tap hp cac trang thai nay se c bieu
th bi cac tan t bac nhat vi cac bien la cac bien cua chng trnh.
V du 1 : oan chng trnh sau tnh tch cua hai so nguyen dng a va b
{ ( a > 0) and (b > 0) } // rang buoc tren trang thai au .
x := a ;
y := b ; u := 0 ;
{ ( x = a ) and (y = b ) and ( (u + x*y ) = (a*b) ) } // rang buoc trung gian tren
repeat
{(u+x*y = a*b) and ( y>0 ) }
trang thai cua CT.
u := u + a ;
y := y - 1 ;
{(u+x*y = a*b) and (y >= 0) }
// rang buoc trung gian tren trang
thai
until (y= 0)
cua chng trnh.
{u= a*b}
// rang buoc tren trang thai xuat
Moi tan t trong v du tren mo ta mot tap cac trang thai co the co iem o.
V du 2 : oan chng trnh hoan oi noi dung cua 2 bien x va y, dung bien t lam
trung gian.
{( x = xo) and (y = yo ) } // x , y mang gia tr ban au bat ky nao o
t := x ;
x := y ;
y := t
{ (x = yo ) and (y = xo ) } // x , y sau cung mang gia tr hoan oi cua nhau.
Trong v du nay e bieu dien quan he gia noi dung cac bien vi noi dung cua mot
so bien b gan tr, ngi ta can phai dung cac bien gia (ghost variable). V du ay
la xo va yo bieu th noi dung cua x va y trc khi thc hien oan chng trnh.
V du 3 :
Nhan 2 so nguyen dng x , y, ket qua cha trong u .
{ (x = xo > 0) and (y = yo > 0 )}
u := 0 ;
repeat
u := u + x ;
y := y - 1 ;
until (y = 0)
{ u = x o * yo }
That ra ay tap hp cac trang thai xuat thc s la nho hn, bieu th bi mot ieu
kien chat hn, o la :
{( u = xo * yo ) and (y = 0) and (x = xo ) }
Tong quat ta can khao sat mot oan chng trnh S vi 2 ieu kien i trc P va
i sau Q . Can chng minh rang neu xuat phat t trang thai thoa P thi hanh lenh S th
- 57 -
- 58 -
- 59 -
CHNG V
- 60 -
e co the thc hien chng minh hnh thc ve tnh ung cua cac oan chng
trnh, ta can co nhng tien e mo ta tac ong cua cac thao tac x ly c ban (lenh c
ban ) cua ngon ng dung viet chng trnh ( ay la ngon ng cot loi a c gii
thieu IV.3 ). Mot he tien e co tac dung nh the cua Ca. Hoare , c trnh bay di
dang mot he luat suy dien (inference rules ) c xet di ay .
{P} S {R}
(1a)
{P} S {R}
(1b)
V du 3 :
- 61 -
x := bt
{ P(x) }
(2)
T (2 ) ta suy ra neu trc lenh gan x := bt ; trang thai chng trnh lam P(bt) sai
(thoa not P(bt) ) th sau lenh gan P(x) cung sai (thoa notP(x)).
Lenh gan x := bt xoa gia tr cu cua x , sau lenh gan x mang gia tr mi la tr cua
bieu thc bt , con tat ca cac bien khac van gi gia tr nh cu.
V du : Tnh ung co ieu kien cua cac ac ta sau c khang nh da vao tien e
gan
a) { x = x } y := x { x = y }
b) { 0 <= s + t - 1 } s := s + t - 1 { 0 <= s }
c) { i = 10 } j := 25 { i = 10 }
{ P } S1 { R } , { R } S2 {Q }
{ P } S1 ; S2 { Q }
(3.1)
Gia nh co tnh dng cua S1 va S2, luat nay phat bieu y sau :
Neu:
i) Thi hanh S1 vi k P am bao kc R ( ac ta { P } S1 { R } c k )
ii) Thi hanh S2 vi k R am bao kc Q ( ac ta { R } S2 { Q } c k)
Th : thi hanh S S1 ; S2 vi k P am bao kc Q ( ac ta { P } S1 ; S2 { Q }
c k )
V du : Kiem chng tck ac ta :
- 62 -
{true} x := 5 ; y := 2 { x = 5, y = 2 }
Ta co : { 5 = 5 } x := 5 { x= 5}
true =>( 5 = 5 ) va ( x = 5) => ( (x = 5) and (2 = 2) )
{true} x := 5 {( x = 5) and ( 2 = 2) }
{ x = 5 , 2 = 2 } y := 2 {( x = 5) and ( y = 2) }
{true} x := 5 ; y := 2 { x = 5, y = 2 }
(3.2a)
{ P } if B then S1 else S2 { Q }
Y ngha luat nay la :
Neu co :
{ P and B }
S1
{Q}
Va
{ P and notB }
S2
{Q}
Th suy ra :
{P}
if B then S1 else S2
{Q}
b2)
{ P and B} S { Q} , P and (not B ) => Q
{ P } if B then S { Q}
(3.2b)
{j=1}
(a) //hien nhien
(b) //{false} S { Q } ung vi
(c) // hien nhien
- 63 -
{true } j := 1 { j=1 }
(d) //tien e gan
{(i >0) and not(i = 0)} j := 1 {j=1}
(e) // c,d ,luat he qua
T b ,e va tien e 3.2a ta suy ra PCM.
V du2 : Kiem chng tck ac ta :
{i >= j - 1} if ( i > j) then j := j+1 else i := i+1 {i >= j}
Ta co : {i >= j+1} j := j+1 {i >= j}
(a) //tien e gan
((i >= j-1) and (i > j)) ==> (i >= j+1)
(b) // bien oi vi chu y i , j
nguyen
{(i >= j-1) and (i > j)} j := j + 1 {i >= j} (c) // a,b ,luat he qua
{i+1 >= j} i := i+1 {i >= j}
(d) // tien e gan
((i >= j-1) and not(i > j)) ==> (i+1 >= j) (e) // bien oi
{(i >= j-1) and not(i > j)} i := i + 1 {i >= j} (g) // d ,e , luat he qua)
T c , g da vao 3.2a suy ra PCM.
V du 3 : Kiem chng tck ac ta :
{true} if odd(x) then x := x+1 {even(x)}
Ta co : {even(x+1)} x := x+1 {even(x)}
(a) //tien e gan
true and odd(x) ==> even(x+1) (b) // hien nhien
{true and odd(x)} x := x+1 {even(x)} (c) // a ,b , luat he qua
true and not odd(x) ==> even(x)
(d) // hien nhien
T (c) va (d) da vao 3.2b suy ra PCM .
b3) Luat ve lenh lap While
{ I and B } S { I }
-----{ I } while B do S { I and (not B ) }
(3.3)
Luat nay noi rang neu I khong b thay oi bi mot lan thc hien lenh S th no
cung khong b thay oi bi toan bo lenh lap While B do S. Vi y ngha nay I c goi
la bat bien (invariant) cua vong lap.
Chu y rang khang nh : { P } while B do S { Q } thoa da vao he luat Hoare
ch xac nh tck (conditionnal correctness). e chng minh tnh ung (correctness)
thc s ta can bo sung chng minh lenh lap dng.
V du1 :
Kiem chng tnh ung co ieu kien cua ac ta :
{i<=n} while (i < n ) do i := i+1 {i=n}
Xem I la ( i <= n ) th :
{ I and ( i < n )} i := i+1 {I} (a) // de kiem chng
Nen {I} while ( i < n ) do i := i+1 { I and not(i<n)} (b) // luat 3.3
- 64 -
- 65 -
- 66 -
- 67 -
(c)
(d)
- 68 -
- 69 -
kicked, jumped, walked ... bang hoc luat khong oi (them s, them ed), kem theo
vi viec hoc thuoc mot so trng hp ngoai le. Hay tng tng viec hoc se kho nh
the nao neu khong co cac luat khong oi (bat bien ) nay.
Viec nhan thc c cac bat bien thng dan ti nhng li giai n gian cho cac
bai toan kho.
au oc con ngi dng nh co mot kha nang ac biet e nhan thc cac bat bien
hay cac "khuon mau".
Hay quan sat 2 day cac hnh sau :
(a)
(b)
Hnh ke tiep trong moi day hnh tren la g ? Tnh chat bat bien cua moi day la g ?
(a) Lap lai bo 3 hnh vuong, tron, tam giac.
(b) Ve dang th la s lap lai cua cap 2 hnh vuong ln va nho. Ve mau th la s lap
lai cua mot mau trang va 2 mau sam.
Trong lnh vc chng trnh cho may tnh, ta cung can nhan thc cac s viec bang
cach phat hien cac bat bien. oi vi mot chng trnh, ta co nhieu lan may tnh thi
hanh no, moi lan thi hanh c goi la mot qua trnh (process) va tac ong tren cac d
kien khac nhau. Tnh bat bien cua cac qua trnh nay chnh la ac ta cua chng trnh.
Ben trong mot chng trnh co the co cac vong lap. Viec thc hien vong lap lam
bien thien nhieu lan trang thai cac bien chng trnh (cac oi tng d lieu ) , ma so
lan bien thien thng khong biet trc c. Lam the nao e hieu c tac ong cua
vong lap va i en chng minh vong lap thc hien mot tnh chat (gi mot bat bien) nao
o the hien bi ac ta cua no.
Mo hnh bien oi trang thai chng trnh cua vong lap while B do S
{P}
{Q}
{ P1 }
{ P2 }. . .
. . . { Pn }
- 70 -
a[ j ]
1
- 71 -
- 72 -
- 73 -
Ta co :
{0 = 0 , B >= 0} R := 0 {R = 0 , B >= 0} (1) tien e gan
{0 = 0 , B >= 0} { B >= 0}
(2) hien nhien
{B >= 0} R := 0 {R = 0, B >= 0}
(3) luat he qua da vao (1),(2)
{B = B , R = 0 , B >= 0} X := B {X = B , R = 0 , B >= 0} (4) tien e gan
{B =B , R =0 , B >= 0} { R = 0 , B >= 0 }
(5) hien nhien
{R = 0 , B >= 0} X := B {X := B , R = 0 , B >= 0}
(6) Luat he qua da vao
(4),(5)
{B >= 0} X := 0 ; X :=B {X = B , R = 0 , B >= 0} (7) luat tuan t da vao (3),(6).
Nh vay vi ieu kien au B >= 0 th sau khi thc hien xong 2 lenh khi ong, ta co
khang nh X = B, R = 0, B >= 0 ac ta (*) ung .
+ Kiem chng vong lap :
- Phat hien c bat bien cua vong lap.
Bat bien ay la : so lan X b giam i chnh la so lan A c cong vao R
Tc la : I ( R = A*(B-X) ) and ( X >= 0 )
Khang nh (X >= 0 ) c them vao e chng minh vong lap dng.
- Chng minh I la bat bien cua vong lap :
{( R + A = A*B - A*X + A ) and ( X >0 )}
R := R + A
{(R = A*B - A*X + A ) and ( X > 0 )}
(8) tien e gan
{ ( R = A*(B - X)) and ( X > 0 )}
R := R + A
{ ( R = A*B - A*X + A ) and ( X > 0 )} (9) bien oi t (8)
{ ( R = A*B - A*X + A ) and ( X > 0 )}
{ ( R = A*(B -(X - 1)) ) and ( (X 1 ) >= 0 )}(10)
{ ( R = A*(B -(X - 1)) ) and (( X 1 ) >= 0 )}
X := X 1
{( R = A*(B - X)) and ( X>=0 ) }
(11) tien e gan
{( R = A*B - A*X + A) and (X > 0)}
X := X 1
{( R = A*(B X ) ) and ( X >= 0 )}
(12) luat he qua
{(R = A*(B X )) and ( X > 0 )}
R : = R+A ; X := X - 1
{( R = A*(B X )) and ( X >= 0 )}
(13) luat tuan t da vao (9 ),(12)
{(R = A*(B X )) and (X >= 0 ) and (X<>0)} ==> {(R =A*(B X )) and (X >0 )}(14)
{(R = A*(B X )) and (X >= 0) and (X<>0)}
R := R+A ; X := X-1
{(R = A*(B X )) and (X >= 0)} (15) luat he qua da vao (13 ),(14)
Hay {I and C} R := R + A ; X := X 1 {I}
vi C la ieu kien vong lap X<>0
Do luat lap ta co :
- 74 -
- 75 -
- 76 -
CHNG VI
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.
- 77 -
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 .
- 78 -
1. Cac quy c :
a) Luat loai tr trng hp ky d (The law of the excluded miracle ).
WP(S,false)
false
b) WP(S,true) la tan t xac nh tap cac trang thai bao am tnh dng cua S
V du : WP(while (n<>0 ) do n := n -1, true) ( n >= 0 )
2. Tnh phan phoi cua and : wp(S,Q) and wp(S,R) wp(S,Q and R)
3. Tnh phan phoi cua or :
4.
wp(S,Q or R)
2. Toan t tuan t.
WP( S1 ; S2 , Q)
WP(S1 , WP(S2,Q))
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)
- 79 -
V du :
Chng minh tnh ung ay u ac ta sau :
{ S=i*(i+1)/2 }
i := i+1;
S := S+i;
{ S = i*(i+1)/2 }
Ta co :
wp(i := i+1 ; S := S+i, S=i*(i+1)/2)
wp(i := i+1, wp(S := S+i, S=i*(i+1)/2))
wp(i := i+1, S+i = i*(i+1)/2)
S +i+1 = (i+1)*(i+1)+1)/2
S = i*(i+1)/2)
Theo nh ngha cua wp ta co :
{ wp(i := i+1 ; S := S+i, S=i*(i+1)/2) }
i := i+1;
S := S+i;
{ S = i*(i+1)/2 }
ung ay u . Suy ra PCM.
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 )
- 80 -
b) nh ly sau ay chng minh s ung an cua toan t ieu kien neu chap
nhan he tien e cua Hoare va tnh dng.
nh ly :
Goi P ( B==> WP(S1 ,Q )) and (not B ==> WP(S2 , Q) )
Th ta co : + {P} if B then S1 else S2 {Q} ck (1)
va
+ Vi gia nh S1 va S2 dng neu {R} if B then S1 else S2 {Q}
th R ==> P ( P la tan t yeu nhat thoa ay u ac ta ) (2)
( Tc la : WP(if B then S1 else S2 , Q ) P
( B==> WP(S1 ,Q )) and (not B ==> WP(S2
Q) ) Chng minh :
Theo nh ngha cua WP, neu R ==> WP(S,Q) th {R} S {Q} thoa ck
Ma ta co P and B B and WP(S1 ,Q )) ==> WP(S1 ,Q )
V vay : {P and B} S1 {Q}
thoa ck
Tng t {P and (notB)} S2 {Q} thoa ck
Do o, theo luat ve lenh chon cua Hoare, ta co : {P} if B then S1 else S2 {Q}
(1)
Gia s S1 va S2 luon luon dng va {R} if B then S1 else S2 {Q}
Th : {R and B} S1 {Q}
{R and (not B)} S2 {Q}
va : if B then S1 else S2 luon luon dng.
V vay theo nh ngha cua WP ta co : R and B ==> WP(S1 ,Q )
va R and (notB) ==> WP(S2 ,Q )
Hai khang nh tren tng ng vi :
R ==> (B ==> WP(S1 ,Q ) )
va
R ==> (not B ==> WP(S2 ,Q ) )
V vay R ==> (B ==> WP(S1 ,Q ) ) and (not B ==> WP(S2 ,Q )) ) (2)
T (1) va (2) ta suy ra : P WP(if B then S1 else S2 , Q ) .
c) Ta cung co khang nh ngc lai : Neu chap nhan tien e :
WP(if B then S1 else S2, Q) (B ==> WP(S1, Q) and (not B ==> WP(S2,Q))
th co the chng minh luat ve lenh chon cua Hoare la ung :
nh ly : Gia s S1, S2 dng.
Neu {P and B} S1 {Q}
va {P and not B1} S2 {Q}
th {P} if B then S1 else S2 {Q} ung
Chng minh : (Bai tap)
4. Toan t lap.
a) Xay dng WP(while B do S ,Q ) .
Xet vong lap W while B do S , vi kc Q.
Xay dng tan t : WP(while B do S, Q)
No phai bao am W dng sau mot so hu han lan lap lai S va ti trang thai thoa Q .
- 81 -
Goi k la so lan lap (so lan thc hien lenh S than vong lap). Ta xay dng quy nap
theo k :
Bc 0 : ( k = 0 ) tan t yeu nhat mo ta tap ln nhat cac trang thai bao am S lap
ung 0 lan va ti trang thai thoa Q la :
Po (not B) and Q
Bc 1 : ( k = 1) tan t yeu nhat mo ta tap ln nhat cac trang thai bao am S lap
ung mot lan va ti trang thai thoa Q la :
P1 B and WP(S,Po )
( tc la sau khi thc hien mot lan S th trang thai chng trnh se thoa Po ).
Bc 2 : ( k = 2 ) tan t yeu nhat mo ta tap ln nhat cac trang thai bao am S lap
ung 2 lan va ti trang thai thoa Q la :
P2 B and WP(S,P1 )
( tc la sau khi thc hien mot lan S th trang thai chng trnh se thoa P1 ).
.........................................................
.........................................................
Bc k : Mot cach tong quat vi k >= 1 th tan t yeu nhat mo ta tap ln nhat cac
trang thai bao am S lap ung k lan va ti trang thai thoa Q la : Pk B and
WP(S,Pk-1 )
Nh vay mot trang thai au lam W dng mot trang thai thoa Q khi va ch khi no
thoa khang nh sau : (k : k >= 0 : Pk )
Tc la :
Vi
WP(while B do S , Q) (k : k >= 0 : Pk )
Pk =
V du :
not B and Q vi k = 0
WP(S,Pk-1 )
vi k > 0
- 82 -
- 83 -
- 84 -
- 85 -
- Mot lc o kiem chng la ung (valid) neu khi ta bo i cac khang nh trung
gian th no tr thanh mot ac ta ung. T nhng kien thc a trnh bay cac phan tren
ta suy ra: Mot lc o kiem chng la ung khi va ch khi :
+ Moi bo ac ta dang {P} S {Q} xuat hien trong lkc eu la nhng
ac ta ung.
+ Moi cap khang nh ng lien nhau dang {H} {T} trong lkc th
eu thoa quan he P ==> Q ung.
T nh ngha tren ta thay : mot lkc co the bien dang theo nhieu mc chi tiet. T
mot bo ba ac ta gom : oan lenh S , tan t mo ta ieu kien au P , tan t mo ta ieu
kien cuoi Q ( ac ta {P} S {Q} ) ta co the xay dng nhieu dang lkc khac nhau bang
cac cach chen khac nhau cac khang nh trung gian .
Dang tho nhat cua lkc chnh la ac ta tnh ung cua oan chng trnh no ch
cha 2 khang nh : mot au oan chng trnh va mot cuoi oan chng trnh .
Dang min nhat cua lkc la lkc ma moi lenh eu b kem gia hai khang nh (
ac ta ng ngha ti tng cau lenh ) no la lc o kiem chng mc chi tiet nhat
(lc o kiem chng chi tiet - lkcct).
Trung gian gia hai dang lkc tren ngi ta thng s dung lkc ch co cac
khang nh trung gian nhng cho can thiet ( nhng cho quan trong , nhng cho
ngoat trong noi dung ng ngha cua oan chng trnh ).
- 86 -
Viec chng minh tnh ung ay u cua lkc phu thuoc vao cau truc oan lenh S va
he tien e ma ta a s dung e xay dng lc o kiem chng hp ly.
- Trng hp 1 : Neu oan lenh S khong cha mot lenh lap nao ca th tnh dng
c xem la hien nhien, khi o 2 he tien e la hoan toan tng ng .
- Trng hp 2 : Neu oan lenh S co cha lenh lap th tnh dng khong phai
bao gi cung c thoa nen ta can phai ch ra . Khi o 2 he tien e la khong tng
ng .
+ Neu trong suot qua trnh xay dng lc o kiem chng ta ch s dung he tien
e Dijikstra th khong phai kiem chng lai tnh dng na .
+ Neu trong qua trnh xay dng lc o kiem chng ta co s dung (du ch mot
lan ) tien e cua he Hoare th phai kiem chng lai tnh dng ( v tien e Hoare khong
bao am tnh dng ) .
b) Kiem chng tnh ung ac ta {P} S {Q} khi S la mot day lenh tuan t.
( S { S1 ; S2 ; .. . ; Sn } )
Kiem chng tnh ung ac ta : { P } S1 ; S2 ; .. . ; Sn { Q }
V du :
Kiem chng ac ta :
{even(k) and (0 < k ) and (y*zk = xn )} (1)
k := k div 2 ;
z := z*z ;
{(0 <= k ) and (y * zk ) = xn )}
(2)
Bai giai :
Cach 1 : Xay dng lkc hp ly da vao he Haore .
- Bc 1 : Xay dng lc o kiem chng hp ly.
+ Xay dng lc o kiem chng chi tiet :
T (1) ta suy ra :
{even(k) and ( 0 < k ) and (y * zk ) = xn )}
(2a)
k
n
{(0 <= k div 2 ) and (y * (z*z) div 2 = x ) } (2d)
k := k div 2 ;
(2)
k
n
{(0 <= k ) and (y * (z*z) = x ) }
(2c)
z := z*z ;
{(0 <= k ) and (y * zk = xn ) }
(2b)
Dien giai : T (2b) va lenh gan z := z*z dung tien e gan ta suy ra (2c)
T (2c) va lenh gan k := k div 2 dung tien e gan ta suy ra (2d)
+ Xay dng lkc hp ly t lkc chi tiet :
T (2) ta suy ra :
{even(k) and ( 0 < k ) and (y * zk ) = xn )}
(2a)
k
n
{(0 <= k div 2 ) and (y * (z*z) div 2 = x ) } (2d)
k := k div 2 ;
(3)
z := z*z ;
{(0 <= k ) and (y * zk = xn ) }
- 87 -
(2b)
- 88 -
- 89 -
end
else begin
k := k -1 ;
y := y*z ;
end
{(0 <= k ) and ( y * zk = xn )}
Cach 1: Dung he tien e Hoare.
+ Bc 1 : Xay dng lkc hp ly.
at I(y,z,k) ( 0 <= k) and (y*zk = xn )
ac ta co dang :
{(0 < k ) and I(y,z,k)}
if even(k) then begin
k := k div 2 ;
z := z*z ;
end
else begin
k := k -1 ;
y := y*z ;
end
{I(y,z,k)}
Chen cac khang nh trung gian (da vao tien e gan cua Hoare)
{(0 < k ) and I(y,z,k)}
if even(k) then {even(k) and (0 < k ) and I(y,z,k)}
begin
{ I(y ,z*z , k div 2 ) }
k := k div 2 ;
{ I( y , z*z , k ) }
z := z*z ;
end;
{I(y,z,k)}
else
{(not even(k)) and (0 < k ) and I(y,z,k)}
begin
{ I(y*z ,z , k 1) }
k := k -1 ;
{ I(y*z , z , k ) }
y := y*z ;
end
{I(y,z,k)}
Bo i cac khang nh trung gian tam thng (da vao luat tuan t cua Haore) ta co
lkc hp ly :
{(0 < k ) and I(y,z,k)}
if even(k) then {even(k) and (0 < k ) and I(y,z,k)}
- 90 -
else
{(not even(k)) and (0 < k ) and I(y,z,k)}
{ I(y*z ,z , k 1) }
k := k -1 ;
y := y*z ;
{I(y,z,k)}
+ Bc 2: Chng minh lc o kc ung.
Cac cap khang nh ng lien nhau xuat hien trong lc o :
{even(k) and (0 < k ) and I(y,z,k)} { I(y ,z*z , k div 2 ) } (a)
va {(not even(k)) and (0 < k ) and I(y,z,k)} { I(y*z ,z , k 1) }(b)
Cac ham y tng ng can phai chng minh ung :
{even(k) and (0 < k ) and I(y,z,k)} ==> { I(y ,z*z , k div 2 ) } (a*) ( kiem
chng ? )
va
{(not even(k)) and (0 < k ) and I(y,z,k)} ==> { I(y*z ,z , k 1) }(b*) ( Kiem
chng ? )
T (a*) va (b*) ta suy ra ieu phai kiem chng.
Cach 2: Dung he tien e Dijkstra.
- Bc 1 : Xay dng lkc hp ly.
at I(y,z,k) ( 0 <= k) and (y*zk = xn )
S1 begin k := k div 2 ; z := z*z ; end ;
S2 begin k := k -1 ; y := y*z ; end ;
B even(k)
ac ta co dang :
{(0 < k ) and I(y,z,k)}
if B then S1 else S2
{I(y,z,k)}
+ Tnh WP(if B then S1 else S2 , I(y,z,k) )
( B ==> WP(S1 , I(y,z,k) ) ) and (not B ==> WP(S2 , I(y,z,k) ) )
( danh cho ngi oc )
+ Chen khang nh WP(if B then S1 else S2 , I(y,z,k) ) vao ac ta theo
tien e chon cua Dijkstra ta c lkc hp ly dang :
{(0 < k ) and I(y,z,k)}
{ WP(if B then S1 else S2 , I(y,z,k) ) }
if B then S1 else S2
{I(y,z,k)}
- Bc 2 : Chng minh lkc ung.
- 91 -
- 92 -
k := n ;
{ I(y,z,k)}
while (0 <> k ) do begin
{I(y,z,k) and (k <> 0 )}
{I(y*z,z,k-1)}
k := k -1 ;
{I(y*z,z,k)}
y := y*z ;
{I(y,z,k)}
end
{I(y,z,k) and (k = 0 )}
{y = xn }
Bo i cac khang nh trung gian tam thng ta co lcm hp ly dang :
{0 <= n}
{I(1,x,n)}
y := 1 ;
z := x ;
k := n ;
{ I(y,z,k)}
while (0 <> k ) do
begin
{I(y,z,k) and (k <> 0 )}
{I(y*z,z,k-1)}
k := k -1 ;
y := y*z ;
{I(y,z,k)}
end
{I(y,z,k) and (k = 0 )}
{y = xn }
Cac ieu kien can kiem chng la :
(0 <= n ) ==> I(1,x,n)
I(y,z,k) and (k = 0 ) ==> y = xn .
I(y,z,k) and (k <> 0 ) ==> I(y*x,z,k-1)
Thay I(y,z,k) (0 <= k) and ( y * z k = xn ) ba kckc tren se tr thanh :
(Phan chuan b) ( 0 <= n ) ==> (1*xn = xn )and (0 <= n ) (hien nhien )
(Phan ket thuc lap) ( y * zk = xn ) and (0 <= k ) and (k = 0 )==> y = xn (hien nhien)
(Phan than vong lap) ( y * zk = xn ) and (0 <= k ) and (k <> 0 )
==> ((y*z)*zk-1 = xn ) and (0 <= k -1)
( y * zk = xn ) and (0 < k )
==> (y*zk = xn ) and (0 <= k -1) (hien nhien )
- 93 -
- 94 -
- 95 -
- 96 -
PHU LUC
- 97 -
Bieu th tng trng lan lt cac menh e tren bi cac ten A, B, C, ta ghi lai dang
ly luan cua (1) nh sau :
. Neu A th B
(4)
. neu B th C
Co A ket luan c : C
ay cung la dang ly luan cua (2) .
Thng mot phat bieu se gom nhieu phat bieu nho noi ket vi nhau bang cac lien
t "va" , "hay" , "v vay " ,"ket qua la" ...
Mot menh e n (simple proposition) la menh e khong cha menh e khac.
Mot menh e phc (compound proposition) la menh e c tao thanh t hai hay
nhieu menh e n .Viec noi ket nay c thc hien bi cac lien t logic.
y ngha la
va
hay
khong
neu...th...
...neu va ch neu...
- 98 -
p and q
p or q
p ==> q
F
F
T
T
F
T
F
T
F
F
F
T
F
T
T
T
T
T
F
T
p <==> q
T
F
F
T
P not P
-----------T
F
-----------F
T
4. Ly luan ung.
Mot ly luan co the c bieu dien bi mot menh e phc trong o cac tien e c
noi ket vi nhau bang lien t and va cac tien e noi ket vi ket luan bang lien t
==>
nh ngha : Mot ly luan la ung (valid) neu va ch neu vi moi bo gia tr (ung,
sai) co the cua cac menh e thanh phan, no luon luon ung (true)
V du 1: Ly luan (4) ung v vi moi kha nang cua A,B,C menh e :
[ (A ==> B) and (B ==> C) and A] ==> C eu co ga tr ung.
Bang chan tr sau khang nh ieu o:
F
F
F
F
T
T
T
T
F
F
T
T
F
F
T
T
C
F
T
F
T
F
T
F
T
T
T
T
T
F
F
T
T
and
and
and
and
and
and
and
and
T and
T and
F and
T and
T and
T and
F and
T and
F ] ==> F
F ] ==> T
F ] ==> F
F ] ==> T
T ] ==> F
T ] ==> T
T ] ==> F
T ] ==> T
(T)
(T)
(T)
(T)
(T)
(T)
(T)
(T)
B
F
- 99 -
[ T
and
and T ] ==> F
5. Tng ng (Equivalence).
a) nh ngha:
Hai menh e P va Q c goi la tng ng nhau (ky hieu P Q), neu menh e
P <==> Q luon nhan gia tr ung (True) vi moi kha nang ung sai cua cac menh e
thanh phan .
Ta co the chng minh mot s tng ng bang cach lap bang chan tr .
V du: chng minh : p and q not( not p or not q ).
p
F
F
T
T
q
F
T
F
T
Bang chan tr :
p and q
not ( not p
F
not ( T
F
not ( T
F
not ( F
T
not ( F
or not q )
or T )
or
F )
or T )
or F )
Luat De Morgan
Luat ham y
- 100 -
p <==> q q <==> p
p and (q or r) (p and q) or (p and r)
p or (q and r) (p or q) and (p or r)
p or p p
p and p p
not (p or q) not p and not q
not (p and q) not p or not q
p ==> q not p or q
p ==> q not q ==> p
(p and q) ==> r ) (p ==> (q ==> r) )
p <==> q ( (p ==> q) and (q ==> p) )
p <==> q ((p ==> q) and (not p ==> not q))
p <==> q ((p and q) or (not p and not q))
- 101 -
Quan t luon noi that va tieu nhan luon noi doi. Mot ngi hoi mot dan c A tren
ao : "co phai anh la mot quan t ?". A ap :"neu toi la quan t th toi thua tien anh
". Hay chng minh rang : A nhat nh phai thua tien.
Ta mo hnh hoa bai toan nh sau :
at cac menh e P : A la quan t. Q : A phai tra tien.
Ket luan phai chng minh la Q.
Khao sat gia thiet cua bai toan:
+ Menh e khang nh : " A la tieu nhan " la not P
+ A phat bieu mot menh e S. gia thiet cho biet : Neu A la quan t th S phai
ung tc la : P ==> S
+ Neu A la tieu nhan th S phai sai : not p ==> not s
+ S la mot ham y : " Neu A la quan t th A phai tra tien".
Ta bieu th S bi : p ==> q
Nh vay tien e la : (P ==> S) and (not P ==> not S)
theo luat tng ng (k) ta co the viet la : P <==> S.
Bai toan c phat bieu di dang thuan tuy logic nh sau :
Cho tien e P <==> (P ==> Q)
Co the suy dien c ket luan Q khong ?
Ta se xac lap rang (ly luan tren la ung) menh e (P <==>(p ==> Q)) ==> Q
la ung vi moi bo gia tr ung sai cua cac menh e thanh phan .
Co hai cach :
(a) Dung bang gia tr ung sai .
P
Q
( P <==> ( P ==> Q ) ) ==> Q
T
T
( T <==>
T
) ==> T
F
T
( F <==>
T
) ==> T
T
F
( T <==>
F
) ==> F
F
F
( F <==>
T
) ==> F
(b) Dung cach thay the bang cac menh e tng ng .
P <==> (P ==> Q) P <==> (not P or Q)
(ham y)
[(P and (not P or Q)] or [not P and not (not P or Q )]
(tng ng)
ma not P and not (not P or Q) not P and (not not P and not Q)
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
- 102 -
not (P and Q) or Q
(not P or not Q) or Q
not P or (not Q or Q)
not P or true
true
Vi cac bai toan ch lien quan en t menh e nh trong v du tren, cach dung bang
chan tr n gian hn . Nhng nen co gang s dung cach bien oi tng ng, bi v
ap dung thc tien cua no la ln hn nhieu.
or_I
==>_I
p, q
_______
p and q
or_E
p
______
p or q
q
______
p or q
[p] q
______
p ==> q
not_I
==>_E
p and q
_______
p
p and q
_______
q
p or q , [p] r , [q] r
________________
r
p , p ==> q
__________
q
not_E
[p] false
_______
not p
<==>_I
p ==> q , q ==> p
_______________
p <==> q
- 103 -
p ,not p
false
not not p
_______
____
_______
false
p
p
<==>_E
p <==> q
p <==> q
_______
_______
p <==> q
p <==> q
Cac luat c chia lam cac luat them va cac luat loai bo : Cac luat them vao cho
phep suy ra mot khang nh mi trong o co xuat hien them mot lien t logic. Con cac
luat loai bo th loai bo mot lien t logic.
Luat and_I noi rang neu co the chng minh c p va q th ta suy c ra p and q .
Luat and_E noi rang neu chng minh c p and q th ta suy c tng thanh
phan p va q .
Luat or_E s dung 3 tien e : a co p or q , neu gia nh p ung th chng minh
c r , neu gia nh q ung th chng minh c r. khi o luat nay cho phep ket
luan r ung. ay chnh la phan tch theo trng hp (case analysis) van thng c
dung trong ly luan hang ngay .
Luat ==>E thng c goi la modusponens (tam oan luan). No noi rang co q
neu chng minh c p va p ==> q .
Luat not_I noi rang neu xuat phat t gia nh p ma co mau thuan th cho ta ket
luan not p .
Cung vi luat nay , can bo sung them luat ve loai tr trung gian true
p or not p
c phat bieu nh tien e (tc la luat suy dien khong can tien e).
- 104 -
a) Cac hang: la cac oi tng cu the ton tai trong lnh vc ma ngi ta ang
khao sat .
V du : + Cac hang so 5,6,10.2,...
+ Cac hang logic T(ung) , F(sai)
Trong trng hp tong quat ,ngi ta thng ai dien cho cac hang bang cac
ch cai viet thng o au bang t vng: a,b,c...,a1 ,b1 , c1 ,...
b) Cac bien (Variable): la cac ten tng trng . Moi bien c an nh mot
mien gia tr la tap cac oi tng ma no co the nhan.
V du:
+ Cac bien so nguyen n, j , k ,. . . vi cac tap tr la cac tap con cua
tap so nguyen Z .
+ Cac bien so thc x, y, z, . vi cac tap tr la cac tap con cua tap so
thc R .
+ Cac bien vec t V, W, . . . vi cac tap tr la cac tap con cua tap tch
eCac
R X R X R X ... X R ( Rn )
Thng dung cac ch cai viet thng cuoi bang t vng e bieu th cac bien :
x,y,z,...,x1 ,y1 ,z1 ,... T day ve sau ,moi bien neu khong c noi ro eu c xem la
bien nguyen .
c) Cac toan t (Operotors , hay ham (functions)) la cac anh xa t cac tap hp oi
tng vao cac tap hp oi tng trong lnh vc ang khao sat. Ta se thng dung
cac toan t toan hoc sau : + , - , * , / , div , mod
Mot toan t co the co mot hay nhieu toan hang (ngoi) .
V du :
+ Toan t "oi" (bieu th bi -) la mot ngoi : -x
+ Toan t - ,+, - , * , / , div, mod la hai ngoi : 2 + 3 , x * y
d) Cac ham logic hay cac tan t (predicates) . o la cac anh xa t tap hp cac
oi tng vao tap boolean {true,false}, ta se thng dung cac tan t la cac quan he
toan hoc nh sau :
+ Cac quan he so sanh : = , <> , > , >= , < , <=
+ Cac quan he tap hp : , , . . .
+ Cac quan he khac : odd(x) kiem tra xem x co le khong ?
even(x) kiem tra xem x co chan khong ?
e) Cac lien t logic : ay la cac toan t tren tap boolean ma ta gap trong logic
menh e: and , or , not , ==> , <==>.
f) Cac lng t pho dung va ton tai (se noi ro muc sau)
Cac bien logic , cac tan t trong o co cha cac hang hay bien hay ham c goi
la cac cong thc c s (formule elementaire)
V du : Cac cong thc c s
- Bien logic : hom-nay-tri-ep , toi-ve-luc-8-gi ,...
- tan t
: 5>2
x>5
x+5>y-3
- 105 -
T cac cong thc c s nay,ngi ta co the thanh lap cac cong thc phc hp
(formule complexe) bang cach noi ket chung dung cac lien t logic va cac lng t
. Moi cong thc phc hp co the xem la mot tan t mi.
V du : Cong thc phc hp
a) Hom_nay_tri_ep and x > y
b) x > y ==> x > z
- 106 -
: a[i] = x
thoa ieu sau a[i] bang x
Dang chung la : ( danh sach bien : R : P )
Menh e ton tai ch ung khi co mot phan t trong mien xac nh bi R thoa P.
khi R = true th ta co the viet : (danh sach bien :: P)
V du : cho hai array a va b
- Khang nh :"trong array a khong co th t tang"
( i : 0 <= i < n - 1 : a [i] >a [i+1])
- Khang nh : "co t nhat mot phan t cua a ln hn moi phan t cua b"
( i : 0 <= i <n : (j : 0 <= j < n : a[i] > b[j] ))
(m :: n = 2*m)
- Khang nh "n la chan" :
c) Mot so tnh chat:
-
(i : R : P) (i :: R and P)
(i : R : P) not (i :: R and not P)
(i : R : P)
not (i : R : not P)
- 107 -
3. Tap hp va tan t.
Moi bien co the lay gia tr trong mot tap hp xac nh . Tap tr ma mot day cac
bien co the nhan c la tch Descarters cac tap tr cua tng bien .
ng vi mot tan t P(i), vi i la (danh sach) bien t do ma moi phep the i bang
mot hang se cho gia tr ung hay sai , ta co mot tap hp tat ca cac ham ma phep the
i trong P cho gia tr ung .
ky hieu tap o la :
{ i : P(i) }
V du : { i : i >= 0 } "tap cac (so nguyen) i sao cho i khong am "
{ i,j : i < j }
"tap cac (so nguyen) i,j sao cho i nho hn j"
Ngc lai ng vi moi tap S , ta xay dng tan t ac trng cho S o la:
P(i) = ( i S )
Gia cac phep toan tap hp va cac phep toan logic co quan he chat che.
{ i : P(i) or Q(i) } { i : P(i) } U { i : Q(i) }
{ i : P(i) and Q(i) } { i : P(i) } { i : Q(i) }
Phan t trung hoa cua phep toan giao : tap vu tru (tch Descarters cua cac tap tr
ng vi cac bien trong danh sach bien) ng vi i chnh la: { i : true }
Phan t trung hoa cua phep toan hoi la :
{ i : false }
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
N ( i:r(i): P(i)) so gia tr i trong mien r(i) thoa P(i)
Tc la : N ( i: r(i): P(i)) = S(i: r(i) and p(i): 1)
- 108 -
Moi lng t ma ta xet ngoai tr N la s khai quat cua cac phep toan hai ngoi
co tnh giao hoan va ket hp thanh phep toan tren mot tap bat ky.
V du :
S la khai quat cua phep cong ( + ), P la khai quat cua phep nhan ( * ).