Union-Find
Last updated
Last updated
Union-Find
๋ ์ํธ๋ฐฐํ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์งํฉ์ ํจ์จ์ ์ผ๋ก ํํํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ฆ, ๊ณตํต ์์๊ฐ ์กด์ฌํ์ง ์๋ ๋ถ๋ถ ์งํฉ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ ๋ ์ฌ์ฉํ๋ค.
์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ ์งํฉ์ ๋ณํฉํ๋ Union
์ฐ์ฐ๊ณผ ์งํฉ์ ์์๊ฐ ์ด๋ค ์งํฉ์ ์ํด์๋์ง ํ๋จํ๋ 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(5, 2)
์ ๊ฒฝ์ฐ 5์์ 2๊ฐ ์ํ ๊ฐ๊ฐ์ ์งํฉ์ ํ๋์ ์งํฉ์ผ๋ก ํฉ์น๋ค.
Union(x, y)
: x์ y๊ฐ ์ํ ๋ ์งํฉ์ ํฉ์น๋ค.
์ ์ด๋ฏธ์ง์์ Union(5, 2)
๋ฅผ ์ํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด set
์ ๋ณ๊ฒฝ๋๋ค.
1
1
1
1
2
0
๋ง์ฝ ํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋น๋์นญ์ธ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ๋ ๊น?
0
0
1
2
3
4
Find(5)
์ ๊ฒฝ์ฐ Find
์ฐ์ฐ์ 5ํ ๋ฐ๋ณตํด์ผ ํ๋ค. ์ ๊ทธ๋ฆผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ๋ค๋ฉด ํจ์ฌ ํจ์จ์ ์ด๋ค.
0
0
0
0
0
0
์ด ์ํฉ์์ Find(2)
๋ฅผ ์ํํ์ ๋, 2-1-0
์ผ๋ก ํ๊ณ ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค.
์ด๋, set[2]
์ set[1]
์ ๊ฐ์ ์งํฉ์ ๋ฃจํธ๋
ธ๋๋ก ๋ฐ๊ฟ์ค๋ค. (set[1]์ ์ด๋ฏธ 0)
0
0
1 โ 0
1
0
0
Find
์ฐ์ฐ์ ํ๋ฉด์ ์ ์์
์ ์ํํ๋ค๋ฉด, ๋ค์ Find
์ฐ์ฐ์ ์ํํ ๋ ๋น๊ต์ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฎ์์ง๋ค.
๋ ์งํฉ์ ํฉ์น ๋, ๋์ด๊ฐ ๋ ๋ฎ์ ์งํฉ์ ๋์ด๊ฐ ๋ ๋์ ์งํฉ ๋ฐ์ ๋ฃ๋๋ค.
๋์ด๊ฐ ๋ ๋์ ์งํฉ(๋์ด N)์ ๋์ด๊ฐ ๋ ๋ฎ์ ์งํฉ(๋์ด M) ๋ฐ์ผ๋ก ํฉ์น๋ ๊ฒฝ์ฐ, ์๊ฐ๋ณต์ก๋๊ฐ O(N + M - 1) = 4
๊ฐ ๋๋ค.
ํ์ง ๋์ด๊ฐ ๋ ๋ฎ์ ์งํฉ์ ๋์ด๊ฐ ๋ ๋์ ์งํฉ์ ํฉ์น๋ ๊ฒฝ์ฐ, O(N) = 3
์ผ๋ก ์ ์ง๋๋ค.