๋ฐ์ํ
Notice
Recent Posts
Recent Comments
Link
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- javascript
- DP
- DFS
- SSAFY
- boj
- ์๋ฐ์คํฌ๋ฆฝํธ
- BFS
- sort
- Blind
- ์์ ํ์
- ์ธํผ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ฝ๋ฉํ ์คํธ
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- SWEA
- ํํ
- ํ์ด์ฌ
- ์๊ณ ๋ฆฌ์ฆ
- ์๋ฃ๊ตฌ์กฐ
- Backjoon
- ์คํ
- ๊ทธ๋ํ
- ๋ฐฑ์ค
- SW์ญ๋ํ ์คํธ
- algorithm
- ์ผ์ฑ
- kakao
- ์นด์นด์ค
- Python
- ์ฝํ
Archives
- Today
- Total
๋ง์ํ
์๋ก์ ์งํฉ(Disjoint-set) ๋ณธ๋ฌธ
๋ฐ์ํ


๐ ์๋ก์ ์งํฉ(Disjoint-set) ์ด๋
- ์๋ก์ ๋๋ ์ํธ๋ฐฐํ ์งํฉ๋ค์ ์๋ก ์ค๋ณต ํฌํจ๋ ์์๊ฐ ์๋ ์งํฉ๋ค( ๊ต์งํฉ์ด ์๋ ์ํ )
- ์งํฉ์ ์ํ ํ๋์ ํน์ ์์๋ฅผ ํตํด ๊ฐ๊ฐ์ ์งํฉ๋ค์ ๊ตฌ๋ถ ( ์ด๋ฅผ ๋ํ์๋ผ๊ณ ํจ )
- ์ํธ ๋ฐฐํ ์งํฉ์ ํํํ๋ ๋ฐฉ๋ฒ
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ๊ฐ์ ์งํฉ์ ์์๋ค์ ํ๋์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ด๋ฆฌ
- ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋งจ ์์ ์์๋ฅผ ์งํฉ์ ๋ํ๋ก ํ๋ค
- ๊ฐ ์์๋ ์งํฉ์ ๋ํ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋งํฌ๋ฅผ ๊ฐ๋๋ค
- ํธ๋ฆฌ
- ํ๋์ ์งํฉ์ ํธ๋ฆฌ๋ก ํํ
- ์์ ๋ ธ๋๊ฐ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ๋ฃจํธ ๋ ธ๋๊ฐ ๋ํ์๊ฐ ๋จ
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์ํธ๋ฐฐํ ์งํฉ ์ฐ์ฐ
- make_set(x)
- find_set(x)
- union(x,y)
๐ ์๋ก์ ์งํฉ(Disjoint-set) ๊ตฌํ
def make_set(x):
p[x] = x
def find_set(x):
if p[x] == x:
return x
else:
p[x] = find_set(p[x])
return p[x]
def union(x, y):
# a์ b์ ๋ํ์๋ฅผ ์ฐพ์
px = find_set(x)
py = find_set(y)
if rank[px] > rank[py]:
p[py] = px
elif rank[py] > rank[px]:
p[px] = py
else:
p[px] = py
rank[py] += 1
# 1๋ถํฐ 8๊น์ง ํด๋ณด์
n = 8
p = [0] * (n + 1)
rank = [0] * (n + 1)
for i in range(1, n + 1):
make_set(i)
union(1, 3)
union(2, 3)
union(5, 6)
union(6, 8)
union(1, 5)
union(6, 7)
print(p)
print(find_set(4))
print(find_set(5))
# ์ฐ์ฐ์ ํจ์จ์ ๋์ด๋ ๋ฐฉ๋ฒ
# 1. path compression: ๋ชจ๋ ๋
ธ๋๋ค์ด ์ง์ root๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๊ฐฑ์ ํ๋ค.
# 2. Rank๋ฅผ ์ด์ฉํ Union: ๊ฐ ๋
ธ๋๋ ์์ ์ ๋ฃจํธ๋ก ํ๋ subtree์ ๋์ด๋ฅผ Rank๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํ๋ค.
# 2-2. ๋ ์งํฉ์ ํฉ์น ๋ rank๊ฐ ๋ฎ์ ์งํฉ์ rank๊ฐ ๋์ ์งํฉ์ ๋ถ์ธ๋ค.
๐ ์๋ก์ ์งํฉ(Disjoint-set) ํน์ง
- ํฉ์งํฉ์ ์ฐพ์ ๋ ์ฌ์ฉ
- ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋๊ฐ ์กด์ฌํ ๋ ๋๊ฐ์ ๋ ธ๋๋ฅผ ์ ํํด์, ์ ํํ ๋ ๋ ธ๋๊ฐ ์๋ก ๊ฐ์ ๊ทธ๋ํ์ ์ํ๋ ์ง ํ๋ณํ๋ ์๊ณ ๋ฆฌ์ฆ
๋ฐ์ํ
'CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ(Dynamic Programming) (0) | 2020.10.01 |
|---|---|
| ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ(kruskal) (0) | 2020.09.30 |
| ๊น์ด ์ฐ์ ํ์(Depth First Search, DFS) (0) | 2020.09.28 |
| ๋๋น ์ฐ์ ํ์(Breath First Search, BFS) (0) | 2020.09.27 |
| ๊ณ์ ์ ๋ ฌ(counting sort) (0) | 2020.09.26 |