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

Bài toán ghép cặp trên đồ thị hai phần và ứng dụng

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

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2
KHOA TOÁN
***********

NGUYỄN THỊ MINH PHƯƠNG

BÀI TOÁN GHÉP CẶP TRÊN
ĐỒ THỊ HAI PHẦN VÀ ỨNG DỤNG

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

HÀ NỘI - 2018


TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2

KHOA TOÁN

NGUYỄN THỊ MINH PHƯƠNG

BÀI TOÁN GHÉP CẶP TRÊN
ĐỒ THỊ HAI PHẦN VÀ ỨNG DỤNG

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Chuyên ngành: Toán ứng dụng

Người hướng dẫn khoa học:
PGS.TSKH. PHAN THỊ HÀ DƯƠNG

HÀ NỘI - 2018




LỜI CẢM ƠN
Trước khi trình bày nội dung chính của khóa luận, tôi xin bày tỏ
lòng cảm ơn tới các thầy cô khoa Toán, trường Đại học Sư phạm Hà
Nội 2, các thầy cô trong tổ bộ môn Toán ứng dụng, các thầy cô tham
gia giảng dạy đã tận tình truyền đạt những tri thức quý báu, luôn
động viên, quan tâm, tạo điều kiện thuận lợi để tôi hoàn thành tốt
nhiệm vụ khóa học và khóa luận.
Bên cạnh đó, tôi cũng xin bày tỏ lòng cảm ơn tới các thầy cô trong
Viện Toán học đã tạo điều kiện cho tôi được học tập và làm việc, các
anh chị trong nhóm nghiên cứu đã giúp đỡ, trao đổi để tôi hiểu vấn
đề. Đặc biệt, tôi xin bày tỏ sự kính trọng và lòng biết ơn sâu sắc tới
PGS. TSKH. Phan Thị Hà Dương, người đã trực tiếp hướng dẫn,
chỉ bảo tận tình giúp đỡ để tôi có thể hoàn thành khóa luận này.

Hà Nội, tháng 5 năm 2018
Sinh viên

Nguyễn Thị Minh Phương


LỜI CAM ĐOAN
Tôi xin cam đoan đề tài này là do tôi thực hiện. Khóa luận là kết
quả quá trình tìm tòi, nghiên cứu của tôi dưới sự hướng dẫn tận tình
của PGS.TSKH. Phan Thị Hà Dương và đề tài này không trùng
với các kết quả của tác giả khác.

Hà Nội, tháng 5 năm 2018
Sinh viên


Nguyễn Thị Minh Phương


Mục lục

Lời mở đầu

1

1 KIẾN THỨC CHUẨN BỊ

3

1.1

Các khái niệm cơ sở . . . . . . . . . . . . . . . . . . . .

3

1.2

Các loại đồ thị . . . . . . . . . . . . . . . . . . . . . .

5

1.3

Đường đi, chu trình, tính liên thông . . . . . . . . . . .


7

1.4

Biểu diễn đồ thị bằng ma trận . . . . . . . . . . . . . .

8

1.5

Các thuật toán tìm kiếm trên đồ thị . . . . . . . . . .

10

1.6

1.5.1

Thuật toán tìm kiếm đồ thị theo chiều sâu (DFS) 10

1.5.2

Thuật toán tìm kiếm đồ thị theo chiều rộng (BFS) 11

Kết luận chương

. . . . . . . . . . . . . . . . . . . . .

13


2 BÀI TOÁN GHÉP CẶP TRÊN ĐỒ THỊ HAI PHẦN 14
2.1

Các khái niệm . . . . . . . . . . . . . . . . . . . . . . .

14

2.2

Thuật toán tìm ghép cặp lớn nhất . . . . . . . . . . . .

16

2.3

Một số kết quả của bài toán ghép cặp trên đồ thị hai
phần . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.4

20

Mở rộng bài toán ghép cặp với đồ thị hai phần có trọng
số . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

2.4.1

28


Bài toán ghép cặp với trọng số cực tiểu . . . . .
ii


MỤC LỤC

2.4.2

iii

Bài toán ghép cặp với trọng số lớn nhất . . . .

35

3 MỘT SỐ ỨNG DỤNG CỦA BÀI TOÁN GHÉP CẶP
TRÊN ĐỒ THỊ HAI PHẦN

38

3.1

Bài toán hôn nhân bền vững . . . . . . . . . . . . . . .

38

3.1.1

Giới thiệu bài toán . . . . . . . . . . . . . . . .


38

3.1.2

Giải quyết bài toán . . . . . . . . . . . . . . . .

40

3.1.3

Tính đúng đắn của thuật toán . . . . . . . . . .

45

3.1.4

Tính tối ưu của kết quả . . . . . . . . . . . . .

46

3.1.5

Mở rộng bài toán . . . . . . . . . . . . . . . . .

48

3.2

3.3


Một số bài toán THPT có thể giải được bằng bài toán
ghép cặp trong đồ thị hai phần . . . . . . . . . . . . .

48

Kết luận chương

54

. . . . . . . . . . . . . . . . . . . . .

Kết luận

55

Tài liệu tham khảo

57


LỜI MỞ ĐẦU
1. Lí do chọn đề tài
Cùng với sự phát triển không ngừng của công nghệ thông tin, lý thuyết
đồ thị đã trở thành một lĩnh vực toán học quan trọng và cần thiết
cho nhiều ngành khoa học và ứng dụng. Những tư tưởng của lý thuyết
đồ thị được đề xuất từ những năm đầu thế kỉ 18 bởi nhà toán học
Leonhard Euler. Ông là người đã sử dụng đồ thị để giải bài toán nổi
tiếng về bảy cây cầu ở thành phố Konigsberg. Từ đó, lý thuyết đồ thị
ngày càng khẳng định được tầm quan trọng trong việc ứng dụng để
giải các bài toán vật lý, kinh tế. . .

Đồ thị hai phần là một cặp G = (X ∪ Y, E) trong đó X, Y là hai
tập hữu hạn các đỉnh rời nhau, còn E là tập hữu hạn các cạnh. Đồ
thị hai phần được gặp rất nhiều trong mô hình thực tế như quan hệ
hôn nhân, giáo viên chọn tiết trong thời khóa biểu. . . Khi đó việc giải
nhiều bài toán thực tế sẽ được đưa về việc giải các bài toán trên đồ
thị hai phần.
Bài toán ghép cặp trên đồ thị hai phần là một bài toán nổi tiếng trong
lý thuyết đồ thị. Thuật toán ghép cặp được nghiên cứu bởi hai nhà
khoa học David Gale và Lloyd Shapley từ năm 1962. Từ đó đã có rất
nhiều công trình nghiên cứu về vấn đề này. Gần đây nhất, năm 2012
ứng dụng của thuật toán này đã mang lại giải Nobel kinh tế cho hai
nhà khoa học người Mỹ Alvin E.Roth và Lloyd Shapley với nghiên
cứu “Lý thuyết phân phối ổn định và thực tiễn thiết kế thị trường” có
khả năng ứng dụng rộng rãi trên khắp thế giới.


MỤC LỤC

2

Với lòng yêu thích và mong muốn tìm hiểu sâu nội dung này trong
phạm vi của một khóa luận tốt nghiệp, chúng tôi xin trình bày những
hiểu biết của mình về đề tài “Bài toán ghép cặp trên đồ thị hai phần
và ứng dụng”.
2. Mục đích nghiên cứu
-

Nghiên cứu một bài toán ghép cặp trên đồ thị hai phần;

-


Ứng dụng bài toán ghép cặp trên đồ thị hai phần trong bài toán
hôn nhân bền vững và các bài toán thi học sinh giỏi THPT.

3. Phương pháp và công cụ nghiên cứu
- Nghiên cứu tổng hợp tài liệu
4. Cấu trúc khóa luận
Nội dung đề tài bao gồm các chương sau:
• Chương 1: Kiến thức chuẩn bị
Chương này chúng tôi trình bày các khái niệm cơ bản về đồ thị,
cách biểu diễn đồ thị bằng ma trận và các thuật toán duyệt đồ thị.
• Chương 2: Bài toán ghép cặp trên đồ thị hai phần.
Chương này chúng tôi trình bày về bài toán ghép cặp trên đồ thị
hai phần và đồ thị hai phần có trọng số.
• Chương 3: Một số ứng dụng của bài toán ghép cặp trên đồ thị hai
phần.
Chương này chúng tôi trình bày về bài toán hôn nhân bền vững và
một số bài toán thi học sinh giỏi (HSG) ở bậc trung học phổ thông
(THPT) có thể giải được bằng các kết quả của bài toán ghép cặp
trên đồ thị hai phần.


Chương 1
KIẾN THỨC CHUẨN BỊ
Trong chương này chúng tôi trình bày một số kiến thức về đồ thị như
các khái niệm, bậc, đường đi, tính liên thông, biểu diễn đồ thị, duyệt
đồ thị. Các kiến thức này được tham khảo từ [3], [4], [10] và là kiến
thức cơ sở được sử dụng trong các phần tiếp theo của khóa luận.

1.1


Các khái niệm cơ sở

Định nghĩa 1.1. (3) Một đồ thị vô hướng là G là một cặp có thứ tự
G = (V, E) với V là một tập còn E là một tập với các phần tử là các
đa tập lực lượng 2 trên V . Các phần tử của V được gọi là các đỉnh,
các phần tử của E được gọi là các cạnh của đồ thị vô hướng G. Nếu
e = {a, b} thì a, b được gọi là các đỉnh đầu mút hay các đỉnh liên thuộc
với e. Cạnh có dạng {a, a} với a ∈ V được gọi là khuyên.Các cạnh có
cùng hai đỉnh đầu mút được gọi là các cạnh bội.

3


CHƯƠNG 1. KIẾN THỨC CHUẨN BỊ

4

𝑣1
𝑒2
𝑒1

𝑣3

𝑒3

𝑣4

𝑒5
𝑒4


𝑣2
𝐺

Hình 1.1: Đồ thị vô hướng G với các đỉnh v1 , v2 , v3 , v4 , các cạnh e1 , e2 , e3 , e4 , e5
, e3 , e4 là hai cạnh bội

Định nghĩa 1.2. (3) Một đồ thị có hướng G là một cặp có thứ tự
G = (V, E) với V là một tập và E là một tập con của tích Đề-các
V × V . Các phần tử của V được gọi là đỉnh, các phần tử của E được
gọi là cung của đồ thị có hướng G. Nếu e = {a, b} thì a được gọi là
đỉnh đầu, b được gọi là đỉnh cuối của e hay các đỉnh liên thuộc với e.
e1

a
e6

e5

e2
e4

d

b

c

e3


Hình 1.2: Đồ thị có hướng G2 với các đỉnh a, b, c, d và các cung e1 , e2 , e3 , e4 , e5 , e6

Định nghĩa 1.3. (3) Cho một đồ thị vô hướng không có khuyên G =
(V, E) và v ∈ V . Kí hiệu:
N (v) = {x ∈ V | x = v và {x, v} ∈ E}.
Khi đó, N (v) được gọi là tập các láng giềng của v.
Bậc của đỉnh v ∈ V trong đồ thị G, kí hiệu deg(v), deg(v) = |N (v)|.


CHƯƠNG 1. KIẾN THỨC CHUẨN BỊ

5

Ta cũng kí hiệu
δ(G) = min deg(v),
v∈V

∆(G) = max deg(v),
v∈V

và gọi chúng tương ứng là bậc nhỏ nhất và bậc lớn nhất của G. Nếu
δ(G) = ∆(G) = k thì G được gọi là đồ thị chính quy bậc k.

1.2

Các loại đồ thị

Định nghĩa 1.4. (4) Một đơn đồ thị vô hướng là một đồ thị vô hướng
không có các khuyên và các cạnh bội.
a


d

b
c

(G)

Hình 1.3: Đơn đồ thị vô hướng G

Định nghĩa 1.5. (3) Đồ thị G = (V, E) được gọi là đồ thị có trọng
số nếu ít nhất một trong hai hàm f : V → WV , g : E → WE được xác
định, ở đây WV và WE là các tập nào đấy. Các phần tử của WV và
WE định lượng giá trị f (v), v ∈ V được gọi là trọng số của đỉnh v,
giá trị g(e), e ∈ V được gọi là trọng số của cung hay cạnh e, có thể
kí hiệu trọng đồ G = (V, E, f ) hay G = (V, E, g) hay G = (V, E, f, g)
tùy thuộc vào việc chỉ có một hàm f , một hàm g hay cả hai hàm f và
g xác định.


CHƯƠNG 1. KIẾN THỨC CHUẨN BỊ

6

𝑣2
2

3

𝑣4


4

𝑣1

1 𝑣5

6

7
𝑣3

𝐺

Hình 1.4: Đồ thị có trọng số cạnh G

Định nghĩa 1.6. (2) Đồ thị đầy đủ n đỉnh, kí hiệu bởi Kn là đơn đồ
thị vô hướng mà giữa hai đỉnh bất kì luôn có cạnh liên thuộc.

K3

K4

K5

Hình 1.5: Đồ thị đầy đủ K3 , K4 , K5

Định nghĩa 1.7. (2) Một đồ thị hai phần là một đơn đồ thị vô hướng
G = (X ∪ Y, E) trong đó X, Y là hai tập hữu hạn các đỉnh rời nhau,
còn E là tập hữu hạn các cạnh. Mỗi cạnh nối một đỉnh của X với Y .

Định nghĩa 1.8. (2) Đồ thị hai phần G = (X ∪ Y, E) với |X| =
m, |Y | = n được gọi là đồ thị hai phần đầy đủ, kí hiệu Km,n nếu mọi
đỉnh trong tập X được nối với tất cả các đỉnh trong tập Y .

K2,3
Hình 1.6: Đồ thị hai phần đầy đủ (hình bên trái) và không đầy đủ (hình bên phải)


CHƯƠNG 1. KIẾN THỨC CHUẨN BỊ

7

Định nghĩa 1.9. (3) Đồ thị vô hướng H = (V , E ) được gọi là một
đồ thị con của đồ thị vô hướng G = (V, E) nếu V ⊆ V và E ⊆ E.
Đồ thị con cảm sinh bởi tập đỉnh V ⊆ V của G được kí hiệu G[V ] là
đồ thị con của G với tập đỉnh V và các cạnh là tất cả các cạnh của
G có hai đầu mút thuộc V .

1.3

Đường đi, chu trình, tính liên thông

Định nghĩa 1.10. (10)
Một đường đi độ dài n, n ∈ Z+ trong G là một dãy v0 e1 v1 e2 . . . en vn
sao cho vi ∈ V ∀i = 1, n còn ei ∈ E ∀i = 1, n và ei = (vi−1 , vi ) hoặc
ei = (vi , vi−1 ) . v0 được gọi là đỉnh đầu, vn được gọi là đỉnh cuối.
Đường đi đơn là đường đi không đi qua một cạnh quá một lần.
Chu trình là một đường đi bắt đầu và kết thúc tại cùng một đỉnh.
Định nghĩa 1.11. (10) Cho đồ thị có hướng G = (V, E).
Một đường đi độ dài n, n ∈ Z+ trong G là một dãy v0 e1 v1 e2 . . . en vn

sao cho vi ∈ V ∀i = 1, n còn ei ∈ E ∀i = 1, n và ei = (vi−1 , vi ). v0
được gọi là đỉnh đầu, vn được gọi là đỉnh cuối.
Đường đi đơn là đường đi không đi qua một cung quá một lần.
Ví dụ 1.3.1. Trong đồ thị vô hướng ở Hình 1.1 ta thấy
a) v1 e1 v2 e4 v3 e2 v1 e1 v2 là một đường đi của G1 .
b) v1 e2 v3 e4 v2 là một đường đi đơn của G1 .
c)

v1 e1 v2 e4 v3 e2 v1 là một chu trình của G1 .


CHƯƠNG 1. KIẾN THỨC CHUẨN BỊ

8

Định nghĩa 1.12. (3) Đồ thị vô hướng G được gọi là liên thông nếu
có đường đi giữa hai đỉnh bất kì.
Định nghĩa 1.13. (3) Đồ thị con liên thông G = (V , E ) của một
đồ thị vô hướng G = (V, E) được gọi là một thành phần liên thông của
G nếu G = G[V ] và với mọi V ⊆ V đồ thị G[V ] không liên thông.
Định lý 1.1. (2) Đồ thị G là đồ thị hai phần khi và chỉ khi G không
chứa chu trình có độ dài lẻ.

1.4

Biểu diễn đồ thị bằng ma trận

Định nghĩa 1.14. (10) Ma trận kề A(G) của một đơn đồ thị vô hướng
G với thứ tự các đỉnh v1 , v2 , . . . , vn là ma trận [Aij ] vuông cấp n trong
đó

Aij =



số cạnh giữa hai đỉnh vi và vj

nếu i = j;


0

nếu i = j.

Định nghĩa 1.15. (10) Ma trận liên thuộc M (G) của một đơn đồ
thị vô hướng G với thứ tự các đỉnh v1 , v2 , . . . , vn và thứ tự các cạnh
e1 , e2 , . . . , em là ma trận [Mij ] cấp n × m trong đó

Mij =


 1 nếu vi liên thuộc ej ;
 0 nếu ngược lại.

Ví dụ 1.4.1. Trong hình 1.1, ma trận kề và ma trận liên thuộc của
đồ thị G được thể hiện như sau:


CHƯƠNG 1. KIẾN THỨC CHUẨN BỊ

𝑣1


𝑣2

𝑣3

𝑣4

𝑣1

0

1

1

0

𝑣2

1

0

2

0

𝑣3

1


2

0

1

𝑣4

0

0

1

0

9

𝑣1
𝑒2
𝑒1

𝑣3

𝑒3

𝑣4
𝑒5


𝑒4
𝑣2

𝐴(𝐺)

𝑒1

𝑒2

𝑒3

𝑒4

𝑒5

𝑣1

1

1

0

0

0

𝑣2

1


0

1

1

0

𝑣3

0

1

1

1

1

𝑣4

0

0

0

0


1

𝐺

𝑀(𝐺)

Hình 1.7: Đồ thị G với ma trận kề A(G) và ma trận liên thuộc M (G)

Định nghĩa 1.16. (10) Ma trận trọng số cạnh C(G) của một đồ thị
vô hướng G với thứ tự các đỉnh v1 , v2 , . . . , vn , f : E → WE là hàm
trọng số
 cạnh của G là ma trận [Cij ] vuông cấp n trong đó

g(vi , vj ) nếu (vi , vj ) ∈ E;
Cij =

0
nếu ngược lại.
Ví dụ 1.4.2. Ma trận trọng số của đồ thị trong Hình 1.4 là:
v1

v2

v3

v4

v5


v1

0

2

7

4

0

v2

2

0

0

3

0

v3

7

0


0

6

0

v4

4

3

6

0

1

v5

0

0

0

1

0


𝐶(𝐺)
Hình 1.8: Ma trận trọng số C(G) của đồ thị G


CHƯƠNG 1. KIẾN THỨC CHUẨN BỊ

1.5

10

Các thuật toán tìm kiếm trên đồ thị

Khi giải quyết nhiều bài toán lý thuyết đồ thị, ta luôn phải duyệt qua
tất cả các đỉnh của đồ thị đó. Vậy nên, cần có thuật toán duyệt toàn
bộ các đỉnh của đồ thị. Gọi chung là thuật toán duyệt đồ thị.
1.5.1

Thuật toán tìm kiếm đồ thị theo chiều sâu (DFS)

Từ đỉnh gốc đang xét, thuật toán duyệt đi xa nhất theo từng nhánh,
khi nhánh đã duyệt hết, lùi về từng đỉnh để tìm và duyệt những nhánh
tiếp theo. Quá trình duyệt chỉ dừng lại khi tìm thấy đỉnh cần tìm hoặc
tất cả đỉnh đều đã được duyệt qua.
Thuật toán
Bước 1 Khởi tạo:
Các đỉnh đều ở trạng thái chưa đánh dấu, ngoại trừ đỉnh s.
Ngăn xếp (Stack), ban đầu chỉ có s. Ngăn xếp dùng để chứa
các đỉnh sẽ được duyệt theo thứ tự ưu tiên chiều sâu.
Bước 2 Lặp các bước sau đến khi ngăn xếp chỉ còn s.
Lấy v nằm cuối ngăn xếp ra khỏi ngăn xếp, thăm đỉnh v.

Xét tất cả các đỉnh u kề với v chưa được đánh dấu, khi đó:
(1) Nếu tồn tại u, đánh dấu thăm u, ghi nhận vết đường đi
từ v tới u và đẩy u vào ngăn xếp;
(2) Nếu không tồn tại u, quay lại đỉnh đã thăm ngay trước
v và tiếp tục quá trình trên.


CHƯƠNG 1. KIẾN THỨC CHUẨN BỊ

11

Bước 3 Truy vết tìm đường đi.
Thuật toán sẽ dừng khi ngăn xếp rỗng.
1.5.2

Thuật toán tìm kiếm đồ thị theo chiều rộng (BFS)

Từ một đỉnh gốc đang xét, xác định và lần lượt duyệt các đỉnh kề
xung quanh đỉnh gốc. Tiếp tục quá trình duyệt qua các đỉnh kề đỉnh
vừa xét cho đến khi đạt được kết quả cần tìm hoặc duyệt qua tất cả
các đỉnh.
Thuật toán
Bước 1 Khởi tạo:
Các đỉnh đều ở trạng thái chưa đánh dấu, ngoại trừ đỉnh s
đã đánh dấu.
Hàng đợi (Queue), ban đầu chỉ có s. Hàng đợi dùng để chứa
các đỉnh sẽ được duyệt theo thứ tự ưu tiên chiều rộng.
Bước 2 Lặp các bước sau đến khi hàng đợi rỗng.
Lấy v khỏi hàng đợi, thông báo thăm v.
Xét tất cả các đỉnh u kề với v chưa được đánh dấu, với mỗi

đỉnh u đó:
(1) Đánh dấu u;
(2) Ghi nhận vết đường đi từ v tới u;
(3) Đẩy u vào hàng đợi.
Bước 3 Truy vết tìm đường đi


CHƯƠNG 1. KIẾN THỨC CHUẨN BỊ

12

Thuật toán sẽ dừng khi hàng đợi rỗng.
Ví dụ 1.5.1. Duyệt đồ thị sau đây, xuất phát từ đỉnh v1 .

v2

v4

v1

v6
v3

v5

Hình 1.9: Đồ thị vô hướng G

Minh họa thuật toán DFS
Bước Ngăn xếp Đỉnh
(Stack)


v kề u

u

ngăn xếp Giải thích
sau

mỗi

bước
1

v1

v1

v2

v1 , v2

Tiến sâu thăm v2

2

v1 , v2

v2

v3


v1 , v2 , v3

Tiến sâu thăm v3

3

v1 , v2 , v3

v3

v5

v1 , v2 , v3 , v5 Tiến sâu thăm v5

4

v1 , v2 , v3 , v5 v5

Không có v1 , v2 , v3

Lùi lại

5

v1 , v2 , v3

v3

Không có v1 , v2


Lùi lại

6

v1 , v2

v2

v4

v1 , v2 , v4

Tiến sâu thăm v4

7

v1 , v2 , v4

v4

v6

v1 , v2 , v4 , v6 Tiến sâu thăm v6

8

v1 , v2 , v4 , v6 v6

Không có v1 , v2 , v4


Lùi lại

9

v1 , v2 , v4

v4

Không có v1 , v2

Lùi lại

10

v1 , v2

v2

Không có v1

Lùi lại

11

v1

v1

Không có ∅


Kết thúc


CHƯƠNG 1. KIẾN THỨC CHUẨN BỊ

13

Đường đi duyệt các đỉnh bằng thuật toán DF S: v1 v2 v3 v5 và v1 v2 v4 v6 .
Minh họa thuật toán BFS
Bước Hàng đợi Đỉnh v lấy Hàng

đợi Các đỉnh u Hàng

đợi

ra từ hàng sau khi lấy kề với v và sau khi đưa
đợi

v ra

chưa lên lịch u vào

1

v1

v1




v2 , v3

v2 , v3

2

v2 , v3

v2

v3

v4

v3 , v4

3

v3 , v4

v3

v4

v5

v4 , v5

4


v4 , v5

v4

v5

v6

v5 , v6

5

v5 , v6

v5

v6

Không có

v6

6

v6

v6

Không có






Đường đi duyệt các đỉnh bằng thuật toán BF S: v1 v2 v4 v6 và v1 v3 v5

1.6

Kết luận chương

Các kết quả quan trọng trong chương này gồm:
(1) Một số khái niệm cơ sở của lý thuyết đồ thị: các loại đồ thị, bậc
của đồ thị, đường đi, chu trình, tính liên thông;
(2) Cách biểu diễn đồ thị bằng ma trận;
(3) Các thuật toán duyệt trên đồ thị.
Những đóng góp của chúng tôi là sắp xếp và trình bày lại một số kiến
thức về đồ thị. Ngoài ra tôi còn đưa ra các ví dụ minh họa để làm rõ
các định nghĩa.


Chương 2
BÀI TOÁN GHÉP CẶP TRÊN
ĐỒ THỊ HAI PHẦN
Chương 2 trình bày một số khái niệm, định lí và thuật toán của Bài
toán ghép cặp trên đồ thị hai phần, chúng tôi cũng trình bày
các bài toán mở rộng từ bài toán trên. Phần lớn các kiến thức trong
chương này được tham khảo từ [1], [4] và [10].

2.1


Các khái niệm

Định nghĩa 2.1. (10) Cho G = (V, E) là một đồ thị vô hướng.
Một ghép cặp của G là một tập hợp M gồm các cạnh trong G đôi một
không có đỉnh chung.
Đỉnh của các cạnh trong ghép cặp M gọi là đỉnh đã ghép, những đỉnh
khác là đỉnh chưa ghép.
Định nghĩa 2.2. (10) Cho G là một đồ thị vô hướng. Trong G:
Ghép cặp hoàn hảo là một ghép cặp chứa mọi đỉnh của đồ thị.
Ghép cặp cực đại là ghép cặp mà ta không thể thêm cạnh nào vào.
14


CHƯƠNG 2. BÀI TOÁN GHÉP CẶP TRÊN ĐỒ THỊ HAI PHẦN

15

Ghép cặp lớn nhất là ghép cặp có nhiều cạnh nhất (trong số các ghép
cặp).
Bài toán ghép cặp trên G là bài toán tìm ghép cặp lớn nhất của G.
Nhận xét 2.1. M là ghép cặp lớn nhất ⇒ M là ghép cặp cực đại.
Ví dụ 2.1.1. Ghép cặp hoàn hảo trong K4,4

X

Y

x1


x2

x3

x4

y1

y2

y3

y4

Hình 2.1: Ghép cặp hoàn hảo của K4,4

Ví dụ 2.1.2. Phân biệt ghép cặp cực đại và ghép cặp lớn nhất.
Xét đồ thị G trong hình sau:
X1

Y1

X2

Y2

X3

Y3


Hình 2.2: Đồ thị hai phần G

Ghép cặp M = {X1 Y1 , X2 Y2 } là ghép cặp cực đại nhưng không là ghép
cặp lớn nhất. Hai đỉnh X3 , Y3 chưa ghép, các đỉnh khác đã ghép.
Ghép cặp M = {X1 Y 3, X2 Y1 , X3 Y2 } là ghép cặp lớn nhất.


CHƯƠNG 2. BÀI TOÁN GHÉP CẶP TRÊN ĐỒ THỊ HAI PHẦN

2.2

16

Thuật toán tìm ghép cặp lớn nhất

Để xác định ghép cặp lớn nhất, chúng ta xây dựng dần dần từng bước
một, mỗi bước lại cải thiện để có ghép cặp lớn hơn, chúng ta dùng các
đường mở để cải thiện ghép cặp.
Định nghĩa 2.3. (10) Cho đồ thị vô hướng G và M là một ghép cặp
của G.
Đường xen kẽ của ghép cặp M là một đường đi đơn trên đồ thị sao
cho với bất kì hai cạnh kề nào trên đường đi, đúng một trong hai cạnh
thuộc M .
Đường mở của ghép cặp M là một đường xen kẽ mà đỉnh đầu và đỉnh
cuối là hai đỉnh chưa ghép.
Ví dụ 2.2.1. Xét đồ thị hai phần G như Hình 2.2, ghép cặp M =
{X1 Y1 , X2 Y2 }.
Đường (X3 , Y2 , X2 , Y1 ) là một đường xen kẽ của M .
Đường (X3 , Y2 , X2 , Y1 , X1 , Y3 ) là một đường mở của M .
Trong đường mở (X3 , Y2 , X2 , Y1 , X1 , Y3 ), nếu ta xóa đi các cạnh của

ghép cặp M thì các cạnh còn lại sẽ tạo thành một ghép cặp có nhiều
cạnh hơn ghép cặp M ban đầu.
Từ ví dụ trên, ta thấy được ý tưởng thuật toán "đường mở" của Bài
toán ghép cặp.
Thuật toán Đường mở
Cho đồ thị vô hướng G.
Bước 1 Tìm một ghép cặp M bất kì trong G.


CHƯƠNG 2. BÀI TOÁN GHÉP CẶP TRÊN ĐỒ THỊ HAI PHẦN

17

Bước 2 Tìm đường mở của M :
(1) Nếu tìm được một đường mở của M thì ta xóa bỏ những
cạnh đã ghép trên đường mở đó, các cạnh còn lại trên đường
mở và các cạnh đã ghép của M không nằm trên đường mở
tạo thành một ghép cặp có số phần tử lớn hơn số phần tử
của ghép cặp M là 1.
(2) Nếu không tìm được đường mở thì ghép cặp hiện tại là
lớn nhất.
Tính đúng đắn của thuật toán sẽ được đảm bảo bởi định lí 2.1
Trong thuật toán Đường mở đã trình bày ở trên, bước quan trọng
nhất là bước tìm đường mở.
Thuật toán "Tìm đường mở" trên đồ thị hai phần
a) Bài toán
Input: Đồ thị hai phần G = (X ∪ Y, E), một ghép cặp M của G.
Output: Ghép cặp lớn nhất của G.
b) Thuật toán
Chúng ta sử dụng thuật toán tìm kiếm theo chiều rộng (BF S) để tìm

đường mở của M :
Bước 1 Khởi tạo một hàng đợi (Queue) chứa tất cả các đỉnh chưa
ghép trong tập X.
Bước 2 Lấy một đỉnh v khỏi Queue và đẩy lại Queue những đỉnh kề
v chưa được thăm:
(1) Nếu thăm tới một đỉnh chưa ghép thuộc Y thì ta đã tìm


CHƯƠNG 2. BÀI TOÁN GHÉP CẶP TRÊN ĐỒ THỊ HAI PHẦN

18

được một đường mở, quá trình tìm kiếm dừng lại ngay.
Cải thiện ghép cặp và quay lại bước 1.
(2) Nếu thăm tới một đỉnh j ∈ Y đã ghép, ta đánh dấu
thăm j , thăm luôn cả đỉnh đã ghép kề với j (thăm liền
2 bước), tiếp tục quá trình duyệt.
Bước 3 Truy vết tìm đường đi.
c) Tính đúng đắn của thuật toán
Thuật toán kết thúc sau hữu hạn bước. Do số đỉnh của đồ thị
là hữu hạn nên quá trình duyệt đồ thị sẽ kết thúc sau hữu hạn bước.
Thuật toán "Tìm đường mở" tìm hết tất cả các đường mở
đối với ghép cặp M trong G.
Chứng minh bằng phản chứng, giả sử thuật toán kết thúc mà trong G
vẫn còn đường mở đối với ghép cặp M . Đường mở này phải xuất phát
từ một đỉnh v0 chưa ghép thuộc X và kết thúc tại một đỉnh u0 chưa
ghép thuộc Y . Do thuật toán BF S tìm đường mở đã kết thúc nên ta
đã duyệt tất cả các đỉnh có thể đến từ v ∈ Queue qua một đường đi
đơn. Như vậy thuật toán BF S tìm đường mở đã duyệt qua đỉnh u0 ,
mà u0 chưa ghép, nên cần cải thiện ghép cặp (Bước 1). Điều này vô

lý với giả thiết thuật toán "Tìm đường mở" đã kết thúc.
Ví dụ 2.2.2. Tìm đường mở đối với ghép cặp M = {(X1 , Y1 )} trong
đồ thị G ở Hình 2.2.
Bước Hàng đợi Đỉnh v lấy Hàng

đợi Các đỉnh u Hàng

đợi

ra từ hàng sau khi lấy kề với v và sau khi đưa
đợi

v ra

chưa lên lịch u vào


CHƯƠNG 2. BÀI TOÁN GHÉP CẶP TRÊN ĐỒ THỊ HAI PHẦN

1

X2 , X3

2

X2

19

X3


Y1 , Y2

X3 , Y1 , Y2

X3 , Y1 , Y2 X3

Y1 , Y2

Y2

Y1 , Y2

3

Y1 , Y2

Y1 , X1

Y2

Y3

Y2 , Y3

4

Y2 , Y3

Y2


Do Y2 là đỉnh chưa ghép được ghi vết đường đi từ X2 nên ta thêm
(X2 Y2 ) vào ghép cặp M . Như vậy ghép cặp M đã được cải thiện, M =
{(X1 Y1 ), (X2 Y2 )}.
Chúng ta tiếp tục sử dụng thuật toán tìm đường mở:
Bước Hàng đợi Đỉnh v lấy Hàng

đợi Các đỉnh u Hàng

đợi

ra từ hàng sau khi lấy kề với v và sau khi đưa
đợi

v ra

chưa lên lịch u vào

1

X3

X3



Y2

Y2


2

Y2

Y2 , X2



Y1

Y1

3

Y1

Y1 , X1



Y3

Y3

4

Y3

Y3


Do Y3 là đỉnh chưa ghép được ghi vết đường đi từ X3 nên ta tìm
được đường mở (X3 , Y2 , X2 , Y1 , X1 , Y3 ), ta cải thiện M bằng cách xóa
đi các cạnh của ghép cặp M trong đường mở trên và các cạnh còn lại
tạo thành ghép cặp M = {X1 Y 3, X2 Y1 , X3 Y2 }. M là ghép cặp hoàn
hảo.


×