Tải bản đầy đủ (.pdf) (334 trang)

Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.87 MB, 334 trang )

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


×