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

giải thuật và lập trình

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 (12.66 MB, 316 trang )

LÊ MINH HOÀNG

Bài gi ng chuyên đ

i h c S ph m Hà N i, 1999-2002

CuuDuongThanCong.com

/>

CuuDuongThanCong.com

/>

L ic m n

Tôi mu n bày t lòng bi t n đ i v i nh ng ng
đ y khó kh n khi tôi m i b

i th y đã ch d y t n tình trong nh ng n m tháng

c vào h c tin h c và l p trình. S hi u bi t và lòng nhi t tình c a các

th y không nh ng đã cung c p cho tôi nh ng ki n th c quý báu mà còn là t m g
noi theo khi tôi đ ng trên b c gi ng c ng v i t cách là m t ng
Cu n tài li u này đ

c vi t d a trên nh ng tài li u thu th p đ

ng sáng cho tôi


i th y.

c t nhi u ngu n khác nhau, b i

công s c c a nhi u th h th y trò đã t ng gi ng d y và h c t p t i Kh i Ph thông chuyên ToánTin,

i h c S ph m Hà N i, còn tôi ch là ng

i t ng h p l i. Qua đây, tôi mu n g i l i c m n

t i các đ ng nghi p đã đ c và đóng góp nh ng ý ki n quí báu, c m n các b n h c sinh - nh ng
con ng

i đã tr c ti p làm nên cu n sách này.

Do th i gian h n h p, m t s

chuyên đ tuy đã có nh ng ch a k p ch nh s a và đ a vào tài li u.

B n đ c có th tham kh o thêm trong ph n tra c u. R t mong nh n đ

c nh ng l i nh n xét và góp

ý c a các b n đ hoàn thi n cu n sách này.
Tokyo, 28 tháng 4 n m 2003

Lê Minh Hoàng

CuuDuongThanCong.com


/>

CuuDuongThanCong.com

/>

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 ...........................................................................................................................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 TOÁN T I
4.2. S

U.........................................................................................................................................24

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 ........................................................................................................................................................28


PH N 2. C U TRÚC D
§1. CÁC B
1.1. XÁC

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

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.

PH C T P TÍNH TOÁN C A GI I THU T ........................................................................................40


2.2. XÁC
2.3.

NH

PH C T P TÍNH TOÁN C A GI I THU T ....................................................................40

PH C T P TÍNH TOÁN V I TÌNH TR NG D

LI U VÀO..............................................................43

2.4. CHI PHÍ TH C HI N THU T TOÁN...........................................................................................................43

CuuDuongThanCong.com

/>

ii

§3.

QUY VÀ GI I THU T

3.1. KHÁI NI M V

QUY ............................................................................................... 45

QUY .............................................................................................................................. 45


3.2. GI I THU T

QUY .................................................................................................................................. 45

3.3. VÍ D V GI I THU T
3.4. HI U L C C A

§4. C U TRÚC D

QUY ................................................................................................................ 46

QUY ............................................................................................................................. 50

LI U BI U DI N DANH SÁCH.......................................................................... 52

4.1. KHÁI NI M DANH SÁCH ............................................................................................................................ 52
4.2. BI U DI N DANH SÁCH TRONG MÁY TÍNH .......................................................................................... 52

§5. NG N X P VÀ HÀNG

I.............................................................................................................. 58

5.1. NG N X P (STACK)..................................................................................................................................... 58
5.2. HÀNG

I (QUEUE)..................................................................................................................................... 60

§6. CÂY (TREE)........................................................................................................................................ 64
6.1.


NH NGH A ................................................................................................................................................. 64

6.2. CÂY NH PHÂN (BINARY TREE) ............................................................................................................... 65
6.3. BI U DI N CÂY NH PHÂN ........................................................................................................................ 67
6.4. PHÉP DUY T CÂY NH PHÂN.................................................................................................................... 69
6.5. CÂY K_PHÂN ................................................................................................................................................ 70
6.6. CÂY T NG QUÁT......................................................................................................................................... 71

§7. KÝ PHÁP TI N T , TRUNG T
7.1. BI U TH C D

VÀ H U T ............................................................................. 74

I D NG CÂY NH PHÂN ............................................................................................... 74

7.2. CÁC KÝ PHÁP CHO CÙNG M T BI U TH C.......................................................................................... 74
7.3. CÁCH TÍNH GIÁ TR BI U TH C .............................................................................................................. 75
7.4. CHUY N T

D NG TRUNG T SANG D NG H U T ......................................................................... 78

7.5. XÂY D NG CÂY NH PHÂN BI U DI N BI U TH C............................................................................ 80

§8. S P X P (SORTING) ........................................................................................................................ 82
8.1. BÀI TOÁN S P X P...................................................................................................................................... 82
8.2. THU T TOÁN S P X P KI U CH N (SELECTIONSORT)..................................................................... 84
8.3. THU T TOÁN S P X P N I B T (BUBBLESORT)................................................................................. 85
8.4. THU T TOÁN S P X P KI U CHÈN......................................................................................................... 85
8.5. SHELLSORT................................................................................................................................................... 87
8.6. THU T TOÁN S P X P KI U PHÂN O N (QUICKSORT).................................................................. 88

8.7. THU T TOÁN S P X P KI U VUN
8.8. S P X P B NG PHÉP
8.9. TÍNH N

NG (HEAPSORT) ...................................................................... 92

M PHÂN PH I (DISTRIBUTION COUNTING) ............................................. 95

NH C A THU T TOÁN S P X P (STABILITY) ................................................................. 96

8.10. THU T TOÁN S P X P B NG C S (RADIXSORT).......................................................................... 97
8.11. THU T TOÁN S P X P TR N (MERGESORT).................................................................................... 102
8.12. CÀI

T ..................................................................................................................................................... 105

8.13. ÁNH GIÁ, NH N XÉT............................................................................................................................ 112

§9. TÌM KI M (SEARCHING) ............................................................................................................. 116

CuuDuongThanCong.com

/>

iii
9.1. BÀI TOÁN TÌM KI M..................................................................................................................................116
9.2. TÌM KI M TU N T

(SEQUENTIAL SEARCH) ......................................................................................116


9.3. TÌM KI M NH PHÂN (BINARY SEARCH) ..............................................................................................116
9.4. CÂY NH PHÂN TÌM KI M (BINARY SEARCH TREE - BST) ...............................................................117
9.5. PHÉP B M (HASH)......................................................................................................................................122
9.6. KHOÁ S V I BÀI TOÁN TÌM KI M .......................................................................................................122
9.7. CÂY TÌM KI M S H C (DIGITAL SEARCH TREE - DST)...................................................................123
9.8. CÂY TÌM KI M C S (RADIX SEARCH TREE - RST) .........................................................................126
9.9. NH NG NH N XÉT CU I CÙNG .............................................................................................................131

PH N 3. QUY HO CH

NG ............................................................................ 133

§1. CÔNG TH C TRUY H I................................................................................................................134
1.1. VÍ D .............................................................................................................................................................134
1.2. C I TI N TH

NH T..................................................................................................................................135

1.3. C I TI N TH

HAI......................................................................................................................................137

1.4. CÀI

§2. PH

T

QUY ........................................................................................................................................137


NG PHÁP QUY HO CH

NG .........................................................................................139

2.1. BÀI TOÁN QUY HO CH ............................................................................................................................139
2.2. PH

§3. M T S

NG PHÁP QUY HO CH

NG.......................................................................................................139

BÀI TOÁN QUY HO CH

3.1. DÃY CON

NG ..................................................................................143

N I U T NG DÀI NH T..................................................................................................143

3.2. BÀI TOÁN CÁI TÚI......................................................................................................................................148
3.3. BI N

I XÂU .............................................................................................................................................150

3.4. DÃY CON CÓ T NG CHIA H T CHO K...................................................................................................154
3.5. PHÉP NHÂN T H P DÃY MA TR N......................................................................................................159
3.6. BÀI T P LUY N T P..................................................................................................................................163


PH N 4. CÁC THU T TOÁN TRÊN
§1. CÁC KHÁI NI M C
1.1.

NH NGH A

TH .................................................. 169

B N .............................................................................................................170

TH (GRAPH).................................................................................................................170

1.2. CÁC KHÁI NI M..........................................................................................................................................171

§2. BI U DI N

TH TRÊN MÁY TÍNH........................................................................................173

2.1. MA TR N LI N K (MA TR N K ) .........................................................................................................173
2.2. DANH SÁCH C NH.....................................................................................................................................174
2.3. DANH SÁCH K ...........................................................................................................................................175
2.4. NH N XÉT....................................................................................................................................................176

§3. CÁC THU T TOÁN TÌM KI M TRÊN

TH .........................................................................177

3.1. BÀI TOÁN .....................................................................................................................................................177
3.2. THU T TOÁN TÌM KI M THEO CHI U SÂU (DEPTH FIRST SEARCH).............................................178
3.3. THU T TOÁN TÌM KI M THEO CHI U R NG (BREADTH FIRST SEARCH) ...................................184


CuuDuongThanCong.com

/>

iv
3.4.

PH C T P TÍNH TOÁN C A BFS VÀ DFS ...................................................................................... 189

§4. TÍNH LIÊN THÔNG C A
4.1.

TH ............................................................................................... 190

NH NGH A ............................................................................................................................................... 190

4.2. TÍNH LIÊN THÔNG TRONG
4.3.

TH

Y

TH VÔ H

NG.................................................................................. 191

VÀ THU T TOÁN WARSHALL ................................................................................. 191


4.4. CÁC THÀNH PH N LIÊN THÔNG M NH .............................................................................................. 195

§5. VÀI

NG D NG C A CÁC THU T TOÁN TÌM KI M TRÊN

5.1. XÂY D NG CÂY KHUNG C A

TH ................................................................................................. 205

5.2. T P CÁC CHU TRÌNH C B N C A
5.3.

NH CHI U

TH ............................... 205

TH ........................................................................................ 208

TH VÀ BÀI TOÁN LI T KÊ C U .............................................................................. 208

5.4. LI T KÊ KH P ............................................................................................................................................ 214

§6. CHU TRÌNH EULER,

NG I EULER,

TH EULER................................................... 218

6.1. BÀI TOÁN 7 CÁI C U ................................................................................................................................ 218

6.2.

NH NGH A ............................................................................................................................................... 218

6.3.

NH LÝ ....................................................................................................................................................... 218

6.4. THU T TOÁN FLEURY TÌM CHU TRÌNH EULER................................................................................. 219
6.5. CÀI

T ....................................................................................................................................................... 220

6.6. THU T TOÁN T T H N ........................................................................................................................... 222

§7. CHU TRÌNH HAMILTON,

NG I HAMILTON,

TH HAMILTON ........................ 225

7.1.

NH NGH A ............................................................................................................................................... 225

7.2.

NH LÝ ....................................................................................................................................................... 225

7.3. CÀI


T ....................................................................................................................................................... 226

§8. BÀI TOÁN
8.1.

NG I NG N NH T .......................................................................................... 230

TH CÓ TR NG S ............................................................................................................................... 230

8.2. BÀI TOÁN

NG I NG N NH T ....................................................................................................... 230

8.3. TR

NG H P

TH KHÔNG CÓ CHU TRÌNH ÂM - THU T TOÁN FORD BELLMAN ............... 232

8.4. TR

NG H P TR NG S TRÊN CÁC CUNG KHÔNG ÂM - THU T TOÁN DIJKSTRA................. 234

8.5. THU T TOÁN DIJKSTRA VÀ C U TRÚC HEAP ................................................................................... 237
8.6. TR
8.7.

NG H P


TH KHÔNG CÓ CHU TRÌNH - TH

NG I NG N NH T GI A M I C P

T

TÔ PÔ .................................................... 240

NH - THU T TOÁN FLOYD......................................... 242

8.8. NH N XÉT ................................................................................................................................................... 245

§9. BÀI TOÁN CÂY KHUNG NH

NH T ......................................................................................... 247

9.1. BÀI TOÁN CÂY KHUNG NH NH T ...................................................................................................... 247
9.2. THU T TOÁN KRUSKAL (JOSEPH KRUSKAL - 1956) ......................................................................... 247
9.3. THU T TOÁN PRIM (ROBERT PRIM - 1957).......................................................................................... 252

§10. BÀI TOÁN LU NG C C

I TRÊN M NG............................................................................ 256

10.1. BÀI TOÁN .................................................................................................................................................. 256
10.2. LÁT C T,
10.3. CÀI

NG T NG LU NG,


NH LÝ FORD - FULKERSON................................................. 256

T ..................................................................................................................................................... 258

CuuDuongThanCong.com

/>

v
10.4. THU T TOÁN FORD - FULKERSON (L.R.FORD & D.R.FULKERSON - 1962)..................................262

§11. BÀI TOÁN TÌM B
11.1.

GHÉP C C

I TRÊN

TH HAI PHÍA...........................................266

TH HAI PHÍA (BIPARTITE GRAPH)................................................................................................266

11.2. BÀI TOÁN GHÉP ÔI KHÔNG TR NG VÀ CÁC KHÁI NI M............................................................266
11.3. THU T TOÁN
11.4. CÀI

NG M ......................................................................................................................267

T ......................................................................................................................................................268


§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 .......................................................................................................273
12.1. BÀI TOÁN PHÂN CÔNG ...........................................................................................................................273
12.2. PHÂN TÍCH.................................................................................................................................................273
12.3. THU T TOÁN ............................................................................................................................................274
12.4. CÀI

T ......................................................................................................................................................278

12.5. 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 .............284

12.6. NÂNG C P..................................................................................................................................................284

§13. BÀI TOÁN TÌM B


GHÉP C C

I TRÊN

TH ..............................................................290

13.1. CÁC KHÁI NI M........................................................................................................................................290
13.2. THU T TOÁN EDMONDS (1965) ............................................................................................................291
13.3. PH

NG PHÁP LAWLER (1973) .............................................................................................................293

13.4. CÀI
13.5.

T ......................................................................................................................................................295

PH C T P TÍNH TOÁN .....................................................................................................................299

TÀI LI U

C THÊM .......................................................................................... 301

CuuDuongThanCong.com

/>

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 ...................................................... 19

Hình 4: L u đ thu t gi i (Flowchart).............................................................................................................................. 36
Hình 5: Tháp Hà N i........................................................................................................................................................ 49
Hình 6: C u trúc nút c a danh sách n i đ n..................................................................................................................... 53
Hình 7: Danh sách n i đ n............................................................................................................................................... 53
Hình 8: C u trúc nút c a danh sách n i kép ..................................................................................................................... 55
Hình 9: Danh sách n i kép ............................................................................................................................................... 55
Hình 10: Danh sách n i vòng m t h

ng......................................................................................................................... 55

Hình 11: Danh sách n i vòng hai h

ng .......................................................................................................................... 56

Hình 12: Dùng danh sách vòng mô t Queue................................................................................................................... 61
Hình 13: Di chuy n toa tàu............................................................................................................................................... 63
Hình 14: Di chuy n toa tàu (2) ......................................................................................................................................... 63
Hình 15: Cây .................................................................................................................................................................... 64
Hình 16: M c c a các nút trên cây................................................................................................................................... 65
Hình 17: Cây bi u di n bi u th c..................................................................................................................................... 65
Hình 18: Các d ng cây nh phân suy bi n ........................................................................................................................ 66
Hình 19: Cây nh phân hoàn ch nh và cây nh phân đ y đ ............................................................................................. 66

Hình 20: ánh s các nút c a cây nh phân đ y đ đ bi u di n b ng m ng................................................................... 67
Hình 21: Nh

c đi m c a ph

ng pháp bi u di n cây b ng m ng.................................................................................. 68

Hình 22: C u trúc nút c a cây nh phân ........................................................................................................................... 68
Hình 23: Bi u di n cây b ng c u trúc liên k t.................................................................................................................. 69
Hình 24: ánh s các nút c a cây 3_phân đ bi u di n b ng m ng................................................................................. 71
Hình 25: Bi u di n cây t ng quát b ng m ng .................................................................................................................. 72
Hình 26: C u trúc nút c a cây t ng quát .......................................................................................................................... 73
Hình 27: Bi u th c d

i d ng cây nh phân..................................................................................................................... 74

Hình 28: Vòng l p trong c a QuickSort........................................................................................................................... 89
Hình 29: Tr ng thái tr

c khi g i đ quy ......................................................................................................................... 90

Hình 30: Heap .................................................................................................................................................................. 92
Hình 31: Vun đ ng........................................................................................................................................................... 93
Hình 32:

o giá tr k1 cho kn và xét ph n còn l i............................................................................................................ 93

Hình 33: Vun ph n còn l i thành đ ng r i l i đ o tr k1 cho kn-1 ...................................................................................... 94
Hình 34: ánh s các bit .................................................................................................................................................. 97
Hình 35: Thu t toán s p x p tr n ................................................................................................................................... 102

Hình 36: Cài đ t các thu t toán s p x p v i d li u l n................................................................................................. 114
Hình 37: Cây nh phân tìm ki m .................................................................................................................................... 118
Hình 38: Xóa nút lá

cây BST ...................................................................................................................................... 119

Hình 39. Xóa nút ch có m t nhánh con trên cây BST ................................................................................................... 120

CuuDuongThanCong.com

/>

vii
Hình 40: 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 .......................................120
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 trái c a cây con ph i .......................................120
Hình 42: ánh s các bit.................................................................................................................................................123
Hình 43: Cây tìm ki m s h c.........................................................................................................................................124
Hình 44: Cây tìm ki m c s ..........................................................................................................................................126
Hình 45: 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 ..........................127
Hình 46: RST ch a các khoá 2, 4, 5, 7 và RST sau khi lo i b giá tr 7 .........................................................................128
Hình 47: Cây tìm ki m c s a) và Trie tìm ki m c s b) .............................................................................................130
Hình 48: Hàm đ quy tính s Fibonacci..........................................................................................................................141
Hình 49: Tính toán và truy v t ........................................................................................................................................144
Hình 50: Truy v t............................................................................................................................................................153
Hình 51: Ví d v mô hình đ th ...................................................................................................................................170
Hình 52: Phân lo i đ th ................................................................................................................................................171
Hình 53 ...........................................................................................................................................................................174
Hình 54 ...........................................................................................................................................................................175
Hình 55:


th và đ

ng đi ...........................................................................................................................................177

Hình 56: Cây DFS...........................................................................................................................................................180
Hình 57: Cây BFS ...........................................................................................................................................................184
Hình 58: Thu t toán loang ..............................................................................................................................................187
Hình 59:

th G và các thành ph n liên thông G1, G2, G3 c a nó ..............................................................................190

Hình 60: Kh p và c u .....................................................................................................................................................190
Hình 61: Liên thông m nh và liên thông y u..................................................................................................................191
Hình 62:

th đ y đ ....................................................................................................................................................192

Hình 63:

n đ th vô h

ng và bao đóng c a nó ........................................................................................................192

Hình 64: Ba d ng cung ngoài cây DFS ...........................................................................................................................196
Hình 65: Thu t toán Tarjan "b " cây DFS ......................................................................................................................198
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ó ...................................................................................207

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)............................................207
Hình 69: Phép đ nh chi u DFS........................................................................................................................................210
Hình 70: Phép đánh s và ghi nh n cung ng

c lên cao nh t.........................................................................................212

Hình 71 Duy t DFS, xác đ nh cây DFS và các cung ng

c............................................................................................215

Hình 72: Mô hình đ th c a bài toán b y cái c u...........................................................................................................218
Hình 73 ...........................................................................................................................................................................219
Hình 74 ...........................................................................................................................................................................219
Hình 75 ...........................................................................................................................................................................225
Hình 76: Phép đánh l i ch s theo th t tôpô ...............................................................................................................240
Hình 77: Hai cây g c r1 và r2 và cây m i khi h p nh t chúng ........................................................................................248
Hình 78: 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 ...................................256

Hình 79: M ng G, lu ng trên các cung (1 phát, 6 thu) và đ th t ng lu ng t
Hình 80: Lu ng trên m ng G tr

CuuDuongThanCong.com


ng ng..................................................257

c và sau khi t ng........................................................................................................258

/>

viii
Hình 81:

th hai phía ................................................................................................................................................. 266

Hình 82:

th hai phía và b ghép M .......................................................................................................................... 267

Hình 83: 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 ............................................................. 271
Hình 84: Phép xoay tr ng s c nh.................................................................................................................................. 274
Hình 85: Thu t toán Hungari.......................................................................................................................................... 277
Hình 86: 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 87:

ng........................................................... 285

th G và m t b ghép M............................................................................................................................. 290

Hình 88: Phép ch p Blossom ......................................................................................................................................... 292
Hình 89: N Blossom đ dò đ

ng xuyên qua Blossom................................................................................................ 292


CuuDuongThanCong.com

/>

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 .................................................................15
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....................................................................................................................76
P_2_07_2.PAS * Chuy n bi u th c trung t sang d ng RPN...........................................................................................79
P_2_08_1.PAS * Các thu t toán s p x p ........................................................................................................................105
P_3_01_1.PAS *

m s cách phân tích s n ................................................................................................................135


P_3_01_2.PAS *

m s cách phân tích s n ................................................................................................................136

P_3_01_3.PAS *

m s cách phân tích s n ................................................................................................................136

P_3_01_4.PAS *

m s cách phân tích s n ................................................................................................................137

P_3_01_5.PAS *

m s cách phân tích s n dùng đ quy............................................................................................137

P_3_01_6.PAS *

m s cách phân tích s n dùng đ quy............................................................................................138

P_3_03_1.PAS * Tìm dãy con đ n đi u t ng dài nh t....................................................................................................144
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.......................................................................146
P_3_03_3.PAS * Bài toán cái túi....................................................................................................................................149
P_3_03_4.PAS * Bi n đ i xâu........................................................................................................................................153
P_3_03_5.PAS * Dãy con có t ng chia h t cho k...........................................................................................................156
P_3_03_6.PAS * Dãy con có t ng chia h t cho k...........................................................................................................158
P_3_03_7.PAS * Nhân t i u dãy ma tr n .....................................................................................................................162
P_4_03_1.PAS * Thu t toán tìm ki m theo chi u sâu ....................................................................................................178
P_4_03_2.PAS * Thu t toán tìm ki m theo chi u sâu không đ quy .............................................................................181

P_4_03_3.PAS * Thu t toán tìm ki m theo chi u r ng dùng hàng đ i ..........................................................................185
P_4_03_4.PAS * Thu t toán tìm ki m theo chi u r ng dùng ph

ng pháp loang .........................................................187

P_4_04_1.PAS * Thu t toán Warshall li t kê các thành ph n liên thông .......................................................................194
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 .................................................................201
P_4_05_1.PAS * Phép đ nh chi u DFS và li t kê c u ....................................................................................................213
P_4_05_2.PAS * Li t kê các kh p c a đ th .................................................................................................................216
P_4_06_1.PAS * Thu t toán Fleury tìm chu trình Euler.................................................................................................220
P_4_06_2.PAS * Thu t toán hi u qu tìm chu trình Euler .............................................................................................223
P_4_07_1.PAS * Thu t toán quay lui li t kê chu trình Hamilton ...................................................................................226
P_4_08_1.PAS * Thu t toán Ford-Bellman....................................................................................................................233
P_4_08_2.PAS * Thu t toán Dijkstra .............................................................................................................................235
P_4_08_3.PAS * Thu t toán Dijkstra và c u trúc Heap .................................................................................................237

CuuDuongThanCong.com

/>

x
ng đi ng n nh t trên đ th không có chu trình ........................................................................... 241

P_4_08_4.PAS *

P_4_08_5.PAS * Thu t toán Floyd ................................................................................................................................ 243
P_4_09_1.PAS * Thu t toán Kruskal............................................................................................................................. 249
P_4_09_2.PAS * Thu t toán Prim.................................................................................................................................. 252
P_4_10_1.PAS * Thu t toán tìm lu ng c c đ i trên m ng ............................................................................................ 259
P_4_10_2.PAS * Thu t toán Ford-Fulkerson................................................................................................................. 262

P_4_11_1.PAS * Thu t toán đ

ng m tìm b ghép c c đ i ........................................................................................ 269

P_4_12_1.PAS * Thu t toán Hungari ............................................................................................................................ 280
P_4_12_2.PAS * Cài đ t ph
P_4_13_1.PAS * Ph

ng pháp Kuhn-Munkres O(n3) ....................................................................................... 286

ng pháp Lawler áp d ng cho thu t toán Edmonds..................................................................... 296

CuuDuongThanCong.com

/>

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 đ
th theo đó l n l

t xây d ng đ

c m t thu t toán đ có

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 đ

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

c

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.

CuuDuongThanCong.com

/>

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.
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 đ 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
f(i)

1
E

2
C

3
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 đ

ng pháp đánh giá kh n ng l a ch n:

c k t qu sau b ng quy n p ho c b ng ph

S ch nh h p l p ch p k c a t p g m n ph n t :
k

An = nk

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 đ


c g i là m t 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
f(i)

1
C

2
A

3
E

S ch nh h p không l p ch p k c a t p g m n ph n t :

A kn = 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

f(i)

1
A

2
D

3
C

4
E

5
B

6
F

ý 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

i h c S ph m Hà N i, 1999-2002

CuuDuongThanCong.com

/>

Bài toán li t kê

3

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:
Pn = 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 đ
S t h p ch p k c a t p g m n ph n t :
C kn =

A kn
n!

=
k! k!(n − k )!

S t p con c a t p n ph n t :
C 0n + C1n + ... + C nn = 2 n

Lê Minh Hoàng
CuuDuongThanCong.com

/>
c tính k! l n. V y:


Chuyên đ

4

§2. PH

NG PHÁP SINH (GENERATION)

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

Ph

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 đ

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

k ti p nó.
Ph

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 = (a1, a2, …, an) và b = (b1, b2, …, bn); trên các ph n t c a a1, …, an, b1, …, bn đã có quan h
th t "≤". Khi đó a ≤ b n u nh
Ho c ai = bi v i ∀i: 1 ≤ i ≤ n.
Ho c t n t i m t s nguyên d

ng k: 1 ≤ k < n đ :


a1 = b1
i h c S ph m Hà N i, 1999-2002
CuuDuongThanCong.com

/>

Bài toán li t kê

5

a2 = b2

= bk-1

ak-1

ak = bk
ak+1

< bk+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 = x1x2…xn trong đó xi ∈ {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 nguyê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 đ
p(x)
x

0
000


1
001

2
010

c li t kê nh sau:
3
011

4
100

5
101

6
110

7
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 = (x1,
x2, …, xn) là dãy đang có và không ph i dãy cu i cùng 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ó:
c ng thêm 1:

10010000

Dãy m i:

10010001

+1

Dãy đang có:
c ng thêm 1:

10010111

Dãy m i:

10011000

+1

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), g p s 0 đ u tiên thì thay nó b ng s 1 và đ t t t c các ph n
t phía sau v trí đó b ng 0.
i := n;
while (i > 0) and (xi = 1) do i := i - 1;
if i > 0 then
begin
Lê Minh Hoàng

CuuDuongThanCong.com

/>

Chuyên đ

6
xi := 1;
for j := i + 1 to n do xj := 0;
end;

D li u vào (Input): nh p t file v n b n BSTR.INP ch a s nguyên d

ng n ≤ 30

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

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 x1 = x2 = … = xn := 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; {xi 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 xi b ng s 1}
FillChar(x[i + 1], (n - i) * SizeOf(x[1]), 0); { t xi + 1 = xi + 2 = … = xn := 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. T đó,

ta có nh n xét n u x = {x1, x2, …, xk} và x1 < x2 < … < xk thì gi i h n trên (giá tr l n nh t có th
nh n) c a xk là n, c a xk-1 là n - 1, c a xk-2 là n - 2…

i h c S ph m Hà N i, 1999-2002
CuuDuongThanCong.com

/>

Bài toán li t kê

7

C th : gi i h n trên c a xi = n - k + i;
Còn t t nhiên, gi i h n d

i c a xi (giá tr nh nh t xi có th nh n) là xi-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 x3 đ n x6 đã đ 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 x6, x5,
x4, x3 lên đ

c, ta ph i t ng x2 = 2 lên thành x2 = 3.

c nh ng ch a tho mãn tính ch t v a đ l n mu n v y

hình này đã tho mãn l n h n c u hình tr
ta l i thay x3, x4, x5, x6 b ng các gi i h n d

Ta đ



x3 := x2 + 1 = 4



x4 := x3 + 1 = 5



x5 := x4 + 1 = 6




x6 := x5 + 1 = 7

c c u hình m i là x = {1, 3, 6, 7, 8, 9}. C u

i c a nó. T c là:

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 x6 = 7 ch a đ t gi i h n trên, nh v y ch c n t ng x6 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 xi ch a đ t gi i h n trên n - k + i.
i := n;
while (i > 0) and (xi = n - k + i) do i := i - 1;

(1, 2, 6, 7, 8, 9);

N u tìm th y:
if i > 0 then

T ng xi đó lên 1.
xi := xi + 1;

(1, 3, 6, 7, 8, 9)

t t t c các ph n t phía sau xi b ng gi i h n d


i:

for j := i + 1 to k do xj := xj-1 + 1;

(1, 3, 4, 5, 6, 7)
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}

Lê Minh Hoàng
CuuDuongThanCong.com

/>

Chuyên đ

8
SUBSET.INP
53

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}

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; {x1 := 1; x2 := 2; … ; x3 := 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; {xi là ph n t cu i dãy, lùi d n i cho t i khi g p m t xi 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 xi lên 1, t các ph n t đ ng sau xi 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 2.1243 3.1324 4.1342 5.1423 6.1432
7.2134 8.2143 9.2314 10.2341 11.2413 12.2431
13.3124 14.3142 15.3214 16.3241 17.3412 18.3421
19.4123 20.4132 21.4213 22.4231 23.4312 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 đ
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 x p gi m

c m t hoán v bé


i h c S ph m Hà N i, 1999-2002
CuuDuongThanCong.com

/>

Bài toán li t kê

9

h n hoán v hi n t i!. Nh v y ta ph i xét đ n x2 = 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 đ
3 r i (ph n t sau không đ

c hoán v nh h n, không th là 3 vì đã có x1 =

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 x2 = 4. Còn các giá tr (x3, x4, x5, x6)
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 x3, x4, x5, x6 t c là (1, 2, 5, 6). V y hoán v m i s là (3, 4, 1, 2, 5, 6).
(3, 2, 6, 5, 4, 1) → (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 đ

c x p gi m d n, s x5 = 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 x2 = 2. N u đ i ch x5 cho x2 thì ta s đ
= 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
Trong tr

c x2

c đo n cu i.

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 xi đ 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 xi < xi+1. N u toàn dãy đã là gi m d n, thì đó là c u hình cu i.
i := n - 1;
while (i > 0) and (xi > xi+1) do i := i - 1;



Trong đo n cu i gi m d n, tìm ph n t xk nh nh t tho mãn đi u ki n xk > xi. 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 xk > xi (có th dùng tìm ki m nh phân).


k := n;
while xk < xi do k := k - 1;



i ch xk và xi, l t ng

c th t đo n cu i gi m d n (t xi+1 đ n xk) tr thành t ng d n.

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;
Lê Minh Hoàng
CuuDuongThanCong.com

/>

Chuyên đ

10

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;
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: x1 := 1; x2 := 2; …, xn := 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; {xk 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 xk đ u tiên l n h n xi }
Swap(x[k], x[i]); { i ch xk và xi}
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]); { i ch xa và xb}
Inc(a); {Ti n a và lùi b, đ i ch ti p 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
ch

ng trình trên x lý không t t trong tr

ng h p t m th

ng trình li t kê dãy nh phân c ng nh trong ch

v i ch


ng, đó là tr

ng h p n = 0 đ i v i

ng trình li t kê hoán v , tr

ng h p k = 0 đ i

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}.
G i ý: 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

i. Li t kê t t c các cách ch n ra đúng k ng

i trong s n ng

i


đó.

i h c S ph m Hà N i, 1999-2002
CuuDuongThanCong.com

/>

Bài toán li t kê

11

G i ý: xây d ng m t ánh x t t p {1, 2, …, n} đ n t p các tên ng

i. Ví d xây d ng m t m ng

Tên: Tên[1] := 'Nguy n v n A'; Tên[2] := 'Tr n th B';…. sau đó li t kê t t c các t p con k ph n t
c a t p {1, 2, …, n}. Ch có đi u khi in t p con, ta không in giá tr s {1, 3, 5} mà thay vào đó s in
ra {Tên[1], Tên [3], Tên[5]}. T c là in ra nh c a các giá tr tìm đ

c qua ánh x

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

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

i đó vào m t bàn tròn,

m i b n nam ti p đ n m t b n 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

ng, hai cách phân

tích là hoán v c a nhau ch tính là m t 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

sinh c ng không n m ngoài nh n xét đó. Ph

ng pháp sinh không th sinh ra đ

p n u nh ch a có c u hình th p - 1, ch ng t r ng ph
h p li t kê toàn b m t s l


c đi m riêng và ph

ng pháp

c c u hình th

ng pháp sinh t ra u đi m trong tr

ng nh c u hình trong m t b d li u l n thì l i có nh

ng

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
CuuDuongThanCong.com


/>

×