LÊ MINH HOÀNG
(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 CL C
PH N 1. BÀI TOÁN LI T KÊ ......................................................................... 1
§1. NH C L I M T S
KI N TH C
IS
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
§1. CÁC B
CC
LI U VÀ GI I THU T ..................................... 33
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 VÀ 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 VÀ 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
VÀ 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
§1. CÁC KHÁI NI M C
TH .......................................... 177
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 VÀ 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
VÀ 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 và 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 VÀ 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 VÀ 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 VÀ
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 VÀ 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
ng chéo B-TN mang ch s 10 và đ
Hình 3:
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 và Ω 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 và 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] và 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 108 khoá ∈ [0..7.107] 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 và sau khi thêm giá tr 7............... 137
Hình 47: RST ch a các khoá 2, 4, 5, 7 và RST sau khi lo i b giá tr 7 ............................................................. 138
Hình 48: Cây tìm ki m c s a) và 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 và 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 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 ph n liên thông G1, G2, G3 c a nó .................................................................. 193
Hình 60: Kh p và c u.......................................................................................................................................... 193
Hình 61: Liên thông m nh và liên thông y u ...................................................................................................... 194
Hình 62:
th đ y đ ........................................................................................................................................ 195
Hình 63:
n đ th vô h
ng và 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 và 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 và m t s ví d cây khung T1, T2, T3 c a nó ....................................................................... 210
Hình 68: Cây khung DFS (a) và 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 và 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 r1 và r2 và 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) và m t lu ng c a nó v i giá tr 7............................260
Hình 78: M ng G và m ng th ng d Gf t ng ng (ký hi u f[u,v]:c[u,v] ch lu ng f[u, v] và kh n ng thông qua
c[u, v] trên cung (u, v)) ..............................................................................................................................264
Hình 79: M ng th ng d và đ
Hình 80: Lu ng trên m ng G tr
ng t ng lu ng ....................................................................................................265
c và sau khi t ng.............................................................................................265
Hình 81: M ng gi c a m ng có nhi u đi m phát và nhi u đi m thu..................................................................276
Hình 82: Thay m t đ nh u b ng hai đ nh uin, uout .................................................................................................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 và 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 và tìm đ
Hình 90:
ng................................................302
th G và 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
ix
CH
NG TRÌNH
P_1_02_1.PAS * Thu t toán sinh li t kê các dãy nh phân đ dài n ....................................................................... 6
P_1_02_2.PAS * Thu t toán sinh li t kê các t p con k ph n t .............................................................................. 8
P_1_02_3.PAS * Thu t toán sinh li t kê hoán v .................................................................................................... 9
P_1_03_1.PAS * Thu t toán quay lui li t kê các dãy nh phân đ dài n ............................................................... 12
P_1_03_2.PAS * Thu t toán quay lui li t kê các t p con k ph n t ...................................................................... 14
P_1_03_3.PAS * Thu t toán quay lui li t kê các ch nh h p không l p ch p k ..................................................... 16
P_1_03_4.PAS * Thu t toán quay lui li t kê các cách phân tích s ...................................................................... 18
P_1_03_5.PAS * Thu t toán quay lui gi i bài toán x p h u ................................................................................. 21
P_1_04_1.PAS * K thu t nhánh c n dùng cho bài toán ng
i du l ch................................................................ 26
P_1_04_2.PAS * Dãy ABC................................................................................................................................... 28
P_2_07_1.PAS * Tính giá tr bi u th c RPN ........................................................................................................ 81
P_2_07_2.PAS * Chuy n bi u th c trung t sang d ng RPN ............................................................................... 84
P_2_08_1.PAS * Các thu t toán s p x p............................................................................................................. 114
P_3_01_1.PAS *
m s cách phân tích s n..................................................................................................... 145
P_3_01_2.PAS *
m s cách phân tích s n..................................................................................................... 146
P_3_01_3.PAS *
m s cách phân tích s n..................................................................................................... 146
P_3_01_4.PAS *
m s cách phân tích s n..................................................................................................... 147
P_3_01_5.PAS *
m s cách phân tích s n dùng đ quy ................................................................................ 147
P_3_01_6.PAS *
m s cách phân tích s n dùng đ quy ................................................................................ 148
P_3_03_1.PAS * Tìm dãy con đ n đi u t ng dài nh t ........................................................................................ 154
P_3_03_2.PAS * C i ti n thu t toán tìm dãy con đ n đi u t ng dài nh t ........................................................... 156
P_3_03_3.PAS * Bài toán cái túi ........................................................................................................................ 159
P_3_03_4.PAS * Bi n đ i xâu ............................................................................................................................ 163
P_3_03_5.PAS * Dãy con có t ng chia h t cho k ............................................................................................... 165
P_3_03_6.PAS * Dãy con có t ng chia h t cho k ............................................................................................... 167
P_3_03_7.PAS * Nhân t i u dãy ma tr n.......................................................................................................... 171
P_4_03_1.PAS * Thu t toán tìm ki m theo chi u sâu ........................................................................................ 187
P_4_03_2.PAS * Thu t toán tìm ki m theo chi u r ng ...................................................................................... 190
P_4_04_1.PAS * Thu t toán Warshall li t kê các thành ph n liên thông ........................................................... 197
P_4_04_2.PAS * Thu t toán Tarjan li t kê các thành ph n liên thông m nh...................................................... 204
P_4_05_1.PAS * Li t kê các kh p và c u c a đ th .......................................................................................... 216
P_4_06_1.PAS * Thu t toán Fleury tìm chu trình Euler..................................................................................... 221
P_4_06_2.PAS * Thu t toán hi u qu tìm chu trình Euler.................................................................................. 224
P_4_07_1.PAS * Thu t toán quay lui li t kê chu trình Hamilton ....................................................................... 227
P_4_08_1.PAS * Thu t toán Ford-Bellman ........................................................................................................ 234
P_4_08_2.PAS * Thu t toán Dijkstra.................................................................................................................. 236
P_4_08_3.PAS * Thu t toán Dijkstra và c u trúc Heap...................................................................................... 239
x
P_4_08_4.PAS *
ng đi ng n nh t trên đ th không có chu trình.................................................................242
P_4_08_5.PAS * Thu t toán Floyd .....................................................................................................................245
P_4_09_1.PAS * Thu t toán Kruskal ..................................................................................................................253
P_4_09_2.PAS * Thu t toán Prim.......................................................................................................................257
P_4_10_1.PAS * Thu t toán Ford-Fulkerson ......................................................................................................268
P_4_10_2.PAS * Thu t toán Preflow-push .........................................................................................................273
P_4_11_1.PAS * Thu t toán đ
ng m tìm b ghép c c đ i..............................................................................286
P_4_12_1.PAS * Thu t toán Hungari..................................................................................................................298
P_4_12_2.PAS * Cài đ t ph
P_4_13_1.PAS * Ph
ng pháp Kuhn-Munkres O(k3) ............................................................................303
ng pháp Lawler áp d ng cho thu t toán Edmonds ..........................................................313
B NG CÁC KÝ HI U
⎢⎣ x ⎥⎦
Floor of x: S nguyên l n nh t ≤ x
⎢⎡ x ⎥⎤
Ceiling of x: S nguyên nh nh t ≥ x
n
Pk
⎛n⎞
⎜ ⎟
⎝k⎠
S ch nh h p không l p ch p k c a n ph n t =
CS
n!
(n − k)!
Binomial coefficient: H s c a h ng t x k trong đa th c ( x + 1)
= S t h p ch p k c a n ph n t =
n
n!
k!( n − k ) !
O ( .)
Ký pháp ch O l n
Θ ( .)
Ký pháp Θ l n
Ω ( .)
Ký pháp Ω l n
o ( .)
Ký pháp ch o nh
ω ( .)
ký pháp ω nh
a [i..j]
Các ph n t trong m ng a tính t ch s i đ n ch s j
n!
n factorial: Giai th a c a n = 1.2.3…n
a↑b
ab
a ↑↑ b
D NG
...a
a
am
b copies of a
log a x
Logarithm to base a of x: Logarithm c s a c a x ( log a a b = b )
lg x
Logarithm nh phân (c s 2) c a x
ln x
Logarithm t nhiên (c s e) c a x
log*a x
S l n l y logarithm c s a đ thu đ
lg* x
log*2 x
ln* x
log*e x
c s ≤ 1 t x ( log*a (a ↑↑ b) = b )
PH N 1. BÀI TOÁN LI T KÊ
Có m t s bài toán trên th c t yêu c u ch rõ: trong m t t p các đ i
t ng cho tr c có bao nhiêu đ i t ng tho mãn nh ng đi u ki n nh t
đ nh. Bài toán đó g i là bài toán đ m.
Trong l p các bài toán đ m, có nh ng bài toán còn yêu c u ch rõ nh ng
c u hình tìm đ c tho mãn đi u ki n đã cho là nh ng c u hình nào. Bài
toán yêu c u đ a ra danh sách các c u hình có th có g i là bài toán li t
kê.
gi i bài toán li t kê, c n ph i xác đ nh đ c m t thu t toán đ có th
theo đó l n l t xây d ng đ c t t c các c u hình đang quan tâm. Có
nhi u ph ng pháp li t kê, nh ng chúng c n ph i đáp ng đ c hai yêu
c u d i đây:
• Không đ
c l p l i m t c u hình
• Không đ
c b sót m t c u hình
Có th nói r ng, ph ng pháp li t kê là ph ng k cu i cùng đ gi i
đ c m t s bài toán t h p hi n nay. Khó kh n chính c a ph ng pháp
này chính là s bùng n t h p d n t i s đòi h i l n v không gian và
th i gian th c hi n ch ng trình. Tuy nhiên cùng v i s phát tri n c a
máy tính đi n t , b ng ph ng pháp li t kê, nhi u bài toán t h p đã tìm
th y l i gi i. Qua đó, ta c ng nên bi t r ng ch nên dùng ph ng pháp
li t kê khi không còn m t ph ng pháp nào khác tìm ra l i gi i.
Chính nh ng n l c gi i quy t các bài toán th c t không dùng ph ng
pháp li t kê đã thúc đ y s phát tri n c a nhi u ngành toán h c.
Chuyên đ
2
§1. NH C L I M T S KI N TH C
IS T H P
Cho S là m t t p h u h n g m n ph n t và k là m t s t nhiên.
ng t 1 đ n k: X = {1, 2, …, k}
G i X là t p các s nguyên d
1.1. CH NH H P L P
M i ánh x f: X → S. Cho t
ng ng v i m i i ∈ X, m t và ch m t ph n t f(i) ∈ S.
c g i là m t ch nh h p l p ch p k c a S.
Nh ng do X là t p h u h n (k ph n t ) nên ánh x f có th xác đ nh qua b ng các giá tr f(1),
f(2), …, f(k).
Ví d : S = {A, B, C, D, E, F}; k = 3. M t ánh x f có th cho nh sau:
i
1
2
3
f(i)
E
C
E
V y có th đ ng nh t f v i dãy giá tr (f(1), f(2), …, f(k)) và coi dãy giá tr này c ng là m t
ch nh h p l p ch p k c a S. Nh ví d trên (E, C, E) là m t ch nh h p l p ch p 3 c a S. D
dàng ch ng minh đ c k t qu sau b ng quy n p ho c b ng ph ng pháp đánh giá kh n ng
l a ch n:
S ch nh h p l p ch p k c a t p g m n ph n t là n k
1.2. CH NH H P KHÔNG L P
Khi f là đ n ánh có ngh a là v i ∀i, j ∈ X ta có f(i) = f(j) ⇔ i = j. Nói m t cách d hi u, khi
dãy giá tr f(1), f(2), …, f(k) g m các ph n t thu c S khác nhau đôi m t thì f đ
ch nh h p không l p ch p k c a S. Ví d m t ch nh h p không l p (C, A, E):
i
1
2
3
f(i)
C
A
E
c g i là m t
S ch nh h p không l p ch p k c a t p g m n ph n t là:
n
Pk = n(n − 1)(n − 2)...(n − k + 1) =
n!
(n − k)!
1.3. HOÁN V
Khi k = n. M t ch nh h p không l p ch p n c a S đ
c g i là m t hoán v các ph n t c a S.
Ví d : m t hoán v : 〈A, D, C, E, B, F〉 c a S = {A, B, C, D, E, F}
i
1
2
3
4
5
6
f(i)
A
D
C
E
B
F
HSPHN 1999-2004
Bài toán li t kê
3
ý r ng khi k = n thì s ph n t c a t p X = {1, 2, …, n} đúng b ng s ph n t c a S. Do
tính ch t đôi m t khác nhau nên dãy f(1), f(2), …, f(n) s li t kê đ c h t các ph n t trong S.
Nh v y f là toàn ánh. M t khác do gi thi t f là ch nh h p không l p nên f là đ n ánh. Ta có
t ng ng 1-1 gi a các ph n t c a X và S, do đó f là song ánh. V y nên ta có th đ nh ngh a
m t hoán v c a S là m t song ánh gi a {1, 2, …, n} và S.
S hoán v c a t p g m n ph n t = s ch nh h p không l p ch p n = n!
1.4. T H P
M t t p con g m k ph n t c a S đ
c g i là m t t h p ch p k c a S.
L y m t t p con k ph n t c a S, xét t t c k! hoán v c a t p con này. D th y r ng các hoán
v đó là các ch nh h p không l p ch p k c a S. Ví d l y t p {A, B, C} là t p con c a t p S
trong ví d trên thì: 〈A, B, C〉, 〈C, A, B〉, 〈B, C, A〉, … là các ch nh h p không l p ch p 3 c a
S.
i u đó t c là khi li t kê t t c các ch nh h p không l p ch p k thì m i t h p ch p k s
đ
c tính k! l n. V y s t h p ch p k c a t p g m n ph n t là
Lê Minh Hoàng
⎛n⎞
n!
=⎜ ⎟
k!(n − k)! ⎝ k ⎠
Chuyên đ
4
§2. PH
NG PHÁP SINH (GENERATION)
Ph ng pháp sinh có th áp d ng đ gi i bài toán li t kê t h p đ t ra n u nh hai đi u ki n
sau tho mãn:
Có th xác đ nh đ c m t th t trên t p các c u hình t h p c n li t kê. T đó có th bi t
đ cc u hình đ u tiên và c u hình cu i cùng trong th t đó.
Xây d ng đ
k ti p nó.
Ph
c thu t toán t m t c u hình ch a ph i c u hình cu i, sinh ra đ
c c u hình
ng pháp sinh có th mô t nh sau:
〈Xây d ng c u hình đ u tiên〉;
repeat
〈 a ra c u hình đang có〉;
〈T c u hình đang có sinh ra c u hình k ti p n u còn〉;
until 〈h t c u hình〉;
Th t t đi n
Trên các ki u d li u đ n gi n chu n, ng i ta th ng nói t i khái ni m th t . Ví d trên
ki u s thì có quan h : 1 < 2; 2 < 3; 3 < 10; …, trên ki u ký t Char thì c ng có quan h 'A' <
'B'; 'C' < 'c'…
Xét quan h th t toàn ph n “nh h n ho c b ng” ký hi u “≤“ trên m t t p h p S, là quan h
hai ngôi tho mãn b n tính ch t:
V i ∀a, b, c ∈ S
Tính ph bi n: Ho c là a ≤ b, ho c b ≤ a;
Tính ph n x : a ≤ a
Tính 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 “<” cho g n, (ta ng m hi u các ký hi u nh
≥, >, kh i ph i đ nh ngh a)
Ví d nh quan h “≤” trên các s nguyên c ng nh trên các ki u vô h
ng, li t kê là quan h
th t toàn ph n.
Trên các dãy h u h n, ng
i ta c ng xác đ nh m t quan h th t :
Xét a[1..n] và b[1..n] là hai dãy đ dài n, trên các ph n t c a a và b đã có quan h th t “≤”.
Khi đó a ≤ b n u nh
Ho c a[i] = b[i] v i ∀i: 1 ≤ i ≤ n.
Ho c t n t i m t s nguyên d
ng k: 1 ≤ k < n đ :
a[1] = b[1]
a[2] = b[2]
HSPHN 1999-2004
Bài toán li t kê
5
…
a[k-1] = b[k-1]
a[k] = b[k]
a[k+1] < b[k+1]
Trong tr
ng h p này, ta có th vi t a < b.
Th t đó g i là th t t đi n trên các dãy đ dài n.
Khi đ dài hai dãy a và b không b ng nhau, ng
i ta c ng xác đ nh đ
c th t t đi n. B ng
cách thêm vào cu i dãy a ho c dãy b nh ng ph n t đ c bi t g i là ph n t ∅ đ đ dài c a a
và b b ng nhau, và coi nh ng ph n t ∅ này nh h n t t c các ph n t khác, ta l i đ a v xác
đ nh th t t đi n c a 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 NH PHÂN
DÀI N
M t dãy nh phân đ dài n là m t dãy x[1..n] trong đó x[i] ∈ {0, 1} (∀i : 1 ≤ i ≤ n).
D th y: m t dãy nh phân x đ dài n là bi u di n nh phân c a m t giá tr nguyên p(x) nào đó
n m trong đo n [0, 2n - 1]. S các dãy nh phân đ dài n = s các s t nhiên ∈ [0, 2n - 1] = 2n.
Ta s l p ch ng trình li t kê các dãy nh phân theo th t t đi n có ngh a là s li t kê l n
l t các dãy nh phân bi u di n các s nguyên theo th t 0, 1, …, 2n-1.
Ví d : Khi n = 3, các dãy nh phân đ dài 3 đ
c li t kê nh sau:
p(x)
0
1
2
3
4
5
6
7
x
000
001
010
011
100
101
110
111
Nh v y dãy đ u tiên s là 00…0 và dãy cu i cùng s là 11…1. Nh n xét r ng n u dãy x =
x[1..n] là dãy đang có và không ph i dãy cu i cùng c n li t kê thì dãy k ti p s nh n đ c
b ng cách c ng thêm 1 ( theo c s 2 có nh ) vào dãy hi n t i.
Ví d khi n = 8:
Dãy đang có: 10010000
Dãy đang có: 10010111
c ng thêm 1:
c ng thêm 1:
+1
⎯⎯⎯⎯
Dãy m i:
10010001
+1
⎯⎯⎯⎯
Dãy m i:
10011000
Nh v y k thu t sinh c u hình k ti p t c u hình hi n t i có th mô t nh sau: Xét t cu i
dãy v đ u (xét t hàng đ n v lên), tìm s 0 g p đ u tiên
Lê Minh Hoàng
Chuyên đ
6
N u th y thì thay s 0 đó b ng s 1 và đ t t t c các ph n t phía sau v trí đó b ng 0.
N u không th y thì thì toàn dãy là s 1, đây là c u hình cu i cùng
D li u vào (Input): nh p t file v n b n BSTR.INP ch a s nguyên d
ng n ≤ 100
K t qu ra (Output): ghi ra file v n b n BSTR.OUT các dãy nh phân đ dài n.
BSTR.INP
3
BSTR.OUT
000
001
010
011
100
101
110
111
P_1_02_1.PAS * Thu t toán sinh li t kê các dãy nh phân đ dài n
{$MODE DELPHI} (*This program uses 32-bit Integer [-231..231 - 1]*)
program Binary_Strings;
const
InputFile = 'BSTR.INP';
OutputFile = 'BSTR.OUT';
max = 100;
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); {C u hình ban đ u x=00..0}
repeat {Thu t toán sinh}
for i := 1 to n do Write(f, x[i]); {In ra c u hình hi n t i}
WriteLn(f);
i := n; {x[i] là ph n t cu i dãy, lùi d n i cho t i khi g p s 0 ho c khi i = 0 thì d ng}
while (i > 0) and (x[i] = 1) do Dec(i);
if i > 0 then {Ch a g p ph i c u hình 11…1}
begin
x[i] := 1; {Thay x[i] b ng s 1}
FillChar(x[i + 1], (n - i) * SizeOf(x[1]), 0); { t x[i+1] = x[i+2] = … = x[n] := 0}
end;
until i = 0; { ã h t c u hình}
Close(f);
end.
2.2. LI T KÊ CÁC T P CON K PH N T
Ta s l p ch
ng trình li t kê các t p con k ph n t c a t p {1, 2, …, n} theo th t t đi n
Ví d : v i n = 5, k = 3, ta ph i li t kê đ 10 t p 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 v y t p con đ u tiên (c u hình kh i t o) là {1, 2, …, k}.
C u hình k t thúc là {n - k + 1, n - k + 2, …, n}.
Nh n xét: Ta s in ra t p con b ng cách in ra l n l t các ph n t c a nó theo th t t ng d n.
Bi u di n m i t p con là m t dãy x[1..k] trong đó x[1] < x[2] < … < x[k]. Ta nh n th y gi i
HSPHN 1999-2004
Bài toán li t kê
7
h n trên (giá tr l n nh t có th nh n) c a x[k] là n, c a x[k-1] là n - 1, c a x[k-2] là n - 2…
T ng quát: gi i h n trên c a x[i] = n - k + i;
Còn t t nhiên, gi i h n d
i c a x[i] (giá tr nh nh t x[i] có th nh n) là x[i-1] + 1.
Nh v y n u ta đang có m t dãy x đ i di n cho m t t p con, n u x là c u hình k t thúc có
ngh a là t t c các ph n t trong x đ u đã đ t t i gi i h n trên thì quá trình sinh k t thúc, n u
không thì ta ph i sinh ra m t dãy x m i t ng d n tho mãn v a đ l n h n dãy c theo ngh a
không có m t t p con k ph n t nào chen gi a chúng khi s p th t t đi n.
Ví d : n = 9, k = 6. C u hình đang có x = 〈1, 2, 6, 7, 8, 9〉. Các ph n t x[3] đ n x[6] đã đ t t i
gi i h n trên nên đ sinh c u hình m i ta không th sinh b ng cách t ng m t ph n t trong s
các x[6], x[5], x[4], x[3] lên đ c, ta ph i t ng x[2] = 2 lên thành x[2] = 3.
c c u hình m i
là x = 〈1, 3, 6, 7, 8, 9〉. C u hình này đã tho mãn l n h n c u hình tr
c nh ng ch a tho
mãn tính ch t v a đ l n mu n v y ta l i thay x[3], x[4], x[5], x[6] b ng các gi i h n d
c a nó. T c là:
i
x[3] := x[2] + 1 = 4
x[4] := x[3] + 1 = 5
x[5] := x[4] + 1 = 6
x[6] := x[5] + 1 = 7
Ta đ
c c u hình m i x = 〈1, 3, 4, 5, 6, 7〉 là c u hình k ti p. N u mu n tìm ti p, ta l i nh n
th y r ng x[6] = 7 ch a đ t gi i h n trên, nh v y ch c n t ng x[6] lên 1 là đ
c x = 〈1, 3, 4,
5, 6, 8〉.
V y k thu t sinh t p con k ti p t t p đã có x có th xây d ng nh sau:
Tìm t cu i dãy lên đ u cho t i khi g p m t ph n t x[i] ch a đ t gi i h n trên n - k + i.
N u tìm th y:
T ng x[i] đó lên 1.
t t t c các ph n t phía sau x[i] b ng gi i h n d
i.
N u không tìm th y t c là m i ph n t đã đ t gi i h n trên, đây là c u hình cu i cùng
Input: file v n b n SUBSET.INP ch a hai s nguyên d
ng n, k (1 ≤ k ≤ n ≤ 100) cách nhau
ít nh t m t d u cách
Output: file v n b n SUBSET.OUT các t p con k ph n t c a t p {1, 2, …, n}
SUBSET.INP
53
Lê Minh Hoàng
SUBSET.OUT
{1, 2, 3}
{1, 2, 4}
{1, 2, 5}
{1, 3, 4}
{1, 3, 5}
{1, 4, 5}
{2, 3, 4}
{2, 3, 5}
{2, 4, 5}
{3, 4, 5}
Chuyên đ
8
P_1_02_2.PAS * Thu t toán sinh li t kê các t p con k ph n t
{$MODE DELPHI} (*This program uses 32-bit Integer [-231..231 - 1]*)
program Combination;
const
InputFile = 'SUBSET.INP';
OutputFile = 'SUBSET.OUT';
max = 100;
var
x: array[1..max] of Integer;
n, k, i, j: Integer;
f: Text;
begin
Assign(f, InputFile); Reset(f);
ReadLn(f, n, k);
Close(f);
Assign(f, OutputFile); Rewrite(f);
for i := 1 to k do x[i] := i; {Kh i t o x := (1, 2, …, k)}
repeat
{In ra c u hình hi n t i}
Write(f, '{');
for i := 1 to k - 1 do Write(f, x[i], ', ');
WriteLn(f, x[k], '}');
{Sinh ti p}
i := k; {Xét t cu i dãy lên tìm x[i] ch a đ t gi i h n trên n - k + i}
while (i > 0) and (x[i] = n - k + i) do Dec(i);
if i > 0 then {N u ch a lùi đ n 0 có ngh a là ch a ph i c u hình k t thúc}
begin
Inc(x[i]); {T ng x[i] lên 1, t các ph n t đ ng sau x[i] b ng gi i h n d i c a nó}
for j := i + 1 to k do x[j] := x[j - 1] + 1;
end;
until i = 0; {Lùi đ n t n 0 có ngh a là t t c các ph n t đã đ t gi i h n trên - h t c u hình}
Close(f);
end.
2.3. LI T KÊ CÁC HOÁN V
Ta s l p ch
ng trình li t kê các hoán v c a {1, 2, …, n} theo th t t đi n.
Ví d v i n = 4, ta ph i li t kê đ 24 hoán v :
1.1234
7.2134
13.3124
19.4123
2.1243
8.2143
14.3142
20.4132
3.1324
9.2314
15.3214
21.4213
4.1342
10.2341
16.3241
22.4231
5.1423
11.2413
17.3412
23.4312
6.1432
12.2431
18.3421
24.4321
Nh v y hoán v đ u tiên s là 〈1, 2, …, n〉. Hoán v cu i cùng là 〈n, n-1, …, 1〉.
Hoán v s sinh ra ph i l n h n hoán v hi n t i, h n th n a ph i là hoán v v a đ l n h n
hoán v hi n t i theo ngh a không th có m t hoán v nào khác chen gi a chúng khi s p th t .
Gi s hoán v hi n t i là x = 〈3, 2, 6, 5, 4, 1〉, xét 4 ph n t cu i cùng, ta th y chúng đ
cx p
gi m d n, đi u đó có ngh a là cho dù ta có hoán v 4 ph n t này th nào, ta c ng đ c m t
hoán v bé h n hoán v hi n t i. Nh v y ta ph i xét đ n x[2] = 2, thay nó b ng m t giá tr
khác. Ta s thay b ng giá tr nào?, không th là 1 b i n u v y s đ c hoán v nh h n, không
th là 3 vì đã có x[1] = 3 r i (ph n t sau không đ c ch n vào nh ng giá tr mà ph n t tr c
đã ch n). Còn l i các giá tr 4, 5, 6. Vì c n m t hoán v v a đ l n h n hi n t i nên ta ch n
x[2] = 4. Còn các giá tr (x[3], x[4], x[5], x[6]) s l y trong t p {2, 6, 5, 1}. C ng vì tính v a
HSPHN 1999-2004
Bài toán li t kê
9
đ l n nên ta s tìm bi u di n nh nh t c a 4 s này gán cho x[3], x[4], x[5], x[6] t c là 〈1, 2,
5, 6〉. V y hoán v m i s là 〈3, 4, 1, 2, 5, 6〉.
Ta có nh n xét gì qua ví d này: o n cu i c a hoán v hi n t i đ c x p gi m d n, s x[5] =
4 là s nh nh t trong đo n cu i gi m d n tho mãn đi u ki n l n h n x[2] = 2. N u đ i ch
x[5] cho x[2] thì ta s đ c x[2] = 4 và đo n cu i v n đ c s p x p gi m d n. Khi đó mu n
bi u di n nh nh t cho các giá tr trong đo n cu i thì ta ch c n đ o ng c đo n cu i.
Trong tr
ng h p hoán v hi n t i là 〈2, 1, 3, 4〉 thì hoán v k ti p s là 〈2, 1, 4, 3〉. Ta c ng
có th coi hoán v 〈2, 1, 3, 4〉 có đo n cu i gi m d n, đo n cu i này ch g m 1 ph n t (4)
V y k thu t sinh hoán v k ti p t hoán v hi n t i có th xây d ng nh sau:
Xác đ nh đo n cu i gi m d n dài nh t, tìm ch s i c a ph n t x[i] đ ng li n tr c đo n cu i
đó. i u này đ ng ngh a v i vi c tìm t v trí sát cu i dãy lên đ u, g p ch s i đ u tiên th a
mãn x[i] < x[i+1].
N u tìm th y ch s i nh trên
Trong đo n cu i gi m d n, tìm ph n t x[k] nh nh t tho mãn đi u ki n x[k] > x[i]. Do
đo n cu i gi m d n, đi u này th c hi n b ng cách tìm t cu i dãy lên đ u g p ch s k
đ u tiên tho mãn x[k] > x[i] (có th dùng tìm ki m nh phân).
o giá tr x[k] và x[i]
L t ng
c th t đo n cu i gi m d n (t x[i+1] đ n x[k]) tr thành t ng d n.
N u không tìm th y t c là toàn dãy đã s p gi m d n, đây là c u hình cu i cùng
Input: file v n b n PERMUTE.INP ch a s nguyên d
ng n ≤ 100
Output: file v n b n PERMUTE.OUT các hoán v c a dãy (1, 2, …, n)
PERMUTE.INP
3
PERMUTE.OUT
123
132
213
231
312
321
P_1_02_3.PAS * Thu t toán sinh li t kê hoán v
{$MODE DELPHI} (*This program uses 32-bit Integer [-231..231 - 1]*)
program Permutation;
const
InputFile = 'PERMUTE.INP';
OutputFile = 'PERMUTE.OUT';
max = 100;
var
n, i, k, a, b: Integer;
x: array[1..max] of Integer;
f: Text;
procedure Swap(var X, Y: Integer); {Th t c đ o giá tr hai tham bi n X, Y}
var
Temp: Integer;
begin
Temp := X; X := Y; Y := Temp;
end;
Lê Minh Hoàng
Chuyên đ
10
begin
Assign(f, InputFile); Reset(f);
ReadLn(f, n);
Close(f);
Assign(f, OutputFile); Rewrite(f);
for i := 1 to n do x[i] := i; {Kh i t o c u hình đ u: x[1] := 1; x[2] := 2; …, x[n] := n}
repeat
for i := 1 to n do Write(f, x[i], ' '); {In ra c u hình hoán v hi n t i}
WriteLn(f);
i := n - 1;
while (i > 0) and (x[i] > x[i + 1]) do Dec(i);
if i > 0 then {Ch a g p ph i hoán v cu i (n, n-1, …, 1)}
begin
k := n; {x[k] là ph n t cu i dãy}
while x[k] < x[i] do Dec(k); {Lùi d n k đ tìm g p x[k] đ u tiên l n h n x[i]}
Swap(x[k], x[i]); { i ch x[k] và x[i]}
a := i + 1; b := n; {L t ng c đo n cu i gi m d n, a: đ u đo n, b: cu i đo n}
while a < b do
begin
Swap(x[a], x[b]); { o giá tr x[a] và x[b]}
Inc(a); {Ti n a và lùi b, ti p t c cho t i khi a, b ch m nhau}
Dec(b);
end;
end;
until i = 0; {Toàn dãy là dãy gi m d n - không sinh ti p đ c - h t c u hình}
Close(f);
end.
Bài t p:
Bài 1
Các ch ng trình trên x lý không t t trong tr ng h p t m th ng, đó là tr ng h p n = 0
đ i v i ch ng trình li t kê dãy nh phân c ng nh trong ch ng trình li t kê hoán v , tr ng
h p k = 0 đ i v i ch ng trình li t kê t h p, hãy kh c ph c đi u đó.
Bài 2
Li t kê các dãy nh phân đ dài n có th coi là li t kê các ch nh h p l p ch p n c a t p 2 ph n
t {0, 1}. Hãy l p ch ng trình:
Nh p vào hai s n và k, li t kê các ch nh h p l p ch p k c a {0, 1, …, n -1}.
H
ng d n: thay h c s 2 b ng h c s n.
Bài 3
Hãy li t kê các dãy nh phân đ dài n mà trong đó c m ch s “01” xu t hi n đúng 2 l n.
Bài 4.
Nh p vào m t danh sách n tên ng
ng i đó.
i. Li t kê t t c các cách ch n ra đúng k ng
i trong s n
Bài 5
Li t kê t t c các t p con c a t p {1, 2, …, n}. Có th dùng ph ng pháp li t kê t p con nh
trên ho c dùng ph ng pháp li t kê t t c các dãy nh phân. M i s 1 trong dãy nh phân
t ng ng v i m t ph n t đ c ch n trong t p. Ví d v i t p {1, 2, 3, 4} thì dãy nh phân
HSPHN 1999-2004
Bài toán li t kê
11
1010 s t ng ng v i t p con {1, 3}. Hãy l p ch
2, …, n} theo hai ph ng pháp.
ng trình in ra t t c các t p con c a {1,
Bài 6
Nh p vào danh sách tên n ng
i, in ra t t c các cách x p n ng
i đó vào m t bàn
Bài 7
Nh p vào danh sách n b n nam và n b n n , in ra t t c các cách x p 2n ng
tròn, m i b n nam ti p đ n m t b n n .
i đó vào m t bàn
Bài 8
Ng i ta có th dùng ph ng pháp sinh đ li t kê các ch nh h p không l p ch p k. Tuy nhiên
có m t cách khác là li t kê t t c các t p con k ph n t c a t p h p, sau đó in ra đ k! hoán v
c a nó. Hãy vi t ch ng trình li t kê các ch nh h p không l p ch p k c a {1, 2, …, n} theo c
hai cách.
Bài 9
Li t kê t t c các hoán v ch cái trong t MISSISSIPPI theo th t t đi n.
Bài 10
Li t kê t t c các cách phân tích s nguyên d ng n thành t ng các s nguyên d
phân tích là hoán v c a nhau ch tính là m t cách.
ng, hai cách
Cu i cùng, ta có nh n xét, m i ph ng pháp li t kê đ u có u, nh c đi m riêng và ph ng
pháp sinh c ng không n m ngoài nh n xét đó. Ph ng pháp sinh không th sinh ra đ c c u
hình th p n u nh ch a có c u hình th p - 1, ch ng t r ng ph ng pháp sinh t ra u đi m
trong tr ng h p li t kê toàn b m t s l ng nh c u hình trong m t b d li u l n thì l i có
nh c đi m và ít tính ph d ng trong nh ng thu t toán duy t h n ch . H n th n a, không
ph i c u hình ban đ u lúc nào c ng d tìm đ c, không ph i k thu t sinh c u hình k ti p
cho m i bài toán đ u đ n gi n nh trên (Sinh các ch nh h p không l p ch p k theo th t t
đi n ch ng h n). Ta sang m t chuyên m c sau nói đ n m t ph ng pháp li t kê có tính ph
d ng cao h n, đ gi i các bài toán li t kê ph c t p h n đó là: Thu t toán quay lui (Back
tracking).
Lê Minh Hoàng