LÊ MINH HOÀNG
BÀI GI NG CHUYÊN
: GI I THU T VÀ L P TRÌNH
Bài gi ng chuyên
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. HỐ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 TỐ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 TỐN PHÂN TÍCH S .................................................................................................................... 16
3.5. BÀI TOÁN X P H U .............................................................................................................................. 18
§4. K THU T NHÁNH C N ...........................................................................................................24
4.1. BÀI TỐ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 TỐN............................................................................................................................ 34
1.2. TÌM C U TRÚC D LI U BI U DI N BÀI TỐN ............................................................................. 34
1.3. TÌM THU T TỐ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 TỐN............................................................. 40
2.3. XÁC
NH
PH C T P TÍNH TỐN C A GI I THU T ............................................................ 42
2.4.
PH C T P TÍNH TỐ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) .................................................................................................................. 87
8.1. BÀI TOÁN S P X P................................................................................................................................87
8.2. THU T TOÁN S P X P KI U CH N (SELECTIONSORT) ...............................................................89
8.3. THU T TOÁN S P X P N I B T (BUBBLESORT)...........................................................................90
8.4. THU T TOÁN S P X P KI U CHÈN...................................................................................................90
8.5. SHELLSORT.............................................................................................................................................92
8.6. THU T TOÁN S P X P KI U PHÂN O N (QUICKSORT) ............................................................93
8.7. THU T TOÁN S P X P KI U VUN
NG (HEAPSORT) ................................................................99
8.8. S P X P B NG PHÉP
M PHÂN PH I (DISTRIBUTION COUNTING)......................................102
8.9. TÍNH N NH C A THU T TOÁN S P X P (STABILITY) .........................................................103
8.10. THU T TOÁN S P X P B NG C S (RADIX SORT) .................................................................104
8.11. THU T TOÁN S P X P TR N (MERGESORT)..............................................................................109
8.12. CÀI
T ...............................................................................................................................................112
8.13. ÁNH GIÁ, NH N XÉT......................................................................................................................119
§9. TÌM KI M (SEARCHING) ....................................................................................................... 124
9.1. BÀI TỐN TÌM KI M ...........................................................................................................................124
9.2. TÌM KI M TU N T (SEQUENTIAL SEARCH) ...............................................................................124
9.3. TÌM KI M NH PHÂN (BINARY SEARCH)........................................................................................124
9.4. CÂY NH PHÂN TÌM KI M (BINARY SEARCH TREE - BST).........................................................125
iii
9.5. PHÉP B M (HASH)............................................................................................................................... 130
9.6. KHOÁ S V I BÀI TỐN TÌM KI M ................................................................................................ 130
9.7. CÂY TÌM KI M S H C (DIGITAL SEARCH TREE - DST)............................................................ 131
9.8. CÂY TÌM KI M C S (RADIX SEARCH TREE - RST) .................................................................. 134
9.9. NH NG NH N XÉT CU I CÙNG ...................................................................................................... 139
PH N 3. QUY HO CH
NG .................................................................... 141
§1. CƠNG TH C TRUY H I ..........................................................................................................142
1.1. VÍ D ...................................................................................................................................................... 142
1.2. C I TI N TH NH T........................................................................................................................... 143
1.3. C I TI N TH HAI............................................................................................................................... 144
1.4. CÀI
T
QUY ................................................................................................................................. 145
§2. PH
NG PHÁP QUY HO CH
NG ...................................................................................147
2.1. BÀI TOÁN QUY HO CH ..................................................................................................................... 147
2.2. PH NG PHÁP QUY HO CH
NG ................................................................................................ 147
§3. M T S
BÀI TOÁN QUY HO CH
NG ............................................................................151
3.1. DÃY CON
N I U T NG DÀI NH T ........................................................................................... 151
3.2. BÀI TOÁN CÁI TÚI............................................................................................................................... 156
3.3. BI N
I XÂU ...................................................................................................................................... 158
3.4. DÃY CON CÓ T NG CHIA H T CHO K............................................................................................ 162
3.5. PHÉP NHÂN T H P DÃY MA TR N............................................................................................... 166
3.6. BÀI T P LUY N T P........................................................................................................................... 170
PH N 4. CÁC THU T TỐN TRÊN
§1. CÁC KHÁI NI M C
TH .......................................... 175
B N .......................................................................................................176
1.1. NH NGH A
TH (GRAPH) .......................................................................................................... 176
1.2. CÁC KHÁI NI M................................................................................................................................... 177
§2. BI U DI N
TH TRÊN MÁY TÍNH ..................................................................................179
2.1. MA TR N K (ADJACENCY MATRIX)............................................................................................. 179
2.2. DANH SÁCH C NH (EDGE LIST) ...................................................................................................... 180
2.3. DANH SÁCH K (ADJACENCY LIST) ............................................................................................... 181
2.4. NH N XÉT............................................................................................................................................. 182
§3. CÁC THU T TỐN TÌM KI M TRÊN
TH ...................................................................184
3.1. BÀI TỐN .............................................................................................................................................. 184
3.2. THU T TỐN TÌM KI M THEO CHI U SÂU (DEPTH FIRST SEARCH)...................................... 185
3.3. THU T TỐN TÌM KI M THEO CHI U R NG (BREADTH FIRST SEARCH) ............................ 187
3.4.
PH C T P TÍNH TỐN C A BFS VÀ DFS ................................................................................ 190
§4. TÍNH LIÊN THƠNG C A
TH ..........................................................................................191
4.1. NH NGH A ......................................................................................................................................... 191
4.2. TÍNH LIÊN THƠNG TRONG
TH VƠ H NG ........................................................................... 192
iv
4.3.
TH
Y
VÀ THU T TOÁN WARSHALL ...........................................................................192
4.4. CÁC THÀNH PH N LIÊN THƠNG M NH ........................................................................................195
§5. VÀI
NG D NG C A DFS và BFS ......................................................................................... 206
5.1. XÂY D NG CÂY KHUNG C A
TH ............................................................................................206
5.2. T P CÁC CHU TRÌNH C S C A
TH ......................................................................................209
5.3. BÀI TOÁN NH CHI U
TH ........................................................................................................209
5.4. LI T KÊ CÁC KH P VÀ C U C A
TH ......................................................................................213
§6. CHU TRÌNH EULER,
NG I EULER,
TH EULER ............................................. 216
6.1. BÀI TOÁN 7 CÁI C U ..........................................................................................................................216
6.2. NH NGH A..........................................................................................................................................216
6.3. NH LÝ .................................................................................................................................................216
6.4. THU T TỐN FLEURY TÌM CHU TRÌNH EULER...........................................................................217
6.5. CÀI
T .................................................................................................................................................218
6.6. THU T TỐN T T H N......................................................................................................................220
§7. CHU TRÌNH HAMILTON,
NG I HAMILTON,
TH HAMILTON .................. 223
7.1. NH NGH A..........................................................................................................................................223
7.2. NH LÝ .................................................................................................................................................223
7.3. CÀI
T .................................................................................................................................................224
§8. BÀI TỐN
NG I NG N NH T..................................................................................... 228
8.1.
TH CĨ TR NG S .........................................................................................................................228
8.2. BÀI TỐN
NG I NG N NH T .................................................................................................228
8.3. TR NG H P
TH KHƠNG CĨ CHU TRÌNH ÂM - THU T TỐN FORD BELLMAN .........230
8.4. TR NG H P TR NG S TRÊN CÁC CUNG KHƠNG ÂM - THU T TỐN DIJKSTRA ...........232
8.5. THU T TOÁN DIJKSTRA VÀ C U TRÚC HEAP .............................................................................235
8.6. TR NG H P
TH KHƠNG CĨ CHU TRÌNH - S P X P TÔ PÔ..............................................238
8.7.
NG I NG N NH T GI A M I C P NH - THU T TỐN FLOYD...................................241
8.8. NH N XÉT .............................................................................................................................................243
§9. BÀI TỐN CÂY KHUNG NH
NH T ................................................................................... 248
9.1. BÀI TOÁN CÂY KHUNG NH NH T ................................................................................................248
9.2. THU T TOÁN KRUSKAL (JOSEPH KRUSKAL - 1956) ...................................................................248
9.3. THU T TỐN PRIM (ROBERT PRIM - 1957)....................................................................................253
§10. BÀI TOÁN LU NG C C
I TRÊN M NG...................................................................... 257
10.1. CÁC KHÁI NI M .................................................................................................................................257
10.2. M NG TH NG D VÀ
NG T NG LU NG ............................................................................260
10.3. THU T TOÁN FORD-FULKERSON (L.R.FORD & D.R.FULKERSON - 1962) .............................263
10.4. THU T TOÁN PREFLOW-PUSH (GOLDBERG - 1986) ..................................................................267
10.5. M T S M R NG.............................................................................................................................273
§11. BÀI TỐN TÌM B
GHÉP C C
I TRÊN
TH HAI PHÍA .................................... 280
11.1.
TH HAI PHÍA (BIPARTITE GRAPH) .........................................................................................280
11.2. BÀI TỐN GHÉP ƠI KHƠNG TR NG VÀ CÁC KHÁI NI M .....................................................280
11.3. THU T TOÁN
NG M ...............................................................................................................281
11.4. CÀI
T ...............................................................................................................................................282
v
§12. BÀI TỐ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 TỐN HUNGARI .................................................................................................288
12.1. BÀI TỐN PHÂN CƠNG .................................................................................................................... 288
12.2. PHÂN TÍCH .......................................................................................................................................... 288
12.3. THU T TỐN...................................................................................................................................... 289
12.4. BÀI TỐN TÌM B GHÉP C C
I V I TR NG S C C
I TRÊN
TH HAI PHÍA....... 297
12.5. NÂNG C P........................................................................................................................................... 298
§13. BÀI TỐN TÌM B
GHÉP C C
I TRÊN
TH .........................................................304
13.1. CÁC KHÁI NI M................................................................................................................................. 304
13.2. THU T TOÁN EDMONDS (1965) ..................................................................................................... 305
13.3. THU T TOÁN LAWLER (1973)......................................................................................................... 307
13.4. CÀI
T ............................................................................................................................................... 309
13.5.
PH C T P TÍNH TỐN............................................................................................................... 313
TÀI LI U
C THÊM.................................................................................. 315
vi
HÌNH V
Hình 1: Cây tìm ki m quay lui trong bài tốn li t kê dãy nh phân .......................................................................13
Hình 2: X p 8 quân h u trên bàn c 8x8 ...............................................................................................................19
Hình 3:
ng chéo B-TN mang ch s 10 và
Hình 4: L u
ng chéo N-TB mang ch s 0............................................19
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
Hình 8: Danh sách n i
n ..........................................................................................................59
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 hồn ch nh và cây nh phân
y
Hình 21: ánh s các nút c a cây nh phân
bi u di n b ng m ng ........................................................73
Hình 22: Nh
c i m c a ph
y
...................................................................................72
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 ................................................................................................................94
Hình 30: Tr ng thái tr
c khi g i
quy ..............................................................................................................95
Hình 31: Heap......................................................................................................................................................100
Hình 32: Vun
Hình 33:
ng ..............................................................................................................................................100
o giá tr k[1] cho k[n] và xét ph n cịn l i ........................................................................................101
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] .................................................................101
Hình 35: ánh s các bit .....................................................................................................................................104
Hình 36: Thu t tốn s p x p tr n.........................................................................................................................109
Hình 37: Cài
t các thu t tốn s p x p v i d li u l n ......................................................................................121
vii
Hình 38: Cây nh phân tìm ki m ......................................................................................................................... 126
Hình 39: Xóa nút lá
cây BST ........................................................................................................................... 127
Hình 40. Xóa nút ch có m t nhánh con trên cây BST ........................................................................................ 128
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............................ 128
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............................ 128
Hình 43: ánh s các bit ..................................................................................................................................... 131
Hình 44: Cây tìm ki m s h c............................................................................................................................. 131
Hình 45: Cây tìm ki m c s ............................................................................................................................... 134
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............... 135
Hình 47: RST ch a các khoá 2, 4, 5, 7 và RST sau khi lo i b giá tr 7 ............................................................. 136
Hình 48: Cây tìm ki m c s a) và Trie tìm ki m c s b).................................................................................. 138
Hình 49: Hàm
quy tính s Fibonacci .............................................................................................................. 149
Hình 50: Tính tốn và truy v t ............................................................................................................................ 152
Hình 51: Truy v t ................................................................................................................................................ 160
Hình 52: Ví d v mơ hình
Hình 53: Phân lo i
th ........................................................................................................................ 176
th ..................................................................................................................................... 177
Hình 54................................................................................................................................................................ 180
Hình 55................................................................................................................................................................ 181
Hình 56:
th và
ng i................................................................................................................................ 184
Hình 57: Cây DFS ............................................................................................................................................... 187
Hình 58: Cây BFS ............................................................................................................................................... 190
Hình 59:
th G và các thành ph n liên thông G1, G2, G3 c a nó .................................................................. 191
Hình 60: Kh p và c u.......................................................................................................................................... 191
Hình 61: Liên thơng m nh và liên thơng y u ...................................................................................................... 192
Hình 62:
th
Hình 63:
n
y
........................................................................................................................................ 193
th vơ h
ng và bao óng c a nó............................................................................................. 193
Hình 64: Ba d ng cung ngồi cây DFS ............................................................................................................... 197
Hình 65: Thu t tốn Tarjan "b " cây DFS........................................................................................................... 199
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)........................................................................................................... 204
Hình 67:
th G và m t s ví d cây khung T1, T2, T3 c a nó ....................................................................... 208
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
Hình 69: Phép
nh) ................................ 208
nh chi u DFS............................................................................................................................ 211
Hình 70: Phép ánh s và ghi nh n cung ng
Hình 71: Mơ hình
c lên cao nh t ............................................................................. 213
th c a bài toán b y cái c u ............................................................................................... 216
Hình 72................................................................................................................................................................ 217
Hình 73................................................................................................................................................................ 217
Hình 74................................................................................................................................................................ 223
Hình 75: Phép ánh l i ch s theo th t tơpơ ................................................................................................... 238
Hình 76: Hai cây g c r1 và r2 và cây m i khi h p nh t chúng............................................................................. 249
viii
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............................257
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)) ..............................................................................................................................261
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 ....................................................................................................262
c và sau khi t ng.............................................................................................262
Hình 81: M ng gi c a m ng có nhi u i m phát và nhi u i m thu..................................................................273
Hình 82: Thay m t
nh u b ng hai
nh uin, uout .................................................................................................274
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 ..........................................274
Hình 84:
th hai phía ......................................................................................................................................280
Hình 85:
th hai phía và b ghép M ...............................................................................................................281
Hình 86: Mơ hình lu ng c a bài tốn tìm b ghép c c
i trên
th hai phía...................................................285
Hình 87: Phép xoay tr ng s c nh .......................................................................................................................289
Hình 88: Thu t tốn Hungari ...............................................................................................................................292
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 ................................................299
th G và m t b ghép M ..................................................................................................................304
Hình 91: Phép ch p Blossom...............................................................................................................................306
Hình 92: N Blossom
dị
ng xun qua Blossom .....................................................................................306
ix
CH
NG TRÌNH
P_1_02_1.PAS * Thu t tố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 ...................................................................... 17
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............................................................................................................. 112
P_3_01_1.PAS *
m s cách phân tích s n..................................................................................................... 143
P_3_01_2.PAS *
m s cách phân tích s n..................................................................................................... 144
P_3_01_3.PAS *
m s cách phân tích s n..................................................................................................... 144
P_3_01_4.PAS *
m s cách phân tích s n..................................................................................................... 145
P_3_01_5.PAS *
m s cách phân tích s n dùng
quy ................................................................................ 145
P_3_01_6.PAS *
m s cách phân tích s n dùng
quy ................................................................................ 145
P_3_03_1.PAS * Tìm dãy con
n i u t ng dài nh t ........................................................................................ 152
P_3_03_2.PAS * C i ti n thu t tốn tìm dãy con
n i u t ng dài nh t ........................................................... 154
P_3_03_3.PAS * Bài toán cái túi ........................................................................................................................ 157
P_3_03_4.PAS * Bi n
i xâu ............................................................................................................................ 161
P_3_03_5.PAS * Dãy con có t ng chia h t cho k ............................................................................................... 163
P_3_03_6.PAS * Dãy con có t ng chia h t cho k ............................................................................................... 165
P_3_03_7.PAS * Nhân t i u dãy ma tr n.......................................................................................................... 169
P_4_03_1.PAS * Thu t toán tìm ki m theo chi u sâu ........................................................................................ 185
P_4_03_2.PAS * Thu t tốn tìm ki m theo chi u r ng ...................................................................................... 188
P_4_04_1.PAS * Thu t toán Warshall li t kê các thành ph n liên thông ........................................................... 195
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...................................................... 202
P_4_05_1.PAS * Li t kê các kh p và c u c a
th .......................................................................................... 214
P_4_06_1.PAS * Thu t tốn Fleury tìm chu trình Euler..................................................................................... 218
P_4_06_2.PAS * Thu t tốn hi u qu tìm chu trình Euler.................................................................................. 221
P_4_07_1.PAS * Thu t toán quay lui li t kê chu trình Hamilton ....................................................................... 224
P_4_08_1.PAS * Thu t tốn Ford-Bellman ........................................................................................................ 231
P_4_08_2.PAS * Thu t toán Dijkstra.................................................................................................................. 233
P_4_08_3.PAS * Thu t toán Dijkstra và c u trúc Heap...................................................................................... 235
x
P_4_08_4.PAS *
ng i ng n nh t trên
th khơng có chu trình.................................................................239
P_4_08_5.PAS * Thu t tốn Floyd .....................................................................................................................242
P_4_09_1.PAS * Thu t toán Kruskal ..................................................................................................................250
P_4_09_2.PAS * Thu t toán Prim.......................................................................................................................254
P_4_10_1.PAS * Thu t toán Ford-Fulkerson ......................................................................................................265
P_4_10_2.PAS * Thu t toán Preflow-push .........................................................................................................270
P_4_11_1.PAS * Thu t tốn
ng m tìm b ghép c c
i..............................................................................283
P_4_12_1.PAS * Thu t toán Hungari..................................................................................................................295
P_4_12_2.PAS * Cài
P_4_13_1.PAS * Ph
t ph
ng pháp Kuhn-Munkres O(k3) ............................................................................300
ng pháp Lawler áp d ng cho thu t toán Edmonds ..........................................................310
B NG CÁC KÝ HI U
CS
x
x
n
Floor of x: S nguyên l n nh t
Ceiling of x: S nguyên nh nh t
Pk
S ch nh h p không l p ch p k c a n ph n t (=
D NG
x
x
n!
)
(n k)!
Binomial coefficient: H s c a h ng t xk trong a th c (1+x)n
n
k
= S t h p ch p k c a n ph n t =
n!
k!(n k)!
Ký pháp ch O l n
O .
.
Ký pháp
l n
.
Ký pháp
l n
Ký pháp ch o nh
o .
ký pháp
.
nh
a i..j
Các ph n t trong m ng a tính t ch s i
n!
n factorial: Giai th a c a n = 1.2.3…n
a
ab
b
a
n ch s j
b
...a
aa
m
b copies of a
log a x
Logarithm to base a of x: Logarithm c s a c a x (logaab = 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* x
a
S l n l y logarithm c s a
lg* x
log* x
2
ln* x
log* x
e
thu
cs
1 t x ( log* (a
a
b)
b)
PH N 1. BÀI TỐ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 tốn ó g i là bài tốn m.
Trong l p các bài tốn m, có nh ng bài tố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
tốn 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
theo
nhi u
c ud
i bài toán li t kê, c n ph i xác nh
c m t thu t tốn có th
ó l n l t xây d ng
c t t c các c u hình ang quan tâm. Có
ph ng pháp li t kê, nh ng chúng c n ph i áp ng
c hai yêu
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 tố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 tố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 tố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.
2
Chuyên
§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.
G i X là t p các s nguyên d
ng t 1
n k: X = {1, 2, …, k}
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
f(2), …, f(k).
nh qua b ng các giá tr f(1),
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
c g i là m t
E
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 k)!
n(n 1)(n 2)...(n k 1)
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 hố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 hố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!
k!(n k)!
n
k
4
Chun
§2. PH
NG PHÁP SINH (GENERATION)
Ph ng pháp sinh có th áp d ng
sau tho mãn:
gi i bài toán li t kê t h p
t ra n u nh hai i u ki 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
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ó th bi t
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
Tính ph n x : a
Tính ph n
b, ho c b
a
i x ng: N u a
Tính b c c u: N u có a
Trong tr
ng h p a
, >, kh i ph i
a;
b và b
b và b
b và a
a thì b t bu c a = b.
c thì a
c.
b, ta dùng ký hi u "<" cho g n, (ta ng m hi u các ký hi u nh
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
Xét a[1..n] và b[1..n] là hai dãy
Khi ó a
nh m t quan h th t :
dài n, trên các ph n t c a a và b ã có quan h th t " ".
b n u nh
Ho c a[i] = b[i] v i i: 1
i
Ho c t n t i m t s nguyên d
n.
ng k: 1
k
:
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
Th t
Khi
ng h p này, ta có th vi t a < b.
ó g i là th t t
i n trên các dãy
dài n.
dài hai dãy a và b không b ng nhau, ng
i ta c ng xác
cách thêm vào cu i dãy a ho c dãy b nh ng ph n t
và b b ng nhau, và coi nh ng ph n t
nh th t t
nh
c th t t
c bi t g i là ph n t
dài c a a
này nh h n t t c các ph n t khác, ta l i
i n c a hai dãy cùng
i n. B ng
a v xác
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
M t dãy nh phân
DÀI N
dài n là m t dãy x[1..n] trong ó x[i]
D th y: m t dãy nh phân x
{0, 1} ( i : 1
i
n).
dài n là bi u di n nh phân c a m t giá tr nguyên p(x) nào ó
n
n m trong o n [0, 2 - 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:
Dãy m i:
+1
10010001
Dãy m i:
+1
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
6
Chun
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ì tồ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
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
30
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
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); {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
Ví d : v i n = 5, k = 3, ta ph i li t kê
i n
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ì q 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] ã
tt 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
mãn tính ch t v a
c a nó. T c là:
c nh ng ch a tho
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
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
N u khơng tìm th y t c là m i ph n t
ã
i.
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
30) 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}
8
Chuyên
P_1_02_2.PAS * Thu t toán sinh li t kê các t p con k ph n t
program Combination;
const
InputFile = 'SUBSET.INP';
OutputFile = 'SUBSET.OUT';
max = 30;
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; {x := 12…k (C u hình kh i t o)}
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 HỐN V
Ta s l p ch
ng trình li t kê các hốn v c a {1, 2, …, n} theo th t t
Ví d v i n = 4, ta ph i li t kê
1.1234
7.2134
13.3124
19.4123
2.1243
8.2143
14.3142
20.4132
Nh v y hoán v
3.1324
9.2314
15.3214
21.4213
4.1342
10.2341
16.3241
22.4231
i n.
24 hoán v :
5.1423
11.2413
17.3412
23.4312
6.1432
12.2431
18.3421
24.4321
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 nh 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
cm 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 hố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
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 .
HSPHN 1999-2004
Bài tốn li t kê
9
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ì hốn v k ti p s là 2, 1, 4, 3 . Ta c ng
có th coi hố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 hố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à tồ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
12
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
program Permutation;
const
InputFile = 'PERMUTE.INP';
OutputFile = 'PERMUTE.OUT';
max = 12;
var
n, i, k, a, b: Integer;
x: array[1..max] of Integer;
f: Text;
procedure Swap(var X, Y: Integer); {Th t c
var
Temp: Integer;
begin
Temp := X; X := Y; Y := Temp;
end;
begin
Assign(f, InputFile); Reset(f);
ReadLn(f, n);
Close(f);
Lê Minh Hoàng
o giá tr hai tham bi n X, Y}
10
Chuyên
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 hố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
1010 s t ng ng v i t p con {1, 3}. Hãy l p ch ng trình in ra t t c các t p con c a {1,
2, …, n} theo hai ph ng pháp.
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
HSPHN 1999-2004
Bài toán li t kê
11
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! hố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à hố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 ngồi nh n xét ó. Ph ng pháp sinh khơng th sinh ra
cc 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 tốn quay lui (Back
tracking).
Lê Minh Hoàng