TRÖÔØNG ÑAÏI HOÏC ÑAØ LAÏT F 7 G GIAÙO TRÌNH KYÕ THUAÄT LAÄP TRÌNH NAÂNG CAO TRAÀN HOAØNG THOÏ 2002 Kyõ thuaät laäp trình naâng cao - 2 - MUÏC LUÏC LÔØI NOÙI ÑAÀU ........................................................................................................................4 PHAÀN I....................................................................................................................................5 CHÖÔNG I .............................................................................................................................5 I. MÔÛ ÑAÀU ...........................................................................................................................5 1. Moâ taû ñeä quy ................................................................................................................5 2. Caùc loaïi ñeä quy ............................................................................................................6 II. MOÂ TAÛ ÑEÄ QUY CAÙC CAÁU TRUÙC DÖÕ LIEÄU...................................................................7 III. MOÂ TAÛ ÑEÄ QUY GIAÛI THUAÄT........................................................................................7 1. Giaûi thuaät ñeä quy..........................................................................................................7 2. Chöông trình con ñeä quy..............................................................................................8 3. Maõ hoùa giaûi thuaät ñeä qui trong caùc ngoân ngöõ laäp trình. .............................................11 4. Moät soá daïng giaûi thuaät ñeä quy ñôn giaûn thöôøng gaëp . ..............................................13 CHÖÔNG II ...........................................................................................................................16 I. CAÙC NOÄI DUNG CAÀN LAØM ÑEÅ TÌM GIAÛI THUAÄT ÑEÄ QUY CHO MOÄT BAØI TOAÙN. .....16 1. Thoâng soá hoaù baøi toaùn. ..............................................................................................16 2. Phaùt hieän caùc tröôøng hôïp suy bieán (neo) vaø tìm giaûi thuaät cho caùc tröôøng hôïp naøy.16 3. Phaân raõ baøi toaùn toång quaùt theo phöông thöùc ñeä quy. ..............................................16 II. MOÄT SOÁ BAØI TOAÙN GIAÛI BAÈNG GIAÛI THUAÄT ÑEÄ QUY ÑIEÅN HÌNH. ..........................17 1. Baøi toaùn thaùp Haø Noäi . ...............................................................................................17 2. Baøi toaùn chia thöôûng. .................................................................................................19 3. Baøi toaùn tìm taát caû caùc hoaùn vò cuûa moät daõy phaàn töû.................................................21 4. Baøi toaùn saép xeáp maûng baèng phöông phaùp troän (Sort-Merge). .................................24 5. Baøi toaùn tìm nghieäm xaáp xæ cuûa phöông trình f(x)=0 . ...............................................25 CHÖÔNG III ..........................................................................................................................28 I. CÔ CHEÁ THÖÏC HIEÄN GIAÛI THUAÄT ÑEÄ QUY................................................................28 II. TOÅNG QUAN VEÀ VAÁN ÑEÀ KHÖÛû ÑEÄ QUY.....................................................................32 III. CAÙC TRÖÔØNG HÔÏP KHÖÛ ÑEÄ QUY ÑÔN GIAÛN. .........................................................33 1. Caùc tröôøng hôïp khöû ñeä quy baèng voøng laëp . ............................................................33 2. Khöû ñeä quy haøm ñeä quy arsac..................................................................................41 3. Khöû ñeä quy moät soá daïng thuû tuïc ñeä quy thöôøng gaëp. ...............................................45 Phaàn II ..................................................................................................................................52 CHÖÔNG IV..........................................................................................................................52 I. CAÙC GIAI ÑOAÏN TRONG CUOÄC SOÁNG CUÛA MOÄT PHAÀN MEÀM .................................52 1) Ñaëc taû baøi toaùn ..........................................................................................................52 2) Xaây döïng heä thoáng ....................................................................................................52 3) Söû duïng vaø baûo trì heä thoáng ......................................................................................53 II. ÑAËC TAÛ .........................................................................................................................53 1. Ñaëc taû baøi toaùn...........................................................................................................53 2. Ñaëc taû chöông trình (ÑTCT).......................................................................................54 3. Ñaëc taû ñoaïn chöông trình ..........................................................................................55 III. NGOÂN NGÖÕ LAÄP TRÌNH..............................................................................................57 CHÖÔNG V..........................................................................................................................59 I. CAÙC KHAÙI NIEÄM VEÀ TÍNH ÑUÙNG. ................................................................................59 II. HEÄ LUAÄT HOARE (HOARES INFERENCE RULES). ...................................................59 1. Caùc luaät heä quaû (Consequence rules) .......................................................................60 Traàn Hoaøng Thoï Khoa Toaùn - Tin Kyõ thuaät laäp trình naâng cao - 3 - 2. Tieân ñeà gaùn (The Assignement Axiom) .....................................................................61 3. Caùc luaät veà caùc caáu truùc ñieàu khieån . ........................................................................61 III. KIEÅM CHÖÙNG ÑOAÏN CHÖÔNG TRÌNH KHOÂNG COÙ VOØNG LAËP. .............................64 IV. KIEÅM CHÖÙNG ÑOAÏN CHÖÔNG TRÌNH COÙ VOØNG LAËP. ...........................................68 1. Baát bieán......................................................................................................................68 2. Lyù luaän quy naïp vaø chöùng minh baèng quy naïp. .........................................................70 3. Kieåm chöùng chöông trình coù voøng laëp while. .............................................................71 CHÖÔNG VI.........................................................................................................................76 I. CAÙC KHAÙI NIEÄM. ..........................................................................................................76 1. Ñaët vaán ñeà. ................................................................................................................76 2. Ñònh nghóa WP(S,Q)...................................................................................................76 3. Heä quaû cuûa ñònh nghóa...............................................................................................76 4. Caùc ví duï. ...................................................................................................................77 II. TÍNH CHAÁT CUÛA WP....................................................................................................77 III. CAÙC PHEÙP BIEÁN ÑOÅI TAÂN TÖØ....................................................................................78 1. Toaùn töû gaùn (tieân ñeà gaùn). .........................................................................................78 2. Toaùn töû tuaàn töï...........................................................................................................78 3. Toaùn töû ñieàu kieän. ......................................................................................................79 4. Toaùn töû laëp. ................................................................................................................80 IV. LÖÔÏC ÑOÀ KIEÅM CHÖÙNG HÔÏP LYÙ VAØ CAÙC ÑIEÀU KIEÄN CAÀN KIEÅM CHÖÙNG............84 1. Löôïc ñoà kieåm chöùng. .................................................................................................84 2. Kieåm chöùng tính ñuùng. ...............................................................................................85 3. Taäp toái tieåu caùc ñieàu kieän caàn kieåm chöùng. ...............................................................93 PHU LUÏC ..............................................................................................................................96 I. LOGIC TOAÙN..................................................................................................................96 II. LOGIC MEÄNH ÑEÀ..........................................................................................................96 1. Phaân tích ....................................................................................................................96 2. Caùc lieân töø logic. ........................................................................................................97 3. YÙnghóa cuûa caùc lieân töø Logic. Baûng chaân trò. .............................................................97 4. Lyù luaän ñuùng. .............................................................................................................98 5. Töông ñöông (Equivalence). .....................................................................................99 6. Tính thay theá, tính truyeàn vaø tính ñoái xöùng...............................................................100 7. Baøi toaùn suy dieãn logic.........................................................................................100 8. Caùc luaät suy dieãn (rules of inference). .....................................................................102 III. LOGIC TAÂN TÖØ. .........................................................................................................103 1. Khaùi nieäm.................................................................................................................103 2. Caùc löôïng töø logic ....................................................................................................105 3. Taäp hôïp vaø taân töØ.....................................................................................................107 4. Caùc löôïng töø soá hoïc.................................................................................................107 Traàn Hoaøng Thoï Khoa Toaùn - Tin Kyõ thuaät laäp trình naâng cao - 4 - LÔØI NOÙI ÑAÀU Giaùo trình ñöôïc vieát theo noäi dung moân hoïc “ Kyõ thuaät laäp trình naâng cao” vôùi muïc ñích laøm taøi lieäu tham khaûo chính cho moân hoïc. Giaùo trình goàm 2 phaàn chính vaø moät phuï luïc : Phaàn I. Ñeä quy. Trình baøy veà chuû ñeà ñeä quy trong laäp trình bao goàm caùc noäi dung sau : - Khaùi nieäm ñeä quy vaø vai troø cuûa noù trong laäp trình. - Caùch xaây döïng moät giaûi thuaät cho moät baøi toaùn baèng phöông phaùp ñeä quy. - Cô cheá thöïc hieän moät giaûi thuaät ñeä quy. - Khöû ñeä quy. Phaàn II. Kieåm chöùng chöông trình. Trình baøy veà chuû ñeà kieåm chöùng tính ñuùng cuûa chöông trình bao goàm caùc noäi dung sau: - Vai troø cuûa vaán ñeà kieåm chöùng trong laäp trình. - Caùc phöông phaùp duøng ñeå kieåm chöùng tính ñuùng . - Heä luaät Hoare vaø aùp duïng cuûa noù vaøo kieåm chöùng tính ñuùng coù ñieàu kieän. - Heä luaät Dijkstra vaø aùp duïng cuûa noù vaøo kieåm chöùng tính ñuùng ñaày ñuû. - Daïng toång quaùt cuûa baøi toaùn kieåm chöùng vaø phöông phaùp kieåm chöùng. Caùc löôïc ñoà kieåm chöùng vaø taäp toái thieåu caùc ñieàu kieän caàn kieåm chöùng. Phuï luïc . Caùc kieán thöùc chung veà logic. Trình baøy caùc kieán thöùc ban ñaàu veà logic meänh ñeà vaø logic taân töø. Phuï luïc cung caáp moät moät taøi lieäu coâ ñoïng veà caùc kieán thöùc logic aùp duïng tröïc tieáp trong phaàn I vaø phaàn II ( noù laø moät phaàn noâi dung cuûa giaùo trình nhaäp moân toaùn) ngöôøi hoïc caàn daønh thôøi gian thích hôïp oân laïi ñeå coù theå theo kòp höôùng tieáp caän cuûa giaùo trình. Cuøng vôùi nhöõng trình baøy lyù thuyeát toång quaùt, taùc gæa ñöa vaøo moät soá thoûa ñaùng caùc ví duï choïn loïc nhaèm giuùp ngöôøi hoïc naém baét ñöôïc baûn chaát cuûa caùc khaùi nieäm, caùc phöông phaùp môùi vaø laøm quen vôùi caùch söû duïng caùc keát quûa môùi. Khi hoïc tröôùc khi tìm caùch giaûi caùc baøi taäp cuûa thaày gíao cung caáp caùc baïn coá gaéng ñoïc vaø hieåu heát caùc ví duï minh hoïa. Vì nhieàu leõ chaéc chaén giaùo trình coøn nhieàu khieám khuyeát. Raát mong taát caû moïi ngöôøi söû duïng chaân thaønh goùp yù. Taùc giaû chaân thaønh caûm ôn caùc ñoàng nghieäp trong khoa Toaùn_Tin ñaõ ñoùng goùp nhieàu yù kieán quyù baùu cho vieäc hình thaønh caáu truùc chi tieát cho noäi dung giaùo trình, chaân thaønh caûm ôn thaïc syõ Voõ Tieán ñaõ ñoùng goùp nhieàu yù kieán quyù baùu trong caáu truùc giaùo trình, giuùp chænh lyù nhieàu khieám khuyeát trong baûn thaûo. ÑaLat ngaøy 01 thaùng 12 naêm 2002 TRAÀN HOAØNG THOÏ Traàn Hoaøng Thoï Khoa Toaùn - Tin Kyõ thuaät laäp trình naâng cao - 5 - PHAÀN I ÑEÄ QUY CHÖÔNG I KHAÙI NIEÄM ÑEÄ QUY I. MÔÛ ÑAÀU 1. Moâ taû ñeä quy Trong nhieàu tình huoáng vieäc moâ taû caùc baøi toaùn, caùc giaûi thuaät, caùc söï kieän, caùc söï vaät caùc quaù trình, caùc caáu truùc, . . . seõ ñôn giaûn vaø hieäu quaû hôn neáu ta nhìn ñöôïc noù döôùi goùc ñoä mang tính ñeä qui. Moâ taû mang tính ñeä qui veà moät ñoái töôïng laø moâ taû theo caùch phaân tích ñoái töôïng thaønh nhieàu thaønh phaàn maø trong soá caùc thaønh phaàn coù thaønh phaàn mang tính chaát cuûa chính ñoái töôïng ñöôïc moâ taû. Töùc laø moâ taû ñoái töôïng qua chính noù. Caùc ví duï : - Moâ taû ñeä quy taäp soá töï nhieân N : + Soá 1 laø soá töï nhieân ( 1 ∈ N) . + Soá töï nhieân baèng soá töï nhieân coäng 1 . ( n ∈ N ⇒ ( n +1 ) ∈ N ) - Moâ taû ñeä quy caáu truùc xaâu (list) kieåu T : + Caáu truùc roãng laø moät xaâu kieåu T. + Gheùp noái moät thaønh phaàn kieåu T(nuùt kieåu T ) vôùi moät xaâu kieåu T ta coù moät xaâu kieåu T. - Moâ taû ñeä quy caây gia phaû : Gia phaû cuûa moät ngöôøi bao goàm mgöôøi ñoù vaø gia phaû cuûa cha vaø gia phaû cuûa meï. - Moâ taû ñeâ quy thuû tuïc choïn hoa haäu : + Choïn hoa haäu cuûa töøng khu vöïc. + Choïn hoa haäu cuûa caùc hoa haäu. - Moâ taû ñeä quy thuû tuïc saép taêng daõy a[m:n] ( daõy a[m], a[m+1], . . . , a[n] ) baèng phöông phaùp Sort_Merge (SM) : SM (a[m:n]) ≡ Merge ( SM(a[m : (n+m) div 2]) , SM (a[(n+m) div 2 +1 : n] ) Vôùi : SM (a[x : x]) laø thao taùc roãng (khoâng laøm gì caû ). Merge (a[x : y] , a[(y+1) : z]) laø thuû tuïc troän 2 daõy taêng a [x : y] , a[(y+1) : z] ñeå ñöôïc moät daõy a[x : z] taêng. - Ñinh nghóa ñeä quy haøm giai thöøa FAC( n) = n ! 0 ! = 1 n ! = n * ( n - 1 ) ! Traàn Hoaøng Thoï Khoa Toaùn - Tin Kyõ thuaät laäp trình naâng cao - 6 - Phöông phaùp ñeä quy maïnh ôû choå noù cho pheùp moâ taû moät taäp lôùn caùc ñoái töôïng chæ bôûi moät soá ít caùc meänh ñeà hoaëc moâ taû moät giaûi thuaät phöùc taïp baèng moät soá ít caùc thao taùc (moät chöông trình con ñeä quy). Moät moâ taû ñeä quy ñaày ñuû goàm 2 phaàn : - Phaàn neo : moâ taû caùc tröôøng hôïp suy bieán cuûa ñoái töôïng (giaûi thuaät) qua moät caáu truùc (thao taùc) cuï theå xaùc ñònh . ví duï: 1 laø soá töï nhieân, caáu truùc roãng laø moät xaâu kieåu T, 0 ! = 1 , SM (a[x:x]) laø thao taùc roãng. - Phaàn quy naïp: moâ taû ñoái töôïng (giaûi thuaät) trong tröôøng hôïp phoå bieán thoâng qua chính ñoái töôïng (giaûi thuaät ) ñoù moät caùch tröïc tieáp hoaëc giaùn tieáp. 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]) ) Neáu trong moâ taû khoâng coù phaàn neo thì ñoái töôïng moâ taû coù caáu truùc lôùn voâ haïn, giaûi thuaät moâ taû trôû thaønh caáu truùc laëp voâ taän. 2. Caùc loaïi ñeä quy Ngöôøi ta phaân ñeä quy thaønh 2 loaïi : Ñeä quy tröïc tieáp, ñeä quy giaùn tieáp. - Ñeä quy tröïc tieáp laø loaïi ñeä quy maø ñoái töôïng ñöôïc moâ taû tröïc tieáp qua noù : A moâ taû qua A, B, C,...trong ñoù B, C, ... khoâng chöùa A. (caùc ví duï treân). - Ñeä quy giaùn tieáp laø loaïi ñeä quy maø ñoái töôïng ñöôïc moâ taû giaùn tieáp qua noù : A moâ taû qua A1 ,A2 ,..., An .Trong ñoù coù moät Ai ñöôïc moâ taû qua A. Ví duï 1: Moâ taû daïng toång quaùt moät chöông trình vieát treân NNLT Pascal : Moät Chöông trình Pascal goàm : a) Ñaàu chöông trình (head) goàm: Program Teân ; b) Thaân chöông trình (blok) goàm : b1) Khai baùo unit, ñònh nghóa haèng, nhaõn, kieåu döõ lieäu, khaùi baùo bieán. b2) Ñònh nghóa caùc chöông trình con goàm : b2.1) Ñaàu chöông trình con : Procedure Teân thuû tuïc ( danh saùch thoâng soá hình thöùc ) ; hoaëc Function Teân haøm ( danh saùch thoâng soá hình thöùc ) : Kieåu ; b2.2) Thaân chöông trình con ( Blok ) b2.3) Daáu ‘ ; ‘ b3) Phaàn leänh : laø moät leänh gheùp daïng : Begin S1 ; S2 ; . . . ; Sn End ; c) Daáu keát thuùc chöông trình : ‘.’ Ví duï 2 : Moâ taû hai daõy soá {Xn},{Yn} theo luaät ñeä quy hoå töông nhö sau : X0 = 1 ; Xn = Xn-1 + Yn-1 ; Y0 = 1 ; Yn =n2 Xn-1 + Yn-1 ; Traàn Hoaøng Thoï Khoa Toaùn - Tin Kyõ thuaät laäp trình naâng cao - 7 - II. MOÂ TAÛ ÑEÄ QUY CAÙC CAÁU TRUÙC DÖÕ LIEÄU Trong toaùn hoïc , trong laäp trình ngöôøi ta thöôøng söû duïng ñeä quy ñeå moâ taû caùc caáu truùc phöùc taïp, coù tính ñeä quy . Bôûi moâ taû ñeä quy khoâng chæ laø caùch moâ taû ngaén goïn caùc caáu truùc phöùc taïp maø coøn taïo khaû naêng ñeå xaây döïng caùc thao taùc xöû lyù treân caùc caáu truùc phöùc taïp baèng caùc giaûi thuaät ñeä qui . Moät caáu truùc döõ lieäu coù tính ñeä quy thöôøng goàm moät soá thaønh phaàn döõ lieäu cuøng kieåu ñöôïc gheùp noái theo cuøng moät phöông thöùc . Ví duï 1: Moâ taû ñeä quy caây nhi phaân : Caây nhi phaân kieåu T : + Hoaëc laø moät caáu truùc roãng (phaàn neo). + Hoaëc laø moät nuùt kieåu T (nuùt goác) vaø 2 caây nhò phaân kieåu T rôøi nhau (caây con nhò phaân phaûi, caây con nhò phaân traùi) keát hôïp vôùi nhau . Ví duï 2: Moâ taû ñeä quy maûng nhieàu chieàu : + Maûng moät chieàu laø daõy coù thöù töï caùc thaønh phaàn cuøng kieåu . + Maûng n chieàu laø maûng 1 chieàu maø caùc thaønh phaàn coù kieåu maûng n-1 chieàu . III. MOÂ TAÛ ÑEÄ QUY GIAÛI THUAÄT 1. Giaûi thuaät ñeä quy. Giaûi thuaät ñeä quy laø giaûi thuaät coù chöùa thao taùc goïi ñeán noù . Giaûi thuaät ñeä quy cho pheùp moâ taû moät daõy lôùn caùc thao taùc baèng moät soá ít caùc thao taùc trong ñoù coù chöùa thao taùc goïi laïi giaûi thuaät (goïi ñeä quy) . Moät caùch toång quaùt moät giaûi thuaät ñeä quy ñöôïc bieåu dieãn nhö moät boä P goàm meänh ñeà S (khoâng chöùa yeáu toá ñeä quy ) vaø P : P ≡ P[ S , P ] . Thöïc thi giaûi thuaät ñeä quy coù theå daãn tôùi moät tieán trình goïi ñeâ quy khoâng keát thuùc khi noù khoâng coù khaû naêng gaëp tröôøng hôïp neo, vì vaäy quan taâm ñeán ñieàu kieän döøng cuûa moät giaûi thuaät ñeä quy luoân ñöôïc ñaët ra . Ñeå kieåm soaùt quùa trình goïi ñeä quy cuûa giaûi thuaät ñeä quy P ngöôøi ta thöôøng gaén thao taùc goïi P vôùi vieäc kieåm tra moät ñieàu kieän B xaùc ñònh vaø bieán ñoåi qua moãi laàn goïi P , quùa trình goïi P seû döøng khi B khoâng con thoûa. Moâ hình toång quaùt cuûa moät giaûi thuaät ñeä quy vôùi söï quan taâm ñeán söï döøng seû laø : P if B then P[ S , P ] ≡ hoaëc P P[ S , if B then P ] ≡ Thoâng thöôøng vôùi giaûi thuaät ñeä quy P , ñeå ñaûm baûo P seû döøng sau n laàn goïi ta choïn B laø ( n >0 ) . Moâ hình giaûi thuaät ñeä quy khi ñ
Tài liệu đính kèm: