Thuật toán tìm cặp ghép với tổng trọng số trên các cạnh là lớn nhất hoặc nhỏ

Một phần của tài liệu (LUẬN văn THẠC sĩ) bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế (Trang 37 - 40)

nhất hoặc nhỏ nhất

*Thuật toán tìm cặp ghép với tổng trọng số trên các cạnh là lớn nhất: Bước 1:

+ Tạo đồ thị hai phía (X là phía máy có M đỉnh, Y là phía người có N đỉnh). Có cung (i,j) với trọng số C[i,j] nếu công nhân i làm việc trên máy j tạo lợi nhuận C[ij].

+ Tạo nhãn ban đầu chấp nhận được Fx và Fy theo quy tắc: Fx[i] = Max( C[i,j], Vj: 1 <= j <= M)

Fy[j]=0,Vj: 1 < = j < = M

(FX, FY gọi là chấp nhận được nếu thoả mãn bất đẳng thức Fx[i] + Fy[j] >= C[ij])

Nếu Fx[i] + Fy[j] = C[i,j] thì ta coi cạnh (i,j) là cạnh đậm (là đã ghép máy i cho công nhân j), các cạnh còn lại là cạnh nhạt. Hai đầu cạnh đậm là đỉnh đậm, các đỉnh còn lại là đỉnh nhạt.

Vậy bằng cách tạo nhãn ban đầu như trên chúng ta có cặp ghép M ban đầu (ghép được một số máy với công nhân tạo lợi nhuận trên các máy đó). Bước 2:

For (i:= 1 m) Begin

Nếu còn đỉnh nhạt i của X (nghĩa là còn công nhân chưa được xếp việc) thì:

Lặp

Tìm dây chuyền (bằng logic hoặc đệ qui). Nếu không có dây chuyền thì sửa nhãn.

Ngược lại tăng cặp ghép trên dây chuyền này.

Cho đến khi tìm được dây chuyền;

Trong thuật toán trên phải thực hiện các thao tác: tìm dây chuyền, sửa nhãn và tăng cặp ghép.

Sửa nhãn: Phải thực hên khi dây chuyền không kết thúc được bằng đỉnh nhạt bên Y mà kết thúc bằng đỉnh đậm bên X (ta gọi là dây chuyền “dở dang”). Trên các cung nối một đỉnh bên X đã nạp vào dây chuyền tới các đỉnh j thuộc Y chưa thuộc dây chuyền, chọn giá trị bé nhất trong các giá trị: Fx[i] + Fy[j] – C[i,j]. Giá tri này được chọn làm lượng sửa nhãn (kí hiệu là m). Sửa nhãn theo cách như sau: Nhãn các đỉnh của X thuộc dây chuyền sẽ giảm đi một lượng là m, nhãn các đỉnh của Y thuộc dây chuyền sẽ tăng thêm một lượng là m, để đảm bảo Fx[i] + Fy[ị] – C[i,j] >= 0. Sau khi các đỉnh thuộc dây chuyền “dở dang” đã được sửa nhãn thì nó có khả năng mới kết hợp với các đỉnh j bên Y tạo nên một dây chuyền hoàn chỉnh (vì sẽ xuất hiện những cặp (i,j) mới mà Fx[i] + Fy[j] = C[i,j]).

Tăng cặp ghép: Đổi màu các cung, bắt đầu từ cung nhạt cuối cùng của dây chuyền đổi ngược dần về cung nhạt đầu tiên của dây chuyền.

Tìm dây chuyền: Có thể tìm kiếm theo chiều sâu hoặc tìm kiếm theo chiều rộng. Yêu cầu dây chuyền xuất phát từ một đỉnh nhạt của X, kết thúc bằng một đỉnh nhạt của Y, đồng thời các cung nhạt và đậm liên tiếp xen kẽ nhau (đo cung đầu và cung cuối đều nhạt, nên số cung nhạt lớn hơn số cung đậm là 1).

* Nếu là bài toán tìm tổng nhỏ nhất thì đổi dấu C[i,j] và cuối cùng đổi dấu tổng hoặc khởi trị C[i,j] = vô cùng, nhãn ban đầu  i  X: Fx[i] = Min { C[i,j]  j  Y}, Fy[j] = 0,  j Y. Lượng sửa nhãn m = Min { C[i,j] – Fx[i] – Fy[j] }

Một phần của tài liệu (LUẬN văn THẠC sĩ) bài toán tìm bộ ghép cực đại trên đồ thị, ứng dụng giải một số bài toán trong thực tế (Trang 37 - 40)

Tải bản đầy đủ (PDF)

(80 trang)