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

Cấu trúc Dữ liệu và giải thuật

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.88 MB, 332 trang )

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


×