3 Một số ứng dụng của ghép cặp
3.1.3 Ví dụ minh họa
Ví dụ 3.2. Giải bài toán phân việc đạt hiệu suất cao nhất với ma trận trọng số C = 1 2 0 0 4 7 2 1 3 8 5 0 7 6 7 3
Quá trình giải bài toán gồm các bước sau: Vòng lặp 1
Bước 1. Nhãn hàng: u1 = 2, u2 = 7, u3 = 8, u4 = 7 (ui - số lớn nhất ở hàng i của C), nhãn cột: vj = 0, j = 1,2,3,4. Tính D = [ui +vj −cij]4×4. Đồ thị G` bao gồm các cạnh tương ứng với các phần tử 0 trong D (mỗi hàng có ít nhất một phần tử 0).
Bước 2. Đánh dấu ∗ cho phần tử 0 ở hàng 1 (cột 2) và hàng 4 (cột 1). Không đánh dấu ∗ cho phần tử 0 ở hàng 2 và 3, vì chúng đều ở trên cột 2 đã có phần tử 0∗.
Hình 3.3: Vòng lặp 1 (Bước 1 và 2).
Cây Hung-ga-ri được phát triển từ hàng 2 (thao tác A và B) và hàng 3 (thao tác C) chứa phần tử 0, nhưng không chứa phần tử 0∗ (ứng với 2 đỉnh tự do a2, a3 ∈ A trong G`). Ta được cây con gồm hai ô (2, 2) - (1, 2) chứa
0 và 0∗ (ứng với cặp "cạnh tự do - cạnh ghép" (a2, b2) - (b2, a1)) và cây chỉ gồm duy nhất đỉnh gốc - hàng 3 (đỉnh a3). Đưa hàng 1, 2, 3 vào S (4 ∈/ S), đưa cột 2 vào T (Hình 3.3).
Bước 3. Do mới chỉ có 2< n = 4 phần tử 0∗ nên ta chuyển sang bước 4. Bước 4. Số d = min
i∈S,j /∈Tdij = 1 đạt tại ô tô đậm (Hình 3.3). Sửa nhãn hàng: u1 = 1, u2 = 6, u3 = 7, u4 = 7, nhãn cột: v1 = 0, v2 = 1, v3 = v4 = 0. Tính D = [ui +vj −cij]4×4. Đồ thị G` gồm các cạnh tương ứng với các phần tử 0 trong D (Hình 3.4).
Vòng lặp 2
Đánh dấu ∗ cho phần tử 0 ở hàng 1 (cột 1), hàng 2 (cột 2) và hàng 4 (cột 3). Ta thấy D có 3 phần tử 0∗ (tương ứng với 3 cạnh ghép) ở các ô 1 - 1, 2 - 2, 4 - 3 (Hình 3.4).
Cây Hung-ga-ri được phát triển từ hàng 3 (thao tác A và B), ứng với đỉnh tự do a3 ∈ A trong G`. Ta được dây chuyền hai ô (3, 2) - (2, 2) chứa 0 và
0∗. Đưa hàng 3, 2 vào S (1, 4 ∈/ S), đưa cột 2 vào T. Do hàng 2 (chứa 0∗) hết phần tử 0 nên ta tìm quay lui (thao tác C). Do đã xét hết hàng không có 0∗ nên ta sang các bước 3 và 4.
Tính d = 2 đạt tại hai ô tô đậm (Hình 3.4). Sửa lại ui, vj, D và G` (Hình 3.5).
Hình 3.4: Vòng lặp 2 Vòng lặp 3 Đánh dấu ∗ cho phần tử 0 ở hàng 1 (cột 1), hàng 2 (cột 2) và hàng 3 (cột 3). Có 3 phần tử 0∗ (tương ứng với 3 cạnh ghép) ở các ô 1 - 1, 2 - 2 và 3 - 3 (Hình 3.5). Hình 3.5: Vòng lặp 3
Cây Hung-ga-ri được phát triển từ hàng 4 (thao tác A và B), ứng với đỉnh tự do a4 ∈ A trong G`. Ta được dây chuyền (4, 1) - (1, 1) chứa 0 và 0∗. Đưa hàng 4, 1 vào S, đưa cột 1 vào T. Do hàng 1 (chứa 0∗) hết phần tử 0 nên ta tìm quay lui (thao tác C). Xét tiếp phần tử 0 ở hàng 4 (cột 3), ta được dây chuyền (4, 3) - (3, 3) - (3, 2) - (2, 2) - (2, 1) - (1, 1). Đưa thêm hàng 3, 2 vào S và đưa cột 3, 2 vào T. Do không phát triển được theo hàng từ ô (1, 1) (chứa 0∗) nên ta thực hiên thao tác (C) và sau đó dừng tìm kiếm, vì đã xét hết các hàng không chứa 0∗. Ta sang các bước 3 và 4.
Tính d = 1 đạt tại ô tô đậm (Hình 3.5). Sửa lại ui, vj, D và G`. (Hình 3.6).
Vòng lặp 4
Đánh dấu ∗ cho phần tử 0 ở hàng 1 (cột 1), hàng 2 (cột 2) và hàng 3 (cột 3). Có 3 phần tử 0∗ (tương ứng với 3 cạnh ghép) ở các ô 1 - 1, 2 - 2 và 3 - 3 (Hình 3.6).
Hình 3.6: Vòng lặp 4 - Ghép cặp ban đầu
Cây Hung-ga-ri được phát triển từ hàng 4 (thao tác A, B và D), ứng với đỉnh tự do a4 ∈ A trong G`. Ta được dây chuyền (4, 1) - (1, 1) - (1, 4) chứa
0 - 0∗ - 0 (đường cải tiến). Đổi 0 thành 0∗ và 0∗ thành 0 trên dây chuyền này ta được ghép cặp mới (Hình 3.7). Đến đây đã có đủ n = 4 phần tử 0∗
nên thuật toán dừng. Lời giải: người 1 việc 4, người 2 việc 2, người 3 việc 3, người 4 việc 1. Hiệu suất tổng cộng = 19.
Hình 3.7: Vòng lặp 4 - Ghép cặp hoàn hảo
Dễ kiểm tra lại rằng bài toán còn có một lời giải khác: người 1 việc 4, người 2 việc 1, người 3 việc 2, người 4 việc 3 với cùng hiệu suất tổng cộng = 19.
Có thể chứng minh rằng trọng số lớn nhất của ghép cặp trùng với tổng của các nhãn hàng và cột ở vòng lặp cuối cùng.
Ví dụ 3.3. (cách giải tương tự). Bài toán phân việc với ma trận trọng số (hiệu suất) cho dưới đây có lời giải (thu được ở vòng lặp 1) là: người 1 việc
2, người 2 việc 3, người 3 việc 4, người 4 việc 1. Hiệu suất tổng cộng là:
C = 3 7 4 6 5 2 8 5 1 3 4 7 6 5 2 6 ⇒ D = 4 0 3 1 3 6 0 3 6 4 3 0 0 1 4 0
Nhãn hàng và cột ở vòng lặp đầu và vòng lặp cuối như sau:
u1 = 7, u2 = 8, u3 = 7, u4 = 6 và v1 = v2 = v3 = v4 = 0
Trọng số (hiệu suất) lớn nhất ≡ u1+u2+u3+u4+v1+v2+v3+v4 = 28. Phân tích độ phức tạp của thuật toán dạng bảng
Lúc đầu việc tìm nhãn hàng, cột và tính ma trận D cần O(n2) thời gian. Ở mỗi vòng lặp, để đánh dấu các phần tử 0 trên các hàng cần O(n2) thời gian. Sau đó công việc phức tạp nhất là xây dựng cây Hung-ga-ri, việc này cũng đòi hỏiO(n2) thời gian vì gần như phải duyệt tất cả các ô của bảng, để tìm ra đường cải tiến hoặc xác định các tập S vàT. Cuối cùng việc tính số d, sửa đổi ma trận D và thay đổi đồ thị ngang bằng cũng cần O(n2) thời gian. Tóm lại, mỗi vòng lặp được thực hiện trongO(n2) thời gian. Do số cạnh của ghép cặp cực đại trong đồ thị ngang bằng sau mỗi vòng lặp tăng ít nhất một nên nhiều nhất có tất cả O(n) vòng lặp. Vì thế toàn bộ thời gian chạy của thuật toán là O(n3).