Bài giảng Toán rời rạc - Phần 2: Lý thuyết đồ thị - Bài toán ghép cặp - Nguyễn Đức Nghĩa
Bài toán ghép cặp
Graph Matching
Graph Matching
1
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.
◼ Sè c¹nh trong M - kÝch thíc,
◼ Tæng träng sè cña c¸c c¹nh trong M - träng lîng cña cÆp ghÐp.
◼ CÆp ghÐp víi kÝch thíc lín nhÊt ®îc gäi lµ cÆp ghÐp cùc ®¹i.
◼ CÆp ghÐp víi träng lîng lín nhÊt ®îc gäi lµ cÆp ghÐp lín nhÊt.
◼ 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 ghÐp.
Graph Matching
2
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).
Graph Matching
3
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
Graph Matching
4
Ví dụ
12
x1
x2
y1
y2
3
4
8
3
x3
x4
y3
y4
2
4
6
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
5
Bµi to¸n cÆp ghÐp cùc ®¹i
trªn ®å thÞ hai phÝa
1
6
7
XÐt ®å thÞ hai phÝa
G = (X Y, E).
2
CÆp ghÐp lµ tËp c¹nh mµ
kh«ng cã hai c¹nh nµo cã
3
4
5
8
9
chung ®Ønh
Bµi to¸n: T×m cÆp ghÐp
kÝch thíc lín nhÊt
10
Graph Matching
6
Qui vÒ Bµi to¸n luång cùc ®¹i
1
2
6
7
s
3
4
5
8
9
t
10
Mỗi cạnh được
thay thế bởi
cung có kntq 1.
Mỗi cung (s, i) có kntq 1.
Mỗi cung (j, t) có kntq 1.
Graph Matching
7
Tìm luồng cực đại
1
2
6
7
s
3
4
5
8
9
t
10
Luồng cực đại từ s->t có giá trị 4.
Cặp ghép cực đại có kích thước 4.
Graph Matching
8
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).
Graph Matching
9
Đườ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.
Graph Matching
10
Định lý Berge
§Þnh lý 1 (Berge C). CÆp gh p M lµ c c ® i khi vµ ch khi kh ng t m
® c ® ng t ng cÆp gh p.
CM:
§iÒu kiÖn cÇn. B»ng ph¶n chøng. Gi¶ sö M lµ cÆp ghÐp cùc ®¹i nhng vÉn t×m
®îc ®êng t¨ng cÆp ghÐp
P x0, y1, x1, y2, ..., xk, y0
trong ®ã x0 vµ y0 lµ c¸c ®Ønh tù do.
Gäi EP lµ tËp c¸c c¹nh cña ®å thÞ n»m trªn ®êng ®i P
EP = { (x0,y1), (y1, x1), ..., (xk, y0) }.
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| +1. M©u thuÉn thu ®îc
®· chøng minh ®iÒu kiÖn cÇn.
Graph Matching
11
Định lý Berge
§iÒu kiÖn ®ñ. Gi¶ sö cÆp ghÐp M cha lµ cÆp ghÐp cùc ®¹i.
Gäi M* lµ cÆp ghÐp cùc ®¹i. XÐt ®å thÞ G’ = (V, MM*).
Râ rµng hai c¹nh liªn tiÕp trong mçi ®êng ®i còng nh mçi
chu tr×nh trong G’ kh«ng thÓ thuéc cïng mét cÆp ghÐp 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µ ®óng víi ®å
thÞ v« híng bÊt kú.
Graph Matching
12
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 trong ®å thÞ G
(cã thÓ b¾t ®Çu tõ M = ).
Bíc lÆp.
◼ KiÓm tra tiªu chuÈn tèi u: NÕu ®å thÞ G kh«ng chøa ®êng
t¨ng cÆp ghÐp th× M lµ cÆp ghÐp 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
M:= (MP) \ (MP),
råi lÆp l¹i bíc lÆp.
Graph Matching
13
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.
§å thÞ GM sÏ ®îc gäi lµ ®å thÞ t¨ng cÆp ghÐp.
DÔ thÊy:
◼ Đêng t¨ng cÆp ghÐp t¬ng øng víi mét ®êng ®i 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 trªn ®å thÞ GM.
◼ Ngîc l¹i, mét ®êng ®i trªn ®å thÞ GM 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×m kiÕm theo chiÒu réng
trªn ®å thÞ GM b¾t ®Çu tõ c¸c ®Ønh tù do thuéc tËp X.
Graph Matching
14
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(n3), trong ®ã n = max (|X|, |Y|).
Graph Matching
15
Cài đặt
Cấu trúc dữ liệu
Var
A : Array[1..100,1..100] of Byte; (* Ma trận kề của đồ thi hai phía G *)
Truoc,
Vo,
(* Ghi nhận đường đi *)
(* Vo[x]- đỉnh được ghép với xX *)
Chong : Array[1..100] of Byte; (* Chong[y]-đỉnh được ghép với y Y *)
N, x0, y0, Cnt : Byte;
Stop : Boolean;
(* Nếu (x, y) M thì Vo[x]=y; Chong[y]=x.
Vo[x]=0 => x là đỉnh nhạt; Chong[y]=0 => y là đỉnh nhạt *)
Graph Matching
16
Tìm đường tăng
Procedure Tim(x:Byte);
Procedure Tim_Duong_Tang;
begin
var y: Byte;
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;
For y:=1 to N do
If (A[x,y]=1)and(Truoc[y]=0)and(y0=0) then
begin
Truoc[y]:=x;
If Chong[y]<>0 then Tim(Chong[y])
else
begin
y0:=y;
Exit;
Stop:=true;
end;
end;
end;
end;
Graph Matching
17
Thủ tục MaxMatching
Procedure Tang;
var temp: Byte;
begin
Procedure MaxMatching;
begin
Stop:=false;
Inc(Cnt);
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;
While Truoc[y0]<>x0 do
begin
Chong[y0]:=Truoc[y0];
Temp:=Vo[Truoc[y0]];
Vo[Truoc[y0]]:=y0;
y0:=Temp;
end;
Chong[y0]:=x0;
Vo[x0]:=y0;
end;
end;
Graph Matching
18
Bµi to¸n ph©n c«ng
Cã n c«ng viÖc vµ n thî. Mçi thî ®Òu cã kh¶
n¨ng thùc hiÖn tÊt c¶ c¸c c«ng viÖc. BiÕt
wij - hiÖu qu¶ ph©n c«ng thî i lµm viÖc j,
(i, j = 1, 2,..., n).
CÇn t×m c¸ch ph©n c«ng thî thùc hiÖn c¸c c«ng
viÖc sao cho mçi thî chØ thùc hiÖn mét viÖc vµ
mçi viÖc chØ do mét thî thùc hiÖn, ®ång thêi tæng
hiÖu qu¶ thùc hiÖn c¸c c«ng viÖc lµ lín nhÊt.
Graph Matching
19
Qui về bài toán cặp ghép lớn nhất
X©y dùng ®å thÞ hai phÝa ®Çy ®ñ G = (XY, E)
◼ X={x1, x2,..., xn} t¬ng øng víi c¸c thî,
◼ Y = {y1, y2,..., yn }- t¬ng øng víi c¸c c«ng viÖc.
Mçi c¹nh (xi, yj) ®îc g¸n cho träng sè w(xi, yj) = wij.
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.
Graph Matching
20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Toán rời rạc - Phần 2: Lý thuyết đồ thị - Bài toán ghép cặp - Nguyễn Đức Nghĩa", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
- bai_giang_toan_roi_rac_phan_2_ly_thuyet_do_thi_bai_toan_ghep.ppt