Académique Documents
Professionnel Documents
Culture Documents
Tai Lieu
Tai Lieu
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-
2. Tien e gan (The Assignement Axiom) ..................................................................... 61 3. Cac luat ve cac cau truc ieu khien . ........................................................................ 61 III. KIEM CHNG OAN CHNG TRNH KHONG CO VONG LAP. ............................. 64 IV. KIEM CHNG OAN CHNG TRNH CO VONG LAP. ........................................... 68 1. Bat bien ...................................................................................................................... 68 2. Ly luan quy nap va chng minh bang quy nap. ......................................................... 70 3. Kiem chng chng trnh co vong lap while. ............................................................. 71 CHNG VI......................................................................................................................... 76 I. CAC KHAI NIEM. .......................................................................................................... 76 1. at van e. ................................................................................................................ 76 2. nh ngha WP(S,Q)................................................................................................... 76 3. He qua cua nh ngha. .............................................................................................. 76 4. Cac v du. ................................................................................................................... 77 II. TNH CHAT CUA WP.................................................................................................... 77 III. CAC PHEP BIEN OI TAN T. ................................................................................... 78 1. Toan t gan (tien e gan). ......................................................................................... 78 2. Toan t tuan t........................................................................................................... 78 3. Toan t ieu kien. ...................................................................................................... 79 4. Toan t lap................................................................................................................. 80 IV. LC O KIEM CHNG HP LY VA CAC IEU KIEN CAN KIEM CHNG............ 84 1. Lc o kiem chng. ................................................................................................. 84 2. Kiem chng tnh ung. ............................................................................................... 85 3. Tap toi tieu cac ieu kien can kiem chng. ............................................................... 93 PHU LUC .............................................................................................................................. 96 I. LOGIC TOAN.................................................................................................................. 96 II. LOGIC MENH E.......................................................................................................... 96 1. Phan tch .................................................................................................................... 96 2. Cac lien t logic. ........................................................................................................ 97 3. Yngha cua cac lien t Logic. Bang chan tr. ............................................................. 97 4. Ly luan ung. ............................................................................................................. 98 5. Tng ng (Equivalence). ..................................................................................... 99 6. Tnh thay the, tnh truyen va tnh oi xng............................................................... 100 7. Bai toan suy dien logic......................................................................................... 100 8. Cac luat suy dien (rules of inference). ..................................................................... 102 III. LOGIC TAN T. ......................................................................................................... 103 1. Khai niem ................................................................................................................. 103 2. Cac lng t logic .................................................................................................... 105 3. Tap hp va tan t..................................................................................................... 107 4. Cac lng t so hoc................................................................................................. 107
-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
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)!
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 .
if ( m = 0 ) then return 1 ; else if (m > n ) then return 0 ; m1 m else return ( Cn 1 + Cn 1 ) ; 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 : 0 m FAC(0 ) = 1 , FIBO(0) = FIBO(1) = 1 , Cn = 1 , Cn = 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 )
- 12 -
Program E A B C
+ Goi cac chng trnh con trc tiep cua no goi c B nhng khong goi c C + Goi chnh no ( goi e quy ). + Goi chng trnh con cung cap nhmg phai khai bao trc goi c E nhng khong goi c D , Muon goi D phai khai bao trc ( khai bao FORWARD)
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 -
{ if(n == 0 ) return (m) ; else return ( USCLN( n , m mod n)) ; } b) e quy nh phan. Chng trnh con e quy nh phan la chng trnh con e quy trc tiep co dang : P { NEU thoa ieu kien dng th thc hien S ; Con khong begin { thc hien S* ; goi P ; goi P } } Vi S , S* la cac thao tac khong e quy . V du 1 : Ham FIBO(n) tnh so hang n cua day FIBONACCI + Dang ham trong Pascal: Function F(n : integer) : integer; begin if( n < 2 ) then F := 1 else F := F(n-1) + F(n-2) end; + Dang ham trong C++ : int F(int n) { if ( n < 2 ) return 1 ; else return (F(n -1) + F(n -2)) ; } c) e quy phi tuyen. Chng trnh con e quy phi tuyen la chng trnh con e quy trc tiep ma li goi e quy c thc hien ben trong vong lap . Dang tong quat cua chng trnh con e quy phi tuyen la : P { for gia tri au to gia tr cuoi do begin thc hien S ; if ( thoa ieu kien dng ) then thc hien S* else goi P end ; } Vi S , S* la cac thao tac khong e quy . V du : Cho day { Xn } xac nh theo cong thc truy hoi : X0 = 1 ; Xn = n2 XO +(n-1)2 X1 + . . . + 2 2 Xn-2 + 1 2 Xn-1 + Dang ham e quy tnh Xn tren ngon ng ma gia la : Xn if ( n= 0 ) then return 1 ;
- 15 -
tg = tg + (n-i)2 Xi ;
+ Dang ham e quy tnh Xn tren ngon ng Pascal la : function X( n :integer) : integer ; var i , tg : integer ; begin if ( n= 0 ) then X := 1 else begin tg = 0 ; for i: = 0 to n-1 do tg : = tg + sqr(n-i) *X(i) ; X := tg ; end ; end ; + Dang ham e quy tnh Xn tren ngon ng C++ la : int X( int n ) ; { if ( n == 0 ) return 1 ; else { int tg = 0 ; for (int i = 0 ; i<n ; i++ ) tg = tg + sqr(n-i) *X(i); return ( tg ) ; }
- 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 -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 ) THN(n,X,Y,Z)
- 19 -
procedure THN (n : integer ; X,Y,Z : char) begin if (n = 1) then Move(X, Z) else begin THN (n-1 ,X,Z,Y ) ; Move(X, Z ); THN (n -1 ,Y,X,Z ); end ; end; ( Lay trng hp chuyen n = 1 lam trng hp neo ) Vi thu tuc Move(X, Y) mo ta thao tac chuyen 1 a t cot X sang cot Y c viet tuy theo cach the hien thao tac chuyen . e) Chng trnh con ma hoa giai thuat THN trong NNLT C++ : Trong C++ ham con thc hien giai thuat THN co dang : void THN( int n , char X,Y,Z) { if(n > 0) { THN(n -1,X,Z,Y ) ; Move ( X , Z ) ; THN(n - 1,Y,X,Z ) ; } return ; } hoac : void THN( int n , char X,Y,Z) { if(n = = 1) Move ( X , Z ) ; else { THN(n -1,X,Z,Y ) ; Move ( X, Z ) ; THN(n - 1,Y,X,Z ) ; } return ; }
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 -
* Nhom th 2 co phan cho ngi cuoi cung ( Sn > 0 ) . De thay rang so cach chia cua nhom nay bang so cach chia m - n phan thng cho n hoc sinh ( v phng thc chia ma tat ca hoc sinh eu nhan c phan thng co the thc hien bang cach : cho moi ngi nhan trc 1 phan thng roi mi chia ). Tc la : So cach chia trong nhom th 2 = PART(m - n , n ) . Vay : vi m>= n PART(m , n ) = PART(m , n -1 ) + PART(m - n , n ) d ) Dang ma gia cua ham PART(m , n ) PART(m , n ) = if(m = 0 ) then return 1 ; else if( n = 1 ) then return 1 ; else if(m < n ) then return PART(m , m) ; else return ( PART(m , n -1) + PART(m - n , n )) e) Dang ham PART trong NNLT Pascal Function PART(m , n : integer ) : integer ; Begin if ( (m = 0) or ( n = 1) ) then PART := 1 else if(m < n) then PART := PART(m , m ) else PART := PART(m , n -1 ) + PART(m - n , n) ; End ; g) Dang ham PART trong NN LT C++ int PART( int m , int n ) { if ((m == 0 ) || (n == 0) ) return 1 ; else if(m < n ) retrun ( PART(m , m )) ; else return ( PART(m , n -1 ) + PART( m -n , n ) ) ; }
- 22 -
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
3 3 3 3 3
4 1 3 3 4
1 3 1 4 3
3 4 4 1 1
2 2 2 2 2
2 4 3 3 2
4 3 4 2 3
3 2 2 4 4
1 1 1 1 1
a) Thong so hoa bai toan . Goi HV(v, m ) ( vi v : array[1 . . N ] of T , m :integer ; m N ; T la mot kieu d lieu a biet trc ) la thu tuc xuat tat ca cac dang khac nhau cua v co c bang cach hoan v m thanh phan au cua day v V du : N = 4 , A[1] = 1 , A[2] = 2 , A[3] = 3 , A[4] = 4 th li goi HV(A ,3 ) xuat tat ca hoan v cua A co c bang cach hoan v 3 phan t au ( co 6 h v ) : 1 2 3 4 1 3 2 4 3 2 1 4 2 1 3 4 3 1 2 4 2 3 1 4 e giai bai toan at ra ban au ta goi HV(A,N) ). b) Trng hp neo. Vi m = 1 : HV(v,1) la thu tuc giai bai toan xuat tat ca cac dang cua v co c bang cach hoan v 1 phan tu au . Vay HV(v,1) la thu tuc xuat v. HV(v,1) print(v) for k:= 1 to N do write(v[k]) c) Phan ra bai toan. Ta co the tm het tat ca cac hoan v m phan t au cua vector V theo cach sau : - Gi nguyen cac phan t cuoi V[m] , . . . ,V[N] hoan v m-1 phan t au ( goi e quy HV(V ,m - 1) . - oi cho V[m] cho V[m-1] ,gi nguyen cac phan t cuoi V[m],... ,V[N] hoan v m-1 phan t au ( goi e quy HV(V ,m - 1) . - oi cho V[m] cho V[m-2] ,gi nguyen cac phan t cuoi V[m],. ,V[N] hoan v m-1 phan t au ( goi e quy HV(V ,m - 1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . . . . . . . . . . - oi cho V[m] cho V[2] ,gi nguyen cac phan t cuoi V[m], . .. ,V[N] hoan v m-1 phan t au ( goi e quy HV(V ,m - 1) . - oi cho V[m] cho V[1] ,gi nguyen cac phan t cuoi V[m], . . . ,V[N] hoan v m-1 phan t au ( goi e quy HV(V ,m - 1) . Vay : HV(V,m) { SWAP( V[m],V[m] ) ; HV(V,m 1) ; SWAP( V[m],v[m-1] ) ; HV(V,m 1) ; SWAP( V[m],v[m-2 ] ) ; HV(V,m 1) ;
- 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 -
e) Thu tuc hoan v tren NNLT C++ . .................. const size = Val ; // Val la hang ga tr typedef typebase vector[size] ; // typebase la mot kieu d lieu co th t ...................... void Swap( typebase & x , typebase& y) { typebase t ; t=x;x=y;y=t; } ......................... . void print( const vector &A) { for(int j= 0 ; j <size ; j++ ) cout<< A[j] ; cout << endl ; } ......................... . void HV( const vector &V , int m) { if (m == 1 ) print( V ); else for(int k = m-1 ; k > = 0 ; k-- ) { swap(V[m-1] ,V[k] ) ; HV(V,m-1) ; } }
4. Bai toan sap xep mang bang phng phap tron (Sort-Merge).
Y tng : e sap xep 1 danh sach gom n phan t bang phng phap tron ngi ta chia danh sach thanh 2 phan (tong quat la nhieu phan ) , sap xep tng phan, roi tron chung . Bai toan : sap theo th t khong giam mang a : VectorT bang phng phap tron. ( VectorT = array[1 . . size] of T). a) Thong so hoa: Bai toan c khai quat thanh sap xep mot day con cua day V : VectorT t ch so m en ch so n vi 1 <= m <= n <= size . Ta at ten cho bai toan dang tong quat la : SM(V,m,n). Bai toan ban au : sap day A se c thc hien bang li goi : SM(A ,1,size). b) Trng hp tam thng: o la khi n = m (day sap ch co 1 phan t ), khi o khong can lam g ca (thao tac rong) .
- 25 -
c) Phan ra trng hp tong quat : Khi n > m ta thc hien cac cong viec sau : + Chia day : a[m] ,a[m+1], . . . , a[n] thanh 2 day con a[m] , . . , a[l] va a[l+1] , . . . , a[n] + Sap xep tng day con thanh cac day co th t theo giai thuat SM . + Tron 2 day con co th t lai thanh day a[m] ,. . . , a[n] mi co th t . e thc hien viec tron hai day co th t thanh mot day co th t ta se dung mot thu tuc khong e quy Merge(m , l , n) . Ta can chon l e c 2 day con giam han kch thc so vi day ban au , tc la chon l : m < l < l+1 < n . Thng chon l la phan t gia : l = ( m + n ) div 2 . Thu tuc Sort_Merge(m,n) tren mang V : VectorT viet tren ngon ng PASCAL co dang : procedure SM (var d: VectorT ; m,n: index); var l : index ; begin if n>m then begin l := (m+n) div 2; SM (d,m,l) ; SM (d,l+1,n) ; Merge (d,m,l,n) ; end ; end ; Trong o SM la thu tuc tron 2 day tang e c mot day tang. e sap mang A (day A[1:size]) ta goi SM(A ,1,size)
- 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 -
- 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 :
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(3) = FIB(1) + FIB(2) FIB(1) = FIB(2) = FIB(0) + FIB(1) FIB(0) = FIB(1) = FIB(4) = FIB(2) + FIB(3) FIB(2) = FIB(0) + FIB(1) FIB(0) = FIB(1) = FIB(1) = FIB(1) = FIB(3) = FIB(2) + FIB(1)
FIB(2) = FIB(0) + FIB(1) FIB(0) = 1 c) Xet thu tuc e quy thap Ha Noi THN (n , X , Y , Z) THN (n : integer ; X ,Y , Z : char) if (n > 0 ) then { THN(n-1,X ,Z ,Y) ; Move(X, Z) ; THN(n-1,Y,X,Z) ; }
e chuyen 3 a t cot A sang cot C dung cot B lam trung gian ta goi : THN (3,A,B,C) S o thc hien li goi THN (3,A,B,C) la :
- 30 -
Li goi c/0
Li goi c/1
Li goi c/2
Li goi c/3 THN(0,A,C,B) A ---> C THN(0,B,A,C) THN(0,C,B,A) C --->B THN(0,A,C,B) THN(0,B,A,C) B ---> A THN(0,C,B,A) THN(0,A,C,B) A ---> C THN(0,B,A,C)
THN(1,A,B,C) THN(2,A,C,B) A ---> B THN(1,C,A,B) THN(3,A,B,C) A ---> C THN(1,B,C,A) THN(2,B,A,C) B ---> C THN(1,A,B,C)
Vi THN(0 ,X , Y , Z ) la trng hp neo tng ng vi thao tac rong . X ------> Y la thao tac chuyen 1 a t cot X sang cot Y (MOVE(X,Y)). Cac bc chuyen a se la : A --> C ; A --> B ; C --> B ; A --> C ; B --> A ; B --> C ; A --> C ; Li goi cap 0 : THN(3 , A , B , C ) se lam nay sinh hai li goi cap 1 : THN (2 ,A, C, B) ; THN (2 , B , A , C ) cung vi cac thong tin cua qua trnh x ly con dang d . Cac li goi cap 1 : THN(2 , A , C , B ) , THN (2 , B , A ,C ) se lam nay sinh cac li goi cap 2 : THN (1 ,A, B, C) ; THN (1, C , A , B ) ; THN (1 ,B, C, A) ; THN (1, A , B , C ) ; cung vi cac thong tin cua qua trnh x ly con dang d . Cac li goi cap 2 : THN(1 ,A, B, C) ; THN(1, C , A , B ) ; THN(1 ,B, C, A) ; THN(1, A , B , C ) ; se lam nay sinh cac li goi cap 3 dang : THN(0 ,X, Y, Z) (thao tac rong tng ng vi trng hp suy bien ); cung vi cac thong tin cua qua trnh x ly con dang d . Qua trnh goi dng lai khi gap trng hp suy bien . Qua trnh x ly ngc vi qua trnh goi bat au khi thc hien xong cac trng hp neo nham hoan thien cac bc x ly con dang d song song vi qua trnh hoan thien cac li goi la qua trnh loai bo cac lu tr thong tin giai thuat trung gian.
- 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 Push(S,x1 ) ; S.St[2] := x1 S.Top := 1 ;
3 2 1 x o 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 .
- 34 -
f(n)
V du : Ham giai tha FAC (n) = n ! = 1 khi n = 0 = n * FAC(n - 1) khi n > 0 Tong n so au tien cua day an dau sau : Sn = 1 - 3 + 5 - 7 .. + (-1)n+1 * (2n-1) S(k) = 1 khi k =1 = S(k-1) + (- 1)k+1 *(2*k-1) vi k > 1 - Giai thuat e quy tnh gia tr f(n) f(n) = if(n = no) then return C ; else return (g(n,f(n -1)) ; - Giai thuat lap tnh gia tri f(n) k := no ; F := C ; { F = f(no) } While( k < n ) do begin k := k +1 ; F := g(k,F ) ; end ; { F = f(n) } Hoac : F := C ; For k := no to n -1 do begin k := k + 1 ; F := g(k,F) ; end ; Trong trng hp nay : W = U = ( k ,F ) Wo = Uo = ( no,C ) C(U) = ( k < n) f(W) = f(U) = f(k,F) = (k+1,g(k,F))) V du 1: Ham tnh FAC(n) = n! khong e quy + Trong NN LT PASCAL Function FAC ( n : integer ) : longint ; var k : integer ; F : longint ; Begin F := 1 ; k := 0 ; while (k < n ) do begin
= =
C g(n,f(n -1))
- 35 -
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 ;
k := k + 1 ; F := F * k ; 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. 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 : Xet thu tuc P dang : P(X) if B(X)
- 37 -
P(X)
True
B(X)
A(X) ; X : = f(X)
D(X)
False
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 :
While (n <> 0) then begin A[m] := n mod k ; { A(X) } n := n div k ; { X := f(X) } m := m - 1 ; end ; V du 2 : Tm USCLN cua 2 so nguyen da vao thuat toan Euclide . - Giai thuat e quy (di dang thu tuc ) tm USCLN(m,n) bang thuat toan Euclide : USCLN(m , n , var us) if ( n = 0 ) then us := m else USCLN(n , m mod n , us ) ;
- Trong trng hp nay th : X la ( m , n , us ) P(X) la USCLN(m ,n ,us) B(X) la n = 0 D(X) la lenh gan us := m A(X) la lenh rong f(X ) la f(m,n,us) = ( n , m mod n ,us ) oan lenh lap tng ng la :
While (n <> 0 ) do begin sd := m mod n ; m := n ; n := sd ; end ; us := m ; - Thu tuc khong e quy tng ng trong Pascal .
- 39 -
Procedure USCLN(m , n : integer ; var us : integer ) ; var sd : integer ; begin while ( n <> 0 ) do begin sd := m mod n ; m := n ; n := sd ; end ; us := m ; end ; - Ham con khong e quy tng ng trong C++ void USCLN(int m , int n , int& us ) { while(n != 0 ) { int sd = m % n ; m = n ; n = sd ; } us = m ; } c) Cac ham e qui dang e qui uoi (tail-recusive). Xet ham e qui dang : f(X) = Tc la : f(X) f(g(X)) a (X ) khi C (X) ung khi C (X) sai
Tnh f(Xo ) . Ta co : f(Xo ) = f(g(Xo )) = f(g(g(Xo ))) = ... = f(gk (Xo )) = a(gk (Xo ))
v C(Xo ) ung . vi C(g(Xo )) ung . vi C(gk-1 (Xo )) ung . vi C(gk (Xo )) sai.
( gk(xo) = g(g (g (xo))))) ) at : Uo = Xo = go (Xo ) Ui = gi (Xo ) = g(gi-1 (Xo )) = g(Ui-1 ) vi i >= 1 Ta co quan he sau :
- 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 -
A(X) =
a2) Dang ma gia : A(X ) if C(X) then return ( DS (A(CS(X)) ,FS(CS(X),X) ) else return (BS(X ) ) Vi : BS , CS , DS , FS la cac giai thuat khong e qui . Trng hp thng gap la : BS(X) , CS(Y) , DS(U,V) , FS(U,V) la cac thao tac n gian , khong co lenh goi ham con . X , Y ,U , V la bien n tr hoac bien vec t . ay la dang tong quat cua ham e quy ch goi en chnh no mot lan . b) S o tong quat tnh ga tr A(X) : Goi Uo = X la ga tr oi so can tnh cua ham A . Viec tnh A(Uo) se phat sinh lenh goi tnh A(U1) vi U1 = CS(Uo) ( ga s C(Uo) true ). C nh vay , khi ma C(Ui ) con ung th viec tnh A(Ui ) se phat sinh lenh tnh A(Ui+1) vi Ui+1 = CS(Ui ). Vi gia thiet la Uo = X thuoc mien xac nh cua A , th qua trnh lap lai cac lenh goi nay phai dng lai sau hu han lan goi . Tc la k thoa : C(Uo) = C(U1) = . . = C(Uk-1) = true , C(Uk) = false. Xet 2 day so : - Day : { Ui } = { CS(Ui) } ( 2.1) Uo = X { cho trc } i = 0 . . k-1 Ui+1 = CS(Ui) - Day : { Vi } = { A(Ui) } (2.2) Vo = A(Uo) = A(Xo) ( ga tr can tnh ). Vi = A(Ui) = DS(A(CS(Ui ), FS(CS(Ui), Ui ) )
- 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)
- 43 -
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 .............................................................................. .............................................................................. Vk-1 = DS(Vk, FS(Uk,Uk-1) = DS(Vk,Uk-1) = Vk T Uk-1 Vk = BS(Uk) Khi DS co tnh hoan v tc : DS(DS(x,y),z) = DS(DS(x,z),y) ( Viet tren ky hieu T : (x T y) T z = (x T z) T y Thc hien the lan lt V1 roi V2 ... trong cong thc Vo. Ta co : (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 = ( .... ((( Vk T Uo) T U1) T U2 ) T ........T Uk-2) T Uk-1 (3 - 2 )
(3 - 2) la mot day lien tiep ( mot tong ) k phep toan T ma ta a biet giai thuat tnh. Thc vay : Thiet lap day Wi nh sau : W0 = Vk Wi = Wi-1 T Ui-1 vi i = 1..k Tc la : Wo = Vk = BS(Uk ) (3 - 3 ) Wi = Wi-1 T Ui-1 = DS(Wi-1,FS(Ui,Ui-1)) i=1..k Wk chnh la ga tr Vo can tnh . Nh vay giai thuat tnh Wk ( Vo = A(X ) ) gom 2 bc : Bc 1: Xac nh k va Uk theo cong thc ( 1 - 1 ) Bc 2: Tnh day Wi , trong luc tnh th phai tnh lai day Ui ,theo ( 3 - 3) A(X ) = Vo = Wk . Giai thuat khong e qui tng ng dc xem nh bai tap .
- 46 -
else
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)
P ).
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
A(X) ;
Push(S,X); U:=f(X) ; P(U) ; POP(S,U) ; B(U) (U=X) Push(S,U); U :=f(U)); P(U) ; POP(S,U) ; B(U) ( U = f(X)) Push(S,U) ; U : = f(U)); P(U ) ; POP(S,U) ; B(U)
C(U) = False
A(U) ;
------------------------------------------------------------------------------------------------
- 47 -
Giai thuat thc hien P(X) vi viec s dung Stack co dang : P(X) { Creat_Stack (S) ; ( tao stack S ) While(not(C(X)) do begin A(X) ; Push(S,X) ; ( cat ga tr X vao stack S ) X := f(X) ; end ; D(X) ; While(not(EmptyS(S))) do begin POP(S,X) ; ( lay d lieu t S ) B(X) ; end ; }
V du : Thu tuc e quy chuyen bieu dien so t c so thap phan sang nh phan co dang : Binary(m) if ( m > 0 ) then begin Binary( m div 2 ) ; write( m mod 2 ) ; end; Trong trng hp nay : X la m . P(X) la Binary(m) . A(X) ; D(X) la lenh rong . B(X) la lenh Write(m mod 2 ) ; C(X) la ( m <= 0 ) . f(X) = f(m) = m div 2 . Giai thuat thc hien Binary(m) khong e quy la : Binary (m ) { Creat_Stack (S) ; While ( m > 0 ) do begin sdu := m mod 2 ; Push(S,sdu) ; m := m div 2 ; end; While( not(EmptyS(S)) do begin POP(S,sdu) ; Write(sdu) ; end; }
- 48 -
c) Nhieu lenh goi e quy trc tiep. c1) Thu tuc e quy vi 2 lan goi trc tiep Thu tuc e quy 2 lan goi trc tiep co dang : P(X) if C(X) then D(X) else begin A(X) ; P(f(X)) ; B(X) ; P(g(X)) ; end ;
Qua trnh thc hien thu tuc P(X) se la : - Neu C(X) ung th thc hien D(X) . - Neu C(X) sai th thc hien A(X) ; goi P(f(X)) ; thc hien B(X) ; goi P(g(X)) , khi goi P(g(X)) th lai phat sinh lenh A(g(X)) nh vay ngoai viec phai lu vao stack cac ga tr fi(X) ta con phai lu vao stack cac ga tr gi(X) tng ng . Khi ta lay d lieu t stack e thc hien lenh B(U) ma cha gap ieu kien ket thuc th ta thc hien P(g(U)) va lai phai lu ga tr g(U) vao stack ,... ieu kien dng la khi truy xuat ti phan t lu au tien trong stack . Nh vay la ngoai d lieu X , con phai lu vao ngan xep them th t lan goi ( cum goi ) Thuat toan kh e quy tng ng vi thu tuc e quy P(X) la : { Creat_Stact (S) : Push (S, (X,1)) ; Repeat While ( not C(X) ) do begin A(X) ; Push (S, (X,2)) ; X := f(X) ; end ; D(X) ; POP (S, (X,k)) ; if ( k <> 1) then begin B(X) ; X := g(X) ; end ; until ( k = 1 ) ; }
- 49 -
V du : Kh e quy thu tuc Thap Ha Noi . + Dang e quy cua thu tuc Thap Ha Noi la : THN(n , X , Y, Z ) if( n > 0 ) then begin THN ( n - 1 , X , Z , Y ) ; Move ( X , Z ) ; THN ( n - 1 , Y , X , Z ) ; end ; Vi n la so a , X la cot au , Z la cot cuoi , Y la cot gia ,Move(X,Z) la thao tac chuyen 1 a t cot X ti cot Z . Trong trng hp nay : Bien X la bo ( n , X , Y , Z ) . C(X) la bieu thc boolean ( n < = 0 ) . D(X) , A(X) la thao tac rong . B(X) = B(n,X,Y,Z) la thao tac Move(X,Z) ; f(X) = f(n ,X ,Y ,Z) = (n - 1 , X , Z , Y) . g(X) = g(n ,X , Y, Z ) = (n - 1 , Y ,X , Z ) . Giai thuat khong e quy tng ng la : { Creat_Stack (S) ; Push (S ,(n,X,Y,Z,1)) ; Repeat While ( n > 0 ) do begin Push (S ,(n,X,Y,Z,2)) ; n := n - 1 ; Swap (Y,Z ) ; (* Swap(a,b) la thu tuc hoan end ; oi noi dung 2 bien a ,b *) POP (S,(n,X,Y,Z,k)) ; if ( k <> 1 ) then begin Move (X ,Z ) ; n := n - 1 ; Swap (X ,Y ) ; end ; until ( k = 1 ) ; } c2) Trng hp n lan goi e quy trc tiep . Thu tuc e quy trong trng hp nay co dang :
- 50 -
P(X)
if C(X) then D(X) else begin A1(X) ; P(f1(X)) ; A2(X) ; P(f2(X)) ; ............................ Ai(X) ; P(fi(X)) ; ............................ An(X) ; P(fn(X)) ; An+1(X) ; end ;
Cung giong nh trong trng hp (3a) la khi quay tr lai sau khi thc hien mot lan e quy, can biet o la lenh goi thuoc nhom th may trong day lenh goi e biet thao tac can thc hien tiep. V vay trong chong can gi them v tr nhom lenh goi . Dang lap tng ng la : { Creat_Stack (S) ; Push(S,(X,1)) ; Repeat While (not C(X) ) do begin A1(X) ; Push (S,(X,2)) ; X := f1(X) ; end ; D(X) ; POP(S,(X,k)) ; While( k = n+1 ) do begin An+1 ; POP(S,(X,k)) ; end ; begin Ak(X) ; Push (S,(X,k+1)); X := f k (X) end ;
if ( k > 0 ) then
until (k = 1 ) ; }
V du : Kh e quy cho thu tuc hoan v . + Thu tuc hoan v di dang e quy :
- 51 -
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 ) ;
HVI(V ,n)
- 52 -
PHAN II
CHNG IV
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 -
can at ti trang thai thoa Q . P c goi la ieu kien au (precondition) , Q c goi la ieu kien cuoi (postcondition). Cap tan t (P,Q) , c goi ac ta cua oan lenh S. Bo 3 S, P, Q tao nen mot ac ta oan lenh thng c mo ta hnh thc bang tap ky hieu : { P } S { Q } ( { P } : tap trang thai thoa tan t P , { Q } : tap trang thai thoa tan t Q ) Viec thiet lap cac khang nh nhng iem khac nhau trong chng trnh nham e : + Hoac la ac ta mot oan chng trnh can phai xay dng : tm S thoa P, Q cho trc. + Hoac la c s e chng minh tnh ung cua oan chng trnh S ( oan chng trnh S thoa ac ta ). + Hoac e ac ta ng ngha oan chng trnh (thc hien su lieu chng trnh) nham muc ch lam ngi oc hieu c y ngha cua oan chng trnh
- 58 -
V du : while (x > 0) do begin y := x ; while ( y > 0) do y := y -1 ; x := x - 1 ; end ; - <Day lenh> chnh la day tuan t cac <lenh n> ngan cach bi dau ';'
- 59 -
CHNG V
c) { (t = xo ) and (x = y = yo ) } Neu (t = xo ) va (x = y = yo ) trc khi y := t y := t c thi hanh Th sau o ( y = xo ) va ( x = yo ) {( y = xo ) and (x = yo ) } Cac phat bieu a, b, c la ung theo cam nhan cua ta ve lenh gan. d) { x > 0 } Neu (x > xo ) trc khi x := x-1 x := x-1 c thc hien {x>0} Th sau o ( x > 0 ) Phat bieu d la sai v co mot trang thai ban au x = 1 thoa P ( x > 0 ) nhng sau khi thi hanh lenh x := x -1 (x giam 1) th x = 0 khong thoa Q ( x > 0 ) .
- 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 .
Neu k P manh hn ieu kien Q .Tc la: P Q hay { P } { Q } ( tap hp cac trang thai thoa P la tap con cua cac tap trang thai thoa Q ) va moi trang thai thoa Q eu am bao trang thai sau khi thi hanh S (vi gia nh S dng) thoa R th moi trang thai thoa P eu am bao trang thai sau khi thi hanh S (vi gia nh S dng) thoa R. V du 1 : Kiem chng tck ac ta sau : { x = 3 } x := 5 ; y := 2 { x = 5, y = 2 } Ta co : { true} x := 5 ; y := 2 { x = 5 ; y = 2 } (a) // tam cong nhan va ( x = 3 ) => true (b) // hien nhien Nen { x = 3 } x := 5 ; y := 2 { x = 5, y = 2 } // theo tien e (1a) V du 2 : Kiem chng tck ac ta sau : { x > 3 } x := x -1 { x > 0 } Ta co : { x > 1 } x := x-1 { x > 0 } (a) //tam cong nhan va ( x > 3 ) => ( x > 1) (b) // hien nhien Nen { x > 3 } x := x -1 { x > 0 } // theo tien e (1a) 1b. Q => R , { P } S { Q } {P} S {R} V du 3 :
(1b)
Kiem chng tck ac ta sau : { true } x := 5 ; y := 2 { odd(x) and even(y) } Ta co : { true } x := 5 ; y := 2 { (x = 5) , ( y = 2 ) } (a) // tam cong nhan va ( (x = 5) and (y = 2)) => odd(x) and even(y) (b) // hien nhien Nen { true } x := 5 ; y := 2 { odd(x) and even(y) } //theo (1b)
- 61 -
V du 4 : Kiem chng tck ac ta : { x > 1 } x := x -1 { x >= 1 } Ta co : { x > 1 } x := x-1 { x > 0 } (a) // tam cong nhan va ( x > 0 ) => ( x >= 1) // (b) // v x la bien nguyen Nen { x > 1 } x := x -1 { x >= 1 } // theo (1b) Hai luat nay cho phep lien ket cac tnh chat phat sinh t cau truc chng trnh vi cac suy dien logic tren d kien.
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 } b) Luat ve ieu kien (chon) (Rule for conditionals) b1)
(a) // tien e gan (b) // hien nhien (c) //theo luat he qua (d) // tien e gan // theo luat tuan t
{ P and B} S1 {Q }, { P and (not B)} S2 { Q } (3.2a) { P } if B then S1 else S2 { Q } Y ngha luat nay la : Neu co : { P and B } S1 {Q} Va { P and notB } S2 {Q} Th suy ra : {P} if B then S1 else S2 {Q} b2) { P and B} S { Q} , P and (not B ) => Q { P } if B then S { Q}
+ Neu xuat phat t trang thai thoa P and B thi hanh S1 th se ti trang thai thoa Q
+ Neu xuat phat t trang thai thoa P and not B thi hanh S2 th se ti trang thai thoa Q
Neu xuat phat t trang thai thoa P thi hanh lenh if B then S1 else S2 th se ti trang thai thoa Q .
(3.2b)
V du1 : Kiem chng tck ac ta : { i> 0 } if ( i= 0 ) then j := 0 else j := 1 Ta co : ((i> 0) and (i = 0)) false { (i> 0 ) and (i = 0)} j := 0 {j=1} S,Q ( (i> 0) and not(i = 0)) true
{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
(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 -
Ma I and not(i<n) (i <= n) and ( i >= n ) ==> i=n (c) T b ,c , luat he qua ta co PCM. V du 2 : Kiem chng tnh ung co ieu kien cua ac ta : {sum = 0 , i = 0 , n > 0} while ( i <> n ) do begin i := i+1 ; sum := sum+i // S end ; {sum = n * (n+1)/2} // tc sum = 1 + 2 + ..... + n ay : I la (sum = i*(i+1)/2 ) ; B ( i <> n ) Ta co : {( sum = i*(i+1)/2 ) ,( i<>n)} i := i+1 ; sum := sum+i {sum = i*(i+1)/2} (a) //tien e gan va tuan t { I } while B do S { I and not B } (b) // a,va luat 3.3 ( s = 0) and (i = 0) and (n >0) ==> s = i*(i+1)/2 (c) //hien nhien ( s = i*(i+1)/2) and not(i<>n) ) ==> s=n*(n+1)/2 (d) //hien nhien T b , c , d ta suy ra PCM.
- 65 -
{(x = xo ) and ( y = yo ) } t := x ; x := y ; y := t {(x = yo ) and ( y = xo ) (h) // c ,g , luat tuan t V du1 : Kiem chng tnh ung cua ac ta : { (m :: k=2*m) and (y * zk = c)} k := k div 2 ; z := z * z ; { y * zk = c} Chng minh : (a) {y * (z*z)k = c} z := z * z {y*zk = c} (tien e gan) k div 2 k (b) {y * (z*z) = c} k := k div 2 {y*(z*z) = c} (tien e gan) (c) {y * (z*z)k div 2 = c} k := k div 2 ; z := z*z {y*z)k = c} (a ,b , luat tuan t) (d) (m :: k = 2*m) and ( y * zk = c ) ==> (y*z2m = c) and ( m = k div 2 ) ==> y * (z*z)k div 2 = c c ,d , luat he qua suy ra PCM. Nhan xet : Vi day tuan t cac lenh gan, viec chng minh {P} S1; ...;Sn {Q} thng c bat au t lenh cuoi cung, dung tien e gan e c k, roi c the lan ngc ve en S1. {Pn} Sn {Q} (n) tm Pn t Sn ,Q va tien e gan {Pn-1 } Sn-1 {Pn } (n-1) tm Pn-1 t Sn-1 , Pn va tien e gan {Pn-1 } Sn-1 ; Sn {Q} luat ve day lenh tuan t ... ... {P1 } S 1 ;...; S n {Q} (1) sau n-1 lan tng t nh tren. Sau o dung cac tnh chat cua d kien chng minh logic rang : P ==> P1 (0) T (1) , (0) ,da vao luat he qua ta co : {P} S1 ; ... ; Sn {Q} ( PCM ) 2) Bai toan 2 : a) Kiem chng ac ta : {P} if B then S1 else S2 {Q} Vi S1, S2 la nhom cac lenh gan , B la bieu thc boolean. Cach chng minh : + Bc 1 : Tm P1, P2 thoa : {P1} S1 {Q} (1a) {P2} S2 {Q} (1b) + Bc 2 : Chng minh ( dung cac tnh chat logic va ai so ) P and B ==> P1 (2a) P and (not B) ==> P2 (2b) + Bc 3 : Dung luat he qua suy ra : {P and B} S1 {Q} ( 3a) // 1a ,2a , va luat he qua ( 3b) // 1b ,2b , va luat he qua {P and (not B)} S2 {Q} + Bc 4 : Dung (3a) , (3b) , luat ieu kien suy ra :
- 66 -
{P} if B then S1 else S2 {Q} ( PCM ) b) Kiem chng ac ta : {P} S0 ; if B then S1 else S2 {Q} (*) vi S1, S2, S0 la day cac lenh gan V du : Kiem chng ac ta : {y > 0} x := y-1 ; if (y > 3) then x := x*x else y := y-1 {x >= y} e khang nh c (*) ta can ch ra 1 khang nh R ma : {P} S0 {R} va {R} if B then S1 else S2 {Q} roi dung luat he qua e co (*) Lam the nao e tm c R ? Do S1 va S2 la nhom lenh gan tuan t nen ta co the tm c (bang tien e gan va luat ve day lenh tuan t ) U va V e : {U} S2 {Q} va {V} S3 {Q} . D nhien ta muon U va V la cac ieu kien tong quat nhat co the ( ay la yeu nhat). R c xay dng the nao t U va V ? Kha nang tong quat nhat cho R e sau khi iem ieu kien B se co c U hoac V la : R (B ==> U) and (not B ==> V) Nh sau nay se ch ra U , V , R c xay dng nh vay la yeu nhat (weakest precondition) e at c Q tng ng vi lan lt cac lenh S1 , S2 va if B then S1 else S2 , va c ky hieu la : WP(S2,Q) ,WP(S3,Q) va WP(if B then S2 else S3, Q) tng ng. V du 1 : Kiem chng ac ta : {y>0} x := y - 1 ; if ( y > 3 ) then x := x * x else y := y - 1 ; { x >= y } Trong v du nay : P la tan t : ( y > 0 ) ; Q la tan t : ( x >= y ) B la bieu thc boolean : ( y > 3 ) S0 la lenh gan : x := y - 1 ; Do S1 va S2 la lenh gan : x := x * x ; S2 la lenh gan : y := y - 1 ; Ta co : {x2 >= y} x := x*x {x >= y} suy ra U WP( S1 , Q ) x2 >= y (a) {x >= y-1} y := y-1 {x >= y} suy ra V WP( S2 , Q ) x >= y-1 (b)
- 67 -
at R (B ==> U) and (not B ==> V) ((y > 3) ==> (x2 >= y)) and ((y <= 3) ==> (x >= y-1)) Ta chng minh c de dang. R and (y>3) ==> (x2 >= y) R and (not(y>3)) ==> (x >= y-1)
(c) (d)
nen theo luat he qua {R and y>3} S2 {x >= y} ( {R and B} S2 {Q} ) (e) {R and not(y>3)} S3 {x >= y} ( {R and (not B)} S3 {Q} ) (g) Theo luat ve lenh chon {R} if ( y>3) then x := x*x else y := y-1 {x >=y} (h) theo tien e gan. { ((y>3) ==> ((y-1) 2 >=y)) and ((y <=3) ==> ((y-1) >= (y-1))) } x := y -1 {R} (i) De kiem chng c (y>3) ==> ((y-1) 2 >= y true (j) (y<=3) ==> (y-1) >= y-1 true (k) nen (y >0) ==> ((y>3) ==>((y-1)2 >=y)) and ((y<=3) ==> ((y-1) >=(y-1))) (l) Theo luat he qua {y > 0} x := y-1; if (y>3) then x := x*x else y := y-1 { x >= y} (m) // PCM V du 2 : kiem chng acta : { true } if ( i <= j) then if (j<k ) then m := k else m := j else if( i<k) then m := k else m := i {(m >= i) and (m >= j) and (m >= k)} at Q(m) ( m >= i) and (m >= j) and (m >= k) Ta co : (a) {Q(i)} m := i {Q(m)} (tien e gan) (b) {Q(k)} m := k {Q(m)} (tien e gan) at R1 ((i < k) ==> Q(k)) and ( (i >= k) ==>Q(i)) dung luat ve lenh chon ta se chng minh c : {R1} if ( i < k) then ... {Q(m)} (c) Tng t at R2 ( j<k) ==> ( Q(k) and (j >= k)) ==> Q(j)
- 68 -
Ta co: {R2} if (j < k ) then ... {Q(m)} (d) Dung bien oi ai so va logic e chng minh ( true and ( i <= j)) ==> R2 (e) ( true and ( i > j )) ==> R1 (g) T c , d, e ,g , theo luat ve lenh chon ta co PCM. Nhan xet : e chng minh ac ta {P} S {Q} vi S la to hp lenh gom ch cac lenh gan va ieu kien ung ay u ,ta thc hien cong viec xay dng ieu kien au yeu nhat P1 cua S ng vi Q , sau o bc kiem chng cuoi cung ch n gian la chng minh : P ==> P1. Cong viec tren c trnh bay di dang mot ham e quy nh sau : function DKDYN (S : nhom_lenh ; Q : tan_t ) : tan_t ; var t : cau lenh ; begin if (S <> rong ) then begin t := lenh_cuoi(S); S := S t ; if ( t = lenh_gan(x:=bt)) then DKDYN := DKDYN(S,Q( x=bt) ) else (* t la lenh if *) DKDYN := (ieu_kien(t)==>DKDYN(phan_ung(t),Q)) and not (ieu_kien(t)==>DKDYN(phan_khong ung(t),Q)) end else DKDYN := Q end ;
- 69 -
kicked, jumped, walked ... bang hoc luat khong oi (them s, them ed), kem theo vi viec hoc thuoc mot so trng hp ngoai le. Hay tng tng viec hoc se kho nh the nao neu khong co cac luat khong oi (bat bien ) nay. Viec nhan thc c cac bat bien thng dan ti nhng li giai n gian cho cac bai toan kho. au oc con ngi dng nh co mot kha nang ac biet e nhan thc cac bat bien hay cac "khuon mau". Hay quan sat 2 day cac hnh sau :
(a)
(b)
Hnh ke tiep trong moi day hnh tren la g ? Tnh chat bat bien cua moi day la g ? (a) Lap lai bo 3 hnh vuong, tron, tam giac. (b) Ve dang th la s lap lai cua cap 2 hnh vuong ln va nho. Ve mau th la s lap lai cua mot mau trang va 2 mau sam. Trong lnh vc chng trnh cho may tnh, ta cung can nhan thc cac s viec bang cach phat hien cac bat bien. oi vi mot chng trnh, ta co nhieu lan may tnh thi hanh no, moi lan thi hanh c goi la mot qua trnh (process) va tac ong tren cac d kien khac nhau. Tnh bat bien cua cac qua trnh nay chnh la ac ta cua chng trnh. Ben trong mot chng trnh co the co cac vong lap. Viec thc hien vong lap lam bien thien nhieu lan trang thai cac bien chng trnh (cac oi tng d lieu ) , ma so lan bien thien thng khong biet trc c. Lam the nao e hieu c tac ong cua vong lap va i en chng minh vong lap thc hien mot tnh chat (gi mot bat bien) nao o the hien bi ac ta cua no. Mo hnh bien oi trang thai chng trnh cua vong lap while B do S
{P} {Q}
{ P1 }
{ P2 }. . .
. . . { Pn }
{ P } la trang thai trc vong lap . { Pi } la trang thai sau lan lap th i .
- 70 -
{ Q } la trang thai sau vong lap . Viec nhan thc (tm ra ) cac tnh chat bat bien cua trang thai chng trnh trc va sau moi lan lap co vai tro quyet nh ay. V du : vi vong lap : tg := 0 ; i := 0 ; while ( i <= n ) do begin i := i + 1 ; tg := tg + a[i] ; end ; Tnh chat bat bien ay la : bat chap i, sau lan lap th i, tg se cha tong i phan t au tien cua array a(a[1], a[2], ..., a[i]). Tc la : tg = S(j: 1 <= j <=i : a[j]) =
a[ j ]
1
- 71 -
+ e chng minh P(n) ung vi moi so t nhien n >= m th c s cua chng minh quy nap la P(m) ch khong phai P(0). + e chng minh P(n) ung vi moi so t nhien n thoa m <= n <= p ta chng minh : (i) P(m) ung (ii) Neu m <= n < p va P(n) ung th P(n+1) ung. V du : (i) C s : P(1) chnh la 1 = 12 ung (ii) Gia s P(n) ung, tc la 1 + 3 + ... (2*m - 1) = n2 th ta se co : 1 + 3 + .... + ( 2*(n+1)-1 ) = (1+3+....+(2*n -1)) + (2*(n+1)-1) = n2 + 2*(n+1) - 1 = (n+1)2 Vay P(n+1) ung .Da vao (i) va (ii), ta ket luan P(n) ung vi moi so t nhien n >= 1 theo nguyen ly quy nap toan hoc. b) Nguyen ly quy nap manh (Strong induction principle) e chng minh P(n) ung vi moi so t nhien n ta can chng minh hai ieu sau : (i) P(0) ung (ii) Neu gia nh la P(0), P(1), .... P(n) eu ung th P(n+1) cung ung Cung nh nguyen ly quy nap n gian, ngi ta co the dung cac bien dang cua nguyen ly quy nap manh e chng minh P(n) ung vi moi so t nhien n >= m cho trc hay vi moi so t nhien n ma m < n <= p vi m,p cho trc.
- 72 -
Neu () va () thoa th S khong the lap vo tan c (v sau hu han lan th B se nhan ga tr false ). V du : Ch ra cac vong lap sau ay dng : {n >= 0} k := n ; while (k <>0 ) do begin {k > 0} k := k-1 ; r := 2*r + p[k]; if (r >= q) then r := r - q end ; v bat bien {k > 0} luon c gi ung au vong lap. ay ham f chnh la bang k. f giam sau moi lan lap ( v k := k - 1 ). Vay vong lap dng . {x >= 0 ; y >= 0} a := x ; b := y ; while (a <>b) do {max(a,b) > 0} if (a>b ) then a := a - b else b := b - a ay ham f = max(a,b). Ta luon co bat bien max(a,b) > 0 au vong lap, f giam sau moi lan lap. b) Cac v du ve chng minh chng trnh co vong lap . V du 1 : Xet ac ta oan chng trnh tnh tch 2 so nguyen A va B vi B >= 0 bang phep cong : { B >= 0 } R := 0 ; X := B ; while (X <>0 ) do begin R := R + A ; X := X - 1 ; end ; { R = A*B } k P B >= 0 kc Q R=A*B Bc 1: Kiem chng tnh ung co ieu kien cua ac ta {P} S {Q} + Kiem chng oan lenh trc vong lap : Chng minh ac ta sau ung . { B >= 0 } R := 0 ; (*) X := B ; {X = B , R = 0, B >= 0 }
- 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 -
{I} while ... {I and not C} (X=B) and (R=0) and (B>=0) ==> (R=A*(B-X)) and (X>=0) (16) Ket hp 15,16 va 5 dung luat he qua roi luat tuan t, ta co : {X=B and R=0 and B>=0} while ... {I and notC} (17) {B>=0} R:=0 ; X:=B ; while ... {I and notC} (18) ay I and not C ( R = A*(B-X)) and (X >= 0 ) and (X = 0) ma ( R = A*(B-X)) and ( X >= 0) and (X=0) ==> R=A*B Dung luat he qua ta co pcm Bc 2 : Chng minh tnh dng : at f = X, ta co : (i) I and C ( R = A*(B-X) ) and ( X >= 0) and (X<>0 ) => X > 0 => f > 0 (ii) Moi lan lap, f b giam mot n v. Vay vong lap phai dng. T (i) va (ii) ta ket luan c tnh dng t bc 1 va bc 2 suy ra tnh ung ay u cua oan chng trnh oi vi P,Q. Nhan xet t chng minh tren : + oi vi day cac lenh gan, nen phat xuat qua trnh suy dien t ieu kien cuoi. + oi vi vong lap can xac nh ung bat bien cua no. Chu y : Ta co the kiem chng tck cua oan chng trnh tren bang cach: - Xay dng mot lc o chng minh hp ly bang cach da vao cac tien e va cac khang nh a co trc o chen bo sung cac khang nh trung gian nhng iem khac nhau trong oan chng trnh . {P } { B >= 0 } (0) {(0 = A*(B B )) and (B >= 0 )} (3) R := 0 ; {(R = A*(B B )) and (B >= 0)} (2) X := B ; {I } {( R = A*(B B )) and ( X >= 0 )} (1a) while (X <>0 ) do begin {I and C } {( R = A*(B X )) and (X >= 0) and (X<>0)} (1b) {(R + A = A*(B -(X 1 )) and ( (X 1 ) >= 0)} (5) R := R+A ; {( R = A*(B -(X 1 )) and ( (X - 1 ) >= 0)} (4) X := X - 1 ; {I } {(R = A*(B - X)) and ( X >= 0 )} (1d) end {I and notC } {( R = A*(B - X ) ) and (X >= 0) and not(X <> 0)} (1c) {Q } { R = A*B} (6) Ly le e bo sung la : (1a) do phat hien c bat bien I (1b),(1c),(1d) da vao tien e ve lenh lap xuat phat t I 2, 3 da vao tien e gan xuat phat t (1a)
- 75 -
4, 5 da vao tien e gan xuat phat t (1d) Cac cap khang nh i lien nhau la cac ieu kien can kiem chng : (0) ==> (3) : ( B >= 0 ) ==>( (0 = A * (B-B)) and (B >= 0 ) ) (1b) ==> (5) : (( R = A*(B X )) and (X >= 0) and (X<>0)) ==> ((R + A = A*(B -(X 1 )) and ( (X 1 ) >= 0)) (1c) ==> (6) : ( (R = A*(B-X)) and (X >= 0) and (X = 0)) ==> ( R=A*B ) De dang chng minh cac ieu tren.
- 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 -
+ WP(S ,Q ) la tan t yeu nhat thoa ay u ac ta {P} S {Q} . Tc la neu co tan t P* bao am S dng va ac ta {P*} S {Q} ung co ieu kien th P* ==> WP(S,Q) hay { P *} { WP(S,Q) } ( {WP(S,Q) } la tap ieu kien au ln nhat ma xuat phat t o thi hanh S th se dng tai trang thai thoa Q ) . ay la cac dau hieu ac trng e nhan ra WP(S,Q)
4. Cac v du.
V du 1 : Tnh WP(while n<>0 do n := n 1, n = 0 ) va so sanh vi tan t yeu nhat thoa co ieu kien lenh lap while n<>0 do n := n 1 vi ieu kien cuoi n = 0 + Da vao quy luat cua Hoare th ta co : {true} while n<>0 do n := n -1 { n = 0} Thc vay : T : {true and ( n<>0) } n := n-1 {true} ( xem bat bien vong lap la : I true ) ta suy ra : {true} while (n<>0) do n := n -1 {true and n = 0} + T inh ngha WP ta suy ra : wp (while (n<>0) do n := n -1 , n = 0 ) ( n >= 0 ) Ta co : wp (while (n<>0) do n := n -1 , n = 0) ===> true Tc la : tan t yeu nhat thoa ay u ac ta {P} S {Q} manh hn tan t yeu nhat thoa co ieu kien ac ta ( tc la tap ieu kien au ln nhat thoa ay u la tap con cua tap ieu kien au thoa co ieu kien ) V du 2 : S i := 0 ; Q ( i = 0 ) ; Tm wp (S,Q) . V : + P ==> true vi moi P nen ta cung co wp(S,Q) ==>true (a) + true bao am S dng va moi trang thai au eu dan en Q nen true ==> wp(S,Q) (b) T (a),(b) ta suy ra : wp(i:=0, i = 0) true V du 3 : S i := 0 ; Q ( i = 1 ) ; Tnh wp (S,Q) . ay la trng hp ngc vi v du 2. Bat chap trang thai trc lenh gan la g, lenh gan i := 0 khong the nao bao am i=1. V vay : wp(i:= 0 , i=1) false false mo ta tap hp trang thai rong. Tc la tap ieu kien au thoa S,Q la tap rong .
- 78 -
1. Cac quy c : a) Luat loai tr trng hp ky d (The law of the excluded miracle ). WP(S,false) false
b) WP(S,true) la tan t xac nh tap cac trang thai bao am tnh dng cua S V du : WP(while (n<>0 ) do n := n -1, true) ( n >= 0 ) 2. Tnh phan phoi cua and : wp(S,Q) and wp(S,R) wp(S,Q and R) 3. Tnh phan phoi cua or : 4. wp(S,Q or R)
WP(i := i -1, i = 0) ( i-1 = 0 ) ( i = 1 ) . WP(i := (l+u) div 2, l <= i <= u) l <= ((l+u) div 2) <= u WP(i := 1, i =1 ) 1 = 1 true
2. Toan t tuan t.
WP( S1 ; S2 , Q) V du :
WP(S1 , WP(S2,Q))
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)
- 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 :
WP(while B do S , Q) (k : k >= 0 : Pk )
not B and Q vi k = 0 WP(S,Pk-1 ) vi k > 0
Vi
Pk =
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 :
V du :
- 82 -
P2 ( n = m -2) and (k = (im-1 - 1)/(i-1)) and (j = im-2 ) Ta co the chng minh bang quy nap gia thuyet sau (vi moi so t nhien r) Pr ( n = m -r) and (k = (im-r+1 - 1)/(i-1)) and (j = im-r ) Pn ( n = m -n) and (k = (in+1 - 1)/(i-1)) and (j = in ) Vay : WP(W,Q) (r : r >= 0 : (n = m - r) and (k = (in+1 - 1)/(i-1)) and (j = in ) ( n <= m) and (k = (in+1 - 1)/(i-1)) and (j = in ) b) Moi lien he gia toan t lap va tien e lenh lap cua he luat Hoare . Ta tach viec khao sat tnh ung mot vong lap thanh hai phan : + Phan quan sat s bien oi cua vong lap e dan ti khang nh no dng (tnh dng ). + Phan quan sat s bat bien cua vong lap e chng minh ket qua cuoi cung cua no (ck) Vi y tng o ta tach WP(W,Q) ( vi W la while do S) thanh cac thanh phan tng ng va khao sat moi quan he gia WP(W,Q) va cac khang nh cua he luat Hoare. ) Vi lenh bat ky S, ieu kien yeu nhat e am bao S dng la khong rang buoc g sau khi dng. Tc la WP(S,true) la tan t mo ta tap hp tat ca cac trang thai ma xuat phat t o th bao am S dng. Ta co : WP(W,true) (k : k >= 0 :P k ) Vi Po (not B) and true (not B) Pk B and WP(S,Pk-1 ) vi k > 0 ( Po la ieu kien e khong thc hien S lan nao, P1 la ieu kien e thc hien S ung mot lan , Pk la ieu kien e thc hien S ung k lan. V du : W while ( n <> m) do begin j := j* i ; k := k+j ; n := n+1 ; end ; Ta tnh ieu kien au e W dng nh sau : Po not (n <> m) ( n = m ) P1 B and WP(S,Po) ( n <> m) and ( n+1 = m ) ( n+1 = m ) Gia thiet quy nap rang Pk (n+k = m) . Ta co : Ga thiet ung vi k = 0 v Po (n = m) ( n + 0 = m ) Ga s ga thiet a ung vi k . Tc la : Pk ( ( n+k ) = m ) Chng minh ga thiet ung vi k+1. Thc vay: Pk+1 B and WP(S,Pk ) ( n <> m) and ((n+1)+k = m) ( n+(k+1) = m) ( WP(S,Pk ) WP (j := j* i ; k := k+j ; n := n+1 ,( (n + k ) = m ) ) = (n + ( k +1)) =m) Vay : Pi ( n+i = m ) Tc la : WP(W,true) (i: i>=0; n+i =m) ( n >= m ) ) Quan he gia { P } S { Q } va WP(S,Q)
- 83 -
Theo nh ngha ve tnh ung va WP (S , Q ) ta co : S ung co ieu kien da tren ieu kien au P va ieu kien cuoi Q ( ac ta {P} S {Q} ck) neu va ch neu hoi (and ) cua P va ieu kien yeu nhat bao am s dng cua S manh hn ieu kien yeu nhat bao am S dng trong mot trang thai thoa tan t Q. Tc la : {P} S {Q} thoa ck khi va ch khi P and WP(S,true) ==> WP(S,Q) Nh vay : { I and B } S { I } thoa co k khi va ch khi I and B and WP(S,true) ==> WP(S,I) {I} while B do S {I and not B} thoa co k khi va ch khi {I} and WP(while B do S , true) ==> WP(W, I and not B) Nh vay chng minh S gi bat bien I chnh la chng minh I and B and wp(W,true) ==> wp(S, I) Chng minh W dng ng vi k P chnh la chng minh : P ==> WP(W,true) ) nh ly bat bien c s (Fundamental invariance theorem) cua Dijkstra phat bieu mot dang khac cua luat ve vong lap cua Hoare . nh ly: Gia s I and B and WP(S,true) ==> WP(S,I) ( I la bat bat bien cua vong lap ) th : I and WP(W,true) ==> WP(while B do S , I and notB ) ({I} while B do S {I and not B} ) Chng minh : Ta se chng minh bang quy nap tren k rang I and Pk (true) ==> Pk(I and not B ) (a) vi : Po(Q) not B and Q Pk(Q) B and wp(S, Pk-1(Q)) Chu y la Pk(Q) la k yeu nhat bao am vong lap while B do S dng sau ung k lan lap trong mot trang thai thoa man Q. (i) C s I and Po(true) I and (not B and true ) (nh ngha) not B and ( I and not B) Po(I and not B) (ii) Bc quy nap : Gia s (a) a ung vi k . Tc la : I and Pk(true) ==> Pk(I and not B) Ta chng minh (a) ung vi k+1 . Thc vay : I and Pk+1(true) I and B and WP(S,Pk(true)) (nh ngha) B and I and B and WP(S,Pk(true)) B and I and B and WP(S,true) and WP(S,Pk(true)) ( v WP(S,Pk(true)) WP(S,true) and WP(S,Pk(true)) ) B and ( I and B and WP(S,true) ) and WP(S,Pk(true)) ==> B and WP(S,I) and WP(S,Pk(true))
- 84 -
( I and B and WP(S,true) ==> WP(S , I ) ga thiet I la bat bien ) B and WP(S,I and Pk(true)) (phep phan phoi _and) ==> B and WP(S,Pk(I and not B)) ( v : I and Pk(true) ==> Pk(I and not B gia thiet quy nap va tnh chat phep phan phoi ==>) Pk+1(I and not B) Tc la: I and Pk(true) ==> Pk+1(I and not B) Theo nguyen ly quy nap ta suy ra : I and Pk(true) ==> Pk(I and not B) vi moi k >= 0 T ieu nay ta co : I and WP(W, true) I and (k : k >= 0 : Pk(true)) (k : k >= 0 : I and Pk(true)) ==> (k : k >= 0 : Pk(I and not B)) WP(W,I and not B) Ta co pcm.
- 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)
- 87 -
(2b)
Dien giai : T (2b),(2c),(2d) va 2 lenh gan tuan t z := z*z ; k := k div 2 dung tien e tuan t ta bo i (2c) . - Bc 2 : chng minh lkc hp ly (3) ung : {(0 <= k div 2 ) and (y * (z*z)k div 2 = xn ) } (2d) k := k div 2 ; (3a) z := z*z ; {(0 <= k ) and (y * zk = xn ) } (2b) Ta co : Tnh ung cua (3a) c khang nh da vao cach xay dng . Kiem chng hai khang nh i lien nhau : { even(k) and ( 0 < k ) and (y * zk ) = xn ) } {( 0 <= k div 2 ) and (y*(z*z)k div 2 = xn ) } co quan he ham y (==>) (hien nhien) (3b). T (3a),(3b) ap dung luat he qua ta suy ra (3) ung . Nhan xet : Ta co the hnh thc hoa qua trnh chng minh bang cach a vao ky hieu : I(z,k) ( 0 <= k ) and (y*zk = xn ) Khi o (2) co the viet thanh : {even(k) and (0<k) and I(z,k)} {I(z*z,k div 2 )} k := k div 2 ; {I(z*z,k )} z := z*z ; {I(z,k)} (3) co the viet thanh : {even(k) and (0<k) and I(z,k)} {I(z*z,k div 2 )} k := k div 2 ; z := z*z ; {I(z,k)} ieu kien can kiem chng la : even(k) and (0<k) and I(z,k) I(z*z,k div 2 ) Chu y : Khi co mot cap {P} {Q} xuat hien trong lc o th khang nh ham y (===> ) tng ng la mot ieu kien can kiem chng (kckc - verification condition). Cac ieu kien nay la cot loi cua chng minh ve tck, phan con lai cua chng minh ch la viec ap dung may moc cac quy luat.
- 88 -
Trong v du tren, kckc la : even(k) and (0 < k ) and I(z,k)} ==> I(z*z , k div 2) ay ch la cach noi hnh thc cua s kien la (z*z)k div 2 = zk khi k la so nguyen chan. Cach 2 : Xay dng lkc hp ly da vao he Dijkstra. Bc 1 : Xay dng lkc hp ly. - Tnh WP( k := k div 2 ; z := z*z , I(z,k)) Ta co : WP( k := k div 2 ; z := z*z , I(z,k)) WP( k := k div 2 ,WP( z := z*z , I(z,k)) WP( k := k div 2 , I(z*z,k)) I(z * z , k div 2)) + Chen WP( k := k div 2 ; z := z*z , I(z,k)) vao (1) ta c lcm hp ly : {even(k) and (0<k) and I(z,k)} {I(z*z,k div 2 )} k := k div 2 ; z := z*z ; {I(z,k)} Bc 2 : Kiem chng tnh ung cua lkc hp ly . Ta co : {I(z*z,k div 2 )} k := k div 2 ; z := z*z ; {I(z,k)} (a) ung even(k) and (0<k) and I(z,k) I(z*z,k div 2 ) (b) ung. T (a) , (b) ta suy ra ac ta ung c) Kiem chng khi oan chng trnh co cha cau lenh ieu kien {P} if B then S1 else S2 {Q} Khi o ta them cac khang nh trung gian dang: {P} if B then {P and B} S1 {Q} else {P and not B} S2 {Q} ( hoac : {P} if B then {P and B} S {Q} else {P and not B} {Q} khi khong co phan else ) vao ni co lenh ieu kien tng ng ta co lkc trung gian thch hp . V du : Kiem chng oan chng trnh : {(0 < k ) and ( y * zk = xn} if even(k) then begin k := k div 2 ; z := z*z ;
- 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 -
Cap khang nh ng lien nhau trong lkc la : {(0 < k ) and I(y,z,k)} { WP(if B then S1 else S2 , I(y,z,k) ) } Ta can chng minh tnh ung cua ham y tng ng : {(0 < k ) and I(y,z,k)} ==> { WP(if B then S1 else S2 , I(y,z,k) ) } (*) ( CM * danh cho ngi oc ) T (*) suy ra ieu phai kiem chng. d) Kiem chng khi oan chng trnh co cha lenh lap while B do S. Cach th 1: S dung he tien e Dijkstra. - Bc 1 : Xay dng WP(While B do S ) va chen vao trc lenh lap . . . . . . . { WP(while B do S } while B do S . . . . . . - Bc 2: Xay dng lkc hp ly t lkc tren. - Bc 3 : Chng minh tnh ung cua cac ieu kien can kiem chng. Cach th 2 : S dung he tien e Hoare. - Bc 1 : Phat hien bat bien I cua vong lap va chen cac khang nh trung gian tng ng vao trc gia va sau lenh lap ( tien e Haore) . {(Invariant) I} while B do {I and B} S {I} {I and not B } - Bc 2. Xay dng lkc hp ly t lkc tren. - Bc 3 : Chng minh tnh ung cua cac ieu kien can kiem chng . Bc 4 : Chng minh lenh lap dng . V du : Kiem chng ac ta : { 0 <= n } y := 1 ; z := x ; k := n ; while (0 <> k ) do begin k := k -1 ; y := y*z end n {y = x } Biet bat bien cua vong lap : I(y,z,k) ( k >= 0 ) and ( y*z = xn ) Bai giai theo cach 1: Da vao he Hoare ta xay dng lkc chi tiet xuat phat t ieu kien au , ieu kien cuoi va bat bien . {0 <= n} {I(1,x,n)} y := 1 ; {I(y,x,n)} z := x ; {I(y,z,n)}
- 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 -
(P2) Neu moi kckc trong tap hp V(P,S,Q) eu ung th S la ck da tren k P va kc Q. Tc la : { P } S {Q } ung co ieu kien. Tnh chat (P1) co the c chng minh bang quy nap tren kch thc cua S, ay kch thc cua S co c bang cach em la 1 cho moi lan xuat hien cac ky hieu ':=', ';', 'if', 'while' trong S. Tnh chat (P2) la mot he qua trc tiep cua (P1). Chu y rang pre(S,Q) khac vi wp(S,Q) ch khi co lenh while. ieu nay xac nhan la trong trng hp tong quat, khong co kha nang tao lap mot cong thc ong cho k yeu nhat cua lenh while va nhan manh tam quan trong cua viec ghi nhan nhng tnh chat bat bien trong cac su lieu chng trnh. V du 1 : Vi ac ta gom : Day lenh tuan t S : S tg := tg + a[k] ; k := k+1 ; kc Q I(k, tg) (tg = S(i : 0 <= i < k : a[i])) k P I(k,s) and (k <> n ) Ta ap dung cac bc 1 va 2 c : V'(S, I(k, tg)) la rong . pre(S, I(k, g)) la I(k+1, tg+a[k]) tap cac kckc V(P,S,Q) V(I(k,tg) and k <> n, S, I(k, tg)) cha mot ieu kien la I(k,tg) and k <> n ==> I(k+1, tg+a[k]) Tc la : ( tg = S(i : 0<= i< k : a[i])) and (k <> n ) ==> tg + a[k] = S( i: 0 <= i <= k+1 : a[i]) (1) Vidu 2 : Xet ac ta oan chng trnh tnh tong cac phan t cua mot array {0 <= n} k := 0 ; tg := 0 ; {(Invariant ) I(k,tg) } { tg = S(i: 0<= i <k : a[i])} while (k <> n ) do begin tg := tg + a[k] ; k := k+1 ; end {tg = S(i: 0 <= i < n : a[i])} Tach oan chng trnh thanh 2 nhom : + Nhom lenh tuan t : So k := 0 ; tg := 0 ; + Lenh while : W while k <> n do begin tg := tg + a[k] ; k := k+ 1 end Theo quy tac 2, ta can tnh pre(W,Q) va V'(W,Q) vi Q tg = S(i: 0 <= i < n : a[i]) Bay gi, dung quy tac 4, pre(W,Q) I(k,tg) tg = S(i : 0 <= i < k : a[i]) Cung vay V'(W,Q) bao gom V(I(k,tg) and k <> n, S1, I(k,tg)) vi S1 la nhom lenh trong vong lap, va ieu kien
- 95 -
I(k,tg) and (k = n )==> tg = S(i : 0<= i <n : a[i]) (2) Cuoi cung, ta co the tm c pre(So, I(k,tg)) 0 = S(i: 0 <= i <0 : a[i]) va tap hp cac kckc cho So bao gom ch mot ieu kien ( 0 <= n) ==> pre(So, I(k,tg)) (3) Nh vay, co 3 kckc cho CT, o la cac ieu kien (1), (2), (3). -----------------------------------------
- 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.
Vi cac ky hieu nay, (4) co the c viet nh sau: [ ( A ==> B ) and ( B ==> C ) and A ] ====> C Neu A th B va neu B th C va A Th suy ra C Tc la menh e phc hp [(A ==> B) and (B ==> C) and A] ==> C . Noi chung mot ly luan se c chuyen thanh mot menh e phc vi dang : [ (tien e 1) and (tien e 2 ) and ... ] ====> ket luan .
- 98 -
p F F T T
q F T F T
p and q F F F T
p or q F T T T
p ==> q T T F T
p <==> q 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:
A F F F F T T T T
B F F T T F F T T F T F T F T F T
C [ [ [ [ [ [ [ [
[ (A ==> B) and (B ==> C) and A ] ==> C T T T T F F T T and and and and and and and and T and T and F and T and T and T and F and T and F ] ==> F F ] ==> T F ] ==> F F ] ==> T T ] ==> F T ] ==> T T ] ==> F T ] ==> T (T) (T) (T) (T) (T) (T) (T) (T)
V du 2: Ly luan (3) la sai . at : A : hom nay tri ep B : Toi i chi C : Toi ve tre Dang ly luan (3) la : [(A ==> B) and (B ==> C) and C ] ==> A la sai v vi A, B False , C true th menh e : [(A ==> B) and (B ==> C) and C ] ==> A nhan ga tr False
- 99 -
A F
B F
C T
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 and q not ( not p F not ( T F not ( T F not ( F T not ( F
p F F T T
q F T F T
or not q ) or T ) or F ) or T ) or F )
b) Mot so tng ng hu ch. ( hay chng minh chung bang cach lap bang chan tr) Cac hang : P or true true P or false p p and true p p and false false true ==> p p false ==> p true p ==> true true p ==> false not p Luat loai tr trung gian : p or not p true Luat ve mau thuan : p and not p false Luat phu nh : not not p p Luat Ket hp : p or (q or r) (p or q) or r p and (q and r) (p and q) and r p <==> (q <==> r) (p <==> q) <==> r q and p Luat giao hoan : p and q p or q q or p
- 100 -
luat phan phoi Luat ong nhat Luat De Morgan Luat ham y
: : : :
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) not P and ( P and not Q) (not P and P) and not Q false and not Q false va P and (not P or Q) (P and not P) or (P and Q) false or (p and Q) P and Q Nh vay P <==> (P ==> Q) P and Q T o [P<==>(P ==>Q)] ==> Q (P and Q) ==> Q
- 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.
p and q _______ p
p and q _______ q
or_I
or_E
==>_I
==>_E
not_I
not_E
- 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)
d) Cac bien t do va b buoc (free and band variables), phep the(substitution) Trong bieu thc Q(i: r(i) : p(i)) ( ay ta xet Q la hay ) bien i c goi la b buoc (band) vao lng t Q . Nhng xuat hien cua mot bien i khong b buoc vao mot lng t nao o trong bieu thc R,c goi la t do (free) trong R. V du trong bieu thc : (d : p = q*d) cac bien p va q la t do , con bien d la b buoc . Cac bien b buoc ch ong vai tro "gi cho" va co the c oi ten , neu ten nay khong trung vi mot bien t do a co. V vay , bieu thc tren tng ng vi : (m :: p = q*m) nhng hoan toan khac vi : (p :: p = q*p) Ve nguyen tac , mot ten bien co the va t do va b buoc trong cung mot bieu thc . V du : Trong bieu thc ( 0<i ) and ( i : 0 <= i < n : a [i] = 0 ) xuat hien th nhat cua i la t do , con xuat hien con lai la b buoc. Mac du y ngha cua bieu thc la ro rang nhng nen tranh v de gay nen lam lan . Xet mot tan t cha bien t do . (d :: p = q*d) V du : is-divisor(q) Ta co the thay cac xuat hien t do cua mot bien bang mot bieu thc e c mot tan t mi. V du: the 2*q cho q ta se c tan t is-divisor(2*q) ma dang bieu thc cua no (d :: p = (2*q)*d) la : is-divisor(2*q) Chu y rang trong (d :: p = q*d) bien p cung t do , nhng v ta khong quan tam en phep the cho p nen trong tan t is-divisor(q) ta ch neu q e giam bt i cac chi tiet khong can thiet trong dien giai.
- 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 }
i i
f (i )
Qui c : S( i: false: f(i) ) = 0 P( i: false: f(i) ) = 1 - Lng t MAX va MIN MAX ( I: r(i): f(i)) la gia tr ln nhat cua f(i) trong cac i thoa r(i). MIN ( I: r(i):f(i) ) la gia tr nho nhat cua f(i) trong cac i thoa r(i). Qui c : MAX ( i: false: f(i) ) = - MIN ( i: false: f(i) ) = - Lng t N 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 ( * ).