2 Các bài toán cặp ghép
2.3 Bài toán cặp ghép cực đại
Như đã đề cập ở đầu chương, một cặp ghépM là cực đại khi và chỉ khi không tồn tại đường tăng choM trongG. Như vậy để tìm được cặp ghép cực đại của một đồ thị Gtrước tiên ta xuất phát từ một cặp ghépM (có thể là cặp ghép rỗng), ta tìm đường tăng P cho M, 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épM bằng cặp ghépM0 = M⊕P. Vấn đề ở đây là làm thế nào để có thể tìm được đường tăng P choM một cách hiệu quả. Năm 1961 Jack Edmonds giải quyết được vấn đề này với thuật toán bông hoa, ý tưởng chủ đạo của thuật toán này là có thể thu gọn một chu trình lẻ thành một đỉnh và việc tìm kiếm đường tăng được thực hiện trên đồ thị thu gọn.
Để tìm hiểu về thuật toán tìm cặp ghép cực đại của Jack Edmonds, trước tiên ta cần hiểu rõ về bông hoa và phép thu gọn bông hoa.
Định nghĩa 2.3.1. Cho đồ thị G = (V;E) và cặp ghép M của G. Một bông hoa (Blossom) là một chu trình mà đỉnh xuất phát ( cũng là đỉnh kết thúc) là một đỉnh
chưa ghép và dọc theo chu trình các cạnh chưa ghép và đã ghép nối tiếp xen kẽ nhau.
Hình 2.4: Đồ thịGvới cặp ghépM
Ở đây chu trìnhB = v3v4v5v6v7v3 là một bông hoa. Đỉnh v3 được gọi là đỉnh cơ sở (base) hay còn được gọi là đế hoa.
Một bông hoaB sẽ có những đặc điểm sau:
(1) Bông hoa B có số cạnh lẻ và số cạnh chưa ghép nhiều hơn số cạnh đã ghép đúng một cạnh.
(2) Trong mỗi bông hoa đế hoa là đỉnh chưa ghép, các đỉnh còn lại đều là đỉnh đã ghép và đỉnh ghép với các đỉnh đó cũng thuộcB.
(3) Với mọi đỉnh không phải là đế hoa thì luôn tồn tại hai đường pha từ đế hoa đến đỉnh đó, hai đường pha này đi dọc theo bông hoa theo hai hướng ngược nhau.
Định nghĩa 2.3.2. Cho đồ thị G= (V, E)cặp ghépM. Trong bông hoa B một phép thu gọn bông hoa (shrink) là phép thay thế tất cả các đỉnh của bông hoaB thành một đỉnh duy nhất. Đồ thịG0 và cặp ghépM0 tương ứng thu được bằng cách thu gọn các bông hoa vào đế hoa gọi là đồ thị thu gọn và cặp ghép thu gọn của đồ thịG và cặp ghépM.
Hình 2.5: Phép thu gọn bông hoa trên đồ thịG
Qua mỗi phép thu gọn bông hoa các cạnh được ghép trong đồ thịGvẫn là các cạnh được ghép trong đồ thịG0. Các đường tăngP0 cho cặp ghépM0 trongG0có thể nâng lên được thành một đường tăng P cho cặp ghép M tương ứng trong đồ thị G bằng cách đảo ngược thao tác thu gọn bông hoa. Cụ thể như sau: Nếu đường tăngP0đi qua một bông hoa thu gọn thì ta nâng nó lên thành bông hoa, sau đó chọn đoạn đường đi qua bông hoa sao cho vẫn đảm bảo tính luân phiên của các cạnh được ghép và chưa được ghép. Tiếp tục nâng lên cho đến khi đường tăng thu được không đi qua bông hoa thu gọn nào nữa.
Ở ví dụ trên ta có một đường tăng P0 = v1v2v3v10 của đồ thịG0, sau khi nâng lên ta thu được đường tăngP =v1v2v3v6v7v10của đồ thịG.
Như vậy ta hoàn toàn có thể tìm đường tăng trên đồ thịGthông qua việc tìm đường tăng trên đồ thị thu gọn G0 nhờ thao tác thu gọn và nâng lên. Đó là ý tưởng chủ đạo cho thuật toán của Edmonds.
Trước tiên để thực hiện thuật toán tìm đường tăng ta cần gán nhãn cho các đỉnh. Xét một đỉnhv1 chưa ghép, nếu từ đỉnh v1 có thể đi đến một đỉnh nào đó bằng một đường pha kết thúc bằng cạnh chưa ghép thì ta gán nhãn cho đỉnh đó là "nhạt", nếu đường pha kết thúc bằng cạnh đã ghép thì ta gán nhãn cho đỉnh đó là "đậm".
Sau khi gán nhãn cho các đỉnh ta thực hiện thuật toán tìm đường tăng như sau:
(1) Gán nhãn đậm cho đỉnh xuất phát v1 với v1 là đỉnh chưa ghép. Ta xây dựng đường tăng bắt đầu từ đỉnhv1 như sau:v1 đi theo một cạnh chưa ghép đếnv2 lúc này ta gán nhãn "nhạt" chov2,v2 đi theo cạnh đã ghép đếnv3 lúc này ta gán nhãn "đậm" chov3, ta tiếp tục quá trình theo quy tắc: Từ đỉnh đậm chỉ được đi tiếp theo cạnh chưa ghép và từ đỉnh nhạt chỉ được đi tiếp theo cạnh đã ghép. Trong quá trình xây dựng đường tăng, nếu gặp một cạnh chưa ghép nối hai đỉnh đậm tức là ta đã gặp một bông hoa, lúc này ta tiến hành thu gọn bông hoa đó và bắt đầu lại quá trình xây dựng đường tăng trên đồ thị thu gọn.
(2) Nếu đường tăng thu được không có đế hoa (đỉnh cơ sở) nào, thì ta chỉ việc tăng cặp ghép dọc theo đường tăng. Nếu đường tăng đi qua đế hoa nào thì ta mở rộng đế hoa đó thành bông hoa và chọn đường đi xuyên qua bông hoa sao cho vẫn đảm bảo tính luân phiên của đường tăng. Thực hiện thuật toán cho đến khi không tồn tại một đường tăng nào nữa, lúc này cặp ghép thu được chính là cặp ghép cực đại.
Đối với một đồ thị G bất kì thì thuật toán tìm cặp ghép cực đại là khá phức tạp, nhưng nếuGlà đồ thị hai thành phần thì thuật toán tìm cặp ghép cực đại đơn giản hơn rất nhiều.
ChoG = (A∪B, E)là một đồ thị hai thành phần. Giả sửA ={a1, a2, ..., am}và B = {b1, b2, ..., bn}. LấyM là một cặp ghép bất kì của G(có thể là cặp ghép rỗng).
Thuật toán tìm cặp ghép cực đại trongGđược thực hiện như sau:
Thực hiện các bước gắn nhãn sau cho đến khi không thực hiện được bước nào nữa. (1) Gắn nhãn "*" đối với tất cả các đỉnh chưa ghép của A. Sau đó áp dụng xen kẽ các bước2và3cho đến khi không thể gắn nhãn thêm nữa.
(2) Chọn một đỉnh được gắn nhãn trong A, giả sử đỉnh đó làai và gắn nhãn tất cả các đỉnh củaB chưa được gắn nhãn mà nối vớiaibằng một cạnh chưa ghép.
Lặp lại bước này trên tất cả các đỉnh củaAđã được gắn nhãn trước đó.
(3) Chọn một đỉnh mới được gắn nhãn của B, giả sử đó làbi. Gắn nhãn bi với tất cả các đỉnh chưa gắn nhãn củaAđược nối vớibibằng một cạnh củaM. Lặp lại bước này trên tất cả các đỉnh củaB được gắn nhãn ở bước trước.
Lưu ý rằng việc gắn nhãn sẽ tiếp tục luân phiên cho đến khi một trong hai khả năng sau xảy ra:
(E1) Một đỉnh chưa ghép trongB đã được gắn nhãn.
(E2) Không thể gắn nhãn thêm đỉnh nào nữa vàE1 không xảy ra.
Khi thuật toán kết thúc với khả năng E2 thì cặp ghép tìm được là cặp ghép cực đại củaG. Bây giờ ta sẽ áp dụng thuật toán vào việc tìm cặp ghép cực đại trong đồ thị hai thành phầnG.
Ví dụ 2.3.3. ChoG = (A∪B, E) là một đồ thị hai thành phần vớiA ={a1, a2, a3}
vàB = {b1, b2, b3}. ChoM ={a2b1}là một cặp ghép của G.
(1). Gắn nhãn "*" cho tất cả các đỉnh chưa ghép củaA. Ở đây ta gắn nhãn "*" cho a1vàa3.
Hình 2.8: Gắn nhãn sau bước thứ nhất
(2). Chọn một đỉnh mới đã được gắn nhãn trongA, giả sử đó làai, gắn nhãnaitất cả các đỉnh củaB mà được nối vớiaibằng một cạnh chưa ghép. Lặp lại bước này trên tất cả các đỉnh củaB đã được gắn nhãn ở bước trước.
Chúng ta chọn đỉnha1 đầu tiên. Gắn nhãna1 cho ba đỉnhb1,b2,b3.
Xét đỉnha3. Vìa3 chỉ liên thuộc với các đỉnh đã được gắn nhãn trongB nên không thể gắn thêm nhãn ở bước này.
(3). Chọn một đỉnh mới đã được gắn nhãn trongB, giả sử đó là bi, gắn nhãn tất cả các đỉnh chưa được gắn nhãn trongA mà được nối vớibibằng một cạnh củaM. Ở đây chỉ có đỉnha2của Alà chưa được gắn nhãn vì vậy ta chọn một đỉnh củaB đã được gắn nhãn trước đó liên thuộc vớia2. Ta phải gắn nhãnb1 choa2.
Thuật toán dừng lại tại đây. Do đỉnh chưa ghép trongBđã được gắn nhãn nên thuật toán kết thúc với khả năngE1. Hơn nữa một đường đi P = a1b2 là một đường tăng. Vì vậy ta có một cặp gép mớiM0 = {a2b1, a1b2}.
Bây giờ ta sẽ chạy lại thuật toán với cặp ghépM0.
(1). Đỉnha3 là đỉnh chưa ghép duy nhất trongA, ta gắn nhãn "*" choa3. Gắn nhãna3tất cả các đỉnh liên thuộc vớia3đó làb1vàb3.
Hình 2.10: Cặp ghép mớiM0và việc gắn nhãn sau bước thứ 1
(2). Bây giờ chọnb1, gắn nhãnb1choa1vàa2. Chú ý rằng bây giờb3chỉ liên thuộc với các đỉnh đã được gắn nhãn nên ta không cần xét đến.
Hình 2.11: Gắn nhãn sau bước thứ 2
(3). Xét a1. Vì nó liên thuộc với b2 không được gắn nhãn ở bước trước nên ta gắn nhãna1 chob2.
Hình 2.12: Gắn nhãn sau bước thứ 3
Ta dừng thuật toán ở đây bởi vì tất cả các đỉnh trong G đều được gắn nhãn. Chú ý do đỉnh chưa ghép b3 đã được gắn nhãn nên khả năng E1 xảy ra. Lúc này ta có P =a3b3 là một đường tăng và ta có cặp ghép mớiM00 ={a2b1, a1b2, a3b3}.
Hình 2.13: Cặp ghépM00
Khi chúng ta chạy thuật toán với cặp ghép M00, chúng ta không thể tìm được đỉnh chưa ghép nào trongA nên thuật toán kết thúc với khả năngE2. VậyM00là cặp ghép cực đại củaG.
KẾT LUẬN
Luận văn đã trình bày các khái niệm, tính chất, hệ thống sắp xếp lại kiến thức. Các chứng minh định lý, bổ đề, các thuật toán được trình bày lại chi tiết, rõ ràng dựa trên sự tham khảo các nguồn tài liệu. Đưa ra các ví dụ minh họa cho các khái niệm, tính chất, thuật toán và kết quả trong luận văn. Các kết quả thu được cụ thể như sau: 1. Trình bày các kiến thức cơ bản của đồ thị: Các phép toán trên đồ thị, các định nghĩa
cơ bản, các loại đồ thị thường gặp.
2. Trình bày kiến thức về đồ thị hai thành phần, định nghĩa cặp ghép, đường tăng, đường pha cũng như các định lý, bổ đề liên quan.
3. Trình bày nội dung bài toán cặp ghép, thuật toán tăng cặp ghép, thuật toán tìm đường tăng, thuật toán tìm cặp ghép cực đại, đưa ra ví dụ minh họa.
Tài liệu tham khảo
Tiếng Việt:
[1] Lê Minh Hoàng,Giáo trình Lý thuyết đồ thị.
[2] Ngô Đắc Tân (2004),Lý thuyết tổ hợp và đồ thị, Nhà Xuất Bản Đại Học Quốc Gia Hà Nội.
Tiếng Anh:
[3] J. A. Bondy (2014),Beautiful conjectures in graph theory, European Journal of Combinatorics.
[4] J. A. Bondy, U. S. R. Murty (2008),Graph Theory, Springer. [5] R. Diestel (2017),Graph theory fifth edition, Springer, Berlin.
[6] S. V. Tzvetalin, H. Laura (2012),Algorithms for Matchings in Graphs, Nipissing University, North Bay, P1B 8L7, Canada.