Top Banner

of 59

Thuật toán Find Union

Oct 05, 2015

Download

Documents

ChuongCeh

Thuật toán Find Union
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

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