Bộ ghép cực đại trên đồ thị hai phía

Một phần của tài liệu Tiểu luận Phân tích và thiết kế thuật toán LUỒNG CỰC ĐẠI (Trang 25)

Đối với một số bài toán tổ hợp ta có thể áp dụng phương pháp Luồng cực đại (maximum - flow) để giải.Có một số bài toán với nhiều nguồn phát và nhiều nguồn thu như ở mục giới thiệu Phần 26.1 cho chúng ta một ví dụ Có một số bài toán tổ hợp khác dường như rất ít liên quan đến vấn đề luồng trong mạng, nhưng thực tế ta có thể giải nó bằng cách dùng phương pháp luồng cực đại. Một trong số đó ta có thể kể đến bài toán: tìm kiếm một bộ ghép cực đại trong đồ thị hai phía. Mục này tập trung giải quyết vấn đề đó. Để giải quyết vấn đề này, ta sẽ tận dụng lợi thế của các đặc tính của phương pháp For Fulkerson.nhà.Chúng ta thấy rằng phương pháp Ford-Fulkerson có thể được dùng để giải quyết vấn đề tìm bộ ghép cực đại trên đồ thị hai phía.Ở đây ta xét đối với đồ thị G = (V, E) với thời gian tính là O(VE).

Bài toán về bộ ghép cực đại trên đồ thị hai phía

Phần này ta sẽ tìm hiểu bài toán tìm bộ ghép cực đại trên đồ thị hai phía. Do đó trước khi tìm hiểu bài toán ta cần tìm hiểu một số khái niệm: đồ thị hai phía, bộ ghép (matching), bộ ghép cực đại (maximum bipartite matching).

Cho đồ thị G = (V,E) mà tập đỉnh V có thể chia thành 2 tập đỉnh con L (tập đỉnh con trái) và R (tập đỉnh con phải).Bất kì cạnh e ∈ E đều là cạnh nối từ đỉnh l ∈ L đến đỉnh r ∈ R thì G được gọi là đồ thị hai phía ( hay còn gọi là đồ thị phân đôi).

Hình 1: Đồ thị hai phía G

Ví dụ: Bài toán phân lịch dạy của các giáo viên dạy các môn học tương ứng trong một khóa học. Ở bài toán này:

- Tập L biểu thị cho tập hợp các giáo viên. - Tập R biểu thị cho tập các môn học.

- Cạnh nối từ LR biểu thị giáo viên dạy môn tương ứng.

Bộ ghép (matching)

Cho một đồ thị vô hướng G = (V,E), G là đồ thị hai phía với V = L∪ R.một bộ ghép (matching) là một tập hợp các cạnh M ⊆ E đôi một không có đỉnh chung. Với bộ ghép M thì ta có:

- Tập các đỉnh v ∈V,mỗi cạnh của M liên thuộc với v gọi là tập các đỉnh được ghép (matched vertices) và ngược lại v không phải là đỉnh được ghép

(unmatched).

Tập các cạnh trong M gọi là các cạnh đã ghép (matched edges).

- Tập các cạnh trong M gọi là các cạnh đã ghép (matched edges) và ngược lại.

Ví dụ: Cho đồ thị hai phía như hình 2 bên dưới.

Ta có:

Bộ ghép M: M ={(X1,Y1),(X2,Y2)} Tập các đỉnh ghép: F = {X1,X2,Y1,Y2}

Tập các cạnh ghép: C = {(X1,Y1),(X2,Y2)}

Bộ ghép cực đại (maximum bipartite matching)

Một bộ ghép cực đại (maximum matching) là một bộ ghép của các

yếu tố cực đại. Nghĩa là, một bộ ghép M sao cho với với bất kì bộ ghép M' nào, ta có M ≥ M’. Nói cách khác M là bộ ghép cực đại là bộ ghép có số cạnh ghép cực đại.

Trong phần này ta sẽ tập trung chú ý đến việc tìm ra bộ ghép cực đại trên đồ thị hai phía. Ta giả sử rằng tập hợp đỉnh có thể chia thành hai tập L và R ta có: V = L ∪ R.Ở đó L và R rời nhau và tất cả các cạnh trong E nối giữa L và R. Hình 26.7 minh họa khái niệm của một bộ ghép cực đại.

Hình 26.7. Một đồ thị hai phía G = (V,E) với phân hoạch đỉnh V = L ∪ R. (a) Một bộ ghép với số phần tử là 2. (b) Một bộ ghép cực đại với số phần tử là 3.

Bài toán tìm một bộ ghép cực đại trong một đồ thị hai phía có nhiều ứng dụng thực tiễn. Để lấy ví dụ, ta có thể xét việc bộ ghép một tập hợp L máy với một tập hợp R công việc được thực hiện đồng thời.

Xét ở hình 26.7 ta xem sự hiện diện của cạnh (u,v) trong E có nghĩa là một máy cụ thể u∈L có khả năng thực hiện công việc v cụ thể v∈R. Một bộ ghép cực đại ở đây là tính làm sao có thể cung cấp công việc cho càng nhiều máy càng tốt.

Phương pháp tìm một bộ ghép cực đại

Ta có thể dùng phương pháp Ford-Fulkerson để tìm ra một bộ ghép cực đại trong một đồ thị hai phía vô hướng G = (V,E) có độ phức tạp đa thức với V và

E. Phương pháp chính là để xây dựng một mạng mà trong đó các luồng tương ứng với bộ ghép, như đã nêu trong Hình 26.8 bên dưới.Ta có thể tổng quát cách thực hiện như sau:

Để tìm ra bộ ghép cực đại của đồ thị hai phía G = (V,E) ta thực hiện:

- Đưa bài toán tìm bộ ghép cực đại trên đồ thị hai phía G về dạng bài toán tìm luồng cực đại trên mạng luồng G’

- Dùng phương pháp Ford- Fulkerson để giải quyết bài toán.

Ta định nghĩa mạng luồng G’ = (V’, E’) tương ứng với đồ thị hai phía G như sau. Ta cho đỉnh phát (source- s ) và đỉnh thu (sink-t)là các đỉnh mới không thuộc V, và ta đặt V’ = V / {s, t}. Nếu phân hoạch đỉnh của G là V = L ∪ R, các cạnh có hướng của G’ là các cạnh của E, có hướng từ L đến R cùng với các cạnh ở đỉnh V sẽ căn cứ vào:

E’ = {(s,u): u∈L}

∪{(u,v): u∈L, v∈R và (u,v) ∈E } ∪{(v,t): v∈R}

Hình 26.8. Mạng vận tải tương ứng với một đồ thị hai phía. (a) Đồ thị hai

phía G = (V,E) có phân hoạch đỉnh V = L ∪ R từ Hình 26.7. Một bộ ghép cực đại được biểu thị bởi độ đậm ở các cạnh (các cạnh được tô đậm). (b) Mạng luồng tương ứng G’ có một luồng cực đại đã nêu. Mỗi cạnh có khả năng thông qua là 1. Các cạnh tô đậm có một luồng là 1, và tất cả các cạnh khác không mang luồng nào cả. Các cạnh tô đậm từ L đến R tương ứng với các cạnh trong một bộ ghép cực đại của đồ thị hai phía.

Để hoàn thành việc chỉ ra các bộ ghép cực đại,ta gán khả năng thông qua cho mỗi cạnh trong E’.Vì mỗi đỉnh trong V có ít nhất một cạnh nối nên | E | ≥| V | / 2

Suy ra | E | ≤ |E'| = |E| + |V| ≤ 3|E| và do đó |E'| = O(E).

Bổ đề dưới đây chỉ ra rằng một bộ ghép trong G tương ứng trực tiếp với một luồng trong mạng vận tải G’ tương ứng của G. Ta nói rằng một luồng f trên mạng

vận tải G = (V,E) có giá trị nguyên nếu f (u,v) là một số nguyên với tất cả các cặp

(u,v) tương ứng thuộc V x V.

Bổ đề 26.10

Cho G = (V,E) là một đồ thị hai phía có phân hoạch đỉnh V=L∪R, và đặt G’=(V’,E’) là mạng luồng tương ứng của G. Nếu M là một bộ ghép trong G, thì có một luồng có giá trị số nguyên f trong G’ thỏa :

f = M.

Ngược lại, nếu f là một luồng có giá trị nguyên trong G’, thì sẽ tồn tại một bộ ghép M trong G với số phần tử (độ lớn) của M thỏa:

M = f.

Chứng minh: Trước tiên ta chứng tỏ bộ ghép M trong G tương ứng với một luồng có giá trị nguyên f trong G’.Ta định nghĩa f như sau:

Nếu (u,v)∈M, thì f(s,u) = f(u,v) = f(v,t) = 1 và f (u,s) = f(v,u) = f(t,v) = -1.Với các cạnh (u,v) ∈E’ còn lại thì f(u,v) = 0.

Ta dễ thấy được rằng mỗi cạnh (u,v)∈M tương ứng với 1 đơn vị của luồng trong G’ theo đường đi: s →u→v→t. Hơn nữa, các đường đi được tạo ra bởi các cung trong M bao gồm những đỉnh không kề nhau ngoại trừ hai đỉnh s và t. Tổng luồng trên mạng qua từng lát cắt (L∪{s}, R∪{t}) bằng độ lớn của M (M). Cho nên, theo Bổ đề 26.5 giá trị của luồng là f =M .

Để chứng minh điều ngược lại, ta giả sử f là một luồng có giá trị nguyên trong G’ và cho

M = {(u,v): u∈L, v∈R, và (u,v)>0}

Mỗi đỉnh u∈L chỉ có một cạnh vào kí hiêu là (s,v), và khả năng thông qua của nó là 1. Như vậy, mỗi đỉnh u∈L có tối đa một đơn vị của luồng mạng dương đi vào. Trong trường hợp nếu một đơn vị luồng dương không đi vào, thì do sự cân bằng luồng, một đơn vị luồng dương sẽ đi ra. Hơn nữa, do f là có giá trị nguyên, với mỗi đỉnh u L một đơn vị luồng dương có thể đi vào tại 1 cung và ra nhiều nhất là một cung. Vậy một đơn vị của luồng dương đi vào u nếu và chỉ nếu có một đỉnh v ∈ R thỏa f(u,v) = 1 và có tối đa là một cung ra tại mỗi đỉnh u∈ L chứa luồng dương. Một tham số cân bằng (symmetric argument) sẽ được gán cho mỗi đỉnh v ∈ R. Khi đó tập M là một bộ ghép.

Ta dễ thấy rằng với mọi đỉnh ghép u∈L, ta có f(s,u)=1, và với mọi cạnh (u,v)∈E-M, ta có f(u,v)=0. Bởi vậy, từ Bổ đề 26.1ta suy ra:

M= f(L,R)

=f(L,V’) - f(L,L) - f(L,s) - f(L,t) (Bổ đề 26.1) Biểu thức trên có thể được rút gọn như sau:

Do là luồng cân bằng nên f(L,V’) = 0; Theo Bổ đề 26.1 thì f(L.L)=0 Do tính đối xứng nên - f(L,s) = f(s,L).Do không có cung nào từ L vào t nên f(L,t) = 0

=f(s,V’) (do tất cả các cung ra từ s đều đi vào L) = f, (theo định nghĩa của f)

Theo Bổ đề 26.10, chúng ta có thể kết luận được một bộ ghép cực đại trong một đồ thị hai phía G tương ứng với một luồng cực đại trong mạng vận tải tương ứng G’ của G, nhờ đó chúng ta có thể tính một bộ ghép cực đại trong G bằng cách tìm luồng cực đại trên G’. Sự ràng buộc duy nhất là thuật toán tìm luồng cực đại trả về một luồng trong G’ mà trong đó có một số hàm f(u,v) cho giá trị không nguyên, mặc dầu giá trị luồng là một giá trị nguyên. Định lý sau đây sẽ chỉ ra rằng nếu chúng ta dùng phương pháp Ford-Fulkerson thì sẽ giải quyết được vấn đề trên.

Định lý 26.11 (Định lý bảo toàn)

Nếu hàm khả năng c có giá trị bảo toàn thì luồng cực đại f được tạo bằng phương pháp Ford-Fulkerson sẽ có tính chất fcó giá trị số nguyên. Ngoài ra, với tất cả các đỉnh u và v, giá trị của f(u,v) là một số nguyên.

Chứng minh: Phần chứng minh sẽ theo phương pháp quy nạp trên số lần lặp lại. Ta để nó làm Bài tập 26.3-2.

Giờ đây, ta có thể chứng minh hệ quả dưới đây theo Bổ đề 26.10.

Hệ quả 26.12

Độ lớn của một bộ ghép cực đại trong một đồ thị hai phía G là giá trị của một luồng cực đại trong mạng luồng tương ứng G’ của nó.

Chứng minh:

Giả sử rằng M là một bộ ghép cực đại trong G và luồng tương ứng f trong G’ không cực đại và có một luồng cực đại f trong G’ sao cho f’ > f.

Vì khả năng thông qua trong G’ có giá trị nguyên(theo Định lý 26.11).Ta thấy rằng f' mang giá trị nguyên.Vì vậy, f’tương ứng với một bộ ghép M’ trong G có số phần tử (độ lớn) M’=f’ > f= M, bộ ghép mâu thuẫn với giả thiết M là bộ ghép cực đại. Tương tự, ta có thể chỉ ra rằng nếu f là một luồng cực đại trong G’, bộ ghép tương ứng của nó là một cực đại trên G.

Như vậy, cho một đồ thị hai phía vô hướng G, ta có thể tìm một bộ ghép cực đại bằng cách tạo ra mạng vận tải G’, sau đó dùng phương pháp Ford-Fulkerson tìm một bộ ghép cực đại M từ luồng cực đại giá trị nguyên đã tìm được. Do các bộ ghép trong một đồ thị hai phía có độ lớn tối thiểu min(L,R) = O(V), giá trị của luồng cực đại tương ứng G’ là O(V). Ta có thể tìm một bộ ghép cực đại trong một đồ thị hai phía trong thời gian O(VE’) = O(VE).Vì vậy |E'| = Θ(E).

Một số bài tập

26.3-1.Chạy thuật toán Ford-Fulkerson trên mạng luồng trong Hình 26.8 (b)

và chỉ ra mạng thặng dư sau mỗi phép tăng cường luồng. Đánh số các đỉnh trong L từ trên xuống từ 1 đến 5 và trong R từ trên xuống từ 6 đến 9. Với mỗi lần lặp lại, chọn đường đi tăng cường nhỏ nhất .

26.3-2. Chứng minh Định lý 26.11

26.3-3. Cho G = (V,E) là một đồ thị hai phía với phân hoạch đỉnh V=L∪R, và cho G’ là mạng luồng tương ứng của nó. Xác định đường đi tốt (good upper bound) dựa trên trọng số (length) của đường tăng được tìm thấy trong G’ bằng phương pháp Ford-Fulkerson.

26.3-4* Một bộ ghép hoàn hảo (perfect matching) là một bộ ghép ở đó mọi

đỉnh đều được ghép.

Cho G = (V,E) là một đồ thị hai phía vô hướng có phân hoạch đỉnh V=L∪R, ở đó L=R. Với bất kỳ X ⊆ V, hay định nghĩa lân cận là tập các đỉnh liền kề với các phần tử (đỉnh) của X như sau:

N(X) = {y∈V: (x,y)∈E với một x∈X}.

Chứng minh định lý Hall: ở đó tồn tại một bộ ghép hoàn hảo trong G nếu và chỉ nếu A≤N(A) với mọi tập hợp con A⊆L.

26.3-5. Một đồ thị hai phía G=(V,E), với tập đỉnh V=L∪R, là đầy đủ bậc d

(d-regular) nếu mọi đỉnh v∈V có bậc là d. Mọi đồ thị hai phía đầy đủ bậc d thì có

L=R. Chứng minh mọi đồ thị hai phía đầy đủ bậc d có một bộ ghép của phần tử L bằng cách chỉ ra một lát cắt cực tiểu của mạng luồng tương ứng có khả năng thông qua L.

Một phần của tài liệu Tiểu luận Phân tích và thiết kế thuật toán LUỒNG CỰC ĐẠI (Trang 25)