Union-Find
Union-Find ๋ ์ํธ๋ฐฐํ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์งํฉ์ ํจ์จ์ ์ผ๋ก ํํํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ฆ, ๊ณตํต ์์๊ฐ ์กด์ฌํ์ง ์๋ ๋ถ๋ถ ์งํฉ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ ๋ ์ฌ์ฉํ๋ค.
์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ ์งํฉ์ ๋ณํฉํ๋ Union ์ฐ์ฐ๊ณผ ์งํฉ์ ์์๊ฐ ์ด๋ค ์งํฉ์ ์ํด์๋์ง ํ๋จํ๋ Find ์ฐ์ฐ์ด ์กด์ฌํ๋ค.
Find
Find ์ฐ์ฐ์ ํ ์์๊ฐ ์ด๋ค ์งํฉ์ ์ํด์๋์ง ์ฐพ๋ ์ฐ์ฐ์ด๋ค.
ํ๋์ ์งํฉ์ ์๋ ๊ฐ ์์๋ค์ ๊ฐ์ ์งํฉ์ ์ํด์์์ ๋ํ๋ด์ผ ํ๋ค.

Find ์ฐ์ฐ์ ์์๊ฐ ์ํด์๋ ์งํฉ์ ๋ฃจํธ ๋
ธํธ๋ฅผ ์ฐพ๋๋ค.
์ ๊ฒฝ์ฐ์์ Find(1) = Find(3) = Find(2) = Find(4) = 1 ๋ก ๋ค ๊ฐ๋ค.
Find(x): x๊ฐ ์ํ ์งํฉ์ ๋ฃจํธ ๋ ธ๋ ๊ฐ์ ์ฐพ๋๋ค.
set[x] ๋ x๊ฐ ์ํด์๋ ์งํฉ์ ๋ปํ๋ค. ๋ง์ฝ set[x] ๊ฐ x๊ฐ ์๋ ๊ฒฝ์ฐ, ์ฌ๊ท์ ์ผ๋ก ์งํฉ์ ๋ฃจํธ ๋
ธ๋๋ฅผ ์ฐพ์๊ฐ๋ค.
์์ ์ด๋ฏธ์ง์์ set ์ ๋ค์๊ณผ ๊ฐ๋ค.
0
1
1
1
2
5
Union
Union ์ฐ์ฐ์ ๋ ์์๊ฐ ์ํ ์งํฉ์ ํฉ์น๋ค.

์ ์ํฉ์์ Union(5, 2) ์ ๊ฒฝ์ฐ 5์์ 2๊ฐ ์ํ ๊ฐ๊ฐ์ ์งํฉ์ ํ๋์ ์งํฉ์ผ๋ก ํฉ์น๋ค.
Union(x, y): x์ y๊ฐ ์ํ ๋ ์งํฉ์ ํฉ์น๋ค.
์ ์ด๋ฏธ์ง์์ Union(5, 2) ๋ฅผ ์ํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด set ์ ๋ณ๊ฒฝ๋๋ค.

1
1
1
1
2
0
Union-Find ์ต์ ํ
๋ง์ฝ ํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋น๋์นญ์ธ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ๋ ๊น?


0
0
1
2
3
4
Find(5) ์ ๊ฒฝ์ฐ Find ์ฐ์ฐ์ 5ํ ๋ฐ๋ณตํด์ผ ํ๋ค. ์ ๊ทธ๋ฆผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ๋ค๋ฉด ํจ์ฌ ํจ์จ์ ์ด๋ค.

0
0
0
0
0
0
Find ์ฐ์ฐ ์ต์ ํ

์ด ์ํฉ์์ Find(2) ๋ฅผ ์ํํ์ ๋, 2-1-0 ์ผ๋ก ํ๊ณ ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค.
์ด๋, set[2] ์ set[1] ์ ๊ฐ์ ์งํฉ์ ๋ฃจํธ๋
ธ๋๋ก ๋ฐ๊ฟ์ค๋ค. (set[1]์ ์ด๋ฏธ 0)

0
0
1 โ 0
1
0
0
Find ์ฐ์ฐ์ ํ๋ฉด์ ์ ์์
์ ์ํํ๋ค๋ฉด, ๋ค์ Find ์ฐ์ฐ์ ์ํํ ๋ ๋น๊ต์ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฎ์์ง๋ค.
Union ์ฐ์ฐ ์ต์ ํ
๋ ์งํฉ์ ํฉ์น ๋, ๋์ด๊ฐ ๋ ๋ฎ์ ์งํฉ์ ๋์ด๊ฐ ๋ ๋์ ์งํฉ ๋ฐ์ ๋ฃ๋๋ค.

๋์ด๊ฐ ๋ ๋์ ์งํฉ(๋์ด N)์ ๋์ด๊ฐ ๋ ๋ฎ์ ์งํฉ(๋์ด M) ๋ฐ์ผ๋ก ํฉ์น๋ ๊ฒฝ์ฐ, ์๊ฐ๋ณต์ก๋๊ฐ O(N + M - 1) = 4๊ฐ ๋๋ค.

ํ์ง ๋์ด๊ฐ ๋ ๋ฎ์ ์งํฉ์ ๋์ด๊ฐ ๋ ๋์ ์งํฉ์ ํฉ์น๋ ๊ฒฝ์ฐ, O(N) = 3์ผ๋ก ์ ์ง๋๋ค.

Last updated