Ct on
MC LC21 K thut Find-Union
21.1 Cng vin
81.2 Thnh phn lin thng
131.3 Tnh lin thng
141.4 Chu trnh
171.5 Cy khung
201.6 Cy khung cc tiu
241.7 Rng khung
301.8 Rng khung cc tiu
351.9 Mng
391.10 Van nc
421.11 Cu
471.12 Giao khung
471.13 nh khp
521.14 Lin thng ha
551. 15 Chia i
591.16 Kin
1 K thut Find-Union
K thut Find-Union (Tm-Gp) dng qun l hp ca cc tp ri nhau.
Ta minh ho k thut ny qua bi ton sau:
1.1 Cng vin
C gio dn cc em thiu nhi i chi cng vin. Lp c n em m s ln lt t 1 n n. Vo cng vin, cc bn khi lc nhau, c gio qui nh chia nhm nh sau:
C ln lt c m s ca tng cp hai bn. Hai bn s thuc cng nhm. D nhin, nu bn A v B cng nhm, bn B v C cng nhm th c ba bn A, B v C l cng nhm. C cng qui nh rng bn no c s hiu nh nht trong nhm s lm nhm trng. Sau m ln ghp cp nh vy th cc em c chia thnh my nhm, hy lit k m s ca cc bn trong tng nhm.
Input: text file Park.inp
Dng u tin: hai s nguyn dng n v m,
Dng th i trong s m dng tip theo: mi dng hai s nguyn dng a b l m s ca hai bn c ghp vo cng nhm.
Output: Hin th Dng u tin: k ( s lng nhm
Tip n l k dng, mi dng lit k danh sch mt nhm.
Th dPark.inpOutput ngha: Tng cng cc em c chia thnh 3 nhm. Nhm th nht gm 3 bn c s hiu l 1, 2 v 5; Nhm th hai 3 bn: 3, 4 v 7. Nhm cui cng c 2 bn: 6 v 8.
8 5
2 5
3 7
8 6
5 1
4 3
3
1 2 5
3 4 7
6 8
Thut ton
iu l th trong k thut ny l im nhm trng chnh l em mang s hiu nh nht trong nhm. Lc u, cha ghp cp th mi em to thnh mt nhm ring. Nh vy, lc u ta c n nhm. V mi nhm ch c duy nht 1 em nn chnh em l nhm trng ca chnh mnh. Ta mng tng mi bn j phi bm tht lng bn ng trc i trong cng nhm. Theo qui nh ca c gio th j > i. Ring nhm trng, do c s hiu nh nht nn i t bm tht lng mnh.
Ta s dng mng nguyn mt chiu d[1..n] qun l cc nhm. Ta gn d[j] = i nu bn j phi bm vo bn i l bn c s hiu nh hn mnh: i ( j nu I < j. Lc u ta khi tr d[i] = i; i = 1..n: i ( i, vi ngha: lc u mi bn to thnh mt nhm 1 ngi v t mnh lm nhm trng, do mi bn t bm tht lng mnh. Mng d c gi l mng tham chiu. Nh ta s thy sau ny, nh d ta c th nhanh chng tm c nhm trng ca bt k em no.
Ta qui c gi d l mng cha thng tin lin kt gia cc phn t trong cc tp con.
d[1][2][3][4][5][6][7][8]
12345678
Mi khi c gio yu cu ghp cp (i, j) th ta hiu l: nhm c em i cn hp (gp) vi nhm c em j. ghp cp (i, j) ta thc hin cc bc sau y:
Bc 1. Tm nhm trng x ca nhm c em i;
Bc 2. Tm nhm trng y ca nhm c em j;
Bc 3. Quyt nh xem ai s l nhm trng ca nhm gp mi ny. D hiu l nhm trng mi s l em c s hiu nh nht trong 2 nhm trng x v y, tc l Min(x,y). Sau ta gp 2 nhm theo k thut tham chiu: Gi s x < y. Ta ch vic gn d[y] = x, y(x. ngha ca vic ny l: c gio qui nh nhm trng y phi bm tht lng nhm trng x. Ta suy ra ngay rng mi em trong nhm y i theo nhm trng y, m y li i theo x nn mi em trong nhm y s i theo x. Nu x > y ta gn d[x] = y, x(y vi ngha tng t nh trn. Nu x = y th c ngha l i v j hin trong cng mt nhm (v c cng nhm trng) nn ta khng phi lm g.
Bn quan st ln lt cc hnh di y pht hin ra qui lut cp nht tng cp hc sinh theo yu cu ca c gio.
d[1][2][3][4][5][6][7][8]
12342678
d[1][2][3][4][5][6][7][8]
12342638
d[1][2][3][4][5][6][7][8]
12342636
d[1][2][3][4][5][6][7][8]
11342636
cp nht cp (5,1) ta rng nhm trng ca 5 l 2, v d[5] = 2, nhm trng ca 1 l 1, v d[1] = 1. V 1 < 2 nn ta cho nhm trng 2 bm vo nhm trng 1, tc l gn d[2] = 1, 2(1.
d[1][2][3][4][5][6][7][8]
11332636
Hm Init khi tr mng d[1..n], d[i] = i vi ngha lc u mi em to thnh mt nhm ring bit vi nhm trng l chnh mnh.
void Initd() {
for (int i = 1; i n >> m; // doc so nguoi n, so cap ghep m Initd(); soNhom = n; // luc dau co n nhom
for (i = 1; i > x >> y; // doc cap ghep x y soNhom -= Union(x,y); // gop nhom co x voi nhom chua y // giam so nhom neu hai nhom khac nhau }
f.close(); // dong input file
// Giai trinh ket qua
cout