Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

Chng 10.

B ghp cc i trn th hai pha


10.1. th hai pha
th v hng = (, ) c gi l th hai pha nu tp nh ca n c th chia lm
hai tp con ri nhau: v sao cho mi cnh ca th u ni mt nh thuc vi mt
nh thuc . Khi ngi ta cn k hiu = ( , ). thun tin trong trnh by, ta gi
cc nh thuc l cc _nh v cc nh thuc l cc _nh.

Hnh 10-1. th hai pha

Mt th v hng l th hai pha nu v ch nu tng thnh phn lin thng ca n l


th hai pha. kim tra mt th v hng lin thng c phi th hai pha hay khng, ta
c th s dng mt thut ton tm kim trn th (BFS hoc DFS) bt u t mt nh bt
k. t:
{tap cac nh n c t qua mt s chan canh}
{tap cac nh n c t qua mt s l canh}
Nu tn ti cnh ca th ni hai nh hoc hai nh th th ch khng phi
th hai pha, ngc li th ch l th hai pha vi cch phn hoch tp nh thnh hai
tp , trn.
th hai pha gp rt nhiu m hnh trong thc t. Chng hn quan h hn nhn gia tp
nhng ngi n ng v tp nhng ngi n b, vic sinh vin chn trng, thy gio chn
tit dy trong thi kho biu v.v

10.2. Bi ton
Ch th hai pha = ( , ). Mt b ghp (matching) ca l mt tp cc cnh i mt
khng c nh chung. C th coi mt b ghp l mt tp sa ch trn th ( , ),
mi nh c bc khng qu 1.
Vn t ra l tm mt b ghp ln nht (maximum matching) (c nhiu cnh nht) trn
th hai pha ch trc.
10.3. M hnh lung
Ta xy dng mng t th bng cch nh hng cc cnh ca thnh cung t sang
. Thm v nh pht v cc cung ni t ti cc _nh, thm v nh thu v cc cung
ni t cc _nh ti , sc cha ca tt c cc cung c t bng 1.
Xt mt lung trn mng c lung trn cc cung l s nguyn, khi c th thy rng nhng
cung c lung bng 1 t sang s tng ng vi mt b ghp trn . Bi ton tm b ghp
cc i trn c th gii quyt bng cch tm lung nguyn cc i trn v chn ra cc
cung mang lung 1 ni t sang .

1 1

2 2

3 3

Hnh 10-2. M hnh lung ca bi ton tm b ghp cc i trn th hai pha.

Chng ta s phn tch mt s c im ca ng tng lung trng trng hp ny tm ra


mt cch ci t n gin hn.
Xt th hai pha = ( , ) v mt b ghp trn .
Nhng nh thuc gi l nhng nh ghp (matched vertices), nhng nh khng
thuc gi l nhng nh cha ghp (unmached vertices).
Nhng cnh thuc gi l nhng cnh ghp, nhng cnh khng thuc c gi l
nhng cnh cha ghp.
Nu nh hng li nhng cnh ca th thnh cung: Nhng cnh cha ghp nh
hng t sang , nhng cnh ghp nh hng ngc li t v . Trn th nh
hng , mt ng i c gi l ng pha (alternating path) v mt ng i t
mt _nh cha ghp ti mt _nh cha ghp gi l mt ng m (augmenting
path).
Dc trn mt ng pha, cc cnh ghp v cha ghp xn k nhau. ng m cng l mt
ng pha, i qua mt s l cnh, trng s cnh cha ghp nhiu hn s cnh ghp
ng mt cnh.

V d vi th hai pha trong Hnh 10-3 v mt b ghp {(1 , 1 ), (2 , 2 )}. ng i


3 , 2 , 2 , 1 l mt ng pha, ng i 3 , 2 , 2 , 1 , 1 , 3 l mt ng m.
1 1

2 2

3 3

Hnh 10-3. th hai pha v cc cnh c nh hng theo mt b ghp

ng m thc cht l ng tng lung vi gi tr thng d 1 trn m hnh lung. nh l


9-11 (mi quan h gia lung cc i, ng tng lung v lt ct hp nht) ch ra rng
iu kin cn v mt b ghp l b ghp cc i l khng tn ti ng m ng vi
.
Nu tn ti ng m ng vi b ghp , ta m rng b ghp bng cch: dc trn ng
loi b nhng cnh ghp khi v thm nhng cnh cha ghp v . B ghp mi thu
c s c lc lng nhiu hn b ghp c ng mt cnh. y thc cht l php tng lung
dc trn ng trn m hnh lung.

10.4. Thut ton ng m


T m hnh lung ca bi ton, chng ta c th xy dng c thut ton tm b ghp cc i
da trn c ch tm ng m v tng cp: Thut ton khi to mt b ghp bt k trc khi
bc vo vng lp chnh. Ti mi bc lp, ng m (thc cht l mt ng i t mt
_nh cha ghp ti mt _nh cha ghp) c tm bng BFS hoc DFS v b ghp s c
m rng da trn ng m tm c.

M := Mt b ghp bt k, chng hn: ;


while Tm c ng m P do
Dc trn ng P:
- Loi b nhng cnh ghp khi M
- Thm nhng cnh cha ghp vo M

V d vi th trong Hnh 10-3 v b ghp = {(1 , 1 ), (2 , 2 )}, thut ton s tm c


ng m:
3 2
2 1
1 3

Dc trn ng m ny, ta loi b hai cnh (2 , 2 ) v (1 , 1 ) khi b ghp v thm vo
b ghp ba cnh (3 , 2 ), (2 , 1 ), (1 , 3 ), c b ghp mi 3 cnh. th vi b ghp
mi khng cn nh cha ghp (khng cn ng m) nn y chnh l b ghp cc i
(Hnh 10-4).
1 1 1 1

2 2 2 2

3 3 3 3

Hnh 10-4. M rng b ghp

10.5. Ci t
Chng ta s ci t thut ton tm b ghp cc i trn th hai pha = ( , ), trong
|| = , || = v || = . Cc _nh c nh s t 1 ti v cc _nh c nh
s t 1 ti . Khun dng Input/Output nh sau:
Input
Dng 1 cha ba s nguyn dng , , ln lt l s _nh, s _nh v s cnh ca
th hai pha. (, 104 ; 106 ).
dng tip theo, mi dng cha hai s nguyn dng , tng ng vi mt cnh
( , ) ca th.
Output
B ghp cc i trn th.
Sample Input Sample Output
3 3 5 1: x[2] - y[1]
3 2 2: x[3] - y[2] 1 1
2 2 3: x[1] - y[3]
2 1
1 3 2 2
1 1

3 3

10.5.1. Biu din th hai pha v b ghp


th hai pha = ( , ) s c biu din bng cch danh sch k ca cc _nh. C
th l mi nh s c ch tng ng vi mt danh sch cc _nh k vi .
B ghp trn th hai pha c biu din bi mng [1 ], trng [] l
ch s ca _nh ghp vi nh . Nu l nh cha ghp, ta gn [] 0.
10.5.2. Tm ng m
ng m thc cht l mt ng i t mt _nh cha ghp ti mt _nh cha ghp trn
th nh hng. Ta s tm ng m ti mi bc bng thut ton DFS:
Bt u t mt nh cha ghp, trc ht ta nh du cc _nh bng mng
[1 ] trng [] = True nu nh cha thm v [] = False nu
nh thm (ch cn nh du cc _nh).
Thut tn DFS tm ng m xut pht t c thc hin bng mt th tc quy
(), th tc ny s qut tt c nhng nh cha thm ni t (d nhin qua mt
cnh cha ghp), vi mi khi xt n mt nh , trc ht ta nh du thm . Sau :
Nu ghp, da vo s kin t ch i n c [] qua mt cnh ghp
hng t v , li gi quy ([]) c thc hin thm lun nh
[] (thm lin hai bc).
Ngc li nu cha ghp, tc l thut tn DFS tm c ng m kt thc , ta
thot khi dy chuyn quy. Qu trnh thot dy chuyn quy thc cht l ln ngc
ng m, ta s li dng qu trnh ny m rng b ghp da trn ng m.
thut ton hot ng hiu qu hn, ta s dng lin tip cc pha x l l: K hiu l tp
cc _nh cha ghp, mi pha s c gng m rng b ghp da trn khng ch mt m nhiu
ng m khng c nh chung xut pht t cc nh khc nhau thuc . C th l mt pha
s khi to mng nh du [1 ] bi gi tr True, sau qut tt c nhng nh
, th tm ng m xut pht t v m rng b ghp nu tm ra ng m. Trong mt
pha c th c nhiu _nh c ghp thm.

procedure Visit(xX); //Thut ton DFS


begin
for y: (x, y)E do //Qut cc Y_nh k x
if avail[y] then //y cha thm, ch (x, y) chc chn l cnh cha ghp
begin
avail[y] := False; //nh du thm y
if match[y] = 0 then Found := True //y cha ghp, dng c bo tm thy ng m
else Visit(match[y]); //y ghp, gi quy tip tc DFS
if Found then // Ngay khi ng m c tm thy
begin
match[y] := x; //Chnh li b ghp theo ng m
Exit; //Thot lun, lnh Exit t y s thot c dy chuyn quy
end;
end;
end;

begin //Thut ton tm b ghp cc i trn th hai pha


Khi to mt b ghp bt k, chng hn ;
X* := Tp cc nh cha ghp;
repeat //Lp cc pha x l theo l
Old := |X*|; //Lu s nh cha ghp khi bt u pha
for yY do avail[y] := True; //nh du mi Y_nh cha thm
for xX* do
begin
Found := False; //C bo cha tm thy ng m
Visit(x); //Tm ng m bng DFS
if Found then X* := X* - {x}; //x c ghp, loi b x khi X*
end;
until |X*| = Old; //Lp cho ti khi khng th ghp thm
end;

BMATCH.PAS Tm b ghp cc i trn th hai pha


{$MODE OBJFPC}
program MaximumBipartiteMatching;
const
maxN = 10000;
maxM = 1000000;
type
TAdj = record //Cu trc nt trong danh sch k
y: Integer; //nh
link: Integer; //nt k tip
end;
var
p, q, m: Integer;
adj: array[1..maxM] of TAdj;
head: array[1..maxN] of Integer;
match: array[1..maxN] of Integer;
avail: array[1..maxN] of Boolean;
list: array[1..maxN] of Integer;
nList: Integer;

procedure Enter; //Nhp d liu


var
i: Integer;
x, y: Integer;
begin
ReadLn(p, q, m);
FillChar(head[1], p * SizeOf(head[1]), 0);
for i := 1 to m do
begin
ReadLn(x, adj[i].y);
adj[i].link := head[x]; head[x] := i;
end;
end;

procedure Init; //Khi to b ghp rng


var
i: Integer;
begin
FillChar(match[1], q * SizeOf(match[1]), 0);
for i := 1 to p do list[i] := i; //Mng list cha cc X_nh cha ghp
nList := p;
end;
procedure SuccessiveAugmentingPaths;
var
Found: Boolean;
Old, i: Integer;

procedure Visit(x: Integer); //Thut ton DFS t x X


var
i: Integer;
begin
i := head[x]; //T u danh sch k ca x
while i <> 0 do
with adj[i] do
begin
if avail[y] then //y cha thm, hin nhin (x, y) l cnh cha ghp
begin
avail[y] := False; //nh du thm y
if match[y] = 0 then Found := True //y cha ghp th bo hiu tm thy ng m
else Visit(match[y]); //Thm lun match[y] X (thm lin 2 bc)
if Found then //Tm thy ng m
begin
match[y] := x; //Chnh li b ghp
Exit; //Thot dy chuyn quy
end;
end;
i := link; //Chuyn sang nh k tip trong danh sch cc nh k x
end;
end;

begin
repeat
Old := nList; //Lu li s X_nh cha ghp
FillChar(avail[1], q * SizeOf(avail[1]), True);
for i := nList downto 1 do
begin
Found := False;
Visit(list[i]); //C ghp list[i]
if Found then //Nu ghp c
begin //Xa list[i] khi danh sch cc X_nh cha ghp
list[i] := list[nList];
Dec(nList);
end;
end;
until Old = nList; //Khng th ghp thm X_nh no na
end;

procedure PrintResult; //In kt qu


var
j, k: Integer;
begin
k := 0;
for j := 1 to q do
if match[j] <> 0 then
begin
Inc(k);
WriteLn(k, ': x[', match[j], '] - y[', j, ']');
end;
end;

begin
Enter;
Init;
SuccessiveAugmentingPaths;
PrintResult;
end.

10.6. nh gi
Nu th c nh ( = + ) v cnh, do mng nh du [1 ] ch c khi to
mt ln trong pha, thi gian thc hin ca mt pha s bng ( + ) (suy ra t thi gian thc
hin gii thut ca DFS).
Cc pha s c thc hin lp cho ti khi = hoc khi mt pha thc hin xong m khng
ghp thm c nh no. Thut ton cn khng qu ln thc hin pha x l l, nn thi
gian thc hin gii thut tm b ghp cc i trn th hai pha l (2 + ) trng trng
hp xu nht. Cn trng trng hp tt nht, ta c th tm c b ghp cc i ch qua mt
lt thc hin pha x l l, tc l bng thi gian thc hin gii thut DFS. Cn lu rng y
ch l nhng nh gi ln v cn trn ca thi gian thc hin. Thut ton ny chy rt nhanh
trn thc t nhng hin ti ti cha bit nh gi n cht hn.
tng tm mt lc nhiu ng m khng c nh chung c nghin cu trong bi ton
lung cc i bi Dinic (Dinic, 1970). Da trn tng ny, Hopcroft v Karp (Hopcroft &
Karp, An n^(5/2) algorithm for maximum matchings in bipartite graphs, 1973) tm ra
thut ton tm b ghp cc i trn th hai pha trong thi gian (||||). Thut ton
Hopcroft-Karp trc ht s dng BFS phn lp cc nh th di ng i ngn nht
sau mi s dng DFS trn rng cc cy BFS x l l tng t nh cch lm ca chng
ta trn.

Bi tp 10-1
C th v vic. Mi th cho bit mnh c th lm c nhng vic no, v mi vic khi giao
cho mt th thc hin s c hn thnh xng trng ng 1 n v thi gian. Ti mt thi
im, mi th ch thc hin khng qu mt vic.
Hy phn cng cc th lm cc cng vic sao cho:
Mi vic ch gia ch ng mt th thc hin.
Thi gian hon thnh tt c cc cng vic l nh nht. Ch l cc th c th thc hin
song song cc cng vic c giao, vic ca ai ngi ny lm, khng nh hng ti ngi
khc.
Bi tp 10-2
Mt b ghp trn th hai pha gi l ti i nu vic b sung thm bt c cnh no vo
s lm cho khng cn l b ghp na.
a) Ch ra mt v d v b ghp ti i nhng khng l b ghp cc i trn th hai pha
b) Tm thut ton (||) xc nh mt b ghp ti i trn th hai pha
c) Chng minh rng nu v l hai b ghp ti i trn cng mt th hai pha th ||
2|| v || 2||. T ch ra rng nu thut tn ng m c khi to bng mt b
ghp ti i th s lt tm ng m gim i t nht mt na so vi vic khi to bng b
ghp rng.
Bi tp 10-3 (Ph nh Vertex Cover)
Ch th hai pha = ( , ). Bi tn t ra l hy chn ra mt tp gm t nht cc
nh sao cho mi cnh u lin thuc vi t nht mt nh thuc .
Bi ton tm ph nh nh nht trn th tng qut l NP-y , hin ti cha c thut ton
a thc gii quyt. Tuy vy trn th hai pha, ph nh nh nht c th tm c da
trn b ghp cc i.
Da vo m hnh lung ca bi ton b ghp cc i, gi s cc cung (, ) c sc cha +,
cc cung (, ) v (, ) c sc cha 1. Gi (, ) l lt ct hp nht ca mng. t =
{ } { }.
a) Chng minh rng l mt ph nh
b) Chng minh rng l ph nh nh nht
c) Gi s ta tm c l b ghp cc i trn th hai pha, khi chc chn khng cn
tn ti ng m tng ng vi b ghp . t:
= { : cha ghp, n c qua mt ng pha}
= { : a ghp va nh ghp vi khng thuc }
Chng minh rng l ph nh nh nht .
Bi tp 10-4 (Tp c lp cc i)
Ch th hai pha = ( , ). Bi tn t ra l hy chn ra mt tp gm nhiu nh
sa ch hai nh bt k ca khng k nhau.
a) Chng minh rng nu l tp c lp cc i th || = || + || || vi || l s cnh
ca b ghp cc i
b) Xy dng thut ton tm tp c lp cc i trn th hai pha (Gi : Quy v bi ton tm
ph nh)
Bi tp 10-5
Cho l mt b ghp trn th hai pha = ( , ). Gi l s _nh cha ghp. Chng
minh rng ba mnh sau y l tng ng:
l b ghp cc i.
khng c ng m tng ng vi b ghp .
Tn ti mt tp con ca sao cho |()| = || . y () l tp cc _nh k
vi mt nh n trng (Gi : Chn l tp cc _nh n c t mt _nh
cha ghp bng mt ng pha)
Bi tp 10-6 (nh l Hall)
Cho = ( , ) l th hai pha c || = ||. Chng minh rng c b ghp y (b
ghp m mi nh u c ghp) nu v ch nu || |()| vi mi tp .
Bi tp 10-7 (Ph ng ti thiu)
Cho = (, ) l th c hng khng c chu trnh. Mt ph ng (path cover) l mt tp
cc ng i trn tha mn: Vi mi nh , tn ti duy nht mt ng i trng
cha . ng i c th bt u v kt thc bt c u, tnh c ng i di 0 (ch gm
mt nh). Bi tn t ra l tm ph ng ti thiu (minimum path cover): Ph ng gm
t ng i nht.
Gi l s nh ca th, ta nh s cc nh thuc t 1 ti . Xy dng th hai pha
= ( , ) trng :
= {1 , 2 , }
= {1 , 2 , }
Tp cnh c xy dng nh sau: Vi mi cung (, ) , ta thm vo mt cnh ( , )
(Hnh 10-5)

1 1

2 2
1 2
3 3
1 = 1,3,5
3 4
4 4
2 = 2,4,6
5 6
5 5

6 6

Hnh 10-5. Bi ton tm ph ng ti thiu trn DAG c th quy v bi ton b ghp cc i trn th hai pha.

Gi l mt b ghp trn . Khi to l tp ng i, mi ng i ch gm mt nh


trong , khi l mt ph ng. Xt ln lt cc cnh ca b ghp, mi khi xt ti cnh
( , ) ta t cnh (, ) ni hai ng i trng thnh mt ngKhi thut ton kt thc,
vn l mt ph ng.
a) Chng minh tnh bt bin vng lp: Ti mi bc khi xt ti cnh ( , ) , cnh (, )
chc chn s ni hai ng i trng : mt ng i kt thc v mt ng i khc bt
u . T ch ra tnh ng n ca thut ton. (Gi : mi khi xt ti cnh ( , ) v
t cnh (, ) ni hai ng i ca thnh mt ng th || gim 1. Vy khi thut ton trn
kt thc, || = ||, tc l mun || min th || max).
b) Vit chng trnh tm ph ng cc tiu trn th c hng khng c chu trnh.
c) Ch ra v d thy rng thut tn trn khng ng trng trng hp c chu trnh.
d) Chng minh rng nu tm c thut ton gii bi ton tm ph ng cc tiu trn th
tng qut trong thi gian a thc th c th tm c ng i Hamiltn trn th (nu
c) trong thi gian a thc. (L thuyt v phc tp tnh tn chng minh c rng
trn th tng qut, bi tn tm ng i Hamiltn l NP-y v bi ton tm ph ng
cc tiu l NP-kh. C ngha l mt thut ton vi phc tp a thc gii quyt bi ton
ph ng cc tiu trn th tng qut s l mt pht minh ln v ng ngc nhin).
Bi tp 10-8
T tm hiu v thut ton Hopcroft-Karp. Ci t v so snh tc thc t vi thut ton trong bi.
Bi tp 10-9 (B ghp cc i trn th chnh quy hai pha)
Mt th v hng = (, ) gi l th chnh quy bc (-regular graph) nu bc ca
mi nh u bng . th chnh quy bc 0 l th khng c cnh n, th chnh quy bc
1 th cc cnh to thnh b ghp y , th chnh quy bc 2 c cc thnh phn lin thng
l cc chu trnh n.
a) Chng minh rng th hai pha = ( , ) l th chnh quy th || = ||.
b) Chng minh rng lun tn ti b ghp y trn th hai pha chnh quy bc ( 1).
c) Tm thut ton (|| log||) xc nh mt b ghp y trn th chnh quy hai pha
bc 1.

You might also like