giải thuật và lập trình pascalđầy dủ các thuật toán giải pascal từ cơ bản đến nâng cao: giải tuyến tính, tổ hợp,...
L L Ê Ê M M I I N N H H HOÀ HOÀ N N G G (A.K.A DSAP Textbook) i hc S phm Hà Ni, 1999-2002 Try not to become a man of success but rather to become a man of value. Albert Einstein i MC LC PHN 1. BÀI TOÁN LIT KÊ . 1 §1. NHC LI MT S KIN THC I S T HP 2 1.1. CHNH HP LP . 2 1.2. CHNH HP KHÔNG LP 2 1.3. HOÁN V 2 1.4. T HP . 3 §2. PHNG PHÁP SINH (GENERATION) 4 2.1. SINH CÁC DÃY NH PHÂN DÀI N . 5 2.2. LIT KÊ CÁC TP CON K PHN T . 6 2.3. LIT KÊ CÁC HOÁN V . 8 §3. THUT TOÁN QUAY LUI 12 3.1. LIT KÊ CÁC DÃY NH PHÂN DÀI N . 12 3.2. LIT KÊ CÁC TP CON K PHN T . 13 3.3. LIT KÊ CÁC CHNH HP KHÔNG LP CHP K . 15 3.4. BÀI TOÁN PHÂN TÍCH S 17 3.5. BÀI TOÁN XP HU 19 §4. K THUT NHÁNH CN .24 4.1. BÀI TOÁN TI U 24 4.2. S BÙNG N T HP 24 4.3. MÔ HÌNH K THUT NHÁNH CN 24 4.4. BÀI TOÁN NGI DU LCH . 25 4.5. DÃY ABC . 27 PHN 2. CU TRÚC D LIU VÀ GII THUT . 33 §1. CÁC BC C BN KHI TIN HÀNH GII CÁC BÀI TOÁN TIN HC .34 1.1. XÁC NH BÀI TOÁN 34 1.2. TÌM CU TRÚC D LIU BIU DIN BÀI TOÁN .34 1.3. TÌM THUT TOÁN .35 1.4. LP TRÌNH 37 1.5. KIM TH 37 1.6. TI U CHNG TRÌNH 38 §2. PHÂN TÍCH THI GIAN THC HIN GII THUT .40 2.1. GII THIU 40 2.2. CÁC KÝ PHÁP ÁNH GIÁ PHC TP TÍNH TOÁN . 40 2.3. XÁC NH PHC TP TÍNH TOÁN CA GII THUT 42 2.4. PHC TP TÍNH TOÁN VI TÌNH TRNG D LIU VÀO . 45 2.5. CHI PHÍ THC HIN THUT TOÁN 46 ii §3. QUY VÀ GII THUT QUY . 50 3.1. KHÁI NIM V QUY 50 3.2. GII THUT QUY .50 3.3. VÍ D V GII THUT QUY 51 3.4. HIU LC CA QUY .55 §4. CU TRÚC D LIU BIU DIN DANH SÁCH 58 4.1. KHÁI NIM DANH SÁCH 58 4.2. BIU DIN DANH SÁCH TRONG MÁY TÍNH 58 §5. NGN XP VÀ HÀNG I 64 5.1. NGN XP (STACK) .64 5.2. HÀNG I (QUEUE) .66 §6. CÂY (TREE) 70 6.1. NH NGHA 70 6.2. CÂY NH PHÂN (BINARY TREE) .71 6.3. BIU DIN CÂY NH PHÂN 73 6.4. PHÉP DUYT CÂY NH PHÂN 74 6.5. CÂY K_PHÂN 76 6.6. CÂY TNG QUÁT .77 §7. KÝ PHÁP TIN T, TRUNG T VÀ HU T . 79 7.1. BIU THC DI DNG CÂY NH PHÂN .79 7.2. CÁC KÝ PHÁP CHO CÙNG MT BIU THC 79 7.3. CÁCH TÍNH GIÁ TR BIU THC 79 7.4. CHUYN T DNG TRUNG T SANG DNG HU T .83 7.5. XÂY DNG CÂY NH PHÂN BIU DIN BIU THC 86 §8. SP XP (SORTING) 88 8.1. BÀI TOÁN SP XP 88 8.2. THUT TOÁN SP XP KIU CHN (SELECTIONSORT) .90 8.3. THUT TOÁN SP XP NI BT (BUBBLESORT) .91 8.4. THUT TOÁN SP XP KIU CHÈN (INSERTIONSORT) 91 8.5. SP XP CHÈN VI DÀI BC GIM DN (SHELLSORT) .93 8.6. THUT TOÁN SP XP KIU PHÂN ON (QUICKSORT) 94 8.7. THUT TOÁN SP XP KIU VUN NG (HEAPSORT) 101 8.8. SP XP BNG PHÉP M PHÂN PHI (DISTRIBUTION COUNTING) 104 8.9. TÍNH N NH CA THUT TOÁN SP XP (STABILITY) .105 8.10. THUT TOÁN SP XP BNG C S (RADIX SORT) .106 8.11. THUT TOÁN SP XP TRN (MERGESORT) 111 8.12. CÀI T .114 8.13. ÁNH GIÁ, NHN XÉT 122 §9. TÌM KIM (SEARCHING) . 126 9.1. BÀI TOÁN TÌM KIM .126 9.2. TÌM KIM TUN T (SEQUENTIAL SEARCH) .126 9.3. TÌM KIM NH PHÂN (BINARY SEARCH) 126 9.4. CÂY NH PHÂN TÌM KIM (BINARY SEARCH TREE - BST) .127 iii 9.5. PHÉP BM (HASH) . 132 9.6. KHOÁ S VI BÀI TOÁN TÌM KIM 132 9.7. CÂY TÌM KIM S HC (DIGITAL SEARCH TREE - DST) 133 9.8. CÂY TÌM KIM C S (RADIX SEARCH TREE - RST) 136 9.9. NHNG NHN XÉT CUI CÙNG 141 PHN 3. QUY HOCH NG 143 §1. CÔNG THC TRUY HI 144 1.1. VÍ D 144 1.2. CI TIN TH NHT . 145 1.3. CI TIN TH HAI . 147 1.4. CÀI T QUY . 147 §2. PHNG PHÁP QUY HOCH NG .149 2.1. BÀI TOÁN QUY HOCH . 149 2.2. PHNG PHÁP QUY HOCH NG 149 §3. MT S BÀI TOÁN QUY HOCH NG 153 3.1. DÃY CON N IU TNG DÀI NHT . 153 3.2. BÀI TOÁN CÁI TÚI . 158 3.3. BIN I XÂU 160 3.4. DÃY CON CÓ TNG CHIA HT CHO K 164 3.5. PHÉP NHÂN T HP DÃY MA TRN . 169 3.6. BÀI TP LUYN TP . 172 PHN 4. CÁC THUT TOÁN TRÊN TH 177 §1. CÁC KHÁI NIM C BN .178 1.1. NH NGHA TH (GRAPH) 178 1.2. CÁC KHÁI NIM . 179 §2. BIU DIN TH TRÊN MÁY TÍNH 181 2.1. MA TRN K (ADJACENCY MATRIX) . 181 2.2. DANH SÁCH CNH (EDGE LIST) 182 2.3. DANH SÁCH K (ADJACENCY LIST) . 183 2.4. NHN XÉT . 184 §3. CÁC THUT TOÁN TÌM KIM TRÊN TH .186 3.1. BÀI TOÁN 186 3.2. THUT TOÁN TÌM KIM THEO CHIU SÂU (DEPTH FIRST SEARCH) 187 3.3. THUT TOÁN TÌM KIM THEO CHIU RNG (BREADTH FIRST SEARCH) 189 3.4. PHC TP TÍNH TOÁN CA BFS VÀ DFS 192 §4. TÍNH LIÊN THÔNG CA TH 193 4.1. NH NGHA . 193 4.2. TÍNH LIÊN THÔNG TRONG TH VÔ HNG . 194 iv 4.3. TH Y VÀ THUT TOÁN WARSHALL .194 4.4. CÁC THÀNH PHN LIÊN THÔNG MNH 197 §5. VÀI NG DNG CA DFS và BFS . 208 5.1. XÂY DNG CÂY KHUNG CA TH 208 5.2. TP CÁC CHU TRÌNH C S CA TH 211 5.3. BÀI TOÁN NH CHIU TH 211 5.4. LIT KÊ CÁC KHP VÀ CU CA TH 215 §6. CHU TRÌNH EULER, NG I EULER, TH EULER . 219 6.1. BÀI TOÁN 7 CÁI CU 219 6.2. NH NGHA 219 6.3. NH LÝ .219 6.4. THUT TOÁN FLEURY TÌM CHU TRÌNH EULER .220 6.5. CÀI T .221 6.6. THUT TOÁN TT HN 223 §7. CHU TRÌNH HAMILTON, NG I HAMILTON, TH HAMILTON 226 7.1. NH NGHA 226 7.2. NH LÝ .226 7.3. CÀI T .227 §8. BÀI TOÁN NG I NGN NHT . 231 8.1. TH CÓ TRNG S .231 8.2. BÀI TOÁN NG I NGN NHT .231 8.3. TRNG HP TH KHÔNG CÓ CHU TRÌNH ÂM - THUT TOÁN FORD BELLMAN .233 8.4. TRNG HP TRNG S TRÊN CÁC CUNG KHÔNG ÂM - THUT TOÁN DIJKSTRA .235 8.5. THUT TOÁN DIJKSTRA VÀ CU TRÚC HEAP .238 8.6. TRNG HP TH KHÔNG CÓ CHU TRÌNH - SP XP TÔ PÔ 241 8.7. NG I NGN NHT GIA MI CP NH - THUT TOÁN FLOYD .244 8.8. NHN XÉT .246 §9. BÀI TOÁN CÂY KHUNG NH NHT . 251 9.1. BÀI TOÁN CÂY KHUNG NH NHT 251 9.2. THUT TOÁN KRUSKAL (JOSEPH KRUSKAL - 1956) .251 9.3. THUT TOÁN PRIM (ROBERT PRIM - 1957) 256 §10. BÀI TOÁN LUNG CC I TRÊN MNG 260 10.1. CÁC KHÁI NIM .260 10.2. MNG THNG D VÀ NG TNG LUNG 263 10.3. THUT TOÁN FORD-FULKERSON (L.R.FORD & D.R.FULKERSON - 1962) .266 10.4. THUT TOÁN PREFLOW-PUSH (GOLDBERG - 1986) 270 10.5. MT S M RNG .276 §11. BÀI TOÁN TÌM B GHÉP CC I TRÊN TH HAI PHÍA 283 11.1. TH HAI PHÍA (BIPARTITE GRAPH) .283 11.2. BÀI TOÁN GHÉP ÔI KHÔNG TRNG VÀ CÁC KHÁI NIM .283 11.3. THUT TOÁN NG M .284 11.4. CÀI T .285 v §12. BÀI TOÁN TÌM B GHÉP CC I VI TRNG S CC TIU TRÊN TH HAI PHÍA - THUT TOÁN HUNGARI .291 12.1. BÀI TOÁN PHÂN CÔNG 291 12.2. PHÂN TÍCH 291 12.3. THUT TOÁN 292 12.4. BÀI TOÁN TÌM B GHÉP CC I VI TRNG S CC I TRÊN TH HAI PHÍA .301 12.5. NÂNG CP . 301 §13. BÀI TOÁN TÌM B GHÉP CC I TRÊN TH .307 13.1. CÁC KHÁI NIM . 307 13.2. THUT TOÁN EDMONDS (1965) . 308 13.3. THUT TOÁN LAWLER (1973) . 310 13.4. CÀI T . 312 13.5. PHC TP TÍNH TOÁN . 316 TÀI LIU C THÊM 319 vi HÌNH V Hình 1: Cây tìm kim quay lui trong bài toán lit kê dãy nh phân .13 Hình 2: Xp 8 quân hu trên bàn c 8x8 .19 Hình 3: ng chéo B-TN mang ch s 10 và đng chéo N-TB mang ch s 0 20 Hình 4: Lu đ thut gii (Flowchart) .36 Hình 5: Ký pháp Θ ln, Ο ln và Ω ln 41 Hình 6: Tháp Hà Ni .54 Hình 7: Cu trúc nút ca danh sách ni đn 59 Hình 8: Danh sách ni đn 59 Hình 9: Cu trúc nút ca danh sách ni kép 61 Hình 10: Danh sách ni kép .61 Hình 11: Danh sách ni vòng mt hng 61 Hình 12: Danh sách ni vòng hai hng .62 Hình 13: Dùng danh sách vòng mô t Queue 67 Hình 14: Di chuyn toa tàu 69 Hình 15: Di chuyn toa tàu (2) 69 Hình 16: Cây 70 Hình 17: Mc ca các nút trên cây 71 Hình 18: Cây biu din biu thc 71 Hình 19: Các dng cây nh phân suy bin 72 Hình 20: Cây nh phân hoàn chnh và cây nh phân đy đ .72 Hình 21: ánh s các nút ca cây nh phân đy đ đ biu din bng mng 73 Hình 22: Nhc đim ca phng pháp biu din cây bng mng .73 Hình 23: Cu trúc nút ca cây nh phân .74 Hình 24: Biu din cây bng cu trúc liên kt .74 Hình 25: ánh s các nút ca cây 3_phân đ biu din bng mng 76 Hình 26: Biu din cây tng quát bng mng 77 Hình 27: Cu trúc nút ca cây tng quát 78 Hình 28: Biu thc di dng cây nh phân 79 Hình 29: Vòng lp trong ca QuickSort 95 Hình 30: Trng thái trc khi gi đ quy 96 Hình 31: Heap 102 Hình 32: Vun đng 102 Hình 33: o giá tr k[1] cho k[n] và xét phn còn li 103 Hình 34: Vun phn còn li thành đng ri li đo tr k[1] cho k[n-1] .103 Hình 35: ánh s các bit .106 Hình 36: Thut toán sp xp trn .111 vii Hình 37: Máy Pentium 4, 3.2GHz, 2GB RAM t ra chm chp khi sp xp 10 8 khoá ∈ [0 7.10 7 ] cho dù nhng thut toán sp xp tt nht đã đc áp dng 123 Hình 38: Cây nh phân tìm kim . 128 Hình 39: Xóa nút lá cây BST . 129 Hình 40. Xóa nút ch có mt nhánh con trên cây BST 130 Hình 41: Xóa nút có c hai nhánh con trên cây BST thay bng nút cc phi ca cây con trái 130 Hình 42: Xóa nút có c hai nhánh con trên cây BST thay bng nút cc trái ca cây con phi 130 Hình 43: ánh s các bit . 133 Hình 44: Cây tìm kim s hc . 133 Hình 45: Cây tìm kim c s . 136 Hình 46: Vi đ dài dãy bit z = 3, cây tìm kim c s gm các khoá 2, 4, 5 và sau khi thêm giá tr 7 . 137 Hình 47: RST cha các khoá 2, 4, 5, 7 và RST sau khi loi b giá tr 7 . 138 Hình 48: Cây tìm kim c s a) và Trie tìm kim c s b) 140 Hình 49: Hàm đ quy tính s Fibonacci 151 Hình 50: Tính toán và truy vt 154 Hình 51: Truy vt 163 Hình 52: Ví d v mô hình đ th 178 Hình 53: Phân loi đ th . 179 Hình 54 182 Hình 55 183 Hình 56: th và đng đi 186 Hình 57: Cây DFS . 189 Hình 58: Cây BFS . 192 Hình 59: th G và các thành phn liên thông G1, G2, G3 ca nó 193 Hình 60: Khp và cu 193 Hình 61: Liên thông mnh và liên thông yu 194 Hình 62: th đy đ 195 Hình 63: n đ th vô hng và bao đóng ca nó . 195 Hình 64: Ba dng cung ngoài cây DFS .199 Hình 65: Thut toán Tarjan “b” cây DFS 201 Hình 66: ánh s li, đo chiu các cung và duyt BFS vi cách chn các đnh xut phát ngc li vi th t duyt xong (th t 11, 10… 3, 2, 1) . 206 Hình 67: th G và mt s ví d cây khung T1, T2, T3 ca nó . 210 Hình 68: Cây khung DFS (a) và cây khung BFS (b) (Mi tên ch chiu đi thm các đnh) 210 Hình 69: Phép đnh chiu DFS 213 Hình 70: Phép đánh s và ghi nhn cung ngc lên cao nht . 215 Hình 71: Mô hình đ th ca bài toán by cái cu . 219 Hình 72 220 Hình 73 220 Hình 74 226 viii Hình 75: Phép đánh li ch s theo th t tôpô 241 Hình 76: Hai cây gc r 1 và r 2 và cây mi khi hp nht chúng .252 Hình 77: Mng vi các kh nng thông qua (1 phát, 6 thu) và mt lung ca nó vi giá tr 7 260 Hình 78: Mng G và mng thng d G f tng ng (ký hiu f[u,v]:c[u,v] ch lung f[u, v] và kh nng thông qua c[u, v] trên cung (u, v)) 264 Hình 79: Mng thng d và đng tng lung 265 Hình 80: Lung trên mng G trc và sau khi tng .265 Hình 81: Mng gi ca mng có nhiu đim phát và nhiu đim thu 276 Hình 82: Thay mt đnh u bng hai đnh u in , u out .277 Hình 83: Mng gi ca mng có kh nng thông qua ca các cung b chn hai phía 277 Hình 84: th hai phía 283 Hình 85: th hai phía và b ghép M .284 Hình 86: Mô hình lung ca bài toán tìm b ghép cc đi trên đ th hai phía .288 Hình 87: Phép xoay trng s cnh .292 Hình 88: Thut toán Hungari .295 Hình 89: Cây pha “mc” ln hn sau mi ln xoay trng s cnh và tìm đng 302 Hình 90: th G và mt b ghép M 307 Hình 91: Phép chp Blossom .309 Hình 92: N Blossom đ dò đng xuyên qua Blossom .309 . phn đi xng: Nu a ≤ b và b ≤ a thì bt buc a = b. Tính bc cu: Nu có a ≤ b và b ≤ c thì a ≤ c. Trong trng hp a ≤ b và a ≠ b, ta dùng ký hiu. 5.4. LIT KÊ CÁC KHP VÀ CU CA TH 215 §6. CHU TRÌNH EULER, NG