giải thuật và lập trình pascal

334 698 6
giải thuật và lập trình pascal

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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 hc S phm Hà Ni, 1999-2002 Try not to become a man of success but rather to become a man of value. Albert Einstein  i  MC LC PHN 1. BÀI TOÁN LIT KÊ . 1 §1. NHC LI MT S KIN THC I S T HP 2 1.1. CHNH HP LP . 2 1.2. CHNH HP KHÔNG LP 2 1.3. HOÁN V 2 1.4. T HP . 3 §2. PHNG PHÁP SINH (GENERATION) 4 2.1. SINH CÁC DÃY NH PHÂN  DÀI N . 5 2.2. LIT KÊ CÁC TP CON K PHN T . 6 2.3. LIT KÊ CÁC HOÁN V . 8 §3. THUT TOÁN QUAY LUI 12 3.1. LIT KÊ CÁC DÃY NH PHÂN  DÀI N . 12 3.2. LIT KÊ CÁC TP CON K PHN T . 13 3.3. LIT KÊ CÁC CHNH HP KHÔNG LP CHP K . 15 3.4. BÀI TOÁN PHÂN TÍCH S 17 3.5. BÀI TOÁN XP HU 19 §4. K THUT NHÁNH CN .24 4.1. BÀI TOÁN TI U 24 4.2. S BÙNG N T HP 24 4.3. MÔ HÌNH K THUT NHÁNH CN 24 4.4. BÀI TOÁN NGI DU LCH . 25 4.5. DÃY ABC . 27 PHN 2. CU TRÚC D LIU GII THUT . 33 §1. CÁC BC C BN KHI TIN HÀNH GII CÁC BÀI TOÁN TIN HC .34 1.1. XÁC NH BÀI TOÁN 34 1.2. TÌM CU TRÚC D LIU BIU DIN BÀI TOÁN .34 1.3. TÌM THUT TOÁN .35 1.4. LP TRÌNH 37 1.5. KIM TH 37 1.6. TI U CHNG TRÌNH 38 §2. PHÂN TÍCH THI GIAN THC HIN GII THUT .40 2.1. GII THIU 40 2.2. CÁC KÝ PHÁP  ÁNH GIÁ  PHC TP TÍNH TOÁN . 40 2.3. XÁC NH  PHC TP TÍNH TOÁN CA GII THUT 42 2.4.  PHC TP TÍNH TOÁN VI TÌNH TRNG D LIU VÀO . 45 2.5. CHI PHÍ THC HIN THUT TOÁN 46  ii  §3.  QUY GII THUT  QUY . 50 3.1. KHÁI NIM V  QUY 50 3.2. GII THUT  QUY .50 3.3. VÍ D V GII THUT  QUY 51 3.4. HIU LC CA  QUY .55 §4. CU TRÚC D LIU BIU DIN DANH SÁCH 58 4.1. KHÁI NIM DANH SÁCH 58 4.2. BIU DIN DANH SÁCH TRONG MÁY TÍNH 58 §5. NGN XP HÀNG I 64 5.1. NGN XP (STACK) .64 5.2. HÀNG I (QUEUE) .66 §6. CÂY (TREE) 70 6.1. NH NGHA 70 6.2. CÂY NH PHÂN (BINARY TREE) .71 6.3. BIU DIN CÂY NH PHÂN 73 6.4. PHÉP DUYT CÂY NH PHÂN 74 6.5. CÂY K_PHÂN 76 6.6. CÂY TNG QUÁT .77 §7. KÝ PHÁP TIN T, TRUNG T HU T . 79 7.1. BIU THC DI DNG CÂY NH PHÂN .79 7.2. CÁC KÝ PHÁP CHO CÙNG MT BIU THC 79 7.3. CÁCH TÍNH GIÁ TR BIU THC 79 7.4. CHUYN T DNG TRUNG T SANG DNG HU T .83 7.5. XÂY DNG CÂY NH PHÂN BIU DIN BIU THC 86 §8. SP XP (SORTING) 88 8.1. BÀI TOÁN SP XP 88 8.2. THUT TOÁN SP XP KIU CHN (SELECTIONSORT) .90 8.3. THUT TOÁN SP XP NI BT (BUBBLESORT) .91 8.4. THUT TOÁN SP XP KIU CHÈN (INSERTIONSORT) 91 8.5. SP XP CHÈN VI  DÀI BC GIM DN (SHELLSORT) .93 8.6. THUT TOÁN SP XP KIU PHÂN ON (QUICKSORT) 94 8.7. THUT TOÁN SP XP KIU VUN NG (HEAPSORT) 101 8.8. SP XP BNG PHÉP M PHÂN PHI (DISTRIBUTION COUNTING) 104 8.9. TÍNH N NH CA THUT TOÁN SP XP (STABILITY) .105 8.10. THUT TOÁN SP XP BNG C S (RADIX SORT) .106 8.11. THUT TOÁN SP XP TRN (MERGESORT) 111 8.12. CÀI T .114 8.13. ÁNH GIÁ, NHN XÉT 122 §9. TÌM KIM (SEARCHING) . 126 9.1. BÀI TOÁN TÌM KIM .126 9.2. TÌM KIM TUN T (SEQUENTIAL SEARCH) .126 9.3. TÌM KIM NH PHÂN (BINARY SEARCH) 126 9.4. CÂY NH PHÂN TÌM KIM (BINARY SEARCH TREE - BST) .127  iii  9.5. PHÉP BM (HASH) . 132 9.6. KHOÁ S VI BÀI TOÁN TÌM KIM 132 9.7. CÂY TÌM KIM S HC (DIGITAL SEARCH TREE - DST) 133 9.8. CÂY TÌM KIM C S (RADIX SEARCH TREE - RST) 136 9.9. NHNG NHN XÉT CUI CÙNG 141 PHN 3. QUY HOCH NG 143 §1. CÔNG THC TRUY HI 144 1.1. VÍ D 144 1.2. CI TIN TH NHT . 145 1.3. CI TIN TH HAI . 147 1.4. CÀI T  QUY . 147 §2. PHNG PHÁP QUY HOCH NG .149 2.1. BÀI TOÁN QUY HOCH . 149 2.2. PHNG PHÁP QUY HOCH NG 149 §3. MT S BÀI TOÁN QUY HOCH NG 153 3.1. DÃY CON N IU TNG DÀI NHT . 153 3.2. BÀI TOÁN CÁI TÚI . 158 3.3. BIN I XÂU 160 3.4. DÃY CON CÓ TNG CHIA HT CHO K 164 3.5. PHÉP NHÂN T HP DÃY MA TRN . 169 3.6. BÀI TP LUYN TP . 172 PHN 4. CÁC THUT TOÁN TRÊN  TH 177 §1. CÁC KHÁI NIM C BN .178 1.1. NH NGHA  TH (GRAPH) 178 1.2. CÁC KHÁI NIM . 179 §2. BIU DIN  TH TRÊN MÁY TÍNH 181 2.1. MA TRN K (ADJACENCY MATRIX) . 181 2.2. DANH SÁCH CNH (EDGE LIST) 182 2.3. DANH SÁCH K (ADJACENCY LIST) . 183 2.4. NHN XÉT . 184 §3. CÁC THUT TOÁN TÌM KIM TRÊN  TH .186 3.1. BÀI TOÁN 186 3.2. THUT TOÁN TÌM KIM THEO CHIU SÂU (DEPTH FIRST SEARCH) 187 3.3. THUT TOÁN TÌM KIM THEO CHIU RNG (BREADTH FIRST SEARCH) 189 3.4.  PHC TP TÍNH TOÁN CA BFS DFS 192 §4. TÍNH LIÊN THÔNG CA  TH 193 4.1. NH NGHA . 193 4.2. TÍNH LIÊN THÔNG TRONG  TH VÔ HNG . 194  iv  4.3.  TH Y  THUT TOÁN WARSHALL .194 4.4. CÁC THÀNH PHN LIÊN THÔNG MNH 197 §5. VÀI NG DNG CA DFS BFS . 208 5.1. XÂY DNG CÂY KHUNG CA  TH 208 5.2. TP CÁC CHU TRÌNH C S CA  TH 211 5.3. BÀI TOÁN NH CHIU  TH 211 5.4. LIT KÊ CÁC KHP CU CA  TH 215 §6. CHU TRÌNH EULER, NG I EULER,  TH EULER . 219 6.1. BÀI TOÁN 7 CÁI CU 219 6.2. NH NGHA 219 6.3. NH LÝ .219 6.4. THUT TOÁN FLEURY TÌM CHU TRÌNH EULER .220 6.5. CÀI T .221 6.6. THUT TOÁN TT HN 223 §7. CHU TRÌNH HAMILTON, NG I HAMILTON,  TH HAMILTON 226 7.1. NH NGHA 226 7.2. NH LÝ .226 7.3. CÀI T .227 §8. BÀI TOÁN NG I NGN NHT . 231 8.1.  TH CÓ TRNG S .231 8.2. BÀI TOÁN NG I NGN NHT .231 8.3. TRNG HP  TH KHÔNG CÓ CHU TRÌNH ÂM - THUT TOÁN FORD BELLMAN .233 8.4. TRNG HP TRNG S TRÊN CÁC CUNG KHÔNG ÂM - THUT TOÁN DIJKSTRA .235 8.5. THUT TOÁN DIJKSTRA CU TRÚC HEAP .238 8.6. TRNG HP  TH KHÔNG CÓ CHU TRÌNH - SP XP TÔ PÔ 241 8.7. NG I NGN NHT GIA MI CP NH - THUT TOÁN FLOYD .244 8.8. NHN XÉT .246 §9. BÀI TOÁN CÂY KHUNG NH NHT . 251 9.1. BÀI TOÁN CÂY KHUNG NH NHT 251 9.2. THUT TOÁN KRUSKAL (JOSEPH KRUSKAL - 1956) .251 9.3. THUT TOÁN PRIM (ROBERT PRIM - 1957) 256 §10. BÀI TOÁN LUNG CC I TRÊN MNG 260 10.1. CÁC KHÁI NIM .260 10.2. MNG THNG D NG TNG LUNG 263 10.3. THUT TOÁN FORD-FULKERSON (L.R.FORD & D.R.FULKERSON - 1962) .266 10.4. THUT TOÁN PREFLOW-PUSH (GOLDBERG - 1986) 270 10.5. MT S M RNG .276 §11. BÀI TOÁN TÌM B GHÉP CC 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 TRNG CÁC KHÁI NIM .283 11.3. THUT TOÁN NG M .284 11.4. CÀI T .285  v  §12. BÀI TOÁN TÌM B GHÉP CC I VI TRNG S CC TIU TRÊN  TH HAI PHÍA - THUT TOÁN HUNGARI .291 12.1. BÀI TOÁN PHÂN CÔNG 291 12.2. PHÂN TÍCH 291 12.3. THUT TOÁN 292 12.4. BÀI TOÁN TÌM B GHÉP CC I VI TRNG S CC I TRÊN  TH HAI PHÍA .301 12.5. NÂNG CP . 301 §13. BÀI TOÁN TÌM B GHÉP CC I TRÊN  TH .307 13.1. CÁC KHÁI NIM . 307 13.2. THUT TOÁN EDMONDS (1965) . 308 13.3. THUT TOÁN LAWLER (1973) . 310 13.4. CÀI T . 312 13.5.  PHC TP TÍNH TOÁN . 316 TÀI LIU C THÊM 319  vi  HÌNH V Hình 1: Cây tìm kim quay lui trong bài toán lit kê dãy nh phân .13 Hình 2: Xp 8 quân hu trên bàn c 8x8 .19 Hình 3: ng chéo B-TN mang ch s 10 đng chéo N-TB mang ch s 0 20 Hình 4: Lu đ thut gii (Flowchart) .36 Hình 5: Ký pháp Θ ln, Ο ln Ω ln 41 Hình 6: Tháp Hà Ni .54 Hình 7: Cu trúc nút ca danh sách ni đn 59 Hình 8: Danh sách ni đn 59 Hình 9: Cu trúc nút ca danh sách ni kép 61 Hình 10: Danh sách ni kép .61 Hình 11: Danh sách ni vòng mt hng 61 Hình 12: Danh sách ni vòng hai hng .62 Hình 13: Dùng danh sách vòng mô t Queue 67 Hình 14: Di chuyn toa tàu 69 Hình 15: Di chuyn toa tàu (2) 69 Hình 16: Cây 70 Hình 17: Mc ca các nút trên cây 71 Hình 18: Cây biu din biu thc 71 Hình 19: Các dng cây nh phân suy bin 72 Hình 20: Cây nh phân hoàn chnh cây nh phân đy đ .72 Hình 21: ánh s các nút ca cây nh phân đy đ đ biu din bng mng 73 Hình 22: Nhc đim ca phng pháp biu din cây bng mng .73 Hình 23: Cu trúc nút ca cây nh phân .74 Hình 24: Biu din cây bng cu trúc liên kt .74 Hình 25: ánh s các nút ca cây 3_phân đ biu din bng mng 76 Hình 26: Biu din cây tng quát bng mng 77 Hình 27: Cu trúc nút ca cây tng quát 78 Hình 28: Biu thc di dng cây nh phân 79 Hình 29: Vòng lp trong ca QuickSort 95 Hình 30: Trng thái trc khi gi đ quy 96 Hình 31: Heap 102 Hình 32: Vun đng 102 Hình 33: o giá tr k[1] cho k[n] xét phn còn li 103 Hình 34: Vun phn còn li thành đng ri li đo tr k[1] cho k[n-1] .103 Hình 35: ánh s các bit .106 Hình 36: Thut toán sp xp trn .111  vii  Hình 37: Máy Pentium 4, 3.2GHz, 2GB RAM t ra chm chp khi sp xp 10 8 khoá ∈ [0 7.10 7 ] cho dù nhng thut toán sp xp tt nht đã đc áp dng 123 Hình 38: Cây nh phân tìm kim . 128 Hình 39: Xóa nút lá  cây BST . 129 Hình 40. Xóa nút ch có mt 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 bng nút cc phi ca 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 bng nút cc trái ca cây con phi 130 Hình 43: ánh s các bit . 133 Hình 44: Cây tìm kim s hc . 133 Hình 45: Cây tìm kim c s . 136 Hình 46: Vi đ dài dãy bit z = 3, cây tìm kim c s gm các khoá 2, 4, 5 sau khi thêm giá tr 7 . 137 Hình 47: RST cha các khoá 2, 4, 5, 7 RST sau khi loi b giá tr 7 . 138 Hình 48: Cây tìm kim c s a) Trie tìm kim c s b) 140 Hình 49: Hàm đ quy tính s Fibonacci 151 Hình 50: Tính toán truy vt 154 Hình 51: Truy vt 163 Hình 52: Ví d v mô hình đ th 178 Hình 53: Phân loi đ th . 179 Hình 54 182 Hình 55 183 Hình 56:  th đng đi 186 Hình 57: Cây DFS . 189 Hình 58: Cây BFS . 192 Hình 59:  th G các thành phn liên thông G1, G2, G3 ca nó 193 Hình 60: Khp cu 193 Hình 61: Liên thông mnh liên thông yu 194 Hình 62:  th đy đ 195 Hình 63: n đ th vô hng bao đóng ca nó . 195 Hình 64: Ba dng cung ngoài cây DFS .199 Hình 65: Thut toán Tarjan “b” cây DFS 201 Hình 66: ánh s li, đo chiu các cung duyt BFS vi cách chn các đnh xut phát ngc li vi th t duyt xong (th t 11, 10… 3, 2, 1) . 206 Hình 67:  th G mt s ví d cây khung T1, T2, T3 ca nó . 210 Hình 68: Cây khung DFS (a) cây khung BFS (b) (Mi tên ch chiu đi thm các đnh) 210 Hình 69: Phép đnh chiu DFS 213 Hình 70: Phép đánh s ghi nhn cung ngc lên cao nht . 215 Hình 71: Mô hình đ th ca bài toán by cái cu . 219 Hình 72 220 Hình 73 220 Hình 74 226  viii  Hình 75: Phép đánh li ch s theo th t tôpô 241 Hình 76: Hai cây gc r 1 r 2 cây mi khi hp nht chúng .252 Hình 77: Mng vi các kh nng thông qua (1 phát, 6 thu) mt lung ca nó vi giá tr 7 260 Hình 78: Mng G mng thng d G f tng ng (ký hiu f[u,v]:c[u,v] ch lung f[u, v] kh nng thông qua c[u, v] trên cung (u, v)) 264 Hình 79: Mng thng d đng tng lung 265 Hình 80: Lung trên mng G trc sau khi tng .265 Hình 81: Mng gi ca mng có nhiu đim phát nhiu đim thu 276 Hình 82: Thay mt đnh u bng hai đnh u in , u out .277 Hình 83: Mng gi ca mng có kh nng thông qua ca các cung b chn hai phía 277 Hình 84:  th hai phía 283 Hình 85:  th hai phía b ghép M .284 Hình 86: Mô hình lung ca bài toán tìm b ghép cc đi trên đ th hai phía .288 Hình 87: Phép xoay trng s cnh .292 Hình 88: Thut toán Hungari .295 Hình 89: Cây pha “mc” ln hn sau mi ln xoay trng s cnh tìm đng 302 Hình 90:  th G mt b ghép M 307 Hình 91: Phép chp Blossom .309 Hình 92: N Blossom đ dò đng xuyên qua Blossom .309 . phn đi xng: Nu a ≤ b và b ≤ a thì bt buc a = b.  Tính bc cu: Nu có a ≤ b và b ≤ c thì a ≤ c. Trong trng hp a ≤ b và a ≠ b, ta dùng ký hiu. 5.4. LIT KÊ CÁC KHP VÀ CU CA  TH 215 §6. CHU TRÌNH EULER, NG

Ngày đăng: 03/12/2013, 16:09

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan