Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

Embed Size (px)

Citation preview

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    1/108

    TRNG AI HOC A LAT

    GIAO TRNH

    KY THUAT LAP TRNH

    NANG CAO

    TRAN HOANG THO

    2002

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    2/108

    Ky thuat lap trnh nang cao - 2 -

    MUC LUC

    LI NOI AU ........................................................................................................................4PHAN I....................................................................................................................................5

    CHNG I .............................................................................................................................5I. M AU ...........................................................................................................................51. Mo ta e quy................................................................................................................52. Cac loai e quy ............................................................................................................6

    II. MO TA E QUY CAC CAU TRUC D LIEU...................................................................7III. MO TA E QUY GIAI THUAT ........................................................................................7

    1. Giai thuat e quy..........................................................................................................72. Chng trnh con e quy. .............................................................................................83. Ma hoa giai thuat e qui trong cac ngon ng lap trnh. .............................................114. Mot so dang giai thuat e quy n gian thng gap . ..............................................13

    CHNG II ...........................................................................................................................16I. CAC NOI DUNG CAN LAM E TM GIAI THUAT E QUY CHO MOT BAI TOAN. .....16

    1. Thong so hoa bai toan. ..............................................................................................162. Phat hien cac trng hp suy bien (neo) va tm giai thuat cho cac trng hp nay.163. 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...........................171. Bai toan thap Ha Noi . ...............................................................................................172. Bai toan chia thng. .................................................................................................193. Bai toan tm tat ca cac hoan v cua mot day phan t.................................................214. Bai toan sap xep mang bang phng phap tron (Sort-Merge)..................................245. Bai toan tm nghiem xap x cua phng trnh f(x)=0 . ...............................................25

    CHNG III ..........................................................................................................................28I. C CHE THC HIEN GIAI THUAT E QUY................................................................28

    II. TONG QUAN VE VAN E KH E QUY.....................................................................32III. CAC TRNG HP KH E QUY N GIAN. .........................................................331. Cac trng hp kh e quy bang vong lap . ............................................................332. Kh e quy ham e quy arsac..................................................................................413. Kh e quy mot so dang thu tuc e quy thng gap. ...............................................45

    Phan II ..................................................................................................................................52CHNG IV..........................................................................................................................52

    I. CAC GIAI OAN TRONG CUOC SONG CUA MOT PHAN MEM.................................521) ac ta bai toan ..........................................................................................................522) Xay dng he thong ....................................................................................................523) S dung va bao tr he thong......................................................................................53

    II. AC TA .........................................................................................................................531. ac ta bai toan...........................................................................................................532. ac ta chng trnh (TCT).......................................................................................543. ac ta oan chng trnh . .........................................................................................55

    III. NGON NG LAP TRNH..............................................................................................57CHNG V..........................................................................................................................59

    I. CAC KHAI NIEM VE TNH UNG.................................................................................59II. HE LUAT HOARE (HOARES INFERENCE RULES). ...................................................59

    1. Cac luat he qua (Consequence rules) .......................................................................60

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    3/108

    Ky thuat lap trnh nang cao - 3 -

    2. Tien e gan (The Assignement Axiom) .....................................................................613. Cac luat ve cac cau truc ieu khien . ........................................................................61

    III. KIEM CHNG OAN CHNG TRNH KHONG CO VONG LAP. .............................64IV. KIEM CHNG OAN CHNG TRNH CO VONG LAP. ...........................................68

    1. Bat bien......................................................................................................................682. Ly luan quy nap va chng minh bang quy nap..........................................................70

    3. Kiem chng chng trnh co vong lap while. .............................................................71CHNG VI.........................................................................................................................76

    I. CAC KHAI NIEM...........................................................................................................761. at van e. ................................................................................................................762. nh ngha WP(S,Q)...................................................................................................763. He qua cua nh ngha...............................................................................................764. Cac v du....................................................................................................................77

    II. TNH CHAT CUA WP....................................................................................................77III. CAC PHEP BIEN OI TAN T....................................................................................78

    1. Toan t gan (tien e gan). .........................................................................................782. Toan t tuan t...........................................................................................................78

    3. Toan t ieu kien. ......................................................................................................794. Toan t lap.................................................................................................................80

    IV. LC O KIEM CHNG HP LY VA CAC IEU KIEN CAN KIEM CHNG............841. Lc o kiem chng. .................................................................................................842. Kiem chng tnh ung. ...............................................................................................853. Tap toi tieu cac ieu kien can kiem chng. ...............................................................93

    PHU LUC ..............................................................................................................................96I. LOGIC TOAN..................................................................................................................96II. LOGIC MENH E..........................................................................................................96

    1. Phan tch ....................................................................................................................962. Cac lien t logic. ........................................................................................................97

    3. Yngha cua cac lien t Logic. Bang chan tr. .............................................................974. Ly luan ung. .............................................................................................................985. Tng ng (Equivalence)......................................................................................996. Tnh thay the, tnh truyen va tnh oi xng...............................................................1007. Bai toan suy dien logic.........................................................................................1008. Cac luat suy dien (rules of inference). .....................................................................102

    III. LOGIC TAN T. .........................................................................................................1031. Khai niem.................................................................................................................1032. Cac lng t logic ....................................................................................................1053. Tap hp va tan t.....................................................................................................1074. Cac lng t so hoc. ................................................................................................107

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    4/108

    Ky thuat lap trnh nang cao - 4 -

    LI NOI AU

    Giao trnh c viet theo noi dung mon hoc Ky thuat lap trnh nang cao vi mucch 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 capmot mot tai lieu co ong ve cac kien thc logic ap dung trc tiep trong phan I va phanII ( 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 cacv du chon loc nham giup ngi hoc nam bat c ban chat cua cac khai niem, cacphng phap mi va lam quen vi cach s dung cac ket qua mi. Khi hoc trc khi tmcach giai cac bai tap cua thay gao cung cap cac ban co gang oc va hieu het cac v duminh hoa.

    V nhieu le chac chan giao trnh con nhieu khiem khuyet. Rat mong tat ca moingi s dung chan thanh gop y.

    Tac gia chan thanh cam n cac ong nghiep trong khoa Toan_Tin a ong gopnhieu 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 trucgiao trnh, giup chnh ly nhieu khiem khuyet trong ban thao.

    aLat ngay 01 thang 12 nam 2002

    TRAN HOANG THO

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    5/108

    Ky thuat lap trnh nang cao - 5 -

    PHAN I

    E QUY

    CHNG IKHAI NIEM E QUY

    I. M AU

    1. Mo ta e quyTrong 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 tngthanh nhieu thanh phan ma trong so cac thanh phan co thanh phan mang tnh chat cuachnh 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 motxau kieu T.

    - Mo ta e quy cay gia pha : Gia pha cua mot ngi bao gom mgi o va gia phacua 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] ) bangphng 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 ! = 1n ! = n * ( n - 1 ) !

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    6/108

    Ky thuat lap trnh nang cao - 6 -

    Phng phap e quy manh cho no cho phep mo ta mot tap ln cac oi tng ch bimot 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 motcau 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 quachnh 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, giaithuat mo ta tr thanh cau truc lap vo tan.

    2. Cac loai e quyNgi ta phan e quy thanh 2 loai : e quy trc tiep, e quy gian tiep.- e quy trc tiep la loai e quy ma oi tng c mo ta trc tiep qua no :

    A mo ta qua A, B, C,...trong o B, C, ... khong cha A. (cac v du tren).- e quy gian tiep la loai e quy ma oi tng c mo ta gian tiep qua no :

    A mo ta qua A1 ,A2 ,..., An .Trong o co mot Ai c mo ta qua A.V du 1:

    Mo ta dang tong quat mot chng trnh viet tren NNLT Pascal :

    Mot Chng trnh Pascal gom :a) au chng trnh (head) gom: Program Ten ;b) Than chng trnh (blok) gom :

    b1) Khai bao unit, nh ngha hang, nhan, kieu d lieu, khai bao bien.b2) nh ngha cac chng trnh con gom :

    b2.1) au chng trnh con :Procedure Ten thu tuc ( danh sach thong so hnh thc ) ;

    hoac Function Ten ham ( danh sach thong so hnh thc ) : Kieu ;b2.2) Than chng trnh con ( Blok )

    b2.3) Dau ; b3) Phan lenh : la mot lenh ghep dang :Begin S1 ; S2 ; . . . ; Sn End ;

    c) Dau ket thuc chng trnh : .V du 2 : Mo ta hai day so {Xn},{Yn} theo luat e quy ho tng nh sau :

    X0 = 1 ; Xn = Xn-1 + Yn-1 ;Y0 = 1 ; Yn =n2 Xn-1 + Yn-1 ;

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    7/108

    Ky thuat lap trnh nang cao - 7 -

    II. MO TA E QUY CAC CAU TRUC D LIEU

    Trong toan hoc , trong lap trnh ngi ta thng s dung e quy e mo ta caccau truc phc tap, co tnh e quy . Bi mo ta e quy khong ch la cach mo ta ngan gon

    cac cau truc phc tap ma con tao kha nang e xay dng cac thao tac x ly tren cac cautruc phc tap bang cac giai thuat e qui . Mot cau truc d lieu co tnh e quy thnggom mot so thanh phan d lieu cung kieu c ghep noi theo cung mot phng thc .

    V du 1:Mo ta e quy cay nhi phan :

    Cay nhi phan kieu T :+ Hoac la mot cau truc rong (phan neo).+ Hoac la mot nut kieu T (nut goc) va 2 cay nh phan kieu T ri nhau (cay

    con nh phan phai, cay con nh phan trai) ket hp vi nhau .V du 2:

    Mo ta e quy mang nhieu chieu :+ Mang mot chieu la day co th t cac thanh phan cung kieu .+ Mang n chieu la mang 1 chieu ma cac thanh phan co kieu mang n-1 chieu .

    III. MO TA E QUY GIAI THUAT

    1. Giai thuat e quy.Giai thuat e quy la giai thuat co cha thao tac goi en no . Giai thuat e quy cho

    phep mo ta mot day ln cac thao tac bang mot so t cac thao tac trong o co cha thaotac goi lai giai thuat (goi e quy) .

    Mot cach tong quat mot giai thuat e quy c bieu dien nh mot bo P gom menhe S (khong cha yeu to e quy ) va P : P P[ S , P ] .Thc thi giai thuat e quy co the dan ti mot tien trnh goi e quy khong ket thuc

    khi no khong co kha nang gap trng hp neo, v vay quan tam en ieu kien dngcua mot giai thuat e quy luon c at ra . e kiem soat qua trnh goi e quy cuagiai thuat e quy P ngi ta thng gan thao tac goi P vi viec kiem tra mot ieukien B xac nh va bien oi qua moi lan goi P , qua trnh goi P se dng khi B khongcon thoa.Mo hnh tong quat cua mot giai thuat e quy vi s quan tam en s dng se la :

    P if B then P[ S , P ]

    hoac P P[ S , if B then P ]Thong thng vi giai thuat e quy P , e am bao P se dng sau n lan goi ta chon

    B la ( n >0 ) . Mo hnh giai thuat e quy khi o co dang :P(n) If ( n > 0 ) then P[ S , P(n - 1)] ;

    hoac P(n) P[ S , if (n >0) then P(n - 1) ] ;

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    8/108

    Ky thuat lap trnh nang cao - 8 -

    Trong cac ng dung thc te so lan goi e quy (o sau e quy) khong nhng phai huhan ma con phai u nho . Bi v moi lan goi e quy se can mot vung nh mi trong khivung nh cu van phai duy tr .

    2. Chng trnh con e quy.a) Cac ham e quy.

    nh ngha ham so bang e quy thng gap trong toan hoc, ien hnh la cac hamnguyen mo ta cac day so hoi quy .

    V du 1 .Day cac giai tha : { n! } 1 ,1 , 2 , 6 , 24 , 120 , 720 , 5040 , . . .

    Ky hieu FAC(n ) = n ! .Ta co : + FAC(0 ) = 1 ; ( 0 ! = 1 )

    + FAC(n ) = n * FAC(n - 1 ) ; ( n ! = n * (n - 1 ) ! ) vi n >= 1

    Giai thuat e quy tnh FAC(n ) la :FAC(n ) if (n = 0 ) then return 1 ;else return (n * FAC(n - 1 )) ;

    V du 2 .Day so Fibonaci(FIBO) :

    { FIBO (n) } 1 ,1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 , 233 , 377 , . . .+ FIBO(0 ) = FIBO (1 ) = 1 ;+ FIBO(n ) = FIBO (n - 1 ) + FIBO ( n - 2 ) ; vi n > = 2

    Giai thuat e quy tnh FIBO ( n ) la :FIBO(n) if ((n = 0 ) or ( n = 1 )) then return 1 ;

    else return ( FIBO (n - 1) + FIBO (n - 2)) ;V du 3 . Day cac to hp :1

    1 2 11 3 3 1

    1 4 6 4 1C = 1 vi n > = 0n

    0

    = 0 vi m > n > 0Cnm

    vi n > m > 0C C Cnm

    nm

    nm= +

    1

    11

    Giai thuat e quy tnh la :Cnm

    if ( m = 0 ) then return 1 ;else if (m > n ) then return 0 ;

    else return ( ) ;C Cnm

    nm

    +11

    1

    Nhan xet :Mot nh ngha ham e quy gom :

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    9/108

    Ky thuat lap trnh nang cao - 9 -

    + Mot so cac trng hp suy bien ma ga tr ham tai o a c biet trc hoacco the tnh mot cach n gian (khong e quy ) .

    Nh :FAC(0 ) = 1 , FIBO(0) = FIBO(1) = 1 , = 1 , = 0 vi m > n > 0 .Cn

    0 Cnm

    + Trng hp tong quat viec tnh ham se c a ve tnh ham gia tr behn (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 cuaviec tnh ga tr ham . Nhom bien o goi la nhom bien ieu khien . Ga tr bien cuanhom bien ieu khien ng vi trng hp suy bien . Ga tr cua nhom bien ieu khiense thay oi qua moi lan goi e quy vi xu hng tien en ga tr bien ( tng ng vicac 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 sdung 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)] vaday a[(((m+n) div 2)+1) :n] .

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    10/108

    Ky thuat lap trnh nang cao - 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 noivi 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

    neugia tr tai nut goc = o th thong bao tm thay va dngCon khongneugia tr tai nut goc < o th tm cay con trai

    Con khong th tm cay con phai .Nhan xet :

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    11/108

    Ky thuat lap trnh nang cao - 11 -

    Trong mot thu tuc e qui, e cho viec goi e quy dng lai sau hu han lan goi nocan cha ieu kien kiem tra (mot bieu thc boolean B tren mot nhom bien ) , e khiieu 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 )

    3. Ma hoa giai thuat e qui trong cac ngon ng lap trnh.

    a) Tong quan.

    Khong phai moi ngon ng lap trnh hien co eu co the ma hoa c giai thuat equy, ch mot so nhng ngon ng lap trnh co kha nang to chc vung nh kieu stack

    mi co kha nang ma hoa c giai thuat e quy .Cac ngon ng lap trnh hien nay eu ma hoa giai thuat e quy bang cach to chc cacchng trnh con e quy tng ng .

    b) The hien e qui trong NNLT PASCAL va C++

    NN LT Pascal va C++ eu cho phep ma hoa giai thuat e quy bang cach to chcchng trnh con e quy nh vao c che tao vung nh Stak cua phan mem ngon ng .

    b1) Trong NNLT C++.NNLT C++ cho phep ma hoa giai thuat e quy mot cach thuan li nh vao ky thuat

    khai bao trc tieu e nen khong co s phan biet hnh thc nao trong viec khai baogia ham con e quy va ham con khong e quy.

    b2) Trong NN LT Pascal .oi vi chng trnh con e quy trc tiep th hnh thc khai bao cung giong nh oi

    vi chng trnh con khong e quy.oi vi chng trnh con e quy gian tiep th hnh thc khai bao co thay oi t nhieu

    nham thoa quy tac tam vc cua ngon ng ( trong phan lenh cua mot chng trnh conch c goi nhng chng trnh con cung cap a c khai bao trc ).V du :

    Vi mo hnh chng trnh sau :Trong phan lenh cua khoi A co the goi en :

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    12/108

    Ky thuat lap trnh nang cao - 12 -

    + Goi cac chng trnh con trc tiep cua nogoi 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 nhngkhong goi c D , Muon goi D phaikhai bao trc ( khai bao FORWARD)

    Khai bao trc FORWARD .D

    AB

    C

    Program

    E

    e t thu tuc ham A co the goi en D la thu tuc ham cung cap nhng c mo ta sauA, ta can co mot khai bao trc cua D pha trc cua A . Khai bao nay gom : tieu ecua D, vi danh sach thong so cua D, tiep theo la t khoa FORWARD . Sau o lucmo ta lai D th ch can khai bao t khoa PROCEDURE ( hoac FUNCTION ) , ten cuaD ( 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 baonh sau :

    procedure SECOND (i : integer ) ; Forward ;

    procedure FIRST (n : integer ; var X : real);var j, k : interger ;begin

    for j := 1 to n do beginwriteln( j = , j ) ;k := n 2* j ;SECOND( k );

    end ;end ;procedure second ;

    beginif ( i > 0 ) then beginwriteln( i= , i );FIRST( i 1 ) ;

    end ;

    end ;

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    13/108

    Ky thuat lap trnh nang cao - 13 -

    4. Mot so dang giai thuat e quy n gian thng gap .

    a) e quy tuyen tnh.

    Chng trnh con e quy tuyen tnh la chng trnh con e quy trc tiep ngian nhat co dang :

    P { NEU thoa ieu kien dng th thc hien S ;Con khong begin { thc hien S* ; goi P }

    }Vi S , S* la cac thao tac khong e quy .

    V du 1 : Ham FAC(n) tnh so hang n cua day n!+ Dang ham trong ngon ng ma gia :

    { Neu n = 0 th FAC = 1 ; /* trng hp neo */Con khong FAC = n*FAC(n-1) }

    + Dang ham trong ngon ng Pascal :Function FAC(n : integer) : integer;

    beginif( n = 0 ) then FAC := 1

    else FAC := n*FAC(n-1) ;end;

    + Dang ham trong C++ :int FAC( int n )

    { if ( n == 0 ) return 1 ;else return ( n * FAC(n-1 )) ;}

    V du 2 :Chng trnh con tnh USCLN cua 2 so da vao thuat toan Euclide :

    + Dang ham tren ngon ng toan hoc :USCLN(m , n ) = USCLN(n , m mod n ) khi n 0

    USCLN(m , 0) = m+ Dang ham trong ngon ng ma gia :

    Neu n = 0 th USCLN = mCon khong USCLN = USCLN( n , m mod n ) ;

    + Dang ham trong Pascal :

    Function USCLN(m , n : integer ) : integer ;beginif (n = 0 ) then USCLN := m

    else USCLN := USCLN( n , m mod n ) ;end ;

    +Dang ham trong C++ :int USCLN( int m , int n )

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    14/108

    Ky thuat lap trnh nang cao - 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 := 1else 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 goie 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 dobegin thc hien S ;if ( thoa ieu kien dng ) then thc hien S*else goi Pend ;}

    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 ;

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    15/108

    Ky thuat lap trnh nang cao - 15 -

    else { tg = 0 ;for i = 0 to n-1 do tg = tg + (n-i)2 Xi ;return tg ;

    }

    + 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 := 1else

    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

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    16/108

    Ky thuat lap trnh nang cao - 16 -

    CHNG IIBAI TOAN E QUY

    I. CAC NOI DUNG CAN LAM E TM GIAI THUAT E QUY CHOMOT BAI TOAN.

    e xay dng giai thuat giai mot bai toan co tnh e quy bang phng phap e quy tacan thc hien tuan t 3 noi dung sau :

    - Thong so hoa bai toan .- Tm cac trng hp neo cung giai thuat giai tng ng .- Tm giai thuat giai trong trng hp tong quat bang phan ra bai toan theo kieu

    e quy.

    1. Thong so hoa bai toan.Tong quat hoa bai toan cu the can giai thanh bai toan tong quat (mot ho cac bai toan

    cha bai toan can giai ),tm ra cac thong so cho bai toan tong quat ac biet la nhomcac thong so bieu th kch thc cua bai toan cac thong so ieu khien ( cac thong soma o ln cua chung ac trng cho o phc tap cua bai toan , va giam i qua moi langoi e qui ) .

    V du : n trong ham FAC(n) ; a , b trong ham USCLN(a,b) .

    2. Phat hien cac trng hp suy bien (neo) va tm giai thuat cho cactrng 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]

    3. Phan ra bai toan tong quat theo phng thc e quy.

    Tm phng an (giai thuat ) giai bai toan trong trng hp tong quat bang cach phanchia no thanh cac thanh phan ma hoac co giai thuat khong e quy hoac la bai toantren nhng co kch thc nho hn.

    V du : FAC(n) = n * FAC(n -1) .Tmax(a[1:n]) = max(Tmax(a[1:(n-1)]) , a[n] )

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    17/108

    Ky thuat lap trnh nang cao - 17 -

    II. MOT SO BAI TOAN GIAI BANG GIAI THUAT E QUY IENHNH.

    1. Bai toan thap Ha Noi .Truyen thuyet ke rang : Mot nha toan hoc Phap sang tham ong Dng en mot ngoichua co Ha Noi thay cac v s ang chuyen mot chong a quy gom 64 a vi kchthc 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 - 1 lan chuyen c ban (chuyen 1

    a ).

    2n

    Gia s thi gian e chuyen 1 a la t giay th thi gian e chuyen xong chong 64 ase la :

    T = ( 2 ) * t S = 18164 4 1019. * * t SVi 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 baitoan a tr nen phc tap . Tuy nhien giai thuat cua bai toan lai c tm thay rat dedang nhanh chong khi ta khai quat so a la n bat ky va nhn bai toan bang quan nieme quy .

    a) Thong so hoa bai toan .

    Xet bai toan mc tong quat nhat : chuyen n (n>=0) a t cot X sang cot Zlay cot Y lam trung gian .

    Ta goi giai thuat giai bai toan mc tong quat la thu tuc THN(n ,X ,Y,Z) cha 4thong so n,X,Y,Z ; n thuoc tap so t nhien N (kieu nguyen khong dau ); X ,Y,Z thuoctap 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) : tmday thao tac e chuyen chong 1 a t cot X sang cot Z lay cot Y lam trung gian . Giaithuat giai bai toan THN (1,X,Y,Z) la thc hien ch 1 thao tac c ban : Chuyen 1 a tX sang Z ( ky hieu la Move (X , Z) ) .

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    18/108

    Ky thuat lap trnh nang cao - 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 lamtrung 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 Zlay cot Y lam trung gian thanh day tuan t 3 cong viec sau :

    + Chuyen (k -1) a t cot X sang cot Y lay cot Z lam trung gian :THN (k -1,X,Z,Y) (bai toan THN vi n = k-1,X= X , Y = Z , Z = Y )

    + Chuyen 1 a t cot X sang cot Z : Move ( X, Z ) (thao tac c ban ).+ Chuyen (k - 1 ) a t cot Y sang cot Z lay cot X lam trung gian :

    THN( k -1,Y,X,Z) ( bai toan THN vi n = k-1 , X = Y , Y = X , Z = Z ) .Vay giai thuat trong trng hp tong quat (n > 1) la :

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

    Vi n a th can bao nhieu bc chuyen 1 a? Thc chat trong thu tuc THN caclenh 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 - 1e 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 beginTHN (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 )

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    19/108

    Ky thuat lap trnh nang cao - 19 -

    Hoac : 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 viettuy 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 ;

    }

    2. Bai toan chia thng.Co 100 phan thng em chia cho 12 hoc sinh gioi a c xep hang. Co bao

    nhieu cach khac nhau e thc hien cach chia?Ta thay ngay rang viec tm ra li giai cho bai toan se khong de dang neu ta khong

    tm ra cach thch hp e tiep can vi no. Ta se tm giai thuat giai bai toan bang phngphap e quy.

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    20/108

    Ky thuat lap trnh nang cao - 20 -

    a) Thong so hoa.

    Ta se giai bai toan mc o tong quat : Tm so cach chia m vat (phan thng ) cho noi 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 mahoc sinh i nhan c .Khi o cac ieu kien rang buoc len cach chia la :

    Si >= 0S1 >= S2 >= >= Sn .S1 + S2 + + Sn = m

    V du :Vi m = 5 , n = 3 ta co 5 cach chia sau :

    5 0 0

    4 1 03 2 03 1 12 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 phanthng .

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

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    21/108

    Ky thuat lap trnh nang cao - 21 -

    * Nhom th 2 co phan cho ngi cuoi cung ( Sn > 0 ) . De thay rang socach chia cua nhom nay bang so cach chia m - n phan thng cho n hoc sinh ( vphng thc chia ma tat ca hoc sinh eu nhan c phan thng co the thc hien bangcach : 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 := 1else 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 ) ) ;

    }

    3. Bai toan tm tat ca cac hoan v cua mot day phan t.Bai toan : Xuat tat ca cac hoan v cua day A .

    V du : Vi day A gom N = 3 phan t A[1] = a , A[2] = b , A[3] = c th baitoan bat phai xuat 6 hoan v co the cua A :

    a b c a c b c b ab a c c a b b c a

    Vi day A gom N = 4 phan t A[1] = 1 , A[2] = 2 , A[3] = 3 , A[4] =4 th bai toanbat phai xuat 24 hoan v co the cua A :1 2 3 4 1 2 4 3 1 4 3 2 4 2 3 1

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    22/108

    Ky thuat lap trnh nang cao - 22 -

    2 1 3 4 2 1 4 3 4 1 3 2 2 4 3 11 3 2 4 1 4 2 3 1 3 4 2 4 3 2 13 1 2 4 4 1 2 3 3 1 4 2 3 4 2 13 2 1 4 4 2 1 3 3 4 1 2 3 2 4 12 3 1 4 2 4 1 3 4 3 1 2 2 3 4 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 dlieu a biet trc ) la thu tuc xuat tat ca cac dang khac nhau cua v co c bang cachhoan 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 ) xuattat 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 42 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 cbang 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] hoanv 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] hoanv 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) ;

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    23/108

    Ky thuat lap trnh nang cao - 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 beginSWAP( 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 tht *). . . . . . . . . . . . . . . . . . . . . .

    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 beginSwap(V[m] , V[k]);HV(V , m 1) ;

    end ;end ;

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    24/108

    Ky thuat lap trnh nang cao - 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

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    25/108

    Ky thuat lap trnh nang cao - 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 motthu tuc khong e quy Merge(m , l , n) . Ta can chon l e c 2 day con giam hankch 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 ;

    beginif n>m thenbeginl := (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)

    5. Bai toan tm nghiem xap x cua phng trnh f(x)=0 .Bai toan : Ham f(x) lien tuc tren oan [ao,bo] , tm mot nghiem xap x vi o chnh

    xac tren [ao,bo] cua phng trnh f(x) = 0.Y tng cua giai thuat :

    - Trng hp neo : bo - ao < + Neu f(ao).f(bo) 0 th ham f co nghiem tren [ao,bo] .Va v ta ang tm

    nghiem xap x vi o chnh xac nen ao la nghiem xap x can tm .

    + Neu f(ao).f(bo) > 0 th ta xem nh khong co nghiem xap x tren oan xet.- Trng hp bo - ao th chia oi oan [ao,bo] roi tm lan lt nghiem trentng oan con : oan con trai, oan con phai .

    Ta se xay dng mot ham e qui tra ve gia tr la nghiem xap x cua f (neuco),hay mot hang E ( u ln) neu f khong co nghiem xap x tren [ao,bo] .

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    26/108

    Ky thuat lap trnh nang cao - 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 khongco 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) ) = 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 trenoan [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)

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    27/108

    Ky thuat lap trnh nang cao - 27 -

    double R = ROOT(a,c) ;if( R< E ) return R ;

    else return ( ROOT(c , b) ) ;}

    }

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    28/108

    Ky thuat lap trnh nang cao - 28 -

    CHNG IIIKH 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 thuate qui tng thi iem thc hien, con can lu tr ca cac trang thai x ly ang condang d .

    a) Xet giai thuat e quy tnh giai tha:

    FAC ( n ) if(n = 0 ) then retrun 1 ;

    else retrun ( n * FAC (n 1)) ;S o qua trnh tnh ga tr 3 ! theo giai thuat e quy :

    FAC(3 ) = 3 * FAC( 2 )

    FAC( 0 ) = 1

    FAC( 1 ) = 1 * FAC( 0

    FAC( 2 ) = 2 * FAC( 1

    Khi thc hien li goi FAC (3 ) se phat sinh loi goi FAC (2 ) , ong thi phai lu githong tin trang thai x ly con dang do ( FAC ( 3 ) = 3 * FAC ( 2 ) ) . en lt mnhli goi FAC ( 2 ) lai lam phat sinh li goi FAC (1 ) ,ong thi van phai lu tr thongtin trang thai x ly con dang d ( FAC (2 ) = 2 * FAC ( 1 ) ) ,.. . C nh vay cho ti

    khi gap li goitrng 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 .

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    29/108

    Ky thuat lap trnh nang cao - 29 -

    ong thi vi qua trnh x ly ngc la qua trnh xoa bo cac thong tin ve giai thuat xly 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(3) = FIB(1) + FIB(2) FIB 4 = FIB 2 + FIB 3

    FIB(5) = FIB(3) + FIB

    FIB(2) = FIB(0) + FIB(1)

    FIB(0) = FIB(1) =

    FIB(2) = FIB(0) + FIB(1)

    FIB(0) = 1 FIB(1) =

    FIB(2) = FIB(0) + FIB(1)

    FIB(1) =

    FIB(1) =

    FIB(3) = FIB(2) + FIB(1)FIB(1) =

    FIB(0) =

    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 :

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    30/108

    Ky thuat lap trnh nang cao - 30 -

    Li goi c/0 Li goi c/1 Li goi c/2 Li goi c/3

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

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

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

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

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

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

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

    THN(0,B,A,C)

    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 ) ; cungvi 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 vitrng 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 neonham hoan thien cac bc x ly con dang d song song vi qua trnh hoan thien cac ligoi la qua trnh loai bo cac lu tr thong tin giai thuat trung gian.

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    31/108

    Ky thuat lap trnh nang cao - 31 -

    Do ac iem cua qua trnh x ly mot giai thuat e quy la : viec thc thi li goi equy sinh ra li goi e quy mi cho en khi gap trng hp suy bien (neo ) cho nen ethc 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 trnhx 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 bothong 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 tintrang 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 dungtrong 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 lieuthuoc 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 )

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

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    32/108

    Ky thuat lap trnh nang cao - 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 oitng 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 SFunction Empty( S : StackType ) : boolean ;

    BeginEmpty := ( S.Top = 0 ) ;

    End ;

    Mo hnh stack S va tac dung cac thao tac tren no .

    3 3 3 3 2 2 2 x 1 2

    1 1 x o 1 x o 1 x o Createstack(S) ; Push(S, xo ) ; Push(S,x1 ) ; pop(S,y)( S.top = 0 ) S.St[1] := xo S.St[2] := x1 y := x1

    S.top := 1 S.top := 2 S.Top := 1 ;

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

    II. TONG QUAN VE VAN E KH E QUY.

    e quy la phng phap giup chung ta tm giai thuat cho cac bai toan kho . Giaithuat giai bai toan bang e quy thng rat ep (gon gang, de hieu ,de chuyen thanh

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    33/108

    Ky thuat lap trnh nang cao - 33 -

    chng trnh tren cac NNLT) . Nhng nh a ch ra tren viec x ly giai thuat e quylai thng gay kho khan cho may tnh (ton khong gian nh va thi gian x ly), hn nakhong phai moi NNLT eu cho phep ma hoa giai thuat e quy (v du : FORTRAN) . Vvay viec thay the mot chng trnh e quy ( co cha chng trnh con e quy ) bangmot chng trnh khong e quy cung la mot van e c quan tam nhieu trong laptrnh .

    Mot cach tong quat ngi ta a ch ra rang : Moi giai thuat e quy eu co the thaythe bang mot giai thuat khong e quy . Van e con lai la ky thuat xay dng giai thuatkhong e quy tng ng thay the giai thuat e quy . Rat ang tiec viec xay dng giaithuat khong e quy thay the cho mot giai thuat e quy a co lai la mot viec khongphai bao gi cung n gian va en nay van cha co giai phap thoa ang cho trnghp tong quat.

    S o e xay dng chng trnh cho mot bai toan kho khi ta khong tm c giaithuat 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 nhieutrng hp ta cung phai chap nhan s dung chng trnh e quy .

    III. CAC TRNG HP KH E QUY N GIAN.

    1. Cac trng hp kh e quy bang vong lap .

    a) Ham tnh ga tri cua day d lieu mo ta bang hoi quy .a1) Y tng dan dat :

    Xet mot vong lap trong o s dung 1 tap hp bien W = (V , U ) gom tap hp Ucac bien b thay oi trong vong lap va V la cac bien con lai.

    Dang tong quat cua vong lap la :W := Wo ; { Wo = ( Uo,Vo) }while C(U) do U := g(W) (3.1.1)

    Goi Uo la trang thai cua U ngay trc vong lap , Uk vi k >0 la trang thai cua Usau lan lap th k (gia s con lap en lan k ) .

    Ta co :

    Uo mang cac gia tr c gan ban auUk = g(W) = g(Uk-1 , Vo ) = f(uk-1) vi k = 1 .. n (3.1.2)

    Vi n la lan lap cuoi cung , tc C(Uk ) ung vi moi k < n , C(Un) saiSau vong lap W mang noi dung (Un ,Vo ) .Ta thay : e tnh ga tr day c nh ngha bi quan he hoi quy dang (3.1.2) ta

    co the dung giai thuat lap mo ta bi oan lenh (3.1.1) .a2) Giai thuat tnh ga tr cua day hoi quy thng gap dang :

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    34/108

    Ky thuat lap trnh nang cao - 34 -

    f(n) = C khi n = no ( C la mot hang )= g(n,f(n -1)) khi n > no

    V du :Ham giai tha FAC (n) = n ! = 1 khi n = 0

    = n * FAC(n - 1) khi n > 0

    Tong n so au tien cua day an dau sau :Sn = 1 - 3 + 5 - 7 .. + (-1)n+1 * (2n-1)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 begink := 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 PASCALFunction FAC ( n : integer ) : longint ;var k : integer ;

    F : longint ;Begin

    F := 1 ; k := 0 ;while (k < n ) do begin

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    35/108

    Ky thuat lap trnh nang cao - 35 -

    k := k + 1 ;F := F * k ;

    end ;FAC := F ;

    end ;hoac :

    Function FAC ( n : integer ) : longint ;var k : integer ;

    F : longint ;Begin

    F := 1 ;For k:= 1 to n do F := F * k ;FAC := F ;

    end ;+ Trong NN LT C++long int FAC ( int n )

    { int k = 0 ;long int F = 1 ;while ( k < n ) F = ++k * F ;return (F) ;}

    Hoac :long int FAC ( int n )

    { long int F = 1 ;for ( int k = 1; k

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    36/108

    Ky thuat lap trnh nang cao - 36 -

    + Trong NN LT C++int S ( int n )

    { int k = 1 , tg = 1 ;while ( k < n ) { k ++ ;

    if (k%2) tg + = 2 * k - 1 ;else tg - = 2 * k + 1 ;

    }return ( tg ) ;

    }

    b) Cac thu tuc e qui dang e qui uoi.

    Xet thu tuc P dang :P(X) if B(X) then D(X)

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

    Trong o : X la tap bien ( mot hoac mot bo nhieu bien ).P(X) la thu tuc e quy phu thuoc XA(X) ; D(X) la cac nhom thao tac (lenh ) khong e quyf(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 :

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    37/108

    Ky thuat lap trnh nang cao - 37 -

    P(X)

    True

    False

    B(X)

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

    END

    D(X)

    Tng ng vi vong lap sau :

    While ( not B(X) ) do beginA(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

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    38/108

    Ky thuat lap trnh nang cao - 38 -

    Lenh goi Convert(y,n) dung e oi so nguyen y trong c so 10 sang c so k ludayky 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 beginA[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 := melse 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 = 0D(X) la lenh gan us := mA(X) la lenh rongf(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 .

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    39/108

    Ky thuat lap trnh nang cao - 39 -

    Procedure USCLN(m , n : integer ; var us : integer ) ;var sd : integer ;begin

    while ( n 0 ) do beginsd := 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(g(X)) khi C (X) ung

    f ( X ) =

    a (X ) khi C (X) saiTc la :

    f ( X ) if( C(X) ) then return( f(g(X))else return( a(x))

    Tnh f(Xo ) .Ta co :

    f(Xo ) = f(g(Xo )) v C(Xo ) ung .= f(g(g(Xo ))) vi C(g(Xo )) ung .= ...= f(gk (Xo )) vi C(gk-1 (Xo )) ung .

    = a(gk (Xo )) 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 :

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    40/108

    Ky thuat lap trnh nang cao - 40 -

    Uo = XoUi = 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 ;

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    41/108

    Ky thuat lap trnh nang cao - 41 -

    m = abs(t1-t2) ;if(t1

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    42/108

    Ky thuat lap trnh nang cao - 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 thuatsau :

    - 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 chnhla ga tr can tnh ( Vo = A(X ) ).

    c) Giai thuat khong e quy tnh ga tr ham Arsac bang s dung cau trucStack .

    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 V i ) de lay ra s dung . ac iem quantrong cua day Ui la thoa luat LIFO : th t s dung ngc vi th t tao sinh . Cautruc d lieu cho phep lu tr thuan li day phan t thoa luat LIFO ( vao sau ratrc - 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 SCreateStack(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

    beginY := U ; ( Y = Ui+1)

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    43/108

    Ky thuat lap trnh nang cao - 43 -

    pop(S,U) ; ( U = Ui )V := DS(V,FS(Y,U)) ; ( C(Ui) ung ; Vi = DS(Vi+1,FS(Ui+1,Ui)) )

    end ;{ V = A(Xo) }

    Hoac :+ Bc 1 : tnh Ui bat au t Uo theo (2.1) lu vao Stack S

    CreateStack(S) ; ( tao stack rong S )U := Xo ; ( Uo = Xo )push(S,U) ; ( chen UO vao nh stack S )while C(U) do begin

    U := CS(U) ; ( UK+1 = CS(UK))push (S,U) ; ( chen Uk+1 vao nh Stack S )

    end ;+ Bc 2 : Lay d lieu trong Stack S tnh Vi theo (2. 2)

    pop(S,U) ; ( U = Uk )V := BS(U) ; ( C(Uk) sai ; V=Vk = BS (Uk))

    While(not emptystack(S)) dobegin

    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 lygiai thuat e quy ieu can quan tam la cau truc stack thng chiem nhieu bo nh . Vvay 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 trham 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

    CS-1 . 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 canxuat phat t Uk dung ham CSM1 e khoi phuc lai cac ga tr U i voi i

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    44/108

    Ky thuat lap trnh nang cao - 44 -

    U := X ; ( Uo = X )k := 0 ;

    while C(U) do begink := k+1 ;

    U := CS(U) ; ( UK+1 = CS(UK))end ;

    + Bc 2 : Tnh Vk , Vk-1, .. V1, Vo da vao Uk ,(2.2) va CSM1V := 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

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    45/108

    Ky thuat lap trnh nang cao - 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 thuattnh. Thc vay :

    Thiet lap day Wi nh sau :W0 = VkWi = 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 .

    3. Kh e quy mot so dang thu tuc e quy thng gap.

    a) Dan nhap.

    e thc hien mot chng trnh con e quy th he thong phai to chc vung lu trthoa quy tac LIFO (vung Stack). V vay ch nhng ngon ng lap trnh co kha nang taovung nh stack mi cho phep to chc cac chng trnh con e quy. Thc hien motchng trnh con e quy theo cach mac nh thng ton bo nh v cach to chc Stackmot cach mac nh thch hp cho moi trng hp thng la khong toi u trong tngtrng hp cu the. V vay se rat co ch khi ngi lap trnh chu ong tao ra cau truc dlieu stack ac dung cho tng chng trnh con e quy cu the .

    Phan tiep theo se trnh bay viec kh e quy mot so dang thu tuc e quy theo hng

    thay giai thuat e quy bang cac vong lap va mot cau truc d lieu kieu stack thch hp .

    b) Thu tuc e qui chi co mot lenh goi e quy trc tiep .

    Mo hnh tong quat cua thu tuc e quy ch co mot lenh goi e quy trc tiep la :P(X) if C(X) then D(X)

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    46/108

    Ky thuat lap trnh nang cao - 46 -

    else beginA(X) ; P(f(X)) ; B(X) ;

    end ;Vi :

    X la mot bien n hoac bien vec t.C(X) la mot bieu thc boolean cua X .A(X) , B(X) , D(X) la cac nhom lenh khong e quy ( khong cha lenh goi en

    P ).f(X) la ham cua X .

    Tien trnh thc hien thu tuc P(X) se la :+ Neu C(X) ung th thc hien D(X) .+ Con khong ( C(X) sai ) th thc hien A(X) ; goi P(f(X)) ; thc hien B(X) . (

    B(X) ch c thc hien khi P(f(X)) thc hien xong ) .Moi lan thanh phan e quy P(Y) c goi th thong tin giai thuat B(Y) lai

    c sinh ra (nhng cha thc hien ) .Ga s qua trnh e quy ket thuc sau k lan goi e quy th ta phai thc hienmot 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 canday d lieu {fi(X) } truy xuat theo nguyen tac LIFO. Ta se dung mot Stack e lu trday { 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)

    C(X) = False A(X) ; Push(S,X); U:=f(X) ; P(U) ; POP(S,U) ; B(U)( U = X )

    C(U) = False A(U) ; Push(S,U); U :=f(U)); P(U) ; POP(S,U) ; B(U)( U = f(X))

    C(U) = False A(U) ; Push(S,U) ; U : = f(U)); P(U ) ; POP(S,U) ; B(U)

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

    C(U) = False A(U) ;------> Push(S,U) ; U : = f(U)); P(U ) ; POP(S,U) ; B(U)( U=fk-1(X) )

    C(U) = True D(U )

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    47/108

    Ky thuat lap trnh nang cao - 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 beginPOP(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 beginBinary( 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 ) do beginsdu := m mod 2 ;Push(S,sdu) ;m := m div 2 ;

    end;

    While( not(EmptyS(S)) do beginPOP(S,sdu) ;Write(sdu) ;

    end;}

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    48/108

    Ky thuat lap trnh nang cao - 48 -

    c) Nhieu lenh goi e quy trc tiep.

    c1) Thu tuc e quy vi 2 lan goi trc tiepThu 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 cacga tr fi(X) ta con phai lu vao stack cac ga tr g i(X) tng ng . Khi ta lay d lieu tstack 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 tlu au tien trong stack .

    Nh vay la ngoai d lieu X , con phai lu vao ngan xep them th t lan goi ( cumgoi )

    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 beginA(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 ) ;

    }

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    49/108

    Ky thuat lap trnh nang cao - 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 beginTHN ( 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 tacchuyen 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 beginPush (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 :

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    50/108

    Ky thuat lap trnh nang cao - 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 lane quy, can biet o la lenh goi thuoc nhom th may trong day lenh goi e biet thaotac 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 beginA1(X) ;Push (S,(X,2)) ;X := f1(X) ;

    end ;

    D(X) ;POP(S,(X,k)) ;

    While( k = n+1 ) do begin

    An+1 ;POP(S,(X,k)) ;

    end ;if ( k > 0 ) then begin

    Ak(X) ;Push (S,(X,k+1));

    X := f k (X)end ;

    until (k = 1 ) ;}

    V du : Kh e quy cho thu tuc hoan v .+ Thu tuc hoan v di dang e quy :

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    51/108

    Ky thuat lap trnh nang cao - 51 -

    HVI(V ,n) if (n = 1 ) then Print ( V )else for i := n downto 1 do

    beginSwap (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 beginSwap(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 ) ;

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    52/108

    Ky thuat lap trnh nang cao - 52 -

    PHAN II

    KIEM CHNG CHNG TRNH

    CHNG IVCAC KHAI NIEM

    I. CAC GIAI OAN TRONG CUOC SONG CUA MOT PHAN MEM

    Viec s dung may tnh e giai mot bai toan thc te thng bao gom nhieu viec.Trong cac cong viec o cong viec ma ngi ta quan tam nhat la viec xay dng cac hethong phan mem (cac he thong chng trnh giai bai toan ).

    e xay dng mot he thong phan mem , ngi ta thng thc hien trnh t cac congviec sau : ac ta bai toan, xay dng he thong, s dung va bao tr.

    1) ac ta bai toanGom 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 tnhai chung ( de hieu oi vi nhieu ngi).

    2) Xay dng he thongTrong bc nay se tuan t thc hien cac cong viec sau :- Thiet ke : Xay dng mo hnh he thong phan mem can co. Trong bc nay,

    cong viec chu yeu la phan chia he thong thanh cac module chc nang va xac nh rochc nang cua tng module cung nh moi tng tac gia cac module vi nhau. Chcnang cua moi module c nh ro bi ac ta cua tng module tng ng.

    - Trien khai tng module va th nghiem :Viet chng trnh cho tng module (bai toan con) thoa "ung" ac ta a at ra. Tnh

    ung cua chng trnh c quan tam bang 2 hng khac nhau :+ Chng minh tnh ung mot cach hnh thc (thng la mot cong viec kho

    khan) .+ Chay th chng trnh tren nhieu bo d lieu th khac nhau moi bo d

    lieu ai dien cho mot lp d lieu (thng la mot cong viec ton kem ). e co tnhthuyet phuc cao, ngi ta can chay th tren cang nhieu bo d lieu cang tot. Khi thneu phat hien sai th phai sa lai chng trnh con cha phat hien sai th ta con tam tinchng trnh ung (chay th ch co tac dung phat hien sai va tang long tin vao tnhung ch khong chng minh c tnh ung ).

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    53/108

    Ky thuat lap trnh nang cao - 53 -

    - Th nghiem mc o he thong : Sau khi tng module hoat ong tot, ngoi ta canth 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 scnhng lai la mot viec phai lam cua ngi lap trnh v ngi lap trnh luon luon phaibao am chng trnh mnh tao ra thoa ung ac ta.

    3) S dung va bao tr he thongSau khi he thong phan mem hoat ong on nh, ngi ta a no vao s dung.

    Trong qua trnh s dung co the co nhng ieu chnh trong ac ta cua bai toan, hayphat hien loi sai cua chng trnh. Khi o can xem lai chng trnh va sa oi chung.

    Cac yeu cau sau cho qua trnh xay dng phan mem :a) Can xay dng cac chng trnh de oc, de hieu va de sa oi.

    ieu nay oi hoi mot phng phap tot khi xay dng he phan mem : phan ra tot hethong , s dung cac cau truc chuan va co he thong khi viet chng trnh ,co su lieu

    ay u .b) Can am bao tnh ung. Lam the nao e xay dng mot chng trnh "ung" ?

    Mot ieu can chu y la: Phep th chng trnh ch cho kha nang ch ra chng trnhsai neu tnh c phat hien c ch khong chng minh c chng trnh ung vkhong the th het c moi trng hp. V vay ngi ta luon co gang chng minhchng trnh ung cua chng trnh bang logic song song vi chay th chng trnh.

    Co 2 cach chnh thng c s dung e am bao tnh ung cua phan mem trongqua trnh xay dng he thong :

    - Viet chng trnh roi chng minh chng trnh ung.- Va xay dng va chng minh tnh ung cua he thong.

    Viec tm kiem nhng phng phap xay dng tot e co the va xay dng va kiemchng c tnh ung luon la mot chu e suy ngh cua nhng ngi lap trnh .

    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 : Xaydng 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 .

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    54/108

    Ky thuat lap trnh nang cao - 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 chngminh 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 (vicac 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 nhngmc 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 oluan chuyen thong tin ... Gia nhng ngi phan tch, ngi ta dung phieu phan tchcac n v chc nang, bieu o chc nang...

    Ket qua phan tch c chuyen thanh yeu cau vi ngi lap trnh bang cac ac tachng trnh (TCT - program specification) .

    2. ac ta chng trnh (TCT).TCT gom cac phan sau :

    - D lieu nhap : Cac d kien ma chng trnh s dung . ac trng quan trong ladanh sach d lieu nhap va cau truc cua chung , co khi can neu nguon goc , phng tiennhap cua moi d lieu nhap .

    - ieu kien rang buoc tren d lieu nhap : la nhng ieu kien ma d lieu nhap phaithoa e he thong hoat ong ung . Chng trnh khong bao am cho ket qua ung khithc thi cac bo d lieu khong thoa cac ieu kien nay .

    Trong phan mo ta d kien nhap can neu len :+ Cau truc : kieu d lieu ( cac thanh phan, s ket noi cac thanh phan ).+ Cac rang buoc tren ga tr cua chung .

    - D lieu xuat : Cac d lieu ma chng trnh tao ra . Cung nh phan d lieu nhap,can neu ro danh sach d lieu xuat, cau truc cua chung, co khi can neu phng tienxuat cua tng d lieu xuat.

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    55/108

    Ky thuat lap trnh nang cao - 55 -

    - ieu kien rang buoc tren d lieu xuat: Nhng ieu kien rang buoc ma d lieu xuatphai thoa. Chung the hien yeu cau cua ngi s dung oi vi chng trnh. Cac ieukien 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

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    56/108

    Ky thuat lap trnh nang cao - 56 -

    tng thi iem trc hoac sau khi thc hien mot lenh , ngi ta quan tam en taphp cac trang thai co the cua chng trnh. Tap hp cac trang thai nay se c bieuth 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 trenrepeat {(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 trangthai

    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 lamtrung gian.

    {( x = xo) and (y = yo ) } // x , y mang gia tr ban au bat ky nao ot := 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 motso bien b gan tr, ngi ta can phai dung cac bien gia (ghost variable). V du ayla xo va yo bieu th noi dung cua x va y trc khi thc hien oan chng trnh.

    V du 3 :Nhan 2 so nguyen dng x , y, ket qua cha trong u .

    { (x = xo > 0) and (y = yo > 0 )}u := 0 ;repeat

    u := u + x ;

    y := y - 1 ;until (y = 0){ u = xo * yo }

    That ra ay tap hp cac trang thai xuat thc s la nho hn, bieu th bi mot ieukien 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 vai sau Q . Can chng minh rang neu xuat phat t trang thai thoa P thi hanh lenh S th

    Tran Hoang Tho Khoa Toan - Tin

    Smith Nguyen Studio.

  • 8/3/2019 Giao Trinh Ky Thuat Lap Trinh Nang Cao DH Da Lat - Smith.N Studio

    57/108

    Ky thuat lap trnh nang cao - 57 -

    can at ti trang thai thoa Q . P c goi la ieu kien au (precondition) , Q cgoi la ieu kien cuoi (postcondition). Cap tan t (P,Q) , c goi ac ta cua oan lenhS. Bo 3 S, P, Q tao nen mot ac ta oan lenh thng c mo ta hnh thc bang tap kyhieu : { P } S { Q }( { P } : tap trang thai thoa tan t P , { Q } : tap trang thai thoa tan t Q )

    Viec thiet lap cac k