Giáo trình Giải thuật và lập trình

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 tlòng biết ơn đối vi nhng người thy đã chdy tn tình trong nhng năm tháng  
đy khó khăn khi tôi mi bước vào hc tin hc và lp trình. Shiu biết và lòng nhit tình ca các  
thy không nhng đã cung cp cho tôi nhng kiến thc quý báu mà còn là tm gương sáng cho tôi  
noi theo khi tôi đứng trên bc ging cũng vi tư cách là mt người thy.  
Cun tài liu này được viết da trên nhng tài liu thu thp được tnhiu ngun khác nhau, bi  
công sc ca nhiu thế hthy trò đã tng ging dy và hc tp ti Khi Phthông chuyên Toán-  
Tin, Đại hc Sư phm Hà Ni, còn tôi chlà người tng hp li. Qua đây, tôi mun gi li cm ơn  
ti các đng nghip đã đc và đóng góp nhng ý kiến quí báu, cm ơn các bn hc sinh - nhng  
con người đã trc tiếp làm nên cun sách này.  
Do thi gian hn hp, mt schuyên đề tuy đã có nhưng chưa kp chnh sa và đưa vào tài liu.  
Bn đc có ththam 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 năm 2003  
Lê Minh Hoàng  
i ꢂ  
MC LC  
PHN 1. BÀI TOÁN LIT KÊ ................................................................................. 1  
§1. NHC LI MT SKIN THC ĐẠI STHP......................................................................2  
1.1. CHNH HP LP..............................................................................................................................................2  
1.2. CHNH HP KHÔNG LP...............................................................................................................................2  
1.3. HOÁN V...........................................................................................................................................................2  
1.4. THP..............................................................................................................................................................3  
§2. PHƯƠNG PHÁP SINH (GENERATION) ..........................................................................................4  
2.1. SINH CÁC DÃY NHPHÂ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 NHPHÂ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. KTHUT NHÁNH CN.................................................................................................................24  
4.1. BÀI TOÁN TI ƯU.........................................................................................................................................24  
4.2. SBÙNG NTHP ..................................................................................................................................24  
4.3. MÔ HÌNH KTHUT NHÁNH CN...........................................................................................................24  
4.4. BÀI TOÁN NGƯỜI DU LCH........................................................................................................................25  
4.5. DÃY ABC ........................................................................................................................................................28  
PHN 2. CU TRÚC DLIU VÀ GII THUT ............................................. 33  
§1. CÁC BƯỚC 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 DLIU 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 CHƯƠNG 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 DLIU 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Í DVGII THUT ĐỆ QUY ................................................................................................................ 46  
3.4. HIU LC CA ĐỆ QUY ............................................................................................................................. 50  
§4. CU TRÚC DLIU 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. NGĂN XP VÀ HÀNG ĐỢI.............................................................................................................. 58  
5.1. NGĂN XP (STACK)..................................................................................................................................... 58  
5.2. HÀNG ĐỢI (QUEUE)..................................................................................................................................... 60  
§6. CÂY (TREE)........................................................................................................................................ 64  
6.1. ĐỊNH NGHĨA ................................................................................................................................................. 64  
6.2. CÂY NHPHÂN (BINARY TREE) ............................................................................................................... 65  
6.3. BIU DIN CÂY NHPHÂN ........................................................................................................................ 67  
6.4. PHÉP DUYT CÂY NHPHÂ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 TVÀ HU T............................................................................. 74  
7.1. BIU THC DƯỚI DNG CÂY NHPHÂN............................................................................................... 74  
7.2. CÁC KÝ PHÁP CHO CÙNG MT BIU THC.......................................................................................... 74  
7.3. CÁCH TÍNH GIÁ TRBIU THC.............................................................................................................. 75  
7.4. CHUYN TDNG TRUNG TSANG DNG HU T......................................................................... 78  
7.5. XÂY DNG CÂY NHPHÂ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 NHPHÂN (BINARY SEARCH) ..............................................................................................116  
9.4. CÂY NHPHÂN TÌM KIM (BINARY SEARCH TREE - BST) ...............................................................117  
9.5. PHÉP BĂM (HASH)......................................................................................................................................122  
9.6. KHOÁ SVI BÀI TOÁN TÌM KIM.......................................................................................................122  
9.7. CÂY TÌM KIM SHC (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 THNHT..................................................................................................................................135  
1.3. CI TIN THHAI......................................................................................................................................137  
1.4. CÀI ĐẶT ĐỆ QUY........................................................................................................................................137  
§2. PHƯƠNG PHÁP QUY HOCH ĐỘNG.........................................................................................139  
2.1. BÀI TOÁN QUY HOCH ............................................................................................................................139  
2.2. PHƯƠNG PHÁP QUY HOCH ĐỘNG.......................................................................................................139  
§3. MT SBÀI TOÁN QUY HOCH ĐỘNG ..................................................................................143  
3.1. DÃY CON ĐƠN ĐIU TĂNG 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 THP 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 NGHĨA ĐỒ TH(GRAPH).................................................................................................................170  
1.2. CÁC KHÁI NIM..........................................................................................................................................171  
§2. BIU DIN ĐỒ THTRÊ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 NGHĨA ............................................................................................................................................... 190  
4.2. TÍNH LIÊN THÔNG TRONG ĐỒ THVÔ HƯỚNG.................................................................................. 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 ĐỒ THVÀ BÀI TOÁN LIT KÊ CU.............................................................................. 208  
5.4. LIT KÊ KHP ............................................................................................................................................ 214  
§6. CHU TRÌNH EULER, ĐƯỜNG ĐI EULER, ĐỒ THEULER................................................... 218  
6.1. BÀI TOÁN 7 CÁI CU ................................................................................................................................ 218  
6.2. ĐỊNH NGHĨA ............................................................................................................................................... 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 HƠN ........................................................................................................................... 222  
§7. CHU TRÌNH HAMILTON, ĐƯỜNG ĐI HAMILTON, ĐỒ THHAMILTON ........................ 225  
7.1. ĐỊNH NGHĨA ............................................................................................................................................... 225  
7.2. ĐỊNH LÝ....................................................................................................................................................... 225  
7.3. CÀI ĐẶT ....................................................................................................................................................... 226  
§8. BÀI TOÁN ĐƯỜNG ĐI NGN NHT .......................................................................................... 230  
8.1. ĐỒ THCÓ TRNG S............................................................................................................................... 230  
8.2. BÀI TOÁN ĐƯỜNG ĐI NGN NHT ....................................................................................................... 230  
8.3. TRƯỜNG HP ĐỒ THKHÔNG CÓ CHU TRÌNH ÂM - THUT TOÁN FORD BELLMAN............... 232  
8.4. TRƯỜNG HP TRNG STRÊ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. TRƯỜNG HP ĐỒ THKHÔNG CÓ CHU TRÌNH - THTTÔ 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 NHNHT......................................................................................... 247  
9.1. BÀI TOÁN CÂY KHUNG NHNHT...................................................................................................... 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 TĂNG 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 BGHÉP CC ĐẠI TRÊN ĐỒ THHAI PHÍA...........................................266  
11.1. ĐỒ THHAI 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 BGHÉP CC ĐẠI VI TRNG SCC TIU TRÊN ĐỒ THHAI  
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 BGHÉP CC ĐẠI VI TRNG SCC ĐẠI TRÊN ĐỒ THHAI PHÍA .............284  
12.6. NÂNG CP..................................................................................................................................................284  
§13. BÀI TOÁN TÌM BGHÉ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. PHƯƠNG 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 kiếm quay lui trong bài toán lit kê dãy nhphân.................................................................................. 13  
Hình 2: Xếp 8 quân hu trên bàn c8x8.......................................................................................................................... 19  
Hình 3: Đường chéo ĐB-TN mang chs10 và đường chéo ĐN-TB mang chs0 ...................................................... 19  
Hình 4: Lưu đồ 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 hướng......................................................................................................................... 55  
Hình 11: Danh sách ni vòng hai hướng.......................................................................................................................... 56  
Hình 12: Dùng danh sách vòng mô tQueue................................................................................................................... 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 nhphân suy biến ........................................................................................................................ 66  
Hình 19: Cây nhphân hoàn chnh và cây nhphân đầy đủ ............................................................................................. 66  
Hình 20: Đánh scác nút ca cây nhphân đầy đủ để biu din bng mng................................................................... 67  
Hình 21: Nhược đim ca phương pháp biu din cây bng mng.................................................................................. 68  
Hình 22: Cu trúc nút ca cây nhphân ........................................................................................................................... 68  
Hình 23: Biu din cây bng cu trúc liên kết.................................................................................................................. 69  
Hình 24: Đánh scá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 dưới dng cây nhphân..................................................................................................................... 74  
Hình 28: Vòng lp trong ca QuickSort........................................................................................................................... 89  
Hình 29: Trng thái trước khi gi đệ quy......................................................................................................................... 90  
Hình 30: Heap .................................................................................................................................................................. 92  
Hình 31: Vun đống........................................................................................................................................................... 93  
Hình 32: Đảo giá trk1 cho kn và xét phn còn li............................................................................................................ 93  
Hình 33: Vun phn còn li thành đống ri li đảo trk1 cho kn-1...................................................................................... 94  
Hình 34: Đánh scác bit.................................................................................................................................................. 97  
Hình 35: Thut toán sp xếp trn ................................................................................................................................... 102  
Hình 36: Cài đặt các thut toán sp xếp vi dliu ln................................................................................................. 114  
Hình 37: Cây nhphân tìm kiếm .................................................................................................................................... 118  
Hình 38: Xóa nút lá cây BST ...................................................................................................................................... 119  
Hình 39. Xóa nút chcó mt nhánh con trên cây BST................................................................................................... 120  
vii ꢂ  
Hình 40: Xóa nút có chai nhánh con trên cây BST thay bng nút cc phi ca cây con trái .......................................120  
Hình 41: Xóa nút có chai nhánh con trên cây BST thay bng nút cc trái ca cây con phi .......................................120  
Hình 42: Đánh scác bit.................................................................................................................................................123  
Hình 43: Cây tìm kiếm shc.........................................................................................................................................124  
Hình 44: Cây tìm kiếm cơ s..........................................................................................................................................126  
Hình 45: Vi độ dài dãy bit z = 3, cây tìm kiếm cơ sgm các khoá 2, 4, 5 và sau khi thêm giá tr7 ..........................127  
Hình 46: RST cha các khoá 2, 4, 5, 7 và RST sau khi loi bgiá tr7.........................................................................128  
Hình 47: Cây tìm kiếm cơ sa) và Trie tìm kiếm cơ sb) .............................................................................................130  
Hình 48: Hàm đệ quy tính sFibonacci..........................................................................................................................141  
Hình 49: Tính toán và truy vết........................................................................................................................................144  
Hình 50: Truy vết............................................................................................................................................................153  
Hình 51: Ví dvmô hình đồ th...................................................................................................................................170  
Hình 52: Phân loi đồ th................................................................................................................................................171  
Hình 53 ...........................................................................................................................................................................174  
Hình 54 ...........................................................................................................................................................................175  
Hình 55: Đồ thđường đi ...........................................................................................................................................177  
Hình 56: Cây DFS...........................................................................................................................................................180  
Hình 57: Cây BFS...........................................................................................................................................................184  
Hình 58: Thut toán loang ..............................................................................................................................................187  
Hình 59: Đồ thG và các thành phn liên thông G1, G2, G3 ca nó..............................................................................190  
Hình 60: Khp và cu .....................................................................................................................................................190  
Hình 61: Liên thông mnh và liên thông yếu..................................................................................................................191  
Hình 62: Đồ thị đầy đủ....................................................................................................................................................192  
Hình 63: Đơn đồ thvô hướng và bao đóng ca nó ........................................................................................................192  
Hình 64: Ba dng cung ngoài cây DFS...........................................................................................................................196  
Hình 65: Thut toán Tarjan "b" cây DFS ......................................................................................................................198  
Hình 66: Đánh sli, đảo chiu các cung và duyt BFS vi cách chn các đỉnh xut phát ngược li vi thtduyt  
xong (tht11, 10… 3, 2, 1)................................................................................................................................204  
Hình 67: Đồ thG và mt sví dcây khung T1, T2, T3 ca nó...................................................................................207  
Hình 68: Cây khung DFS (a) và cây khung BFS (b) (Mũi tên chchiu đi thăm các đỉnh)............................................207  
Hình 69: Phép định chiu DFS........................................................................................................................................210  
Hình 70: Phép đánh svà ghi nhn cung ngược lên cao nht.........................................................................................212  
Hình 71 Duyt DFS, xác định cây DFS và các cung ngược............................................................................................215  
Hình 72: Mô hình đồ thca bài toán by cái cu...........................................................................................................218  
Hình 73 ...........................................................................................................................................................................219  
Hình 74 ...........................................................................................................................................................................219  
Hình 75 ...........................................................................................................................................................................225  
Hình 76: Phép đánh li chstheo thttôpô...............................................................................................................240  
Hình 77: Hai cây gc r1 và r2 và cây mi khi hp nht chúng ........................................................................................248  
Hình 78: Mng vi các khnăng thông qua (1 phát, 6 thu) và mt lung ca nó vi giá tr7 ...................................256  
Hình 79: Mng G, lung trên các cung (1 phát, 6 thu) và đồ thtăng lung tương ng..................................................257  
Hình 80: Lung trên mng G trước và sau khi tăng........................................................................................................258  
viii ꢂ  
Hình 81: Đồ thhai phía................................................................................................................................................. 266  
Hình 82: Đồ thhai phía và bghép M.......................................................................................................................... 267  
Hình 83: Mô hình lung ca bài toán tìm bghép cc đại trên đồ thhai phía ............................................................. 271  
Hình 84: Phép xoay trng scnh.................................................................................................................................. 274  
Hình 85: Thut toán Hungari.......................................................................................................................................... 277  
Hình 86: Cây pha "mc" ln hơn sau mi ln xoay trng scnh và tìm đường........................................................... 285  
Hình 87: Đồ thG và mt bghép M............................................................................................................................. 290  
Hình 88: Phép chp Blossom ......................................................................................................................................... 292  
Hình 89: NBlossom để đường xuyên qua Blossom................................................................................................ 292  
ix ꢂ  
CHƯƠNG TRÌNH  
P_1_02_1.PAS * Thut toán sinh lit kê các dãy nhphân độ dài n...................................................................................6  
P_1_02_2.PAS * Thut toán sinh lit kê các tp con k phn t..........................................................................................8  
P_1_02_3.PAS * Thut toán sinh lit kê hoán v................................................................................................................9  
P_1_03_1.PAS * Thut toán quay lui lit kê các dãy nhphân độ dài n...........................................................................12  
P_1_03_2.PAS * Thut toán quay lui lit kê các tp con k phn t..................................................................................14  
P_1_03_3.PAS * Thut toán quay lui lit kê các chnh hp không lp chp k.................................................................15  
P_1_03_4.PAS * Thut toán quay lui lit kê các cách phân tích s..................................................................................17  
P_1_03_5.PAS * Thut toán quay lui gii bài toán xếp hu.............................................................................................21  
P_1_04_1.PAS * Kthut nhánh cn dùng cho bài toán người du lch............................................................................26  
P_1_04_2.PAS * Dãy ABC ..............................................................................................................................................28  
P_2_07_1.PAS * Tính giá trbiu thc RPN....................................................................................................................76  
P_2_07_2.PAS * Chuyn biu thc trung tsang dng RPN...........................................................................................79  
P_2_08_1.PAS * Các thut toán săp xếp ........................................................................................................................105  
P_3_01_1.PAS * Đếm scách phân tích sn ................................................................................................................135  
P_3_01_2.PAS * Đếm scách phân tích sn ................................................................................................................136  
P_3_01_3.PAS * Đếm scách phân tích sn ................................................................................................................136  
P_3_01_4.PAS * Đếm scách phân tích sn ................................................................................................................137  
P_3_01_5.PAS * Đếm scách phân tích sn dùng đệ quy............................................................................................137  
P_3_01_6.PAS * Đếm scách phân tích sn dùng đệ quy............................................................................................138  
P_3_03_1.PAS * Tìm dãy con đơn điu tăng dài nht....................................................................................................144  
P_3_03_2.PAS * Ci tiến thut toán tìm dãy con đơn điu tăng dài nht.......................................................................146  
P_3_03_3.PAS * Bài toán cái túi....................................................................................................................................149  
P_3_03_4.PAS * Biến đổi xâu........................................................................................................................................153  
P_3_03_5.PAS * Dãy con có tng chia hết cho k...........................................................................................................156  
P_3_03_6.PAS * Dãy con có tng chia hết cho k...........................................................................................................158  
P_3_03_7.PAS * Nhân ti ưu dãy ma trn .....................................................................................................................162  
P_4_03_1.PAS * Thut toán tìm kiếm theo chiu sâu....................................................................................................178  
P_4_03_2.PAS * Thut toán tìm kiếm theo chiu sâu không đệ quy .............................................................................181  
P_4_03_3.PAS * Thut toán tìm kiếm theo chiu rng dùng hàng đợi ..........................................................................185  
P_4_03_4.PAS * Thut toán tìm kiếm theo chiu rng dùng phương pháp loang .........................................................187  
P_4_04_1.PAS * Thut toán Warshall lit kê các thành phn liên thông.......................................................................194  
P_4_04_2.PAS * Thut toán Tarjan lit kê các thành phn liên thông mnh .................................................................201  
P_4_05_1.PAS * Phép định chiu DFS và lit kê cu ....................................................................................................213  
P_4_05_2.PAS * Lit kê các khp ca đồ th.................................................................................................................216  
P_4_06_1.PAS * Thut toán Fleury tìm chu trình Euler.................................................................................................220  
P_4_06_2.PAS * Thut toán hiu qutìm chu trình Euler .............................................................................................223  
P_4_07_1.PAS * Thut toán quay lui lit kê chu trình Hamilton...................................................................................226  
P_4_08_1.PAS * Thut toán Ford-Bellman....................................................................................................................233  
P_4_08_2.PAS * Thut toán Dijkstra .............................................................................................................................235  
P_4_08_3.PAS * Thut toán Dijkstra và cu trúc Heap .................................................................................................237  
x ꢂ  
P_4_08_4.PAS * Đường đi ngn nht trên đồ thkhông có chu trình ........................................................................... 241  
P_4_08_5.PAS * Thut toán Floyd................................................................................................................................ 243  
P_4_09_1.PAS * Thut toán Kruskal............................................................................................................................. 249  
P_4_09_2.PAS * Thut toán Prim.................................................................................................................................. 252  
P_4_10_1.PAS * Thut toán tìm lung cc đại trên mng ............................................................................................ 259  
P_4_10_2.PAS * Thut toán Ford-Fulkerson................................................................................................................. 262  
P_4_11_1.PAS * Thut toán đường mtìm bghép cc đại ........................................................................................ 269  
P_4_12_1.PAS * Thut toán Hungari ............................................................................................................................ 280  
P_4_12_2.PAS * Cài đặt phương pháp Kuhn-Munkres O(n3)....................................................................................... 286  
P_4_13_1.PAS * Phương pháp Lawler áp dng cho thut toán Edmonds..................................................................... 296  
PHN 1. BÀI TOÁN LIT KÊ  
Có mt sbài toán trên thc tế yêu cu chrõ: trong mt tp các đối  
tượng cho trước có bao nhiêu đi tượng thomãn nhng điu kin  
nht định. Bài toán đó gi là bài toán đếm.  
Trong lp các bài toán đếm, có nhng bài toán còn yêu cu chrõ  
nhng cu hình tìm được thomãn điu kin đã cho là nhng cu hình  
nào. Bài toán yêu cu đưa ra danh sách các cu hình có thcó gi là  
bài toán lit kê.  
Để gii bài toán lit kê, cn phi xác định được mt thut toán để có  
ththeo đó ln lượt xây dng được tt ccác cu hình đang quan tâm.  
Có nhiu phương pháp lit kê, nhưng chúng cn phi đáp ng được  
hai yêu cu dưới đây:  
Không được lp li mt cu hình  
Không được bsót mt cu hình  
Có thnói rng, phương pháp lit kê là phương kế cui cùng để gii  
được mt sbài toán thp hin nay. Khó khăn chính ca phương  
pháp này chính là sbùng nthp dn ti sự đòi hi ln vkhông  
gian và thi gian thc hin chương trình. Tuy nhiên cùng vi sphát  
trin ca máy tính đin t, bng phương pháp lit kê, nhiu bài toán tổ  
hp đã tìm thy li gii. Qua đó, ta cũng nên biết rng chnên dùng  
phương pháp lit kê khi không còn mt phương pháp nào khác  
tìm ra li gii. Chính nhng nlc gii quyết các bài toán thc tế  
không dùng phương pháp lit kê đã thúc đẩy sphát trin ca nhiu  
ngành toán hc.  
2 ꢂ  
Chuyên đề  
§1. NHC LI MT SKIN THC ĐẠI STHP  
Cho S là mt tp hu hn gm n phn tvà k là mt stnhiên.  
Gi X là tp các snguyên dương t1 đến k: X = {1, 2, …, k}  
1.1. CHNH HP LP  
Mi ánh xf: X S. Cho tương ng vi mi i X, mt và chmt phn tf(i) S.  
Được gi là mt chnh hp lp chp k ca S.  
Nhưng do X là tp hu hn (k phn t) nên ánh xf có thxác định qua bng các giá trf(1),  
f(2), …, f(k).  
Ví d: S = {A, B, C, D, E, F}; k = 3. Mt ánh xf có thcho như sau:  
i
f(i)  
1
E
2
C
3
E
Vy có thđồng nht f vi dãy giá tr(f(1), f(2), …, f(k)) và coi dãy giá trnày cũng là mt chnh  
hp lp chp k ca S. Như ví dtrên (E, C, E) là mt chnh hp lp chp 3 ca S. Ddàng chng  
minh được kết qusau bng quy np hoc bng phương pháp đánh giá khnăng la chn:  
Schnh hp lp chp k ca tp gm n phn t:  
Akn = nk  
1.2. CHNH HP KHÔNG LP  
Khi f là đơn ánh có nghĩa là vi i, j X ta có f(i) = f(j) i = j. Nói mt cách dhiu, khi dãy giá  
trf(1), f(2), …, f(k) gm các phn tthuc S khác nhau đôi mt thì f được gi là mt chnh hp  
không lp chp k ca S. Ví dmt chnh hp không lp (C, A, E):  
i
f(i)  
1
C
2
A
3
E
Schnh hp không lp chp k ca tp gm n phn t:  
n!  
Akn = n(n 1)(n 2)...(n k +1) =  
(n k)!  
1.3. HOÁN VỊ  
Khi k = n. Mt chnh hp không lp chp n ca S được gi là mt hoán vcác phn tca S.  
Ví d: mt hoán v: (A, D, C, E, B, F) ca S = {A, B, C, D, E, F}  
i
f(i)  
1
A
2
D
3
C
4
E
5
B
6
F
Để ý rng khi k = n thì sphn tca tp X = {1, 2, …, n} đúng bng sphn tca S. Do tính  
cht đôi mt khác nhau nên dãy f(1), f(2), …, f(n) slit kê được hết các phn ttrong S. Như vy f  
là toàn ánh. Mt khác do githiết f là chnh hp không lp nên f là đơn ánh. Ta có tương ng 1-1  
Đại hc Sư phm Hà Ni, 1999-2002  
Bài toán lit kê  
3 ꢂ  
gia các phn tca X và S, do đó f là song ánh. Vy nên ta có thể định nghĩa mt hoán vca S là  
mt song ánh gia {1, 2, …, n} và S.  
Shoán vca tp gm n phn t= schnh hp không lp chp n:  
Pn = n!  
1.4. THP  
Mt tp con gm k phn tca S được gi là mt thp chp k ca S.  
Ly mt tp con k phn tca S, xét tt ck! hoán vca tp con này. Dthy rng các hoán vị đó  
là các chnh hp không lp chp k ca S. Ví dly tp {A, B, C} là tp con ca tp S trong ví dụ  
trên thì: (A, B, C), (C, A, B), (B, C, A), … là các chnh hp không lp chp 3 ca S. Điu đó tc là  
khi lit kê tt ccác chnh hp không lp chp k thì mi thp chp k sẽ được tính k! ln. Vy:  
Sthp chp k ca tp gm n phn t:  
Ank  
n!  
k! k!(n k)!  
Ckn =  
=
Stp con ca tp n phn t:  
C0n + C1n + ... + Cnn = 2n  
Lê Minh Hoàng  
4 ꢂ  
Chuyên đề  
§2. PHƯƠNG PHÁP SINH (GENERATION)  
Phương pháp sinh có tháp dng để gii bài toán lit kê thp đặt ra nếu như hai điu kin sau  
thomãn:  
Có thxác định được mt thttrên tp các cu hình thp cn lit kê. Từ đó có thbiết  
đượccu hình đu tiên và cu hình cui cùng trong thtự đó.  
Xây dng được thut toán tmt cu hình chưa phi cu hình cui, sinh ra được cu hình  
kế tiếp nó.  
Phương pháp sinh có thmô tnhư sau:  
<Xây dng cu hình đầu tiên>;  
repeat  
<Đưa ra cu hình đang có>;  
<Tcu hình đang có sinh ra cu hình kế tiếp nếu còn>;  
until <hết cu hình>;  
Thttừ đin  
Trên các kiu dliu đơn gin chun, người ta thường nói ti khái nim tht. Ví dtrên kiu số  
thì có quan h: 1 < 2; 2 < 3; 3 < 10; …, trên kiu ký tChar thì cũng có quan h'A' < 'B'; 'C' < 'c'…  
Xét quan hthttoàn phn "nhhơn hoc bng" ký hiu "" trên mt tp hp S, là quan hhai  
ngôi thomãn bn tính cht:  
Vi a, b, c S  
Tính phbiến: Hoc là a b, hoc b a;  
Tính phn x: a a  
Tính phn đối xng: Nếu a b và b a thì bt buc a = b.  
Tính bc cu: Nếu có a b và b c thì a c.  
Trong trường hp a b và a b, ta dùng ký hiu "<" cho gn, (ta ngm hiu các ký hiu như , >,  
khi phi định nghĩa)  
Ví dnhư quan h"" trên các snguyên cũng như trên các kiu vô hướng, lit kê là quan hthtự  
toàn phn.  
Trên các dãy hu hn, người ta cũng xác định mt quan htht:  
Xét a = (a1, a2, …, an) và b = (b1, b2, …, bn); trên các phn tca a1, …, an, b1, …, bn đã có quan hệ  
tht"". Khi đó a b nếu như  
Hoc ai = bi vi i: 1 i n.  
Hoc tn ti mt snguyên dương k: 1 k < n để:  
a1 = b1  
Đại hc Sư phm Hà Ni, 1999-2002  
Bài toán lit kê  
5 ꢂ  
a2 = b2  
ak-1 = bk-1  
ak = bk  
ak+1 < bk+1  
Trong trường hp này, ta có thviết a < b.  
Thtự đó gi là thttừ đin trên các dãy độ dài n.  
Khi độ dài hai dãy a và b không bng nhau, người ta cũng xác định được thttừ đin. Bng cách  
thêm vào cui dãy a hoc dãy b nhng phn tử đặc bit gi là phn tđể độ dài ca a và b bng  
nhau, và coi nhng phn tnày nhhơn tt ccác phn tkhác, ta li đưa vxác định thttừ  
đin ca hai dãy cùng độ dài. Ví d:  
(1, 2, 3, 4) < (5, 6)  
(a, b, c) < (a, b, c, d)  
'calculator' < 'computer'  
2.1. SINH CÁC DÃY NHPHÂN ĐỘ DÀI N  
Mt dãy nhphân độ dài n là mt dãy x = x1x2…xn trong đó xi {0, 1} (i : 1 i n).  
Dthy: mt dãy nhphân x độ dài n là biu din nhphân ca mt giá trnguyên p(x) nào đó nm  
trong đon [0, 2n - 1]. Scác dãy nhphân độ dài n = scác snguyên [0, 2n - 1] = 2n. Ta slp  
chương trình lit kê các dãy nhphân theo thttừ đin có nghĩa là slit kê ln lượt các dãy nhị  
phân biu din các snguyên theo tht0, 1,…, 2n-1.  
Ví d: Khi n = 3, các dãy nhphân độ dài 3 được lit kê như sau:  
p(x)  
x
0
000  
1
001  
2
010  
3
011  
4
100  
5
101  
6
110  
7
111  
Như vy dãy đầu tiên slà 00…0 và dãy cui cùng slà 11…1. Nhn xét rng nếu dãy x = (x1,  
x2, …, xn) là dãy đang có và không phi dãy cui cùng thì dãy kế tiếp snhn được bng cách cng  
thêm 1 ( theo cơ s2 có nh) vào dãy hin ti.  
Ví dkhi n = 8:  
Dãy đang có:  
cng thêm 1:  
1001000  
+
0
1
Dãy đang có:  
cng thêm 1:  
10010111  
+
1
⎯⎯⎯⎯⎯  
⎯⎯⎯⎯⎯  
10011000  
10010001  
Dãy mi:  
Dãy mi:  
Như vy kthut sinh cu hình kế tiếp tcu hình hin ti có thmô tnhư sau: Xét tcui  
dãy về đầu (xét thàng đơn vlên), gp s0 đầu tiên thì thay nó bng s1 và đt tt ccác phn  
tphía sau vtrí đó bng 0.  
i := n;  
while (i > 0) and (xi = 1) do i := i - 1;  
if i > 0 then  
begin  
Lê Minh Hoàng  
6 ꢂ  
Chuyên đề  
xi := 1;  
for j := i + 1 to n do xj := 0;  
end;  
Dliu vào (Input): nhp tfile văn bn BSTR.INP cha snguyên dương n 30  
Kết qura (Output): ghi ra file văn bn BSTR.OUT các dãy nhphân độ dài n.  
BSTR.INP  
3
BSTR.OUT  
000  
001  
010  
011  
100  
101  
110  
111  
P_1_02_1.PAS * Thut toán sinh lit kê các dãy nhphân độ dài n  
program Binary_Strings;  
const  
InputFile = 'BSTR.INP';  
OutputFile = 'BSTR.OUT';  
max = 30;  
var  
x: array[1..max] of Integer;  
n, i: Integer;  
f: Text;  
begin  
Assign(f, InputFile); Reset(f);  
ReadLn(f, n);  
Close(f);  
Assign(f, OutputFile); Rewrite(f);  
FillChar(x, SizeOf(x), 0); {Cu hình ban đầu x1 = x2 = … = xn := 0}  
repeat {Thut toán sinh}  
for i := 1 to n do Write(f, x[i]); {In ra cu hình hin ti}  
WriteLn(f);  
i := n; {xi là phn tcui dãy, lùi dn i cho ti khi gp s0 hoc khi i = 0 thì dng}  
while (i > 0) and (x[i] = 1) do Dec(i);  
if i > 0 then {Chưa gp phi cu hình 11…1}  
begin  
x[i] := 1; {Thay xi bng s1}  
FillChar(x[i + 1], (n - i) * SizeOf(x[1]), 0); {Đặt xi  
= xi  
= … = xn := 0}  
2
+
1
+
end;  
until i = 0; {Đã hết cu hình}  
Close(f);  
end.  
2.2. LIT KÊ CÁC TP CON K PHN TỬ  
Ta slp chương trình lit kê các tp con k phn tca tp {1, 2, …, n} theo thttừ đin  
Ví d: vi n = 5, k = 3, ta phi lit kê đủ 10 tp con:  
1.{1, 2, 3} 2.{1, 2, 4} 3.{1, 2, 5} 4.{1, 3, 4} 5.{1, 3, 5}  
6.{1, 4, 5} 7.{2, 3, 4} 8.{2, 3, 5} 9.{2, 4, 5} 10.{3, 4, 5}  
Như vy tp con đầu tiên (cu hình khi to) là {1, 2, …, k}.  
Cu hình kết thúc là {n - k + 1, n - k + 2, …, n}.  
Nhn xét: Ta sin ra tp con bng cách in ra ln lượt các phn tca nó theo thttăng dn. Từ đó,  
ta có nhn xét nếu x = {x1, x2, …, xk} và x1 < x2 < … < xk thì gii hn trên (giá trln nht có thể  
nhn) ca xk là n, ca xk-1 là n - 1, ca xk-2 là n - 2…  
Đại hc Sư phm Hà Ni, 1999-2002  
Tải về để xem bản đầy đủ
pdf 316 trang Thùy Anh 27/04/2022 8940
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Giải thuật và lập trình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_giai_thuat_va_lap_trinh.pdf