Đề tài
BÀI TOÁN GHÉP CẶP VÀ ỨNG DỤNG
NHÓM 8
STT Họ tên
Công việc
(theo mục lục)
Chữ ký
Nhận xét của
giáo viên
1 Lê Diêm Hùng
Chương 1: Đại cương về
đồ thị
2 Hồ Thị Mộng Điệp
Chương 2: Bài toán
ghép cặp
3 Đào Thị Anh Thư Chương 3: Ứng dụng
4 Nguyễn Thị Phương Anh
Chương 3: Ứng dụng và
báo cáo
1
MỤC LỤC
Chương 1. ĐẠI CƯƠNG VỀ ĐỒ THỊ
1.1 Các khái niệm cơ bản 3
1.2 Các loại đồ thị 5
1.3 Bậc, nửa bậc vào, nửa bậc ra 5
1.4 Đường đi, chu trình, tính liên thông 8
Chương 2. BÀI TOÁN GHÉP CẶP
2.1 Mạng 10
2.2 Bài toán ghép cặp 11
2.2.1 Phát biểu bài toán 11
2.2.2 Một số định nghĩa 12
2.2.3 Thuật toán giải bài toán ghép cặp 16
2.2.4 Bài toán ghép cặp tối ưu 23
Chương 3. ỨNG DỤNG CỦA BÀI TOÁN GHÉP CẶP
3.1 Bài toán phân công công việc 27
3.1.1 Phát biểu bài toán 27
3.1.2 Cách giải 27
3.2 Bài toán xếp thời khóa biểu ở trường học 30
3.2.1 Phát biểu bài toán 30
3.2.2 Cách giải 30
3.3 Bài toán dịch vụ hôn nhân 31
3.3.1 Phát biểu bài toán 31
3.3.2 Cách giải 31
KẾT LUẬN 33
DANH MỤC TÀI LIỆU THAM KHẢO 34
2
CHƯƠNG 1
ĐẠI CƯƠNG VỀ ĐỒ THỊ
1.1 CÁC KHÁI NIỆM CƠ BẢN
1.1.1 Đồ thị, đỉnh, cạnh, cung
Định nghĩa 1.1. Đồ thị vô hướng G = (V, E) gồm tập V các đỉnh và tập
E các cạnh. Mỗi cạnh
e E
∈
được liên kết với một cặp đỉnh v, w (không kể
thứ tự).
Nếu cạnh e liên kết v, w thì ta nói cạnh e liên thuộc đỉnh v, w và các
đỉnh v, w liên thuộc cạnh e.
Ví dụ 1.1
Hình 1.1 là đồ thị vô hướng có tập đỉnh
{ }
1,2,3,4,5,6V =
và tập cạnh
E = {(1, 4), (3, 4), (3, 3), (3, 5), (4, 5), (5, 6)}
Định nghĩa 1.2. Đồ thị có hướng G = (V, E) gồm tập V các đỉnh và tập
E các cạnh có hướng gọi là cung. Mỗi cung
e E
∈
được liên kết với một cặp
đỉnh (v, w) có thứ tự.
3
1
2
3
4
5
6
Hình 1.1
Ví dụ 1.2
Hình 1.2
Hình 1.2 là một đồ thị có hướng với tập đỉnh V = {1, 2, 3, 4, 5, 6} và
tập cung E = {(1, 2), (2,3), (2, 4), (3, 4), (4, 5), (3, 5), (5, 6)}
Định nghĩa 1.3. Nếu thay mỗi cung của đồ thị có hướng G bằng một
cạnh, thì đồ thị vô hướng nhận được là đồ thị lót của G.
Ví dụ 1.3
Đồ thị lót của đồ thị có hướng ở hình 1.2 là
Hình 1.3
1.1.2 Các khái niệm cơ bản khác
• Hai cạnh kề nhau là hai cạnh cùng liên thuộc một đỉnh.
• Hai đỉnh kề nhau là hai đỉnh cùng liên thuộc một cạnh.
• Hai cạnh gọi là song song nếu chúng liên kết với cùng một cặp đỉnh.
• Khuyên là cạnh có hai đỉnh liên kết trùng nhau.
• Đỉnh cô lập là đỉnh không liên kết với bất kỳ đỉnh nào khác.
4
1
2
3
4
5
6
1
2
3
4
5
6
• Đỉnh treo là đỉnh chỉ liên kết với một đỉnh duy nhất.
• Số đỉnh của đồ thị gọi là bậc của đồ thị, ký hiệu d(G).
• Số cạnh của đồ thị gọi là cỡ của đồ thị, ký hiệu card(G).
Ví dụ 1.4
Trong hình 1.4 đồ thị G có tập đỉnh
{ }
1,2,3,4,5,6,7V =
và tập cạnh
E = {(1, 2), (2, 3), (2, 4), (3, 3), (3, 4), (3, 5), (5, 6) }.
Đồ thị có khuyên là (3,3), có đỉnh treo là đỉnh 6, đỉnh cô lập là đỉnh 7.
Bậc của đồ thị d(G) = 7 và cỡ của đồ thị card(G) = 7.
1.2 CÁC LOẠI ĐỒ THỊ
Đồ thị hữu hạn
Đơn đồ thị, đa đồ thị
Đồ thị đủ
Đồ thị lưỡng phân
Đồ thị thuần nhất
Đồ thị con, đồ thị đẳng cấu
Đồ thị bù, đồ thị đường
Đồ thị phẳng
Đồ thị đối ngẫu
1.3. BẬC, NỬA BẬC VÀO, NỬA BẬC RA
5
1
2 4
5
6
7
3
3
Hình 1.4
1.3.1 Định nghĩa bậc, nửa bậc vào, nửa bậc ra
• Bậc: Cho đồ thị G = (V, E). Bậc của đỉnh
v V∈
là tổng số cạnh
liên thuộc với nó và ký hiệu là d(v).
Nếu đỉnh có khuyên thì khuyên được tính là 2 khi tính bậc, như vậy:
d(v) = số cạnh liên thuộc đỉnh v + 2* số khuyên.
Như vậy đỉnh cô lập trong đồ thị đơn là đỉnh có bậc bằng 0. Đỉnh treo
là đỉnh có bậc bằng 1.
Bậc lớn nhất của các đỉnh trong đồ thị G ký kiệu là
( )G∆
và bậc nhỏ
nhất của các đỉnh trong G ký hiệu là
( )G
δ
.
• Nửa bậc: Cho đồ thị có hướng G = (V,E),
v V∈
.
Nửa bậc ra của đỉnh v, kí hiệu d
0
(v) là số cung đi ra từ đỉnh v (v là đỉnh
đầu).
Nửa bậc vào của đỉnh v, kí hiệu d
I
(v) là số cung đi tới đỉnh v (v là đỉnh
cuối).
1.3.2. Các định lý về bậc
Định lý 1.5 Cho đơn đồ thị G có số đỉnh lớn hơn 1. Khi đó G có ít nhất
hai đỉnh có cùng bậc
Chứng minh
Xét đồ thị G có n đỉnh. Trong G không thể có đồng thời một đỉnh bậc 0
và một đỉnh bậc n. Thật vậy, nếu G có một đỉnh bậc 0 thì không có cạnh nào
nối đỉnh này với n-1 đỉnh còn lại trong G, do đó n-1 đỉnh còn lại của G có bậc
là một trong n-2 số 1,2,3,…,n-2. Nếu G không có đỉnh bậc 0 thì n đỉnh có bậc
là một trong n-1 số 1,2,3,…,n-1. Theo nguyên lý Dirichlet trong cả hai trường
hợp G có ít nhất hai đỉnh có cùng bậc.
Định lý 1.6 Cho đồ thị G = (V,E). Khi đó tổng bậc các đỉnh của đồ thị
là số chẵn và
( ) 2. ard(E)
v V
d v c
∈
=
∑
.
6
Chứng minh
Mỗi cạnh
( , )e u v E= ∈
tham gia tính 1 bậc ở đỉnh u và 1 bậc ở đỉnh v.
Do đó ta có
( ) 2. ard(E)
v V
d v c
∈
=
∑
.
Hệ quả 1.1 Số đỉnh bậc lẻ của đồ thị vô hướng là số chẵn.
Chứng minh
Cho đồ thị G=(V,E). Ký hiệu
1
V
là tập các đỉnh bậc lẻ,
2
V
là tập các
đỉnh bậc chẵn.
Theo định lý 1.2 ta có:
1 2
v V
2. ard(E)= d(v) ( ) ( )
v V v V
c d v d v
∈ ∈ ∈
= +
∑ ∑ ∑
1 2
v V
( ) 2. ard(E)- d(v)
v V
d v c
∈ ∈
⇒ =
∑ ∑
: là số chẵn
Các số hạng d(v) trong tổng
1
( )
v V
d v
∈
∑
đều là số lẻ. Vì vậy để cho tổng
1
( )
v V
d v
∈
∑
là số chẵn thì số các số hạng đó phải là số chẵn. Vậy số đỉnh bậc lẻ
trong V là số chẵn.
Mệnh đề 1.1 Mọi đỉnh của đồ thị
n
K
có bậc là n-1 và
n
K
có
( 1)
2
n n −
cạnh.
Chứng minh
Từ định nghĩa của đồ thị
n
K
suy ra mọi đỉnh của đồ thị
n
K
có bậc n-1.
Ta có
( )
( 1)
( ) 2
2 2
v V
v V
d v
n n
d v E E
∈
∈
−
= ⇒ = =
∑
∑
7
Mệnh đề 1.2 Cho đồ thị lưỡng phân đủ
{ }
( )
, 1 2
, ,
m n
K V V E=
. Khi đó mỗi
đỉnh trong tập
1
V
có bậc là n, mỗi đỉnh trong tập
2
V
có bậc là m và
,m n
K
có
m.n cạnh.
Chứng minh
Đồ thị lưỡng phân đủ
{ }
( )
, 1 2
, ,
m n
K V V E=
có số bậc của mỗi đỉnh trong
1
V
,
2
V
được suy ra từ định nghĩa của đồ thị lưỡng phân.
1 2
1 2
( ) ( ) 2
( ) ( )
. .
.
2 2
v V v V
v V v V
d v d v E
d v d v
m n n m
E m n
∈ ∈
∈ ∈
+ =
+
+
⇒ = = =
∑ ∑
∑ ∑
1.4. ĐƯỜNG ĐI, CHU TRÌNH, TÍNH LIÊN THÔNG
1.4.1. Các định nghĩa
Định nghĩa 1.15. Cho đồ thị
( , )G V E=
.
Dãy
µ
từ đỉnh v đến đỉnh w là dãy các đỉnh và cạnh nối tiếp nhau bắt
đầu từ đỉnh v và kết thúc tại đỉnh w.
Số cạnh trên dãy
µ
gọi là độ dài của dãy
µ
. Dãy
µ
từ đỉnh v đến đỉnh
w có độ dài n được biểu diễn như sau:
( )
1 1 2 2 1
, , , , , , , ,w
n n
v e v e v v e
µ
−
=
trong đó
, 1, 1
i
v i n= −
là các đỉnh trên dãy và
, 1,
i
e i n=
là các cạnh trên dãy
liên thuộc đỉnh kề trước và kề sau nó. Các đỉnh và cạnh trên dãy có thể lặp lại.
Định nghĩa 1.16 Đường đi từ đỉnh v đến đỉnh w là dãy từ đỉnh v đến
đỉnh w trong đó các cạnh không lặp lại.
Định nghĩa 1.17 Đường đi sơ cấp là đường đi không qua một đỉnh quá
một lần.
Định nghĩa 1.18 Vòng là dãy có đỉnh đầu và đỉnh cuối trùng nhau.
8
Định nghĩa 1.19 Chu trình là đường đi có đỉnh đầu và đỉnh cuối trùng
nhau.
Định nghĩa 1.20 Chu trình sơ cấp là chu trình không đi qua một đỉnh
quá một lần.
Định nghĩa 1.21 Đồ thị vô hướng được gọi là liên thông nếu mọi cặp
đỉnh của nó đều có đường đi nối chúng với nhau.
1.4.2. Các định lý
Định lý 1.7. Đồ thị G lưỡng phân khi và chỉ khi G không chứa chu
trình có độ dài lẻ.
Định lý 1.8 Cho đơn đồ thị
( , )G V E=
với n đỉnh và k thành phần liên
thông. Khi đó số cạnh m của đồ thị thỏa bất đẳng thức:
( )( 1)
2
n k n k
n k m
− − +
− ≤ ≤
Hệ quả 1.2 Mọi đơn đồ thị n đỉnh với số cạnh lớn hơn
( 1)( 2)
2
n n− −
là
liên thông.
Định lý 1.9 Mọi chu trình đồ thị phẳng có độ dài chẵn khi và chỉ khi
mọi mặt của đồ thị có bậc chẵn.
Định lý 1.10 (Công thức Euler) Cho G là đồ thị liên thông phẳng có e
cạnh, v đỉnh và f mặt. Khi đó ta có công thức: f=e-v+2.
Định lý 1.11 Cho G là đơn đồ thị liên thông phẳng có e cạnh, v đỉnh và
đai g, không có đỉnh treo. Khi đó ta có
( 2)
2
g
e v
g
≤ −
−
(
3)g ≥
.
Hệ quả 1.3 Cho G là đơn đồ thị phẳng liên thông với e cạnh và v đỉnh (
3v ≥
), không có đỉnh treo Khi đó ta có:
3 6.e v≤ −
Hệ quả 1.4 Cho G là đơn đồ thị phẳng liên thông với e cạnh và v đỉnh (
3v ≥
), không có đỉnh treo và không có chu trình độ dài 3. Khi đó ta có:
9
2 4.e v≤ −
10
CHƯƠNG 2
BÀI TOÁN GHÉP CẶP
2.1. MẠNG
• Mạng
Mạng là đơn đồ thị có hướng G = (V, E, c) thỏa mãn
(i) Có duy nhất 1 đỉnh, gọi là nguồn, không liên thuộc cung vào
(ii) Có duy nhất 1 đỉnh, gọi là đích, không liên thuộc cung ra
(iii) Trọng số c
ij
của cung (i, j) là các số không âm và gọi là khả năng
thông qua của cung
(iv) Đồ thị liên thông yếu
Ví dụ 2.1. Đồ thị sau là mạng với nguồn là đỉnh a và đích là đỉnh z
Ta có khả năng thông qua c
ab
= 3, c
bc
= 2, c
ad
= 5, c
dc
= 2, c
de
= 2, c
cz
= 4,
c
ez
= 4
• Luồng Cho mạng G với khả năng thông qua c
ij
, ( i, j)
∈
G. Tập các giá
trị
{ f
ij
│( i, j)
∈
G }
gọi là luồng trên mạng G nếu thỏa mãn
(i) 0 ≤ f
ij
≤ c
ij
∀
(i, j)
∈
G
(ii)
∑
∈Gki ),(
f
ik
=
∑
∈Gjk ),(
f
kj
∀
k
∈
V \ { a; z}
• Giá trị luồng Cho luồng f trên mạng G. Giá trị của luồng f là đại lượng
11
v(f) =
∑
∈Gia ),(
f
ai
=
∑
∈Gzi ),(
f
iz
2.2 BÀI TOÁN GHÉP CẶP
2.2.1 Phát biểu bài toán
Ta xét bài toán sau. Cho tập X và Y. Mỗi phần tử của X có thể ghép với
một số phần tử của Y. Vấn đề đặt ra là tìm cách ghép mỗi phần tử của X với
một số phần tử của Y sao cho số cặp ghép là lớn nhất.
Ví dụ 2.3. Có 4 người A, B, C, D xếp làm các công việc 1, 2, 3, 4, 5.
Giả sử: A có thể làm công việc 2, 5.
B có thể làm công việc 2, 5.
C có thể làm công việc 1, 3, 4, 5.
D có thể làm công việc 2, 5.
Có thể bố trí cho mỗi người một công việc phù hợp được không?
Bài toán này có thể mô hình hóa bằng đồ thị lưỡng phân G (V
1,
V
2
, E)
cho ở hình 2.11, trong đó
V
1
= {A, B, C, D} V
2
= { 1, 2, 3, 4, 5} và
E = { (A,2),(A,5),(B,2),(B,5),(C,1),(C,3),(C,4),(C,5),(D,2),(D,5) }
Hình 2.11
12
Việc bố trí cho mỗi người một công việc phù hợp quy về tìm 4 cung
đôi một không kề nhau của đồ thị.
Trước hết chúng ta định nghĩa bài toán tổng quát.
2.2.2. Một số định nghĩa
Cho đồ thị G. Một bộ ghép (matching) của đồ thị G là một tập hợp các
cạnh (cung) của G, đôi một không kề nhau.
Bài toán ghép cặp (Matching problem) của G là tìm bộ ghép có số cạnh
(cung) lớn nhất của G.
Bộ ghép cực đại là bộ ghép có số cạnh (cung) lớn nhất. Lực lượng của
bộ ghép cực đại kí hiệu là α
1
(G).
Cho G = (X,Y,E) là đơn đồ thị lưỡng phân
Bộ ghép đầy đủ từ X vào Y là bộ ghép cực đại có lực lượng bằng lực
lượng của X.
Bộ ghép hoàn hảo là bộ ghép đầy đủ từ X vào Y và từ Y vào X (suy ra
card(X) = card(Y)).
• Đưa bài toán ghép cặp về mạng chuẩn
Xét đơn đồ thị lưỡng phân G = (X, Y, E).
Ta sẽ đưa bài toán ghép cặp cuả đồ thị G về bài toán luồng cực đại như
sau.
Từ đồ thị G ta xây dựng mạng G’ gồm tập các đỉnh
V’ = {s}
∪
X
∪
Y
∪
{t }
Tập các cung E’ = {(s,x)│x
∈
X }
∪
E
∪
{(y,t)│y
∈
Y}
và khả năng thông qua
C
sx
= 1
∀
x
∈
X
C
yt
= 1
∀
y
∈
Y
C
xy
= +
∞
∀
x
∈
X, y
∈
Y, (x,y)
∈
E.
2.2.3 Các định lý
13
Định lý 2.5. Xét bài toán ghép cặp của G = (X, Y, E) và bài toán luồng cực
đại trên mạng G’. Khi đó
(i) Mọi luồng f = {f
xy
} của G’ sinh bởi thuật toán tìm luồng cực đại
xác định một bộ ghép của G.
(ii) Mọi luồng cực đại f = {f
xy
} của G’ sinh bởi thuật toán tìm luồng
cực đại xác định một bộ ghép cực đại của G.
(iii) Mọi luồng cực đại f = {f
xy
} của G’ sinh bởi thuật toán tìm luồng
cực đại có giá trị │X│xác định một bộ ghép đầy đủ của G.
Chứng minh
(i) Dễ dàng thấy rằng mọi luồng f = {f
xy
} của G’ sinh bởi thuật toán
tìm luồng cực đại có f
xy
= 1 hoặc f
xy
=0. Như vậy tập các cung
M
f
= {(x,y)
∈
E │f
xy
=1 }
sẽ xác định một bộ ghép của G.
(ii) và (iii) suy ra từ thực tế là giá trị luồng bằng số đỉnh thuộc X
ghép với một đỉnh thuộc Y.
Ví dụ 2.4 Bài toán xếp việc ở ví dụ 2.3 đưa về mạng chuẩn sau
Hình 2.12
14
Sử dụng thuật toán tìm luồng cực đại ta dễ dàng tìm được luồng cực đại
có giá trị cực đại bằng 3 cho ở hình 2.13
Hình 2.13
Định lý kết hôn Hall
Sau đây ta nghiên cứu điều kiện tồn tại bộ ghép đầy đủ của G = (X→ Y, E).
Nhà toán học người Anh Philip Hall đã phát biểu bài toán dưới dạng sau:
Giả sử X là tập nam, Y là tập nữ. Cung (x,y)
∈
E biểu diễn quan hệ
tương hợp của x và y. Hãy tìm điều kiện để mỗi nam có thể kết hôn với một
nữ tương hợp.
Cho tập con S
⊂
X. Ký hiệu
R(S) = {y
∈
Y│
∃
x
∈
S: (x,y)
∈
E }
Sau đây là kết quả của Hall
Định lý 2.6 (định lý kết hôn Hall)
Cho đồ thị định hướng lưỡng phân G = (X
→
Y,E). Khi đó tồn tại bộ
ghép đầy đủ khi và chỉ khi │S│≤│R(S)│
∀
S
⊂
X.
Chứng minh
(i) Điều kiện cần. Cho M là bộ ghép đầy đủ của G.Khi đó với mọi S
⊂
X ta có
15
M(S) = {y
∈
Y│
∃
x
∈
S, (x,y)
∈
M }
⊂
R(S)
Kéo theo │R(S)│≥│M(S)│= │S│
(ii) Điều kiện đủ.
Giả sử
│S│≤│R(S)│
∀
S
⊂
X
Cho lát cắt P
⊂
V’, a
∈
P và z
∉
P. Ký hiệu
P
x
= P
∩
X & P
y
= P
∩
Y
E1 = {(a,x)│ x
∉
P
x
}
E2 = {(x,y)
∈
E│x
∈
P
x
& y
∉
P
y
}
E3 = {(y,z) │y
∈
P
y
}
Ta có
E(P) = {(x,y)
∈
E’│x
∈
P & y
∉
P } = E1
∪
E2
∪
E3
Các tập E1, E2 và E3 rời nhau từng đôi một nên
│E(P)│=│E1+│E2+│E3│≥│X│-│P
X
│+R(P
X
)-│P
Y
│+│P
Y
│≥ │X│
Từ đó suy ra lát cắt cực tiểu có khả năng thông qua là│X│. Theo định
lý luồng cực đại lát cắt cực tiểu, luồng cực đại có giá trị │X│. Vậy bộ ghép
tương ứng là đầy đủ.
Định lý 2.7 (Định lí kết hôn Konig). Nếu đồ thị lưỡng phân đơn G=(X, Y, E)
là k- bậc (các đỉnh đều có bậc là k>0), thì tồn tại bộ ghép hoàn hảo.
Chứng minh:
Cho A
⊂
X bất kì và f(A) là tập các đỉnh trong Y kề với đỉnh trong A.
Ký hiệu E
1
là tập các cạnh liên thuộc các đỉnh trong A và E
2
là tập các cạnh
liên thuộc các đỉnh trong f(A). Khi đó card(E
1
) ≤ card(E
2
). Mặt khác ta có
card(E
1
) = k. card(A) và card(E
2
) = k. card(f(A)). Suy ra card(A) ≤ card(f(A)).
Như vậy, theo định lý kết hôn Hall, tồn tại bộ ghép đầy đủ từ X vào Y.
Trong đồ thị lưỡng phân G=(X,Y,E), mỗi cạnh sẽ tham gia tính 1 bậc
của đỉnh thuộc X và 1 bậc của đỉnh thuộc Y. Vì vậy tổng bậc các đỉnh trong X
16
bằng tổng bậc các đỉnh trong Y ( và bằng số cạnh). Vì các đỉnh trong G đều
có bậc k > 0, nên X và Y có số đỉnh bằng nhau. Suy ra tồn tại bộ ghép hoàn
hảo của G.
2.2.3 Thuật toán giải bài toán ghép cặp
Định nghĩa
Xét một bộ ghép M của G
Các đỉnh trong M gọi là các đỉnh đã ghép.
Các cạnh thuộc M gọi là cạnh ghép. Các cạnh không thuộc M gọi là
cạnh tự do.
Một đường pha (alternating path) là 1 đường trong G bắt đầu bằng một
đỉnh chưa ghép và gồm các cạnh lần lượt không rồi đến có nằm trong M
(nghĩa là đường pha gồm các cạnh xen kẽ thuộc M và không thuộc M).
Một đường mở (augmeting path) của M là 1 đường pha của M kết thúc
bằng 1 đỉnh Y- đỉnh chưa ghép.
Từ 1 đỉnh u thuộc X chưa ghép, ta có thể xây dựng 1 cây pha
(alternating tree) gốc u gồm tất cả các đường pha bắt đầu từ u (các đường pha
này không có đỉnh chung nào khác ngoài u).
Một cây pha có chứa ít nhất 1 đường mở gọi là cây mở (augmeting
tree), nếu không ta gọi nó là 1 cây đóng (Hungarian tree), gốc u của cây đóng
này gọi là đỉnh đóng (Hungarian acorn).
Ý tưởng của giải thuật : Chúng ta bắt đầu với 1 bộ ghép M bất kì. Nếu M
chứa mọi đỉnh trong X thì nó là 1 bộ ghép cực đại. Nếu không, ta chọn 1 đỉnh
u chưa ghép thuộc X và tìm kiếm 1 cách hệ thống cho 1 đường mở M với gốc
u.
Để tìm bộ ghép tối đại của một đồ thị lưỡng phân G, ta dùng giải thuật
đường mở sau:
Giải thuật đường mở (Augmenting path/ Hungarian Algorithm)
17
Xây dựng bộ ghép M như sau:
Bước 1: Mọi đỉnh thuộc X là chưa kiểm tra. Đặt M = Ø
Bước 2: Nếu mọi đỉnh thuộc X chứa ghép đều đã kiểm tra thì dừng. Bộ
ghép nhận được là cực đại.
Bước 3: Nếu không, chọn một đỉnh u thuộc X chưa ghép và chưa kiểm
tra để xây dựng 1 cây pha gốc u.
Bước 4: Nếu cây pha này là cây mở thì qua bước 5, nếu không, đánh
dấu u là đã kiểm tra rồi quay về bước 2.
Bước 5: Thực hiện thủ tục mở rộng M bằng cây mở như sau:
Trên đường mở, loại bỏ các cạnh trong M và thêm vào các cạnh ngoài
M để nhận được bộ ghép mới.
Đánh dấu mọi đỉnh thuộc X là chưa kiểm tra.
Quay về bước 2.
18
Sơ đồ khối của giải thuật này là
19
END
Xây dựng cây pha gốc u
Mở rộng M
Đánh dấu tất cả các
đỉnh X là “chưa kiểm
tra”
Đánh dấu u “đã kiểm tra”
Mọi đỉnh chưa kiểm
tra. M Ø
Các đỉnh thuộc tập X chưa
ghép cặp, đã kiểm tra?
YES
NO
Cây mở hay là cây đóng?NO
YES
BEGIN
Định lí: Bộ ghép nhận được khi áp dụng giải thuật đường mở vào đồ thị
lưỡng phân G là cực đại.
Chứng minh:
Gọi M là bộ ghép nhận được khi giải thuật dừng. Lúc này, mọi đỉnh
chứa ghép là đỉnh đóng.
Giả sử có 1 bộ ghép M
*
chứa nhiều cạnh hơn M thì phải có 1 đỉnh a
thuộc X đã ghép đối với M
*
nhưng chưa ghép đối với M. Ta xây dựng 1
đường pha duy nhất bắt đầu từ a gồm lần lượt các cạnh trong M
*
và trong M.
M
*
M M
*
M
Vì a là đỉnh đóng đối với M nên đường pha này phải kết thúc ở một X-
đỉnh b. Hơn nữa b phải là đỉnh chưa ghép đối với M
*
và đã ghép đối với M.
Như vậy, mỗi đỉnh a đã ghép đối với M
*
và chưa ghép đối với M đều
tương ứng 1-1 với 1 đỉnh b đã ghép đối với M và chưa ghép đối với M
*
. Điều
này chứng tỏ M
*
không thể chứa nhiều đỉnh hơn M được.
Nói cách khác M là bộ ghép cực đại.
Lưu ý: Ta có thể áp dụng giải thuật này bắt đầu với 1 bộ ghép bất kì,
giải thhuật sẽ sửa và mở rộng M dần để sau cùng trở thành 1 bộ ghép cực đại.
Ví dụ 2.6 Xét đồ thị lưỡng phân G sau:
A a
B b
C c
D d
E e
F f
G g
H h
20
Ma trận liên kết của G là:
a b c d e f g h
H
G
F
E
D
C
B
A
111
1111
11
111
11
1111
111
11111
Coi bộ ghép đầu tiên:
A a
B b
C c
D d
E e
F f
G g
H h
Xét đỉnh E,cây pha gốc E là:
b B h
E c C
d D
21
Đây là 1 cây mở vì chứa đường mở
E b B h
Từ đó suy ra bộ ghép mới:
A a
B b
C c
D d
E e
F f
G g
H h
Xét đỉnh F. Cây pha gốc F là:
b E c C e
F
d D h B
có chứa đường mở
F b E c C e
22
Suy ra bộ ghép mới:
A a
B b
C c
D d
E e
F f
G g
H h
Xét đỉnh G,cây pha gốc G là:
a A f
b F
G
c E
d D
có chứa đường mở là:
G a A f
Suy ra bộ ghép mới:
A a
B b
C c
D d
E e
F f
G g
H h
23
Cuối cùng, xét đỉnh H, cây gốc pha H là:
b F
H c E
d D b B
Đây là một cây đóng vì không chứa đường mở nào cả, và giải thuật kết
thúc. Bộ ghép sau cùng là bộ ghép tối đa của G.
2.2.4 Bài toán ghép cặp tối ưu
Định nghĩa
Cho trọng đồ lưỡng phân G = (X,Y,E) với trọng số w(e) nguyên dương với
mọi e
∈
E. Tìm bộ ghép cực đại M có tổng trọng số của các cạnh thuộc M, kí
hiệu w(M), là nhỏ nhất.
Không mất tính tổng quát, ta giả thiết G = K
n,n
( nếu cần, có thể thêm các
đỉnh giả và cạnh giả với trọng số +
∞
) với X=Y={1,2,…,n }. Ký hiệu A=
[ ]
aij
là ma trận trọng số, trong đó a
ij
là trọng số cạnh (i,j). Như vậy lời giải của bài
toán ghép cặp tối ưu là tìm n phần tử của ma trận A thỏa
(i) không có hai phần tử nằm trên một hàng hoặc một cột
(ii) tổng các phần tử là nhỏ nhất.
Một bộ n phần tử thỏa (i) và (ii), xác định bộ ghép cực đại tối ưu, gọi là
ghép cặp tối ưu
Giả sử tồn tại hoán vị P =
[ ]
ij
p
của ma trận đơn vị I sao cho các phần tử ≠ 0
( =1) của P nằm trên vị trí n phần tử zero của A. Khi đó n phần tử này của A
sẽ tạo thành một ghép cặp tối ưu M thỏa w(M) = P.A, trong đó P.A = ∑ p
ij
.a
ij
.
Ma trận P gọi là ghép cặp với ma trận A.
Bây giờ ta cho số nguyên c và xây dựng ma trận A’ bằng cách cộng thêm
c vào tất cả phần tử trên một hàng hoặc một cột của A. Khi đó P.A’ = P.A + c.
24
Như vậy ghép cặp tối ưu của ma trận A cũng là ghép cặp tối ưu của ma trận
A’ và ngược lại.
Từ phân tích trên ta suy ra phương pháp tìm ghép cặp tối ưu như sau:
Với mỗi hàng của A ta trừ đi phần tử nhỏ nhất sao cho mỗi hàng có ít
nhất một phần tử bằng 0.
Sau đó với mỗi cột của A ta trừ đi phần tử nhỏ nhất sao cho mỗi cột có ít
nhất một phần tử bằng 0.
Chọn n phần tử 0 thỏa tính chất (i)
Ví dụ 2.7. Giải bài toán ghép cặp tối ưu với ma trận trọng số sau
A =
7236
2526
5336
4245
Trừ hàng 1 cho 2, hàng 2 cho 3, hàng 3 cho 2 và hàng 4 cho 2 ta nhận được
ma trận
5014
3304
2003
2023
Tiếp tục trừ cột 1 cho 3 ta nhận được ma trận hiệu chỉnh A’
A’ =
5011
0301
2000
2020
Ma trận đơn vị hoán vị ghép cặp với A’ là
P =
0100
1000
0010
0001
25