์นดํ
๊ณ ๋ฆฌ ์์
[์๊ณ ๋ฆฌ์ฆ๐งฉ] Union-Find (Disjoint-sets)
Gogumiing
2024. 9. 10. 11:42
๋ชฉ์ฐจ
๐ฌ ์๋ก์ ์งํฉ (Disjoint-sets)
๐ฌ ์๋ก์ ์งํฉ(Disjoint-sets)
๋๋ณด๊ธฐ






Find-Set(d) = Find-Set(e) = return c
๐ก ์๋ก์ ์งํฉ(Disjoint-sets)
์๋ก์ ๋๋ ์ํธ๋ฐฐํ ์งํฉ๋ค๋ก, ๊ต์งํฉ์ด ์๋ ์งํฉ๋ค์ ์๋ฏธํ๋ค.
์งํฉ์ ์ํ ํ๋์ ํน์ ๋ฉค๋ฒ๋ฅผ ํตํด ์งํฉ๋ค์ ๊ตฌ๋ถํ๋๋ฐ, ์ด๋ฅผ ๋ํ์(representative)๋ผ๊ณ ํ๋ค.
- ์ํธ๋ฐฐํ ์งํฉ ํํ ๋ฐฉ๋ฒ
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ํธ๋ฆฌ
- ์ํธ๋ฐฐํ ์งํฉ ์ฐ์ฐ
- Make - Set(x)
์ ์ผํ ๋ฉค๋ฒ x๋ฅผ ํฌํจํ๋ ์๋ก์ด ์งํฉ์ ์ฐ์ฐํ๋ ์ฐ์ฐ - Find - Set(x) return {representative}
x๋ฅผ ํฌํจํ๋ ์งํฉ์ ์ฐพ๋ ์ฐ์ฐ - Union(x, y)
x์ y๋ฅผ ํฌํจํ๋ ๋ ์งํฉ์ ํตํฉํ๋ ์ฐ์ฐ
- Make - Set(x)
๐ ์ํธ๋ฐฐํ ์งํฉ์ ์
โ ์ํธ ๋ฐฐํ ์งํฉ ํํ - ์ฐ๊ฒฐ๋ฆฌ์คํธ
๊ฐ์ ์งํฉ์ ์์๋ค์ ํ๋์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ด๋ฆฌํ๋ฉฐ, ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋งจ ์ ์์๊ฐ ๋ํ ์์(representative)๊ฐ ๋๋ค.- ๊ฐ ์์๋ ์งํฉ์ ๋ํ์์(representative)๋ฅผ ๊ฐ๋ฆฌํค๋ ๋งํฌ๋ฅผ ๊ฐ์ง๋ค.

- Find-Set(e) return a
- Find-Set(f) return b
- Union(a, b)

โ ์ํธ ๋ฐฐํ ์งํฉ ํํ - ํธ๋ฆฌ
ํ๋์ ์งํฉ(a disjoint set)์ ํ๋์ ํธ๋ฆฌ๋ก ํํํ๋ ๊ฒ์ด๋ค.
- ์์ ๋ ธ๋๊ฐ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ๋ฃจํธ ๋ ธ๋๊ฐ ๋ํ์(representative)๊ฐ ๋๋ค.

- Make-Set(a) ~ Make-Set(f)

- Union(c, d), Union(e, f)

- Union(d, f)


๐ ์ํธ ๋ฐฐํ ์งํฉ ์ฐ์ฐ(ํธ๋ฆฌ)์ ๋ฌธ์ ์
ํธ๋ฆฌ์ ํํ์ ์ฌ์ฉํ๋ฉด Union(x, y) ์ฐ์ฐ์ ์ํํ ๋ ๋ฃจํธ ํ๋์ ์ ๋ณด๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ค๋ ์ฅ์ ์ ๊ฐ์ง๋ค. ๊ทธ๋ฌ๋ ์ฐ์ฐ์ ์์์ ๋ฐ๋ผ ์๋ชปํ๋ฉด ํธ๋ฆฌ๊ฐ ํ์ชฝ์ผ๋ก ๊ธฐ์ธ์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
โท ํธ๋ฆฌ์ ๋์ด๊ฐ h๊ฐ ๋๋ฉด Union()์ฐ์ฐ๊ณผ Find-Set() ์ฐ์ฐ ๋ชจ๋ ์๊ฐ๋ณต์ก๋๊ฐ O(h)๊ฐ ๋์ด๋ฒ๋ฆฌ๋ฉฐ, ๋ฐฐ์ด๋ก ๊ตฌํํ๋ ๊ฒ๋ณด๋ค ํจ์จ์ด ๋ ๋๋น ์ง๋ค.
โถ ํด๊ฒฐ(์ต์ ํ) ๋ฐฉ์
- Rank๋ฅผ ํ์ฉํ Union (๋ญํฌ์ ์ํ ํฉ์น๊ธฐ ์ต์ ํ)
๊ฐ ๋ ธ๋๋ ์์ ์ ๋ฃจํธ๋ก ํ๋ subtree์ ๋์ด๋ฅผ ๋ญํฌ(rank)๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์งํฉ์ ํฉ์น ๋ rank๊ฐ ๋ฎ์ ์งํฉ์ rank๊ฐ ๋์ ์งํฉ์ ๋ถ์ธ๋ค.p[x]: ๋ ธ๋ x์ ๋ถ๋ชจ ์ ์ฅ rank[x]: ๋ฃจํธ ๋ ธ๋๊ฐ x์ธ ํธ๋ฆฌ์ ๋ญํฌ ๊ฐ ์ ์ฅ Make_Set(x): p[x] = x rank[x] = 0 Find_Set(x): # x๊ฐ ๋ฃจํธ๊ฐ ์๋ ๊ฒฝ์ฐ if x != p[x]: p[x] = Find_Set(p[x]) return p[x] Union(x, y): Link(Find_Set(x), Find_Set(y)) Link(x, y): # rank๋ ํธ๋ฆฌ์ ๋์ด if rank[x] > rank[y]: p[y] = x else p[x] = y if rank[x] == rank[y]: rank[y] += 1
→ Find_Set() ์ฐ์ฐ์ ํน์ ๋ ธ๋์์ ๋ฃจํธ๊น์ง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์๊ฐ๋ฉด์ ๋ ธ๋์ ๋ถ๋ชจ ์ ๋ณด๋ฅผ ๊ฐฑ์ ํ๋ค.
- Path Compression (๊ฒฝ๋ก ์์ถ)
Find-Set์ ํํ๋ ๊ณผ์ ์์ ๋ง๋๋ ๋ชจ๋ ๋ ธ๋๋ค์ด ์ง์ root๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํฌ์ธํฐ๋ฅผ ๋ณ๊ฒฝํด์ค๋ค.