Graph05 graphmatching Bài toán ghép cặp

43 8 0
Graph05 graphmatching  Bài toán ghép cặp

Đ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

Thuật toán ghép cặp của Edmonds (còn gọi là thuật toán bông hoa) là một thuật toán trong lý thuyết đồ thị để tìm cặp ghép cực đại trong đồ thị. Thuật toán được tìm ra bởi Jack Edmonds năm 1961,1 và xuất bản năm 1965.2 Cho trước một đồ thị vô hướng G = (V, E), thuật toán tìm ra cặp ghép M sao cho mỗi đỉnh trong V kề với tối đa một cạnh trong M và |M| là lớn nhất có thể. Cặp ghép được xây dựng bằng cách khởi đầu từ cặp ghép rỗng và tăng dần lên bằng các đường tăng. Không như cặp ghép cho đồ thị hai phía, ý tưởng mới quan trọng nhất ở đây là có thể thu gọn một chu trình lẻ (bông hoa) thành một đỉnh, và việc tìm kiếm được thực hiện trên đồ thị đã thu gọn. Thuật toán này là chứng minh đầu tiên cho việc có thể tìm cặp ghép cực đại trong thời gian đa thức. Một đóng góp quan trọng nữa là nó giúp mô tả đa diện quy hoạch tuyến tính của bài toán cặp ghép, từ đó xây dựng thuật toán tìm cặp ghép trọng số nhỏ nhất.3 Theo Alexander Schrijver, một điểm nổi bật nữa là đa diện này là đa diện đầu tiên được chứng minh là nguyên không suy ra trực tiếp từ đơn môđula hoàn toàn, và mô tả của nó là một bước đột phá trong tổ hợp đa diện.4

Bài toán ghép cặp Graph Matching Graph Matching Bài toỏn ghộp cp trờn th Giả sử G=(V,E) đồ thị vô hớng, cạnh (v,w) đợc gán với số thực c(v,w) gọi trọng số Định nghĩa Cặp ghép M đồ thị G tập cạnh đồ thị hai cạnh có đỉnh chung    Sè c¹nh M - kÝch thíc, Tổng trọng số cạnh M - trọng lợng cặp ghép Cặp ghép với kích thớc lớn đợc gọi cặp ghép cực đại Cặp ghép với trọng lợng lớn đợc gọi cặp ghép lớn Cặp ghép đợc gọi đầy đủ (hoàn hảo) đỉnh đồ thị đầu mút cạnh cặp ghép Graph Matching Hai bi toỏn Bài toán cặp ghép cực đại: Tìm cặp ghép với kích thớc lớn đồ thị G Bài toán cặp ghép lớn nhất: Tìm cặp ghép với trọng lợng lớn đồ thị G Ta hạn chế xét toán đặt ®å thÞ hai phÝa G = (X ∪ Y, E) Graph Matching Ví dụ Cặp ghép cực đại cặp ghép Cặp ghép Graph Matching Cặp ghép không Cặp ghép hồn hảo Ví dụ 12 x1 y1 x2 y2 x3 y3 x4 y4 Cặp ghép lớn nhấấ t: M = {(x1, y1), (x2, y3), (x3, y2), (x4, y4)} Có trọng lượng 29 Graph Matching Bài toán cặp ghép cực đại đồ hai 1phía Xét đồ thị thị hai phía G = (X Y, E) Cặp ghép tập cạnh mà hai cạnh có chung đỉnh Bài toán: Tìm cặp ghép kích thớc lớn 10 Graph Matching Qui Bài toán luồng cực đại s 10 Mỗi cung (s, i) có kntq Mỗi cung (j, t) có kntq Graph Matching t Mỗi cạnh thay cung có kntq Tìm luồng cực đại s 10 t Luồng cực đại từ s->t có giá trị Cặp ghép cực đại có kích thước Graph Matching Bài toán cặp ghép cực đại đồ thị hai phía Giả sử M cặp ghép G Nếu cạnh e = (x, y) M, ta nói e cạnh cặp ghép (hay cạnh đậm) đỉnh x, y đỉnh đậm (hay không tự do) Nếu cạnh e = (x, y) M, ta nói e cạnh nhạt đỉnh x, y đỉnh nhạt (hay tù do) Graph Matching Đường tăng cặp ghép Mét đờng đồ thị G mà hai cạnh liên tiếp không đậm hay nhạt đợc gọi đờng luân phiên đậm/nhạt (hay gọi ngắn gọn đờng luân phiên) Đờng luân phiên đỉnh tự thuộc tập X kết thúc đỉnh tự thuộc tập Y đợc gọi đờng tăng cặp ghép Graph Matching 10 Thut toỏn Bớc 0: Tìm phép gán nhÃn chấp nhận đợc f Bớc 1: Xây dựng đồ thị cân Gf Bớc 2: Tìm cặp ghép cực đại M Gf Bớc 3: Nếu M cặp ghép đầy đủ cặp ghép lớn cần tìm Thuật toán kết thúc Bớc 4: Gọi S tập đỉnh tự X Thực tìm kiếm từ đỉnh S Gọi T tập đỉnh Y đợc thăm trình tìm kiếm Bổ sung đỉnh X đợc thăm trình tìm kiếm vào S Bớc 5: Tiến hành điều chỉnh nhÃn f ta bổ sung đợc cạnh vào Gf tìm đợc đờng tăng, bổ sung đỉnh đợc thăm vào S T t ơng ứng nh đà mô tả Tăng cặp ghép M quay lại bớc Graph Matching 29 Tng hiu qu Để có đợc thuật toán với đánh giá thời gian tính tốt hơn, vấn đề đặt làm tính đợc giá trị lần sửa nhÃn pha điều chỉnh cách nhanh chóng Ta xác định độ lệch cạnh theo công thức slack(x, y) = f(x) + f(y) – c(x, y) Graph Matching 30 Tăng hiệu Khi ®ã λ = slack(x, y) Rõ ràng việc tính trực tiếp * theo công thức đòi hỏi thời gian x S , y T O(n2) Bây giờ, với đỉnh T* ta ghi nhận lại cạnh với độ lệch nhỏ nhÊt slack(yj ) = minslack(xi , yj ) xi ∈S Graph Matching 31 Tng hiu qu Việc tính giá trị độ lệch slack(yj) đòi hỏi thời gian O(n2) đầu pha điều chỉnh Khi tiến hành pha điều chỉnh ta sửa lại tất độ lệch thời gian O(n) chúng bị thay đổi giá trị (do nhÃn đỉnh S giảm đồng loạt giá trị ) Khi đỉnh x đợc chuyển từ S* sang S ta cần tính lại độ lệch đỉnh T*, việc đòi hỏi thời gian O(n) Tuy nhiên kiện đỉnh đợc chuyển từ S* sang S xảy nhiều n lần Nh vậy, pha điều chỉnh cài đặt với thời gian O(n2) Do có không n pha điều chỉnh thuật toán, nên cách cài đặt cho ta thuật to¸n víi thêi gian tÝnh O(n3) Graph Matching 32 Ví dụ Xét toán với ma trận hiệu quaủ Graph Matching 33 Ví dụ Bắấ t đấề u từ phép gán nhãn Đồ thị cân Gf CỈp ghÐp cùc đại tìm đợc M = {(x1,y2), (x2,y1), (x4, y4) } Tìm kiếm theo chiều rộng đỉnh tự x3 ta cã Graph 34 S= { x2Matching , x3 }, T = {y1} Ví dụ TÝnh λ = {f(x)+f(y)-w(x,y): x∈ {x2, x3}, y ∈ {y2, y3, y4} } = Tiến hành sửa nhÃn, ta đến phÐp g¸n nh·n míi Graph Matching 35 Ví dụ Theo đờng tăng cặp ghép x3, y3, x4, y4 ta tăng cặp ghép M thành cặp ghép đầy đủ M ={(x1,y2), (x3,y1), (x2,y3), (x4,y4)}, đồng thời cặp ghép tối u víi träng lỵng w(M) = + + + = 13 Graph Matching 36 Cài đặt Pascal const maxn = 170; type var data1=array [1 maxn,1 maxn] of integer; data2=array [1 2*maxn] of integer; data3=array [1 2*maxn] of longint; c: data1; px, py, q, queue: data2; a, b, f: data3; n, n2, k, u, z: integer; Graph Matching 37 Khởi tạo procedure init; var i, j: integer; begin n2:= n+n; fillchar(f,sizeof(f),0); for i:=1 to n for j:=1 to n if f[i]0 then dec(f[i],d); for j:=n+1 to n2 if q[j]>0 then inc(f[j],d); end; Graph Matching 41 Main Procedure procedure Solve; begin init; while FreeNodeFound begin while not FoundIncPath suanhan; Tangcapghep; end; end; Graph Matching 42 Graph Matching 43 ... trọng lợng cặp ghép Cặp ghép với kích thớc lớn đợc gọi cặp ghép cực đại Cặp ghép với trọng lợng lớn đợc gọi cặp ghép lớn Cặp ghép đợc gọi đầy đủ (hoàn hảo) đỉnh đồ thị đầu mút cạnh cặp ghép Graph... Matching Hai bi toỏn Bài toán cặp ghép cực đại: Tìm cặp ghép với kích thớc lớn đồ thị G Bài toán cặp ghép lớn nhất: Tìm cặp ghép với trọng lợng lớn đồ thị G Ta hạn chế xét toán đặt đồ thị hai... phía G = (X Y, E) Graph Matching Ví dụ Cặp ghép cực đại cặp ghép Cặp ghép Graph Matching Cặp ghép không Cặp ghép hồn hảo Ví dụ 12 x1 y1 x2 y2 x3 y3 x4 y4 Cặp ghép lớn nhấấ t: M = {(x1, y1), (x2,

Ngày đăng: 28/05/2021, 16:16

Mục lục

    Bi toỏn ghộp cp trờn th

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

    Qui về Bài toán luồng cực đại

    Tỡm lung cc i

    ng tng cp ghộp

    Thuật toán tìm cặp ghép cực đại

    Bài toán phân công

    Qui v bi toỏn cp ghộp ln nht

    Cơ sở thuật toán

    Tiờu chun ti u

Tài liệu cùng người dùng

Tài liệu liên quan