Giai thuat va lap trinh
LÊ MINH HOÀNG Bài ging chuyên đ i hc S phm Hà Ni, 1999-2002 Li cm n Tôi mun bày t lòng bit n đi vi nhng ngi thy đã ch dy tn tình trong nhng nm tháng đy khó khn khi tôi mi bc vào hc tin hc và lp trình. S hiu bit và lòng nhit tình ca các thy không nhng đã cung cp cho tôi nhng kin thc quý báu mà còn là tm gng sáng cho tôi noi theo khi tôi đng trên bc ging cng vi t cách là mt ngi thy. Cun tài liu này đc vit da trên nhng tài liu thu thp đc t nhiu ngun khác nhau, bi công sc ca nhiu th h thy trò đã tng ging dy và hc tp ti Khi Ph thông chuyên Toán- Tin, i hc S phm Hà Ni, còn tôi ch là ngi tng hp li. Qua đây, tôi mun gi li cm n ti các đng nghip đã đc và đóng góp nhng ý kin quí báu, cm n các bn hc sinh - nhng con ngi đã trc tip làm nên cun sách này. Do thi gian hn hp, mt s chuyên đ tuy đã có nhng cha kp chnh sa và đa vào tài liu. Bn đc có th tham kho thêm trong phn tra cu. Rt mong nhn đc nhng li nhn xét và góp ý ca các bn đ hoàn thin cun sách này. Tokyo, 28 tháng 4 nm 2003 Lê Minh Hoàng 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 .16 3.5. BÀI TOÁN XP HU .18 §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 28 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. PHC TP TÍNH TOÁN CA GII THUT 40 2.2. XÁC NH PHC TP TÍNH TOÁN CA GII THUT 40 2.3. PHC TP TÍNH TOÁN VI TÌNH TRNG D LIU VÀO 43 2.4. CHI PHÍ THC HIN THUT TOÁN .43 ii §3. QUY VÀ GII THUT QUY . 45 3.1. KHÁI NIM V QUY 45 3.2. GII THUT QUY 45 3.3. VÍ D V GII THUT QUY 46 3.4. HIU LC CA QUY . 50 §4. CU TRÚC D LIU BIU DIN DANH SÁCH 52 4.1. KHÁI NIM DANH SÁCH 52 4.2. BIU DIN DANH SÁCH TRONG MÁY TÍNH 52 §5. NGN XP VÀ HÀNG I 58 5.1. NGN XP (STACK) . 58 5.2. HÀNG I (QUEUE) . 60 §6. CÂY (TREE) 64 6.1. NH NGHA . 64 6.2. CÂY NH PHÂN (BINARY TREE) . 65 6.3. BIU DIN CÂY NH PHÂN 67 6.4. PHÉP DUYT CÂY NH PHÂN 69 6.5. CÂY K_PHÂN 70 6.6. CÂY TNG QUÁT . 71 §7. KÝ PHÁP TIN T, TRUNG T VÀ HU T . 74 7.1. BIU THC DI DNG CÂY NH PHÂN . 74 7.2. CÁC KÝ PHÁP CHO CÙNG MT BIU THC 74 7.3. CÁCH TÍNH GIÁ TR BIU THC 75 7.4. CHUYN T DNG TRUNG T SANG DNG HU T . 78 7.5. XÂY DNG CÂY NH PHÂN BIU DIN BIU THC 80 §8. SP XP (SORTING) 82 8.1. BÀI TOÁN SP XP 82 8.2. THUT TOÁN SP XP KIU CHN (SELECTIONSORT) . 84 8.3. THUT TOÁN SP XP NI BT (BUBBLESORT) . 85 8.4. THUT TOÁN SP XP KIU CHÈN . 85 8.5. SHELLSORT . 87 8.6. THUT TOÁN SP XP KIU PHÂN ON (QUICKSORT) 88 8.7. THUT TOÁN SP XP KIU VUN NG (HEAPSORT) 92 8.8. SP XP BNG PHÉP M PHÂN PHI (DISTRIBUTION COUNTING) . 95 8.9. TÍNH N NH CA THUT TOÁN SP XP (STABILITY) . 96 8.10. THUT TOÁN SP XP BNG C S (RADIXSORT) 97 8.11. THUT TOÁN SP XP TRN (MERGESORT) 102 8.12. CÀI T . 105 8.13. ÁNH GIÁ, NHN XÉT 112 §9. TÌM KIM (SEARCHING) . 116 iii 9.1. BÀI TOÁN TÌM KIM 116 9.2. TÌM KIM TUN T (SEQUENTIAL SEARCH) 116 9.3. TÌM KIM NH PHÂN (BINARY SEARCH) 116 9.4. CÂY NH PHÂN TÌM KIM (BINARY SEARCH TREE - BST) .117 9.5. PHÉP BM (HASH) 122 9.6. KHOÁ S VI BÀI TOÁN TÌM KIM .122 9.7. CÂY TÌM KIM S HC (DIGITAL SEARCH TREE - DST) .123 9.8. CÂY TÌM KIM C S (RADIX SEARCH TREE - RST) .126 9.9. NHNG NHN XÉT CUI CÙNG .131 PHN 3. QUY HOCH NG 133 §1. CÔNG THC TRUY HI 134 1.1. VÍ D .134 1.2. CI TIN TH NHT 135 1.3. CI TIN TH HAI 137 1.4. CÀI T QUY 137 §2. PHNG PHÁP QUY HOCH NG .139 2.1. BÀI TOÁN QUY HOCH 139 2.2. PHNG PHÁP QUY HOCH NG .139 §3. MT S BÀI TOÁN QUY HOCH NG 143 3.1. DÃY CON N IU TNG DÀI NHT 143 3.2. BÀI TOÁN CÁI TÚI 148 3.3. BIN I XÂU .150 3.4. DÃY CON CÓ TNG CHIA HT CHO K .154 3.5. PHÉP NHÂN T HP DÃY MA TRN 159 3.6. BÀI TP LUYN TP 163 PHN 4. CÁC THUT TOÁN TRÊN TH 169 §1. CÁC KHÁI NIM C BN .170 1.1. NH NGHA TH (GRAPH) .170 1.2. CÁC KHÁI NIM 171 §2. BIU DIN TH TRÊN MÁY TÍNH 173 2.1. MA TRN LIN K (MA TRN K) .173 2.2. DANH SÁCH CNH .174 2.3. DANH SÁCH K .175 2.4. NHN XÉT 176 §3. CÁC THUT TOÁN TÌM KIM TRÊN TH .177 3.1. BÀI TOÁN .177 3.2. THUT TOÁN TÌM KIM THEO CHIU SÂU (DEPTH FIRST SEARCH) .178 3.3. THUT TOÁN TÌM KIM THEO CHIU RNG (BREADTH FIRST SEARCH) .184 iv 3.4. PHC TP TÍNH TOÁN CA BFS VÀ DFS 189 §4. TÍNH LIÊN THÔNG CA TH . 190 4.1. NH NGHA . 190 4.2. TÍNH LIÊN THÔNG TRONG TH VÔ HNG 191 4.3. TH Y VÀ THUT TOÁN WARSHALL . 191 4.4. CÁC THÀNH PHN LIÊN THÔNG MNH 195 §5. VÀI NG DNG CA CÁC THUT TOÁN TÌM KIM TRÊN TH . 205 5.1. XÂY DNG CÂY KHUNG CA TH . 205 5.2. TP CÁC CHU TRÌNH C BN CA TH 208 5.3. NH CHIU TH VÀ BÀI TOÁN LIT KÊ CU 208 5.4. LIT KÊ KHP 214 §6. CHU TRÌNH EULER, NG I EULER, TH EULER . 218 6.1. BÀI TOÁN 7 CÁI CU 218 6.2. NH NGHA . 218 6.3. NH LÝ . 218 6.4. THUT TOÁN FLEURY TÌM CHU TRÌNH EULER . 219 6.5. CÀI T . 220 6.6. THUT TOÁN TT HN . 222 §7. CHU TRÌNH HAMILTON, NG I HAMILTON, TH HAMILTON 225 7.1. NH NGHA . 225 7.2. NH LÝ . 225 7.3. CÀI T . 226 §8. BÀI TOÁN NG I NGN NHT 230 8.1. TH CÓ TRNG S . 230 8.2. BÀI TOÁN NG I NGN NHT . 230 8.3. TRNG HP TH KHÔNG CÓ CHU TRÌNH ÂM - THUT TOÁN FORD BELLMAN . 232 8.4. TRNG HP TRNG S TRÊN CÁC CUNG KHÔNG ÂM - THUT TOÁN DIJKSTRA . 234 8.5. THUT TOÁN DIJKSTRA VÀ CU TRÚC HEAP . 237 8.6. TRNG HP TH KHÔNG CÓ CHU TRÌNH - TH T TÔ PÔ 240 8.7. NG I NGN NHT GIA MI CP NH - THUT TOÁN FLOYD . 242 8.8. NHN XÉT . 245 §9. BÀI TOÁN CÂY KHUNG NH NHT . 247 9.1. BÀI TOÁN CÂY KHUNG NH NHT 247 9.2. THUT TOÁN KRUSKAL (JOSEPH KRUSKAL - 1956) . 247 9.3. THUT TOÁN PRIM (ROBERT PRIM - 1957) 252 §10. BÀI TOÁN LUNG CC I TRÊN MNG 256 10.1. BÀI TOÁN 256 10.2. LÁT CT, NG TNG LUNG, NH LÝ FORD - FULKERSON . 256 10.3. CÀI T . 258 v 10.4. THUT TOÁN FORD - FULKERSON (L.R.FORD & D.R.FULKERSON - 1962) 262 §11. BÀI TOÁN TÌM B GHÉP CC I TRÊN TH HAI PHÍA .266 11.1. TH HAI PHÍA (BIPARTITE GRAPH) 266 11.2. BÀI TOÁN GHÉP ÔI KHÔNG TRNG VÀ CÁC KHÁI NIM 266 11.3. THUT TOÁN NG M 267 11.4. CÀI T 268 §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 .273 12.1. BÀI TOÁN PHÂN CÔNG .273 12.2. PHÂN TÍCH .273 12.3. THUT TOÁN 274 12.4. CÀI T 278 12.5. BÀI TOÁN TÌM B GHÉP CC I VI TRNG S CC I TRÊN TH HAI PHÍA .284 12.6. NÂNG CP 284 §13. BÀI TOÁN TÌM B GHÉP CC I TRÊN TH 290 13.1. CÁC KHÁI NIM 290 13.2. THUT TOÁN EDMONDS (1965) 291 13.3. PHNG PHÁP LAWLER (1973) .293 13.4. CÀI T 295 13.5. PHC TP TÍNH TOÁN .299 TÀI LIU C THÊM 301 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 19 Hình 4: Lu đ thut gii (Flowchart) 36 Hình 5: Tháp Hà Ni 49 Hình 6: Cu trúc nút ca danh sách ni đn . 53 Hình 7: Danh sách ni đn . 53 Hình 8: Cu trúc nút ca danh sách ni kép . 55 Hình 9: Danh sách ni kép . 55 Hình 10: Danh sách ni vòng mt hng . 55 Hình 11: Danh sách ni vòng hai hng 56 Hình 12: Dùng danh sách vòng mô t Queue . 61 Hình 13: Di chuyn toa tàu . 63 Hình 14: Di chuyn toa tàu (2) . 63 Hình 15: Cây 64 Hình 16: Mc ca các nút trên cây . 65 Hình 17: Cây biu din biu thc . 65 Hình 18: Các dng cây nh phân suy bin 66 Hình 19: Cây nh phân hoàn chnh và cây nh phân đy đ . 66 Hình 20: ánh s các nút ca cây nh phân đy đ đ biu din bng mng . 67 Hình 21: Nhc đim ca phng pháp biu din cây bng mng 68 Hình 22: Cu trúc nút ca cây nh phân .68 Hình 23: Biu din cây bng cu trúc liên kt 69 Hình 24: ánh s các nút ca cây 3_phân đ biu din bng mng . 71 Hình 25: Biu din cây tng quát bng mng 72 Hình 26: Cu trúc nút ca cây tng quát 73 Hình 27: Biu thc di dng cây nh phân . 74 Hình 28: Vòng lp trong ca QuickSort . 89 Hình 29: Trng thái trc khi gi đ quy . 90 Hình 30: Heap 92 Hình 31: Vun đng . 93 Hình 32: o giá tr k 1 cho k n và xét phn còn li 93 Hình 33: Vun phn còn li thành đng ri li đo tr k 1 cho k n-1 94 Hình 34: ánh s các bit 97 Hình 35: Thut toán sp xp trn . 102 Hình 36: Cài đt các thut toán sp xp vi d liu ln . 114 Hình 37: Cây nh phân tìm kim 118 Hình 38: Xóa nút lá cây BST 119 Hình 39. Xóa nút ch có mt nhánh con trên cây BST . 120 . InputFile = 'BSTR.INP'; OutputFile = 'BSTR.OUT'; max = 30; var x: array[1..max] of Integer; n, i: Integer; f: Text; begin Assign(f, InputFile);