3 Một số ứng dụng của ghép cặp
3.1.1 Nội dung bài toán
Cho một đồ thị hai phần, mỗi cạnh của đồ thị có gắn với một số không âm, gọi là trọng số của cạnh. Hãy tìm một ghép cặp của đồ thị có trọng số lớn nhất (ta hiểu trọng số của ghép cặp là tổng trọng số của các cạnh thuộc ghép cặp đó)?
Không giảm tổng quát ta có thể giả thiết đồ thị là hai phần đầy đủ, vì việc thêm vào đồ thị hai phần ban đầu các cạnh có trọng số bằng 0 giữa hai đỉnh không kề nhau sẽ không làm thay đổi trọng số của ghép cặp có trọng số lớn nhất. Hơn nữa, ta có thể giả thiết |A| = |B| = n, nghĩa là xét đồ thị có dạng Kn,n = G(A∪B, E) với tập đỉnh A∪ B (|A| = |B| = n) và tập cạnh
E = A×B.
Một đồ thị hai phần đầy đủ bất kỳ Km,n có thể xem như một bảng chữ nhật gồm m hàng và n cột. Mỗi hàng ứng với một đỉnh thuộc A, mỗi cột ứng với một đỉnh thuộc B. Ô nằm ở nơi giao nhau của hàng i và cột j, ký hiệu (i, j), ứng với cạnh nối đỉnh ai ∈ A với đỉnh bj ∈ B. Trọng số của cạnh
(ai, bj), ký hiệu cij, được ghi trong ô (i, j). Một ghép cặp của Km,n sẽ tương ứng với một tập hợp ô (tô đậm) của bảng, gọi là tập ô độc lập, có tính chất:
các ô (ứng với cạnh ghép tô đậm) ở trên các hàng khác nhau và các cột khác nhau của bảng (Hình 3.1).
Hình 3.1: Đồ thị hai phần đầy đủ.
Bài toán tìm ghép cặp có trọng số lớn nhất của một đồ thị hai phần đầy đủ còn gọi là bài toán phân việc, vì có thể xem tập đỉnhAnhư tập hợp người và tập đỉnh B như tập hợp công việc. Trọng số cij của cạnh (i, j) xem như hiệu suất khi người i thực hiện công việc j. Mỗi ghép cặp của đồ thị xem như một sự phân việc cho người thực hiện (mỗi người làm một việc, mỗi việc do một người làm). Ghép cặp có trọng số lớn nhất sẽ tương ứng với sự phân việc đạt tổng hiệu suất cao nhất.
Cũng vậy, bài toán tìm ghép cặp hoàn hảo có trọng số nhỏ nhất của một đồ thị hai phần đầy đủ có thể xem như một bài toán phân việc đạt tổng chi phí nhỏ nhất, với trọng số cij của cạnh (i, j) xem như chi phí (chi phí đào tạo, chẳng hạn) khi người i thực hiện công việc j và bài toán này lại có thể đưa về bài toán tìm ghép cặp có trọng số lớn nhất. Cách làm như sau: Chọn hằng số d bằng trọng số (chi phí) lớn nhất của các cạnh, rồi gắn cho mỗi cạnh một trọng số mới c(e) = d−c(e) ("hiệu suất" của cạnh e). Có thể thấy mọi ghép cặp có trọng số lớn nhất theo hàm trọng số mới đều là ghép cặp hoàn hảo có trọng số nhỏ nhất theo hàm trọng số ban đầu. Vì thế, sau đây ta chỉ cần xét bài toán tìm ghép cặp có trọng số lớn nhất trong đồ thị hai phần đầy đủ với |A| = |B|.
Ví dụ 3.1. Ghép cặp hoàn hảo có trọng số nhỏ nhất của đồ thị hai phần với ma trận chi phí C là ghép cặp có trọng số lớn nhất của đồ thị hai phần với ma trận hiệu suất C (d = 9, cij = d−cij,∀i, j). C = 8 7 9 9 5 2 7 8 6 1 4 9 2 3 2 6 ;C = 1 2 0 0 4 7 2 1 3 8 5 0 7 6 7 3 (d = maxcij i,j = 9)
Đầu vào (input) là đồ thị hai phần đầy đủ G = (A∪B, A×B) với mỗi cạnh e có một trọng số không âmc(e). Thuật toán sau đây được biết với tên gọi phương pháp Hung-ga-ri do Kuhn và Munkres nêu ra đầu tiên (1955).
Ta gọi phép gán nhãn ` (labelling) cho các đỉnh của đồ thị là tìm cho mỗi đỉnh ai ∈ A một số thực ui và mỗi đỉnh bj ∈ B một số thực vj sao cho điều kiện sau được thoả mãn đối với mọi cạnh (ai, bj) hay mọi ô (i, j):
dij ≡ ui+ vj −cij > 0 ∀(i, j).
Có thể kiểm tra lại cách làm sau cho ta một phép gán nhãn như thế. Đặt
vj = 0 và ui = max
16j6ncij (i, j = 1, n)
Ta gọi đồ thị ngang bằng (equality subgraph), ký hiệu G` , là đồ thị con bao trùm của G nhận được từ G bằng cách chỉ giữ lại các cạnh (ai, bj) thỏa mãn hệ thức:
dij ≡ ui+ vj −cij = 0.
Định lý sau nêu mối quan hệ giữa đồ thị ngang bằng và ghép cặp có trọng số lớn nhất.
Định lý 3.1. Nếu đồ thị ngang bằng, G` , có ghép cặp hoàn hảo M∗ thì M∗
là ghép cặp có trọng số lớn nhất của G.
Chứng minh. Giả sử M∗ là một ghép cặp hoàn hảo trong G`. Theo định nghĩa c(M∗) = P (i,j)∈M∗ cij = n P i=1 ui+ n P j=1 vj. Giả sử M là một ghép cặp hoàn hảo bất kỳ trong G. Khi đó
c(M) = P (i,j)∈M cij 6 n P i=1 ui + n P j=1 vj = c(M∗). Do đó c(M) 6 c(M∗), nghĩa là M∗ là ghép cặp có trọng số lớn nhất.