1. Trang chủ
  2. » Tất cả

Skkn chuyên đề cặp ghép trong đồ thị không có trọng số

40 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

CẶP GHÉP TRONG ĐỒ THỊ KHƠNG CĨ TRỌNG SỐ A, Định nghĩa cặp ghép Xét hai tập hữu hạn X, Y gồm n phần tử: X = {x1, x2, ,xn} Y = {y1, y2, ,yn} Cặp phần tử (x,y) với x thuộc X, y thuộc Y gọi cặp ghép Hai cặp ghép (x,y) (x’, y’) gọi rời x # x’ y # y’ Tập M gồm cặp ghép rời gọi tập cặp ghép { Thông thường toán xây dựng cặp ghép tiếp cận theo hướng thỏa mãn điều kiện ghép cặp đấy, người ta quan tâm đến khả ghép cặp tối đa, lượng hoá việc ghép cặp, người ta quan tâm đến phương án ghép cặp tối ưu theo giá trị lượng hố } Vì số tập cặp ghép hữu hạn, nên phương pháp xây dựng đơn giản thử tất khả Tuy nhiên, số khả lớn Vì thế, phải tìm kiếm thuật giải thật hữu hiệu, dễ cài đặt chương trình có tính khả thi cao Bài tốn tìm cặp ghép đầy đủ tối ưu a Giới thiệu tốn: Bài tốn tìm cặp ghép đầy đủ tối ưu có nhiều mơ hình ứng dụng thực tế Một mơ hình người ta quan tâm đến việc ghép cặp cho có hiệu Để lượng hoá việc ghép phần tử x thuộc X với phần tử y thuộc Y, người ta đưa vào ma trận số Cij (i,j = 1, 2, , n) với ý nghĩa Cij mô tả hiệu việc ghép xi với yj Bài toán đặt là: Xây dựng tập cặp ghép đầy đủ có tổng hiệu lớn Bài tốn vừa nêu thường phát biểu dạng mơ hình thực tế tốn phân cơng: Bài tốn phân cơng: Có n người n cơng việc Biết Cij số tiền làm giao công việc j cho người i thực Hãy tìm cách phân cơng người việc để tổng số tiền làm lớn b Định lý cặp ghép: Việc xây dựng tập cặp ghép đầy đủ tối ưu dựa vào dấu hiệu nhận biết tập cặp ghép đầy đủ tối ưu Dĩ nhiên việc thử dấu hiệu việc so sánh với tất cặp ghép, mà phải xây dựng mang tính khả thi Để làm điều này, người ta xây dựng hàm số F, xác định tập phần tử xi thuộc X, yj thuộc Y, mà ta gọi nhãn phần tử Nhãn F gọi chấp nhận thoả mãn bất đẳng thức skkn F(xi)+F(yj)>=Cij với xi thuộc X, yj thuộc Y Tập cặp ghép M nhãn F gọi tương thích với thoả mãn đẳng thức F(xi)+F(yj)=Cij với xi thuộc X, yj thuộc Y Nói riêng, tập cặp ghép rỗng xem tương thích với nhãn Định lý: Tập cặp ghép đầy đủ M tối ưu tồn nhãn F chấp nhận tương thích với c Thuật tốn Kuhn-Munkres: Nội dung chủ yếu phương pháp xuất phát từ tập cặp ghép chưa đầy đủ (có thể rỗng), ta tăng dần số cặp ghép cho trở thành đầy đủ, cặp ghép thu đồng thời thoả mãn tính tối ưu Có nhiều hình thức trình bày phương pháp Dưới cách trình bày ngơn ngữ đồ thị kèm với việc dùng thuật tốn tìm đường Giả sử F nhãn chấp nhận M tập cặp ghép tương thích với F Xem phần tử X Y đỉnh đồ thị có hướng hai phía Các cạnh đồ thị xác định tuỳ thuộc nội dung nhãn F tập cặp ghép M sau: - Mỗi cặp phần tử xi thuộc X, yj thuộc Y thoả mãn đẳng thức F(xi)+F(yj) = Cij xác định cạnh đồ thị - Cạnh có hướng từ X sang Y cặp (xi,yj) khơng thuộc M ngược lại Đồ thị xây dựng theo quy tắc vừa nêu gọi đồ thị cân tương ứng với F, M ký hiệu G(F, M) Bước Khởi tạo: Xây dựng nhãn F chấp nhận sau: F(xi):=Max{Cij, yj thuộc Y} xi thuộc X F(yj):=0 yj thuộc Y M tập cặp ghép rỗng Bước Tìm đỉnh tự thuộc X: Tìm đỉnh u thuộc X chưa ghép cặp Nếu khơng cịn đỉnh X chưa ghép cặp kết thúc: tập cặp ghép M hành tập cặp ghép đầy đủ tối ưu Trái lại sang bước Bước Tìm đường tăng cặp ghép: Xuất phát từ u, thực việc tìm kiếm đồ thị G(F, M) Kết tìm kiếm có hai trường hợp: skkn - Nếu đến đỉnh z thuộc Y chưa ghép cặp ghi nhận đường từ u đến z chuyển sang bước tăng cặp ghép đường - Nếu không tồn đường chuyển sang bước sửa nhãn F Bước Tăng cặp ghép: điều chỉnh M sau: - Giữ nguyên cặp ghép M nằm đường tăng cặp ghép - Trên đường tăng cặp ghép, bỏ cặp ghép M cạnh ngược thêm vào M cặp ghép cạnh thuận Sau bước này, số cặp ghép thuộc M tăng thêm đỉnh u bảo toàn Sau quay bước để lặp lại vởi đỉnh tự khác Bước Sửa nhãn: Gọi S tập đỉnh thuộc X T tập đỉnh thuộc Y đến trình tìm kiếm bước Việc sửa nhãn F tiến hành sau: - Tìm lượng sửa nhãn: d:= min{F(xi) + F(yj) - Cij, xi thuộc S, yj thuộc T} - Gán lại nhãn: F(xi):=F(xi) - d với xi thuộc S F(yj):=f(yj) + d với yj thuộc T Sau đó, quay bước để lặp lại việc tìm đường tăng cặp ghép Chú ý rằng, sau thay đổi, nhãn F giữ nguyên tính chấp nhận tính tương thích với M Ngồi có thêm cặp (xi, yj) thoả mãn F(xi)+ F(yj) = C ij, thế, sau số lần sửa nhãn chắn tăng cặp ghép Độ phức tạp thuật toán O(n3) Code Nguyễn Tiến Trung Kiên #include #include #include #include using namespace std; skkn const int N = 102; int n, m, Assigned[N]; int Visited[N], t=0; vector a[N]; bool visit(int u) { if (Visited[u]!=t) Visited[u]=t; else return false; for (int i=0; int v=a[u][i]; i++) if (!Assigned[v] || visit(Assigned[v])) { Assigned[v]=u; return true; } return false; } main() { scanf("%d%d", &m, &n); int x, y; while (scanf("%d%d", &x, &y) > 0) a[x].push_back(y); for (int i=1; i

Ngày đăng: 13/02/2023, 08:45

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w