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

BÀI TOÁN cặp GHÉP TRONG lý THUYẾT đồ THỊ

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 (3.16 MB, 36 trang )

ĐẠI HỌC HUẾ
TRƯỜNG ĐẠI HỌC SƯ PHẠM

NGUYỄN DƯƠNG TIỄN

BÀI TOÁN CẶP GHÉP TRONG LÝ THUYẾT
ĐỒ THỊ
Chuyên ngành: HÌNH HỌC VÀ TÔPÔ
Mã số: 60460105

LUẬN VĂN THẠC SĨ TOÁN HỌC

NGƯỜI HƯỚNG DẪN KHOA HỌC:
PGS. TS. ĐOÀN THẾ HIẾU

Thừa Thiên Huế, năm 2019


LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của
riêng tôi, các số liệu và kết quả nghiên cứu ghi trong
luận văn là trung thực, được các đồng tác giả cho phép
sử dụng và chưa từng được công bố trong bất kỳ một
công trình nào khác.
NGUYỄN DƯƠNG TIỄN

ii


Mục lục
Trang phụ bìa



i

Lời cam đoan

ii

Mục lục

1

Lời mở đầu

2

1

4

2

Một số kiến thức chuẩn bị
1.1

Bài toán bảy cây cầu ở K¨onigsberg.

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

4


1.2

Đồ thị . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

1.3

Các phép toán trên đồ thị . . . . . . . . . . . . . . . . . . . . . . . .

6

1.4

Một số khái niệm trong đồ thị . . . . . . . . . . . . . . . . . . . . . .

9

1.5

Một số loại đồ thị . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.6

Cặp ghép . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Các bài toán cặp ghép

18


2.1

Bài toán hôn nhân . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.2

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

2.3

Bài toán cặp ghép cực đại . . . . . . . . . . . . . . . . . . . . . . . . 25

Kết luận

33

Tài liệu tham khảo

34

1


LỜI MỞ ĐẦU
Trong các tình huống thực tế, đôi khi chúng ta biểu thị các đối tượng như con người,
nhà ở, các nút giao thông, các cơ quan hành chính,... bằng một điểm và nối các điểm
đó lại bằng một nét hoặc mũi tên tượng trưng cho một mối liên hệ nào đó. Các sơ đồ
này xuất hiện rất nhiều trong cuộc sống với nhiều tên gọi khác nhau nhưng chúng đều
có hai yếu tố chính cấu thành đó là các đỉnh và cạnh nối các đỉnh. D.Koning là người
đầu tiên đề nghị gọi các sơ đồ như vậy là đồ thị thị (Graph), đồng thời đề nghị nghiên

cứu một cách có hệ thống các tính chất của nó.
Mô hình đồ thị đã xuất hiện từ thế kỉ XVIII, mô hình này được đưa ra bởi Leonhard
Euler để giải quyết bài toán bảy cây cầu ở K¨onigsberg, đây được xem là mô hình đồ
thị đầu tiên của lý thuyết đồ thị. Mặc dù xuất hiện từ rất lâu nhưng lý thuyết đồ thị chỉ
thực sự được quan tâm vào khoảng thế kỉ XIX khi người ta nhận ra rằng lý thuyết đồ
thị có rất nhiều ứng dụng trong thực tiễn đòi hỏi nó phải được hình thức hóa đến mức
cao. Những năm gần đây cùng với sự phát triển kinh tế, xã hội và đặc biết là tin học,
lý thuyết đồ thị càng được quan tâm nhiều hơn.
Trong lý thuyết đồ thị, bài toán cặp ghép là một trong những vấn đề đáng được
quan tâm bởi khả năng ứng dụng vào thực tiễn của nó, điển hình là Alvin Elliot Roth
người đã đưa thuật toán DAA (Deferred Acceptance Algorithm) của Lloyd Stowell
Shapley và David Gale vào giải quyết các vấn đề thực tiễn từ đó ông nhận được giải
thưởng Nobel Kinh tế. Hiểu đơn giản thì một cặp ghép là một tập gồm các cạnh của
đồ thị mà đôi một không có đỉnh chung. Vấn đề đặt ra là tìm một cặp ghép mà số cạnh
là nhiều nhất có thể. Với mong muốn hiểu rõ hơn về lý thuyết đồ thị, đặc biệt là bài
toán cặp ghép tôi chọn đề tài " Bài toán cặp ghép trong lý thuyết đồ thị" để tìm hiểu.
Dựa trên sự tham khảo và tổng hợp từ các nguồn tài liệu, luận văn được viết với cấu
trúc gồm hai chương:
Chương 1 trình bày một số định nghĩa và kết quả sẽ được sử dụng ở chương 2. Đó
là các định nghĩa, định lý và tính chất cơ bản của đồ thị.
Chương 2 trình bày nội dung các bài toán cặp ghép, tìm hiểu về các thuật toán để
giải quyết bài toán.
2


Luận văn được hoàn thành dưới sự hướng dẫn của thầy giáo PGS. TS. Đoàn Thế
Hiếu. Tác giả chân thành cảm ơn thầy đã tận tình giúp đỡ, hướng dẫn trong quá trình
làm luận văn.
Tác giả cũng xin bày tỏ lòng biết ơn các thầy cô, các anh chị và các bạn cao học
viên cùng các cán bộ công nhân viên chức của Đại học Huế đã quan tâm giúp đỡ trong

suốt quá trình học tập và nghiên cứu.
Tuy đã cố gắng hết sức, song chắc chắn vẫn còn những khuyết điểm, tác giả rất
mong được sự góp ý của quý thầy cô, bạn bè để luận văn được hoàn thiện hơn. Xin
chân thành cảm ơn.

Huế, tháng 8 năm 2019

Nguyễn Dương Tiễn

3


Chương 1

Một số kiến thức chuẩn bị
Trong chương này, chúng ta sẽ tìm hiểu một số kiến thức cơ bản về đồ thị, những
kiến thức sẽ được sử dụng trong các phần tiếp theo của luận văn. Nội dung của phần
này được trình bày lại trên cơ sở tham khảo từ các tài liệu [2] [3] [4] [5]

1.1

Bài toán bảy cây cầu ở K¨onigsberg.

Bài toán bảy cây cầu ở K¨onigsberg nảy sinh ở thành phố K¨onigsberg nằm trên sông
Pregel, ở đó có hai hòn đảo nối với nhau và với đất liền bằng bảy cây cầu. Bài toán
được đặt ra như sau: Từ một vị trí bất kì, tìm ra một đường đi mà phải đi qua bảy cây
cầu, mỗi cây cầu chỉ đi qua đúng một lần và quay lại điểm xuất phát. Rất nhiều người
thời đó đã cố gắng tìm ra một đường đi thỏa yêu cầu trên nhưng đều không có kết quả.
Mãi đến năm 1736, Leonhard Euler đã chứng minh rằng bài toán này là không có lời
giải.

Để chứng minh kết quả trên Euler đã biểu diễn lại bài toán bằng ngôn ngữ đồ thị.
Cụ thể ông coi mỗi vùng đất là môt đỉnh, mỗi cây cầu là một cạnh nối các đỉnh đó, số
cạnh nối với đỉnh gọi là bậc của đỉnh đó, cấu trúc thu được gọi là một đồ thị.

Hình 1.1: Mô hình đồ thị bài toán bảy câu cầu ở K¨onigsberg.

4


Nhờ việc sử dụng bậc của đỉnh, Euler đã chứng minh được rằng tồn tại một đường
đi thỏa yêu cầu của bài toán khi và chỉ khi đồ thị không có đỉnh nào bậc lẻ. Trong đồ
thị bảy cây cầu K¨onigsberg có bốn đỉnh có bậc lẻ, vì vậy việc tìm một đường đi thỏa
yêu cầu bài toán là điều không thể. Lời giải của Euler được coi là định lý đầu tiên của
lý thuyết đồ thị.

1.2

Đồ thị

Trong thực tế, do thói quen chúng ta thường vẽ lên giấy những điểm biểu diễn cho
một địa điểm, một đơn vị hành chính, một cá thể, các nút giao thông... và nối những
điểm đó lại để thể hiện cho một mối liên hệ nào đó. Mỗi sơ đồ như vậy là hình ảnh
của một đồ thị.
Định nghĩa 1.2.1. Đồ thị (Graph) là một tập hợp gồm các đỉnh và các cạnh nối các
đỉnh này.
Kí hiệu G = (V, E), V là tập tất cả các đỉnh của đồ thị G và E là tập tất cả các cạnh
của đồ thị G.
Ta có thể xem mỗi cạnh của E ứng một cặp đỉnh của V . Cạnh nối hai đỉnh vi , vj
có thể được viết dưới dạng vi vj . Một cạnh có dạng vi vi được gọi là khuyên.
Ví dụ 1.2.2. Xét đồ thị G = (V, E) được biểu diễn bẳng hình vẽ như sau:


Hình 1.2: đồ thị G = (V, E)

Khi đó: Tập các đỉnh V = {v1 , v2 , v3 , v4 , v5 } . Tập các cạnh E = {e1 = v1 v2 , e2 =
v2 v3 , e3 = v3 v4 , e4 = v3 v5 , e5 = v1 v4 , e6 = v4 v5 , e7 = v5 v1 }.
Định nghĩa 1.2.3. Cho đồ thị G = (V, E).

5


1. Đồ thị G được gọi là đồ thị vô hướng nếu mỗi cạnh của tập E ứng với một cặp đỉnh
không phân biệt thứ tự của tập V . Các cạnh của đồ thị vô hướng được gọi là cạnh
vô hướng.
2. Đồ thị G được gọi là đồ thị có hướng nếu mỗi cạnh của tập E ứng với một cặp đỉnh
có phân biệt thứ tự của tập V . Các cạnh của đồ thị có hướng được gọi là cạnh có
hướng hoặc cung.
3. Đồ thị G được gọi là đồ thị hỗn tạp nếu tập E nó chứa cả cạnh có hướng và cạnh
vô hướng.
Ví dụ 1.2.4. Đồ thị có hướng và đồ thị vô hướng.

Hình 1.3: Đồ thị vô hướng G1 và đồ thị có hướng G2

1.3

Các phép toán trên đồ thị

Định nghĩa 1.3.1. Đồ thị H được gọi là đồ thị con của đồ thị G nếu V (H) ⊆ V (G)
và E(H) ⊆ E(G).
Kí hiệu: H ⊆ G.
Đồ thị G là đồ thị con của chính nó.

Nếu H là đồ thị con của G thì tất cả các đỉnh và cạnh của H đều là đỉnh và cạnh của
G.
Nếu H1 ⊆ H2 và H2 ⊆ H3 thì H1 ⊆ H3 .
Ví dụ 1.3.2. Đồ thị G và các đồ thị con của nó.

6


Hình 1.4: Đồ thị G và đồ thị con G , G của G

Định nghĩa 1.3.3. Cho đồ thị G có Y ⊆ V (G) và X ⊆ E(G).
1. Đồ thị H = G − X là đồ thị thu được bằng cách bỏ đi các đỉnh thuộc tập X của
đồ thị G.
2. Đồ thị H = G \ Y là đồ thị thu được bằng cách bỏ đi các cạnh thuộc tập Y của đồ
thị G.
3. Đồ thị con sinh bởi tập Y là đồ thị có tập các đỉnh là Y và tập các cạnh E = {e =
uv ∈ E(G)|u, v ∈ Y } .Kí hiệu: G[Y ] = (Y, E ).
Định nghĩa 1.3.4. Cho hai đồ thi G1 = (V1 , E1 ) và G2 = (V2 , E2 ).
1. Đồ thị G = (V, E) trong đó V = V1 ∪ V2 và E = E1 ∪ E2 được gọi là đồ thị hợp
của hai đồ thị G1 và G2 .
Kí hiệu: G = G1 ∪ G2 .
2. Đồ thị G = (V, E) trong đó V = V1 ∩ V2 và E = E1 ∩ E2 được gọi là đồ thị giao
của hai đồ thị G1 và G2 .
Kí hiệu: G = G1 ∩ G2 .
3. Tổng trực tiếp của hai đồ thi G1 và G2 là đồ thị G = (V, E) trong đó V = V1 ∪ V2
và E = (E1 ∪ E2 ) \ (E1 ∩ E2 ).
Kí hiệu: G = G1 ⊕ G2 .
Định nghĩa 1.3.5. Hai đồ thị G1 = (V1 , E1 ) và G2 = (V2 , E2 ) được gọi là đẳng cấu
với nhau nếu tồn tại một song ánh ϕ : V1 → V2 thỏa mãn tính chất xy ∈ E1 khi và chỉ
khi ϕ(x)ϕ(y) ∈ E2 với mọi x, y ∈ V1 . Song ánh ϕ như vậy được gọi là đẳng cấu của

G1 và G2 .
Kí hiệu: G1 ∼
= G2 .
7


Ví dụ 1.3.6. Các phép toán trên đồ thị.

Hình 1.5: Các phép toán trên đồ thị

Ví dụ 1.3.7. Xét hai đồ thị như sau.

Hình 1.6: Đồ thị G và G đẳng cấu với nhau

Khi đó ánh xạ ϕ :
ϕ :

V −→ V
vi −→ vi
8

(1 ≤ i ≤ 5)


là một song ánh, hơn nữa ei ∈ E khi và chỉ khi ei ∈ E với mọi 1 ≤ i ≤ 5. Do đó
G∼
=G.
Hai đồ thị đẳng cấu với nhau thì chúng sẽ có tính chất giống nhau. Chẳng hạn như:
Có cùng số đỉnh, cùng số cạnh, các cạnh tương ứng nối các đỉnh tương ứng...


1.4

Một số khái niệm trong đồ thị

Định nghĩa 1.4.1. Cho đồ thị vô hướng G = (V, E).
1. Một cạnh e ∈ E nối hai đỉnh u, v của tập V thì ta nói hai đỉnh u, v là kề nhau và
cạnh e liên thuộc với hai đỉnh u, v.
2. Bậc của một đỉnh v ∈ V là số cạnh liên thuộc với nó. Kí hiệu: deg(v).
Ví dụ 1.4.2. Cho đồ thị vô hướng G = (V, E) được biểu diễn bởi hình vẽ sau.

Trong đồ thị G = (V, E): deg(v1 ) = 3, deg(v2 ) = 4, deg(v3 ) = 2, deg(v4 ) = 1,
deg(v5 ) = 0.
Đỉnh v5 không liên thuộc với bất kì cạnh nào được gọi là đỉnh cô lập.
Đỉnh v4 chỉ liên thuộc với một cạnh gọi là đỉnh treo.
Cạnh e1 và e2 cùng liên thuộc với v1 và v2 được gọi là hai cạnh song song.
Cạnh e5 chỉ liên thuộc với một đỉnh gọi là cạnh khuyên.
Định nghĩa 1.4.3. Cho đồ thị G = (V, E).
Bậc cực tiểu của đồ thị G là bậc nhỏ nhất của đỉnh v trong G. Kí hiệu δ(G) :=
min{dG (v)| v ∈ V }.
Bậc cực đại của đồ thị G là bậc lớn nhất của đỉnh v trong G. Kí hiệu ∆(G) :=
max{dG (v)| v ∈ V }.
9


Nếu δ(G) = ∆(G) = k thì tất cả các đỉnh của G đều có bậc k.
Định nghĩa 1.4.4. Nếu đồ thị G có tất cả các đỉnh cùng bậc k thì đồ thị G được gọi
là đồ thị k-chính quy.
Định lý sau đây là một tính chất cơ bản về bậc của đồ thị.
Định lý 1.4.5. Cho đồ thị vô hướng G = (V, E) có m cạnh. Khi đó ta có


deg(v)
v∈V

= 2m.
Chứng minh: Với một cạnh e = uv bất kì. Khi ta tính tổng các bậc của các đỉnh thì
cạnh e được tính một lần cho đỉnh u một lần cho đỉnh v, như vậy mọi cạnh trong G
deg(v) = 2m.

đều được tính hai lần cho bậc của các đỉnh. Vậy
v∈V

Từ định lý trên ta có hệ quả sau.
Hệ quả 1.4.6. Với đồ thị G bất kì, số đỉnh bậc lẻ của G là một số chẵn.
Chứng minh: Giả sử đồ thị G có m cạnh. Gọi c là tổng các bậc của các đỉnh bậc
chẵn, l là tổng các bậc của các đỉnh bậc lẻ. Theo định lý 1.4.5 ta có c + l = 2m, mà c
là tổng của các số chẵn nên c chẵn, do đó l = 2m − c là số chẵn. Mặt khác l là tổng
của các số lẻ nên số đỉnh bậc lẻ phải là một số chẵn.
Định nghĩa 1.4.7. Cho đồ thị có hướng G = (V, E).
1. Một cung e ∈ E nối hai đỉnh u, v của tập V thì ta nói hai đỉnh u, v là kề nhau.
Cung e đi ra khỏi đỉnh u và đi vào đỉnh v. Đỉnh u gọi là đỉnh đầu, đỉnh v gọi là
đỉnh cuối của cung e.
2. Bán bậc ra của một đỉnh v ∈ V là số cung của đồ thị đi ra khỏi nó, kí hiệu: deg + (v).
Bán bậc vào của đỉnh v là số cung đi vào nó, kí hiệu: deg − (v).
Ví dụ 1.4.8. Cho đồ thị có hướng G = (V, E) được biểu diễn bởi hình vẽ sau.

10


Trong đồ thị G = (V, E): deg + (v1 ) = 3, deg − (v1 ) = 0, deg + (v2 ) = 3, deg − (v2 ) =
3, deg + (v3 ) = 0, deg − (v3 ) = 2, deg + (v4 ) = 0, deg − (v4 ) = 1, deg + (v5 ) = 0,

deg − (v5 ) = 0.

Định nghĩa 1.4.9. Cho đồ thị G = (V, E) là đồ thị có hướng. G được gọi là đồ thị
có hướng cân bằng (balanced directed graph) nếu deg + (v) = deg − (v) với mọi đỉnh
v∈V .
Định nghĩa 1.4.10. Một đường đi là một đồ thị khác rỗng P = (V, E) trong đó các
tập V ,E có dạng
V = {x0 , x1 , ..., xk } E = {x0 x1 , x1 x2 , ..., xk−1 xk }
Trong đó các đỉnh xi đôi một khác nhau. Đỉnh x0 gọi là đỉnh đầu, xk gọi là đỉnh
cuối của đường đi P . Chiều dài của đường đi chính là số cạnh của P . Chiều dài
của đường đi là k thì ta kí hiệu P k . Đường đi P có thể được viết dưới dạng P =
x0 x1 x2 ...xk , va P được gọi là đường đi từ x0 đến xk .

Hình 1.7: Một đường đi P = P 5 và một chu trình C 5 trong đồ thị G

Định nghĩa 1.4.11. Cho P = x0 x1 x2 ...xk−1 là một đường đi và k ≥ 3, một đồ thị C
= P + xk−1 x0 được gọi là một chu trình.
Định nghĩa 1.4.12. Cho đồ thị G = (V, E).
1. Khoảng cách giữa hai điểm x,y ∈ V là đường đi trong G có độ dài ngắn nhất từ
đỉnh x đến đỉnh y .
2. Đồ thị vô hướng G được gọi là liên thông nếu với hai đỉnh bất kì luôn tồn tại một
đường đi giữa hai đỉnh đó.
11


3. Đồ thị có hướng G được gọi là liên thông mạnh nếu với hai đỉnh bất kì luôn tồn tại
một đường đi có hướng nối hai đỉnh đó.
Định nghĩa 1.4.13. Cho đồ thị vô hướng G = (V, E). Đồ thị G = (V , E ) là đồ thị
con của đồ thị G được gọi là thành phần liên thông của G, nếu G = G[V ] là liên
thông và với mọi V


V thì G[V ] là không liên thông.

Như vậy một đồ thị G không liên thông thì nó là hợp của hai hay nhiều thành phần
liên thông.

Hình 1.8: Đồ thị G gồm ba thành phần liên thông

Định nghĩa 1.4.14. Cho đồ thị G = (V, E).
1. Một đỉnh v ∈ V được gọi là đỉnh khớp nếu khi xóa đi đỉnh đó và các cạnh liên
thuộc với nó thì đồ thị mới có nhiều thành phần liên thông hơn đồ thị G.
2. Một cạnh e ∈ E được gọi là một cầu nếu khi xóa đi cạnh đó thì đồ thị mới có nhiều
thành phần liên thông hơn đồ thị G.

Hình 1.9: Đồ thị G liên thông, đỉnh khớp và cạnh cầu.

12


1.5

Một số loại đồ thị

Định nghĩa 1.5.1. Cho đồ thị G = (V, E). Số đỉnh của đồ thị G được kí hiệu là |V |,
số cạnh của đồ thị G được kí hiệu là |E|.
Đồ thị G được gọi là đồ thị hữu hạn nếu số đỉnh |V | và số cạnh |E| là hữu hạn, ngược
lại đồ thị G được gọi là đồ thị vô hạn nếu số đỉnh |V | hoặc và số cạnh |E| là vô hạn.
Định nghĩa 1.5.2. Một đồ thị G = (V, E) được gọi là đơn đồ thị nếu đồ thị không có
khuyên và cạnh song song. Ngược lại ta có đa đồ thị.
Định nghĩa 1.5.3. Một đồ thị G = (V, E) được gọi là đồ thị hai thành phần nếu tập

đỉnh V có thể chia làm hai tập con V1 , V2 rời nhau sao cho bất kì một cạnh nào của
tập E đều nối một đỉnh thuộc V1 và một đỉnh thuộc V2 .
Kí hiệu: G = (V1 ∪ V2 , E).
Như vậy nếu một đỉnh bất kì v ∈ V1 thì nó chỉ có thể kề với một đỉnh thuộc V2 và
ngược lại.

Hình 1.10: Đồ thị hai thần phần G = (V1 ∪ V2 , E).

V1 được gọi là tập các đỉnh trái. V2 được gọi là tập các đỉnh phải.
Nếu |V1 | = |V2 | thì G được gọi là đồ thị hai thành phần cân bằng.
Định lý 1.5.4. Nếu G = (V, E) là đồ thị hai thành phần thì G không chứa chu trình
lẻ nào.
Chứng minh: Giả sử đồ thị G có V = V1 ∪ V2 , và G chứa một chu trình lẻ C =
v1 e1 v2 e2 v3 ...v2k+1 e2k+1 v1 . Không mất tính tổng quát, giả sử e1 ∈ V1 , vì G là đồ thị
hai thành phần nên e2 ∈ V2 , đỉnh v1 ∈ V1 nối với v2 ∈ V2 qua cạnh e1 , đỉnh v2 ∈ V2
nối với v1 ∈ V2 qua cạnh e2 , tương tự v2k+1 ∈ V1 nối với v1 ∈ V2 qua cạnh e2k+1 .
13


Điều này mâu thuẫn với giả thuyết v1 ∈ V1 . Vậy đồ thị hai thành phần G = (V, E)
không chứa chu trình lẻ nào.
Định lý 1.5.5. Cho G = (V1 ∪ V2 , E) là đồ thị hai thành phần. Mọi đồ thị con H của
G đều là đồ thị hai thành phần.
Chứng minh: Ta có H là đồ thị con của G nên V (H) ⊆ V và E(H) ⊆ E. Đặt
V1 (H) = V1 ∩ V (H) và V2 (H) = V2 ∩ V (H), khi đó V (H) = V1 (H) ∪ V2 (H),
mặt khác V1 ∩ V2 = ∅ nên V1 (H) ∩ V2 (H) = ∅. Với mọi cạnh e ∈ E(H) bất kì, vì
E(H) ⊆ E nên e = v1 v2 với v1 ∈ V1 (H), v2 ∈ V2 (H). Vậy H là đồ thị hai thành
phần.
Định lý 1.5.6. Nếu G = (V1 ∪ V2 , E) là đồ thị hai thành phần thì


deg(v) =
v∈V1

deg(v)
v∈V2

Chứng minh: Xét một đồ thị H là đồ thị con của G sao cho đồ thị H chứa tất cả
các đỉnh của G và không chứa bất kì cạnh nào của G, lúc này ta có

deg(v) =
v∈V1

deg(v) = 0. Ta bắt đầu thêm vào H các cạnh của G cho đến khi H chứa tất cả
v∈V2

các cạnh của G, lúc này đồ thị H chính là đồ thị G. Cứ mỗi lần thêm một cạnh vào H
deg(v) lại tăng thêm một. Tiếp tục quá trình cho đến khi đồ thị

deg(v) và

thì
v∈V1

v∈V2

H trở thành đồ thị G. Vậy

deg(v) =
v∈V1


deg(v).
v∈V2

Định nghĩa 1.5.7. Đồ thị G = (V, E) được gọi là đồ thị đầy đủ nếu G là đơn đồ thị
vô hướng và tất cả các đỉnh của đồ thị G đôi một liền kề nhau.
Kí hiệu Kn := {G| G là đồ thị đầy đủ n đỉnh}.
Đồ thị Kn thì sẽ có n đỉnh, Cn2 cạnh và bậc của tất cả các đỉnh đều là n − 1.

Hình 1.11: Một số đồ thị đầy đủ.

14


1.6

Cặp ghép

Trong một đồ thị hai hay nhiều cạnh được gọi là độc lập với nhau nếu chúng đôi
một không có đỉnh chung.
Định nghĩa 1.6.1. Cho tập hợp M gồm các cạnh của đồ thị G, M được gọi là một
cặp ghép của G nếu các cạnh trong M độc lâp với nhau.
Các đỉnh trong M gọi là các đỉnh đã ghép, các đỉnh mà không liên thuộc với bất kì
cạnh nào trong M gọi là các đỉnh chưa ghép.
Định nghĩa 1.6.2. Cho đồ thị hai thần phần G = (V1 ∪ V2 , E). Một đường đi đơn
bắt đầu từ một đỉnh chưa ghép của V1 đi theo một cạnh chưa ghép đến một đỉnh của
V2 , rồi theo một cạnh đã ghép về lại một đỉnh của V1 , rồi lại tiếp tục theo một cạnh
chưa ghép sang một đỉnh của V2 ... cứ tiếp tục quá trình như vậy ta được một đường
pha (alternating path).
Định nghĩa 1.6.3. Cho đồ thị hai thần phần G = (V1 ∪ V2 , E). Một đường pha bắt
đầu từ một đỉnh chưa ghép của V1 và kết thúc bằng một đỉnh chưa ghép của V2 được

gọi là một đường tăng (augmenting path).

Hình 1.12: Đồ thị hai thần phần G = (V1 ∪ V2 , E).

Trong đồ thị hai thần phần G = (V1 ∪ V2 , E) ở hình trên. Ta có M = {e2 , e4 , e6 } là
một cặp ghép của G. v1 , v1 , v4 , v4 là các đỉnh chưa ghép. e1 , e3 , e5 là các cạnh chưa
ghép.
Đường đi P = v1 v2 v2 v3 v3 v4 là một đường tăng.
15


Định nghĩa 1.6.4. Cho đồ thị hai thần phần G = (V1 ∪ V2 , E).
1. Một cặp ghép M được gọi là cặp ghép cực đại nếu nó là cặp ghép có số cạnh lớn
nhất trong G.
2. Một cặp ghép M được gọi là cặp ghép đầy đủ từ V1 vào V2 nếu số phần tử của M
bằng số phần tử của V1 .
3. Một cặp ghép M được gọi là cặp ghép hoàn hảo nếu nó vừa là cặp ghép đầy đủ từ
V1 vào V2 vừa là cặp ghép đầy đủ từ V2 vào V1 .
Bổ đề 1.6.5. Cho M1 và M2 là hai cặp ghép của G. Khi đó mỗi thành phần của đồ
thị con bao trùm H với tập cạnh E(H) = (M1 − M2 ) ∪ (M2 − M1 ) là một trong các
loại sau:
1. Một đỉnh cô lập.
2. Một chu trình chẵn với các cạnh luân phiên giữa M1 và M2 .
3. Một đường đi với các cạnh luân phiên giữa M1 , M2 và đỉnh kết thúc là một đỉnh
chưa ghép với chính xác một trong hai cặp ghép M1 và M2 .
Định lý sau đây là một kết quả quan trọng, là cơ sở cho các thuật toán tìm cặp ghép
được trình bày trong chương sau.
Định lý 1.6.6. (Định lý Berge)
Một cặp ghép M trong đồ thị G là cực đại khi và chỉ khi không tồn tại đường tăng
ứng với M trong G.

Chứng minh: Cho M là một cặp ghép của G và giả sử rằng tồn một đường tăng
P = v0 v1 ...vk ứng với M .
Chú ý rằng k chính là số cạnh của P và k phải là số lẻ bởi vì P là đường tăng có
nghĩa là các cạnh của nó xen kẻ giữa các cạnh của M và không của M và kết thúc
phải là một đỉnh chưa ghép của M .
Xét cặp ghép M , ta tiến hành bỏ tất cả các cạnh của M nằm trong P . Sau đó thêm
các cạnh chưa ghép của M trong P vào ta được một cặp ghép mới M1 = M ⊕ P .
Chú ý rằng k − 1 là số chẵn và để có M1 ta đã bỏ đi (k − 1)/2 cạnh từ M và thêm
vào (k + 1)/2 cạnh. Mà (k + 1)/2 − (k − 1)/2 = 1. Do đó cặp ghép mới M1 có nhiều
16


hơn một cạnh so với M hay M không phải là cặp ghép cực đại của G. Như vậy nếu
vẫn tồn tại đường tăng ứng với M thì M không phải là cặp ghép cực đại.
Ngược lại, giả sử rằng M không phải là cặp ghép cực đại và không tồn tại đường
tăng nào. Xét một đồ thị con bao trùm H với tập cạnh E(H) = (M1 −M )∪(M −M1 )
với M1 là cặp ghép cực đại của G. Lúc này mỗi thành phần H hoặc là đỉnh cô lập,
hoặc một chu trình chẵn với các cạnh luân phiên giữa M1 và M , hoặc là một đường đi
với các cạnh luân phiên giữa M1 , M và đỉnh kết thúc là một đỉnh chưa ghép với chính
xác một trong hai cặp ghép M1 và M .
Ta xét một thành phần của H là một đường luân phiên giữa các cạnh của M1 và
M , đỉnh cuối của các đường luân phiên này phải là đỉnh chưa ghép của chính xác một
trong hai cặp ghép M1 và M . Do số cạnh của M1 lớn hơn M nên một số đường luân
phiên trong H chứa nhiều cạnh của M1 hơn M , lúc này đường luân phiên đó chính là
đường tăng ứng với M , điều này trái với giả thuyết không tồn tại đường tăng ứng với
M . Vậy M phải là cặp ghép cực đại của G.

17



Chương 2

Các bài toán cặp ghép
Xin được nhắc lạị rằng một cặp ghép M của đồ thị G là tập các cạnh của G đôi
một độc lập với nhau, tức là các cạnh trong M đôi một không có đỉnh chung. Các
cạnh nằm trong M gọi là các cạnh đã ghép, các cạnh còn lại là cạnh chưa ghép, các
đỉnh liên thuộc với các cạnh của M gọi là các đỉnh đã ghép, các đỉnh còn lại là đỉnh
chưa ghép. Trong thực tế việc tìm một cặp ghép M có thể dễ dàng thực hiện, nhưng
để tìm được cặp ghép mà số cạnh của nó là nhiều nhất có thể, thì lại là vấn đề không
đơn giản. Để giải quyết vấn đề này ta sử dụng thuật toán đường tăng, thuật toán được
thực hiện như sau: Khởi đầu từ một cặp ghép M bất kì, tiến hành xây dựng một đường
tăng P , sau đó thực hiện phép tăng cặp ghép dọc theo P bằng cách thay cặp ghép M
bằng cặp ghép M = M ⊕ P , tiếp tục thao tác cho đến khi không tìm được đường
tăng nào nữa, lúc này cặp ghép thu được là cặp ghép có số cạnh lớn nhất.

Hình 2.1: Phép tăng cặp ghép dọc theo đường tăng P = v1 v2 v3 v4 v5 v6 .

18


Một vấn đề mới ở đây là làm thế nào để tìm được đường tăng một cách hiệu quả,
chúng ta sẽ tìm hiểu sâu hơn ở từng bài toán cụ thể.
Trong chương này, nếu chúng ta xét đồ thị G = (V, E) là đồ thị hai thần phần với
V = A ∪ B thì để đơn giản ta kí hiệu a,a ... là các đỉnh của A và b, b ... là các đỉnh
của B. Nội dung của chương này được trình bày dựa trên sự tham khảo các tài liệu
[1], [4], [5], [6].

2.1

Bài toán hôn nhân


Xét bài toán sau: Có a cô gái và b chàng trai. Mỗi cô gái sẽ thích hợp với một số
chàng trai nhất định. Vấn đề đặt ra là tất cả các cô gái có thể kết hôn với người thích
hợp hay không?
Bài toán có thể được phát biểu bằng nhiều cách khác nhau nhưng đều có chung một
dạng như trên ta có thể gọi chung là bài toán hôn nhân. Bài toán hôn nhân đã được
Philip Hall giải quyết năm 1935. Ông đã tìm ra điều kiện để tất cả các cô gái có thể
kết hôn với người thích hợp được trình bày trong định lý sau đây.
Gọi N (S) = {v ∈ V ; ∃s ∈ S; vs ∈ E} là tập các láng giềng trong G của tập con
S, hiểu đơn giản thì N (S) là tập các đỉnh liên thuộc với các đỉnh trong S.
Định lý 2.1.1. Hall 1935
G chứa một cặp ghép đầy đủ nếu và chỉ nếu |N(S)| ≥ |S| với mọi S ⊆ A.
Chứng minh: Điều kiện cần là hiển nhiên. Ta sẽ sử dụng thuật toán đường tăng để
chứng minh điều kiện đủ.
Giả sử M là một cặp ghép bất kì của G. Nếu M chứa tất cả các đỉnh của A lúc đó M
là cặp ghép đầy đủ của G. Nếu M không là cặp ghép đầy đủ thì sẽ tồn tại một đỉnh a0
chưa được ghép.
Ta tiến hành xây dựng một dãy các đỉnh a0 b1 a1 b2 a2 bi ai thỏa các điều kiện sau:
(1) a0 là đỉnh chưa ghép.
(2) Chọn bi kề với af (i) ∈ {a0 , a1 , a2 ...ai−1 }.
(3) ai bi là một cạnh của cặp ghép M .
19


Ta chứng minh luôn tồn tại một dãy như vậy. Thật vậy dựa vào điều kiện kết hôn thì
với S = {a0 , a1 , ..., ai−1 } ta có |N(S)| ≥ |S| = i tức là có ít nhất i đỉnh nằm trong B
kề với các đỉnh của S. Do đó ta luôn chọn được một đỉnh bi = b1 , ..., bi−1 thỏa điều
kiện (2), tức là dãy đỉnh a0 b1 a1 b2 a2 bi ai phải kết thúc tại một đỉnh của B.
Gọi điểm cuối của dãy trên là bk , ta cần chứng minh đường đi P = a0 b1 a1 ...af (k) bk là
một đường tăng, tức là chứng minh bk là một đỉnh chưa được ghép.

Giả sử bk là đỉnh đã được ghép thì theo điều kiện (3) ak bk ∈ M mà bk là đỉnh cuối
của dãy nên không thể tồn tại ak ( vì nếu có ak thì bk chưa phải là đỉnh cuối của dãy).
Do đó bk là đỉnh chưa được ghép hay P là một đường tăng. Từ đó ta chỉ việc chọn cặp
ghép mới M = M ⊕ P cứ tiếp tục quá trình trên với cặp ghép M khi quá trình trên
kết thúc ta sẽ có một cặp ghép đầy đủ của G.
Điều kiện |N(S)| ≥ |S| với mọi S ⊆ A, được gọi là điều kiện kết hôn ( marriage
condition), hay điều kiện Hall.
Ví dụ sau đây sẽ giúp chúng ta có cái nhìn trực quan về định lý Hall.
Ví dụ 2.1.2. Có bốn công ty cần tuyển dụng nhân viên và có bốn sinh viên ứng tuyển.
Các công ty chỉ nhận những sinh viên mà họ mong muốn, các sinh viên thì sẽ chấp
nhận bất kì công ty nào nhận họ.

Hình 2.2: Đồ thị minh họa mối liên hệ giữa các công ty và sinh viên ứng tuyển.

Ở đây các công ty và sinh viên sẽ có cạnh nối với nhau nếu công ty muốn nhận sinh
viên nào đó. Ví dụ Apple chỉ muốn nhận Bình, Google thì có thể nhận bất kì ai... Sử
dụng định lý Hall ta có thể biết có cặp ghép đầy đủ từ các công ty đến các sinh viên
hay không. Nếu ta nhìn vào đồ thị trên có thể thấy ngay Apple và Youtube chỉ muốn
nhận một mình Bình, nhưng Bình lại chỉ có thể làm cho một công ty. Vì vậy không
20


thể có cặp ghép đầy đủ.
Ta có thể viết lại điều kiện kết hôn trong bối cảnh của ví dụ trên:

Với một tập gồm n công ty, gọi m là số lượng sinh viên mà ít nhất một trong các
công ty này muốn. Nếu m ≥ n với mọi tập hợp các công ty thì sẽ có cặp ghép đầy đủ
từ tập các công ty và tập các sinh viên. Ngược lại thì không có cặp ghép đầy đủ.
Ở đây ta lấy tập {Apple, Y outube} có tập các sinh viên có liên kết với ít nhất một
trong hai công ty là {Binh}. Vì 1 < 2 nên việc tìm ra cặp ghép đầy là không thể.


Nếu ta có thể thay đổi việc Youtube có thể chấp nhận Hoa.

Hình 2.3: Đồ thị minh họa mối liên hệ giữa các công ty và sinh viên ứng tuyển.

Lúc này điều kiện kết hôn được thỏa mãn, ta có thể ghép cặp cho tất cả các công ty
với một sinh viên mà họ muốn. Chú ý rằng ở ví dụ trên số lượng các công ty và sinh
viên không bằng nhau ta vẫn có thể sử dụng được định lý Hall.

Nếu ta thay đổi một chút ở điều kiện kết hôn ta thu được hệ quả sau.

Hệ quả 2.1.3. Nếu |N(S)| ≥ |S| − d với mọi S ⊆ A, d là một số tự nhiên cố định, khi
đó G chứa một cặp ghép M với |M | = |A| − d.
Chứng minh: Từ đồ thị G ta thêm d đỉnh mới vào B và nối chúng với tất cả các
đỉnh của A ta thu được một đồ thị mới G . Theo giả thuyết trong đồ thị G ta có
|N(S)| ≥ |S| − d với mọi S ⊆ A, với việc d đỉnh mới được thêm vào và chúng
liên thuộc với mọi cạnh trong A nên trong đồ thị mới G ta có |N(S)| ≥ |S| với
21


mọi S ⊆ A. Do đó theo định lý Hall thì G chứa một cặp ghép đầy đủ M , khi ta bỏ
đi d đỉnh đã thêm vào G thì cặp ghép M chỉ có thể mất đi tối đa d cạnh, tức là M
có ít nhất |A|−d cạnh thuộc G. Vậy đồ thị G chứa một cặp ghép M với |M | = |A|−d.
Cho đồ thị G = (V, E), một tập S ⊆ V được gọi là tập phủ đỉnh nếu với mọi cạnh
e = ab của G thì a ∈ S hoặc b ∈ S tức là tất cả mọi cạnh của G đều liên thuộc với ít
nhất một đỉnh của S.
Định lý 2.1.4. K¨onig 1931
Trong đồ thị hai thành phần G, số cạnh lớn nhất của một cặp ghép M bằng với số
đỉnh nhỏ nhất của một tập phủ đỉnh S.
Chứng minh: Ta có nếu M là một cặp ghép và S là một tập phủ đỉnh thì |M | ≤ |S|.

Thật vậy giả sử |M | < |S|, vì mọi cạnh trong M đều liên thuộc với ít nhất một đỉnh
của S nên sẽ có ít nhất một đỉnh trong S liên thuộc với hai cạnh của M , điều này mâu
thuẫn với tính độc lập của các cạnh trong cặp ghép M .
Giả sử G = (V, E) có V = A∪B với |A| = m, |B| = n. Gọi S = {a1 , a2 , ..., ar , b1 , b2 , ..., bs },
H1 = (A1 ∪ B1 , E1 ) là đồ thị con của G với A1 = {a1 , a2 , ..., ar }, B1 = B \
{b1 , b2 , ..., bs }. Ta cần chứng minh tồn tại cặp ghép đầy đủ M1 của H1 , tức là chứng
minh H1 thỏa điều kiện kết hôn. Giả sử tồn tại X ⊆ A1 sao cho |X| < |NH1 (X)|.
Lúc này ta có thể thu được tập phủ đỉnh có số đỉnh nhỏ hơn số đỉnh của S, mâu thuẫn
với giả thuyết S là tập phủ đỉnh có số đỉnh nhỏ nhất. Do đó |NH1 (X)| ≥ |X| với mọi
X ⊆ A1 . Theo định lý Hall thì H1 có cặp ghép đầy đủ M1 và |M1 | = r.
Gọi H2 = (B2 ∪ A2 , E1 ) là đồ thị con của G với B2 = {b1 , b2 , ..., bs }, A2 =
A \ {a1 , a2 , ..., ar }. Lập luận tương tự H2 có cặp ghép đầy đủ M2 và |M2 | = s.
Lúc này G có một cặp ghép M = M1 ∪ M2 và |M | = |M1 | + |M2 | = r + s. Từ đó ta
có điều phải chứng minh.

Cho đồ thị G = (V, E) một đồ thị con G = (V , E ) với V = V và E = ∅ được
gọi nhân tử của đồ thị G. Nếu nhân tử G của G là một đồ thị k-chính quy thì G được
gọi là k-nhân tử. Như vậy với G = (V, E) là một đồ thị hai thần phần thì một đồ thị
con H ⊆ G là 1-nhân tử khi và chỉ khi E(H) là một cặp ghép đầy đủ của G. Từ đó ta
22


có hệ quả sau.

Hệ quả 2.1.5. Nếu G là k-chính quy với k

1, thì G có một 1-nhân tử.

Chứng minh: Ta có G là k-chính quy nên


deg(v) = k|A| và
v∈A

v∈A

v∈B

deg(v) hay k|A| = k|B|, do đó |A| = |B|.

deg(v) =

Theo định lý 1.56 ta có

deg(v) = k|B|.

v∈B

Xét S ⊆ A bất kì có tập hàng xóm N (S). Vì G là k-chính quy nên các đỉnh của S nối
các đỉnh của N (S) với tổng cộng k|S| cạnh, và các cạnh này là một trong k|N (S)|
cạnh liên thuộc với các đỉnh của N (S). Do đó k|S|

k|N (S)| hay |N(S)| ≥ |S|, vì

vậy theo định lý Hall G chứa một cặp ghép đầy đủ hay G có một 1-nhân tử.

2.2

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

Trong bài toán hôn nhân, việc ghép cặp chỉ đơn thuần ghép một cô gái với một

chàng trai mà họ thích, nhưng trong thực tế việc ghép đôi như vậy xuất hiện nhược
điểm là mối quan hệ của các cặp đôi sẽ không bền vững. Nếu hai cặp đôi bất kì
(a1 ; b1 ), (a2 ; b2 ) mà a1 lại thích b2 hơn b1 và b2 cũng thích a1 hơn a2 thì có thể dẫn
đến sự tan vỡ của hai cặp đôi. Vấn đề đặt ra là làm thế nào để có thể sắp xếp hôn nhân
cho n chàng trai và n cô gái sao cho không tồn tại hai người khác giới thích nhau hơn
người được ghép đôi với họ. Đó là nội dung của bài toán hôn nhân bền vững.
Lloyd Stowell Shapley và David Gale là hai người đầu tiên nghiên cứu và đưa ra lời
giải cho bài toán này. Cũng đã có nhiều người giải quyết bài toán này, nhưng cách giải
của Gale và Shapley có ý nghĩa thực tiễn nhất. Từ việc đưa ra thuật toán giải quyết bài
toán này họ đã tìm ra thuật toán DAA (Deferred Acceptance Algorithm), nhờ việc sử
dụng thuật toán DAA để giải quyết các vấn đề thực tiễn mà Alvin Elliot Roth đã nhận
được giải thưởng Nobel Kinh tế.

Trong bài toán hôn nhân bền vững, mỗi chàng trai sẽ có một danh sách các cô gái
mà họ thích theo thứ tự tăng nghiêm ngặt, ngược lại mỗi cô gái cũng có một danh
sách các chàng trai mà họ thích theo thứ tự tăng nghiêm ngặt. Thuật toán mà Gale và
Shapley đưa ra để giải quyết bài toán hôn nhân bền vững được thực hiện như sau:
23


×