1. Trang chủ
  2. » Giáo án - Bài giảng

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

43 10 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

Thông tin cơ bản

Tiêu đề Bài toán ghép cặp
Trường học Trường Đại Học
Thể loại Bài báo
Định dạng
Số trang 43
Dung lượng 368 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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

Graph Matching

Trang 2

Bài toỏn ghộp cặp trờn

đồ thị

Giả sử G=(V,E) là đồ thị vô h ớng, trong đó mỗi cạnh (v,w) đ ợc gán với một số thực c(v,w) gọi là trọng số của nó

Định nghĩa Cặp ghép M trên đồ thị G là tập các cạnh của đồ thị trong đó không có hai cạnh nào có đỉnh chung

Cặp ghép đ ợc gọi là đầy đủ (hoàn hảo) nếu mỗi đỉnh

của đồ thị là đầu mút của ít nhất một cạnh trong cặp

Trang 3

Hai bài 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 nhất trong đồ 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

nhất trong đồ thị G

Ta hạn chế xét các bài toán đặt ra trên đồ thị hai phía G = (X

Y, E).

Trang 4

Ví dụ

Cặp ghép cực đại Cặp ghép không là cặp ghép

Cặp ghép Cặp ghép hoàn hảo

Trang 5

8 3

24 6

Trang 6

6 7 8 9 10

Trang 7

Qui về Bài toán luồng

cực đại

1 2 3 4 5

6 7 8 9 10

Mỗi cung (s, i) cú kntq 1.

Mỗi cạnh được thay thế bởi

cung cú kntq 1.

Trang 8

Tìm luồng cực đại

Luồng cực đại từ s->t có giá trị 4.

1 2 3 4 5

6 7 8 9 10

Trang 9

Bài toán cặp ghép cực

đại

trên đồ thị hai phía Giả sử M là một cặp ghép trên G

Nếu cạnh e = (x, y) M, ta nói e là cạnh của cặp ghép (hay cạnh

đậm) và các đỉnh x, y là các đỉnh đậm (hay không tự do)

Nếu cạnh e = (x, y) M, thì ta nói e là cạnh nhạt còn các đỉnh x,

y là các đỉnh nhạt (hay tự do).

Trang 10

Đường tăng cặp ghộp

Một đ ờng đi trên đồ thị G mà trong đó hai cạnh liên tiếp là

không cùng đậm hay nhạt sẽ đ ợc gọi là đ ờng đi luân phiên

đậm/nhạt (hay gọi ngắn gọn là đ ờng đi luân phiên)

Đ ờng đi luân phiên bắt đầu từ một đỉnh tự do thuộc tập X và kết thúc ở một đỉnh tự do thuộc tập Y đ ợc gọi là đ ờng tăng cặp ghép.

Trang 11

Dễ thấy số l ợng cạnh nhạt trong EP là bằng số l ợng cạnh

đậm của nó cộng với 1 Để đơn giản trong phần d ới

đây ta đồng nhất ký hiệu đ ờng đi P với tập cạnh EP

của nó Xây dựng cặp ghép M’ theo qui tắc:

M’ = (MP) \ (MP).

Dễ thấy M’ cũng là cặp ghép và rõ ràng |M’| = |M|

Trang 12

M hoặc M* Vì vậy, mỗi đ ờng đi cũng nh mỗi chu trình trong G’ đều là đ ờng luân phiên

M/M* Do |M*| > |M|, nên rõ ràng là luôn tìm đ

ợc ít nhất một đ ờng đi luân phiên M/M* mà trong đó số l ợng cạnh thuộc M* là lớn hơn số l ợng cạnh thuộc M Đ ờng đi đó chính là đ ờng tăng cặp ghép trên đồ thị G.

Định lý đ ợc chứng minh.

Chú ý: Trong chứng minh định lý ta không sử dụng tính hai phía của G Do đó, Định lý 1 là

Trang 13

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

Đầu vào: Đồ thị vô h ớng G = (V, E).

B ớc khởi tạo Xây dựng cặp ghép M

cực đại, thuật toán kết thúc.

Ng ợc lại, gọi P là một đ ờng tăng cặp ghép xuất phát từ đỉnh tự do x0∈ X, kết thúc ở đỉnh tự

do y0 ∈ Y Tăng cặp ghép theo qui tắc

rồi lặp lại b ớc lặp.

Trang 14

Tỡm đường tăng

Từ đồ thị G ta xây dựng đồ thị có h ớng GM = (XY,

EM) với tập cung EM đ ợc bằng cách định h ớng lại các cạnh của G theo quy tắc sau:

i) Nếu (x,y) ME, thì (y,x) EM;

ii) Nếu (x,y) E \ M, thì (x,y) EM.

Ng ợc lại, một đ ờng đi trên đồ thị G M xuất phát từ một đỉnh tự do

x0 ∈ X kết thúc tại một đỉnh tự do y0 ∈ Y sẽ t ơng ứng với một đ ờng

tăng cặp ghép trên đồ thị G

Vì vậy, để xét xem đồ thị G có chứa đ ờng tăng

cặp ghép hay không, có thể thực hiện thuật toán

từ các đỉnh tự do thuộc tập X.

Trang 15

Thuật toỏn

Sử dụng cách tìm đ ờng tăng cặp ghép theo nhận xét vừa nêu,

từ sơ đồ tổng quát dễ dàng xây dựng thuật toán để giải bài toán tìm cặp ghép cực đại trên đồ thị hai phía với thời gian tính O(n 3 ), trong đó n = max (|X|, |Y|).

Trang 16

Chong : Array[1 100] of Byte; (* Chong[y]-điủ nh được ghép với y Y *)

Trang 17

begin Fillchar(Truoc,Sizeof(Truoc),0); y0:=0;

For x0:=1 to N do begin

If Vo[x0]=0 then Tim(x0);

If y0<>0 then exit;

end;

Stop:=true;

end;

Trang 18

Fillchar(Vo,Sizeof(Vo),0);

Fillchar(Chong,Sizeof(Chong),0); Cnt:=0;

While not Stop do begin

Tim_duong_tang;

If not Stop then Tang;

end;

end;

Trang 20

Qui về bài toỏn cặp ghộp

Khi đó trong ngôn ngữ đồ thị, bài toán phân công có thể phát biểu

nh sau: Tìm trong đồ thị G cặp ghép đầy đủ có tổng trọng số

là lớn nhất Cặp ghép nh vậy đ ợc gọi là cặp ghép tối u.

Trang 21

Cơ sở thuật toán

Ta gọi một phép gán nhãn chấp nhận đ ợc cho các đỉnh của đồ thị G=(XY,E) là

Trang 22

Đồ thị cõn bằng

Giả sử có f là một phép gán nhãn chấp nhận đ ợc, ký hiệu

E f = {(x,y)E: f(x) + f(y) = w(x,y)}.

Ký hiệu G f là đồ thị con của G sinh bởi tập đỉnh XY và tập cạnh E f Ta sẽ gọi G f là đồ thị cân bằng.

Trang 23

Tiờu chuẩn tối ưu

Định lý 2 Giả sử f là phép gán nhãn chấp nhận đ ợc Nếu Gf chứa cặp ghép đầy đủ M*, thì M* là

cặp ghép tối u.

Chứng minh

Giả sử Gf chứa cặp ghép đầy đủ M* Khi đó từ định

nghĩa Gf suy ra M* cũng là cặp ghép đầy đủ của đồ thị

G Gọi w(M*) là trọng l ợng của M*:

Do mỗi cạnh e M* đều là cạnh của Gf và mỗi đỉnh của G

kề với đúng một cạnh của M*, nên

Giả sử M là một cặp ghép đầy đủ tuỳ ý của G, khi đó

Suy ra w(M*) w(M) Vậy M* là cặp ghép tối u.

Trang 24

Sơ đồ thuật toỏn

Ta sẽ bắt đầu từ một phép gán nhãn chấp nhận đ ợc f Xây dựng đồ thị Gf Bắt đầu

Trang 25

Điều chỉnh nhón

Giả sử M là cặp ghép cực đại trong đồ thị Gf và M ch a là cặp ghép đầy đủ của

G Ta cần tìm cách điều chỉnh phép gán nhãn f thoả mãn các yêu cầu đặt ra.

Thực hiện tìm kiếm theo chiều rộng từ các đỉnh tự do trong X Gọi S là các

Trang 26

Điều chỉnh nhãn

Tõ tÝnh chÊt cña thuËt to¸n

t×m kiÕm theo chiÒu réng,

Trang 27

Điều chỉnh nhón

Khi các nhãn trong S bị giảm, các cạnh trong G từ S sang T* sẽ có khả năng gia nhập vào đồ thị cân bằng Gf Ta sẽ tăng λ đến khi có thêm ít nhất một cạnh mới gia nhập đồ thị cân bằng Có hai khả

năng:

ứng, và nh vậy việc tìm kiếm đ ờng tăng sẽ đ ợc tiếp tục mở rộng

ờng tăng cặp ghép, và kết thúc một pha điều chỉnh nhãn.

Trang 28

Điều chỉnh nhón

Ta gọi một pha điều chỉnh là tất cả các lần sửa nhãn cần thiết để tăng đ ợc kích th ớc của cặp

ghép M

Vì sau mỗi pha điều chỉnh kích th ớc của cặp

ghép tăng lên 1, nên ta phải thực hiện nhiều nhất

n pha điều chỉnh

Trong mỗi pha điều chỉnh, do sau mỗi lần sửa

nhãn có ít nhất hai đỉnh mới đ ợc bổ sung vào

danh sách các đỉnh đ ợc thăm, nên ta phải thực

hiện việc sửa nhãn không quá n lần Mặt khác,

trong thời gian O(n2) ta có thể xác định đ ợc cạnh nào từ S sang T* là cạnh gia nhập đồ thị cân

bằng (bằng việc duyệt hết các cạnh) Từ đó suy

ra đánh giá thời gian tính của thuật toán là

O(n )

Trang 29

B ớc 4: Gọi S là tập các đỉnh tự do trong X Thực hiện tìm kiếm từ các đỉnh trong S Gọi T là tập các đỉnh của Y đ ợc thăm trong quá trình tìm

kiếm Bổ sung các đỉnh trong X đ ợc thăm trong quá trình tìm kiếm vào S.

B ớc 5: Tiến hành điều chỉnh nhãn f ta sẽ bổ sung

đ ợc các cạnh vào Gf cho đến khi tìm đ ợc đ ờng

tăng, bổ sung các đỉnh mới đ ợc thăm vào S và T t

ơng ứng nh đã mô tả ở trên Tăng cặp ghép M và quay lại b ớc 3.

Trang 30

Tăng hiệu quả

Để có đ ợc thuật toán với đánh giá thời gian tính tốt hơn, vấn đề

đặt ra là làm thế nào có thể tính đ ợc giá trị λ tại mỗi lần sửa nhãn của pha điều chỉnh một cách nhanh chóng

Ta xác định độ lệch của các cạnh theo công thức

slack(x, y) = f(x) + f(y) – c(x, y).

Trang 31

Tăng hiệu quả

Trang 32

Tăng hiệu 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 có thể sửa lại tất cả

các độ lệch trong thời gian O(n) do chúng bị

thay đổi cùng một giá trị (do nhãn của các

đỉnh trong S giảm đồng loạt đi cùng một giá

trị λ ) Khi một đỉnh x đ ợc chuyển từ S* sang S

ta cần tính lại các độ lệch của các đỉnh trong

T*, việc đó đòi hỏi thời gian O(n) Tuy nhiên sự kiện một đỉnh đ ợc chuyển từ S* sang S chỉ

xảy ra nhiều nhất n lần.

Nh vậy, mỗi pha điều chỉnh có thể cài đặt với thời gian O(n2) Do có không quá n pha điều

chỉnh trong thuật toán, nên cách cài đặt này cho ta thuật toán với thời gian tính O(n3).

Trang 33

Ví dụ

Xét bài toán với ma trận hiệu quaủ

Trang 34

tù do x ta cã

Trang 36

w(M) = 4 + 2 + 5 + 2 = 13.

Trang 37

Cài đặt trên Pascal

Trang 39

function FoundIncPath: boolean;

FoundIncPath:=false;

Tìm đường tăng

Trang 41

for i:=1 to n do

if q[i]>0 then for j:=n+1 to n2 do

if q[j]=0 then

if d>longint(f[i]+f[j]-c(i,j-n)) then

d:=longint(f[i]+f[j]-c(i,j-n)); for i:=1 to n do

if q[i]>0 then dec(f[i],d);

for j:=n+1 to n2 do

if q[j]>0 then inc(f[j],d);

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

TỪ KHÓA LIÊN QUAN

w