VI. Binary Search Tree & Union Find
Binary Search Tree
Binary Search Tree๋, ๋ค์๊ณผ ๊ฐ์ ์ฑ์ง์ ๋ง์กฑํ๋ ํธ๋ฆฌ๋ฅผ ๋งํฉ๋๋ค.
-
์ด์ง ํธ๋ฆฌ์ ๋๋ค.
-
ํญ์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ๊ฐ์ ์๊ธฐ ์์ ๋ณด๋ค ์๊ณ , ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๊ฐ์ ์๊ธฐ ์์ ๋ณด๋ค ํฝ๋๋ค.
Binary Search Tree๋ ์ฐ๋ฆฌ์ ๋งฅ๋ฝ์์ ์ฝ๊ฐ ๋ฒ์ด๋ ์์ผ๋ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ ์๊ฐ์ ๋งค์ฐ ์ค์ํ๊ฒ ๋ค๋ฃน๋๋ค. ์ตํ๋๋ ๊ฒ์ ์ถ์ฒํ์ง๋ง, ์ฐ๋ฆฌ๊ฐ ์์ผ๋ก ์ธ ์ผ์ ์๋ง๋ ์์ ๊ฒ์ ๋๋ค. ๊ฐ๋จํ๊ฒ๋ง ์ง๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
(i) ์ฝ์ : ์ฝ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก, ๋ฃจํธ์์๋ถํฐ ์ถ๋ฐํด์, ์ฝ์ ํ ์๋ฆฌ๋ฅผ ์ฐพ์๊ฐ๋ ์์ผ๋ก ํฉ๋๋ค. ๋์๊ด๊ณ์ ๋ฐ๋ผ ์ผ์ชฝ์ผ๋ก ํ๊ณ ๋ด๋ ค๊ฐ์ง, ์ค๋ฅธ์ชฝ์ผ๋ก ํ๊ณ ๋ด๋ ค๊ฐ์ง๋ฅผ ์ ํ ๋ค์, ๋ด๋ ค๊ฐ์ผ ํ ์๋ฆฌ๊ฐ ๋น์์ผ๋ฉด ๊ทธ ์๋ฆฌ์ ์ง์ด๋ฃ์ต๋๋ค.
(ii) ์ญ์ : ์ญ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ํํฉ๋๋ค.
-
์ญ์ ํ ๊ฐ $x$๋ฅผ ํธ๋ฆฌ์์ ์ฐพ์ต๋๋ค. (์ฝ์ ์์ ์ฐพ๋ ๋ฐฉ๋ฒ๊ณผ ๋น์ทํฉ๋๋ค.)
-
์ด ๋ ธ๋๋ฅผ, $x$์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ์์ ๊ฐ์ด ์๋ ๋ ธ๋์ ๊ตํํฉ๋๋ค.
-
์ด์ ๊ทธ ์๋ฆฌ์ ๊ตํ๋์ด ๋ค์ด๊ฐ ๋ ธ๋๋ฅผ ์ญ์ ํฉ๋๋ค.
-
์ผ์ชฝ ์์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ๊ทธ ๋ ธ๋๋ ๊ฐ์ฅ ์์ ๊ฒ์ด ์๋ ๋ ธ๋๊ฐ ์๋๋ฏ๋ก ๋ถ๊ฐ๋ฅํ๊ณ , ๋ฐ๋ผ์ ๋ ธ๋์ ์์์ด 2๊ฐ์ผ ์๋ ์์ต๋๋ค. ์์์ด 1๊ฐ๋ผ๋ฉด, ์ญ์ ๋ ๋ ธ๋ ์๋ฆฌ๋ก ๋์ด์ฌ๋ฆฝ๋๋ค.
-
์์์ด ์๋ค๋ฉด ๊ทธ๋ฅ ๋์ด๊ฐ๋ ๋ฉ๋๋ค.
๊ฒฐ๊ตญ, ๋ ์ฐ์ฐ ๋ชจ๋ ๊ฒ์ ์ฐ์ฐ์ ์ด์ฉํ์ฌ ์ด๋ฃจ์ด์ง๋๋ค.
์ด์ , ์๊ฐ ๋ณต์ก๋๋ฅผ ์๊ฐํด ๋ด
์๋ค. ์ฝ์
์ฐ์ฐ์ ๊ฒฝ์ฐ ๊ฒ์ ์ฐ์ฐ๊ณผ ๊ฑฐ์
๋์ผํ๋ฏ๋ก, ํธ๋ฆฌ์ ๋์ด $h$์ ๋ํด $O(h)$ ์๊ฐ์ด ๋ค๊ฒ ๋ฉ๋๋ค. ์ญ์ ์
๊ฒฝ์ฐ, ๊ฒ์ + ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๊ฐ์ฅ ์์ ๊ฐ ์ฐพ๊ธฐ์ ๋ ๋ฒ์ธ๋ฐ, ๋ ๋ชจ๋
์ฌ์ค์ ๊ฒ์๊ณผ ๋น์ทํ ์ฐ์ฐ์ด๋ฏ๋ก $O(h)$ ์๊ฐ์
๋๋ค. ๊ฒฐ๊ตญ ์ฝ์
๊ณผ ์ญ์ ๋ชจ๋
$O(h)$ ์๊ฐ์ด ๋๋ ์ฐ์ฐ์
๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ด์ง ํธ๋ฆฌ์ ๊ฒฝ์ฐ ์ต์
์ ์ํฉ์์
$h$๊ฐ $n$๊น์ง ์ปค์ง ์ ์์ต๋๋ค. (ํ ์ค๋ก ์ญ ๋์ด์ ์๋ ๊ฒฝ์ฐ)
์ฐ๋ฆฌ๋ ๋ณ๋ก ์์ธํ ๋ค๋ฃจ์ง๋ ์๊ฒ ์ง๋ง, ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์
์ ๊น๋ง ์๊ฐํด ๋ด
์๋ค. Quick select๋๋ ์ฝ๊ฐ ๋น์ทํ๋ฐ, โ์ฝ๊ฐ์ ์๊ฐ์
์ง๋ถํด์โ, โ๋๋ฌด ๋์ ์ํฉ์ด ๋ฒ์ด์ง์ง ์๊ฒโ ๋ง๋ค๋ฉด ๋ฉ๋๋ค. ์ด๊ฒ์
Balanced Binary Search Tree (BBST) ๋ผ๊ณ ๋ถ๋ฅด๊ณ , ์ด๋ฅผ ๊ตฌํํ๋ ๋ค์ํ
๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๊ณ ๋ฆฌ์ฆ ์์
์์ ๋ค๋ฃน๋๋ค. ์ถ๊ฐ ์๋ฃ๋ฅผ
Additional ii์ ์ผ๋ถ ์ ์ํด ๋์์ต๋๋ค.
STL set, map
C++์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ๋งค์ฐ ํธํ set
๊ณผ map
์ด ์์ต๋๋ค. ์ด set๊ณผ map์
Balanced Binary Search Tree์ ์ผ์ข
์ธ Red-Black Tree๋ก ๊ตฌํ๋์ด ์๊ธฐ
๋๋ฌธ์, BBST๋ฅผ ์ค์ ๋ก ๊ตฌํํด์ ์ธ ์ผ์ ๋ณดํต ์์ต๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
์ฌ์ฉ๋ฒ์ ๋ฐ๋์ ์ตํ๊ธธ ๊ถํฉ๋๋ค.
์์ ์ฝ๋ ๋ณด๊ธฐ : BOJ 14425 ๋ฌธ์์ด
์งํฉ
set, map, multiset, multimap์ ํ์ฉ๋๊ฐ ๋งค์ฐ ๋์ต๋๋ค. ์ฐธ๊ณ ๋ก, priority
queue๋ก ํ ์ ์๋ ๋ชจ๋ ์ฐ์ฐ์ multiset์ผ๋ก ๋๊ฐ์ด ํ ์ ์๊ณ , ์๊ฐ
๋ณต์ก๋๋ $\order{\log n}$์ผ๋ก ๊ฐ์ต๋๋ค. ๊ทธ๋ ๋ค๊ณ ํด์ ๋ ์ฝ๋์ ์ํ
์๊ฐ์ด ๊ฐ๊ฑฐ๋ ๋น์ทํ ๊ฒ์ผ๋ก ๊ธฐ๋ํด์๋ ์ ๋ฉ๋๋ค. ํญ์, ์๊ฐ ๋ณต์ก๋๋
์ค์ํ์ง๋ง, ๊ทธ๋ ๋ค๊ณ ํด์ ์ ๋ถ๋ ์๋๋๋ค.
Disjoint Set
์ด๋ฒ section์์ ์ฐ๋ฆฌ์ ๋ชฉํ๋, ๋ค์๊ณผ ๊ฐ์ ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
(i) Union(a, b) : a๊ฐ ๋ค์ด ์๋ ์งํฉ๊ณผ b๊ฐ ๋ค์ด ์๋ ์งํฉ์ ํฉ์น๋ ์ฐ์ฐ.
(ii) Find(x) : x๊ฐ ๋ค์ด ์๋ ์งํฉ์ ๋ฒํธ๋ฅผ ํ์ธํ๋ค. ์ฆ, Find(x) ์ Find(y) ๋ฅผ ํตํด ๋ ์์๊ฐ ๊ฐ์ ์งํฉ์ ์์๋์ด ์๋์ง ํ์ธํ๋ ์์ ์ด ๋ชฉํ.
์๋ฅผ ๋ค์ด, 1๋ถํฐ 5๊น์ง์ ์ซ์๊ฐ ์๋ค๊ณ ํ ๋, Union(1, 2), Union(3, 4) ๋ฅผ ํ๊ณ ๋๋ฉด $\Set{1, 2}, \Set{3, 4}, \Set{5}$ ๊ฐ ๋ฉ๋๋ค. ์ด๋ Find(3) ๊ณผ Find(4)๋ ๊ฐ์์ผ ํ๊ณ , Find(1)๊ณผ๋ ๋ฌ๋ผ์ผ ํฉ๋๋ค. ๋ํ, Union(1, 4) ๋ Union(2, 3) ๋ฑ์ ๋ชจ๋ $\Set{1, 2, 3, 4}, \Set{5}$ ๋ก ๋ง๋๋ ๊ณผ์ ์ ์ํํด์ผ ํฉ๋๋ค.
Naive Approach
์ฌ์ด ๋ฐฉ๋ฒ์ผ๋ก, Linked List๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋ก ๋ค ์ ์์ต๋๋ค. $n$๊ฐ์ ์ซ์๊ฐ ์๊ณ , ์ด๋ค์ ์ ๋นํ operation์ ์ํํ๋ ค๊ณ ํ๋ค๊ณ ํฉ์๋ค. ๊ฐ๊ฐ์ ์์๊ฐ $p$, $q$๊ฐ์ธ ์งํฉ์ ํฉ์น๋ ๋ฐ ๋๋ ์๊ฐ์ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง, ํจ์จ์ฑ์ ์ํด ์์ ๋ฆฌ์คํธ๋ฅผ ํฐ ๋ฆฌ์คํธ์ ํฉ์น๋ ์์ผ๋ก ์์ ํ๋ฉด $O(\min(p, q))$ ์ด์ง๋ง ์ด๋ ์ต๋ $n/2$ ๊น์ง์ด๊ณ , ๊ฒฐ๊ตญ ํ๋ฒ์ Union์ $O(n)$์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๋ํ, Find์ ๊ฒฝ์ฐ ๋ชจ๋ element๋ฅผ ๋ค์ง๋ฉด์ ์ด ๋ฆฌ์คํธ์ ์์๋์ด ์๋์ง ์ฐพ๋ ๋ฐฉ๋ฒ๋ฐ์ ์์ผ๋ฏ๋ก $O(n)$์ด ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค. ๋ฌผ๋ก , ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ๋ฉด, ๋งค๋ฒ ๊ฐ ์์๊ฐ ์์ ์ด ์์๋ ๋ฆฌ์คํธ์ ํค๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฑ ๋ฐฉ๋ฒ์ ์ธ ์๋ ์์ง๋ง, ์ด๊ฒ๋ Union์ ๋นจ๋ฆฌ ํ ์ ์์ต๋๋ค.
Using Trees
์๊ฐ์ ๋ฌ๋ฆฌํ์ฌ, ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํด ๋ด
์๋ค. ๊ฐ ์งํฉ์ ํ๋์ ํธ๋ฆฌ๋ก
๋ํ๋ผ ๊ฒ์ด๊ณ , ๊ฐ ์์๋ง๋ค ์์ ์ ๋ถ๋ชจ ๋
ธ๋์ ๋ฒํธ๋ง ์ ์ด ๋์ต๋๋ค. ์ฆ,
๊ฐ ์์์ ๋ํด par(x)๋ฅผ ํญ์ ๊ด๋ฆฌํ๋ค๊ณ ์๊ฐํ๊ฒ ์ต๋๋ค. ์ด๋, Find(x)๋
์ฝ๊ฐ ์๊ฐ์ ๋ฐ๊ฟ์, ์์ ์ด ์์๋ ํธ๋ฆฌ์ ๋ฃจํธ ๋
ธ๋๋ฅผ ์ฐพ๋ ์ฐ์ฐ์ด๋ผ๊ณ
์๊ฐํฉ๋๋ค. (๋ถ๋ชจ๊ฐ ์๋ ๋ฃจํธ ๋
ธ๋์ ๋ถ๋ชจ๋ ์๊ธฐ ์์ )
๊ทธ๋ ๋ค๋ฉด, Union์ ํ ๋ ๊ตณ์ด ๋ชจ๋ ๋
ธ๋์ par์ ๋ฐ๊ฟ์ผ ํ ๊น์? ํธ๋ฆฌ A์
ํธ๋ฆฌ B๋ฅผ ํฉ์น๋ ค๊ณ ํ๋ค๋ฉด, A์ ๋ฃจํธ๋ฅผ B์ ๋ฃจํธ ๋ฐ์ ๋ฌ์ ์ฃผ๊ธฐ๋ง ํ๋ฉด (์ฆ,
par[root of A] = root of B) ํ ๋ฒ์ ํธ๋ฆฌ A ์ ์ฒด๋ฅผ ํธ๋ฆฌ B์ ๋ฌ์ ๋์
ํํ๊ฐ ๋ฉ๋๋ค. ๋ ํธ๋ฆฌ (์งํฉ)์ Union์ด ๋๋ฌ์ต๋๋ค!
์ด ๋ฐฉ๋ฒ์ ์๊ฐํด ๋ณด๋ฉด, Union(x, y) ์ฐ์ฐ์ ์๊ฐ ๋ณต์ก๋๋ ๊ฒฐ๊ตญ Find(x)์
Find(y)์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. Find(x)ํ์ฌ, ๊ทธ ์ฐพ์ ๋ฃจํธ๋ฅผ Find(y)์ ๋ฌ์
์ฃผ๋ ์ฐ์ฐ์ด $\order{1}$์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฐ๋ฐ, Find ์ฐ์ฐ์ ๊ทธ ํธ๋ฆฌ์
๋์ด์ ์ํด ๊ฒฐ์ ๋๊ณ , ์ต์
์ ๊ฒฝ์ฐ ํธ๋ฆฌ๊ฐ ๋ฃจํธ ๋ฐ์ผ๋ก ํ ์ค๋ก ์ญ ๋ฌ๋ฆด ์
์์ผ๋ฏ๋ก $O(h) = O(n)$ ์
๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ณ๋ก ๋นจ๋ผ์ง ๊ฒ์ด ์์ต๋๋ค.
Optimizations
์์ ๊ฐ์ ์ฒ์ฐธํ ์ํฉ์ ๋ง๊ธฐ ์ํด, ์ฐ๋ฆฌ๋ ํฌ๊ฒ ์ธ ๊ฐ์ง๋ฅผ ์๊ฐํฉ๋๋ค.
-
Union by Rank : ๊ฐ ํธ๋ฆฌ๋ง๋ค, ํญ์ ํธ๋ฆฌ์ ๋์ด1๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ด๋, Union ์ฐ์ฐ์์ ํธ๋ฆฌ๋ฅผ ๋งค๋ฌ ๋, ๋ฐ๋์ ๋์ด๊ฐ ๋ฎ์ ํธ๋ฆฌ๋ฅผ ๋์ด๊ฐ ๋์ ํธ๋ฆฌ์ ๋งค๋ฌ๋๋ก ๊ฐ์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด, ํธ๋ฆฌ์ ๋์ด๊ฐ ์ ๋ $\log n$ ์ด์์ผ๋ก ์ปค์ง์ง ์์์ ๋ณด์ผ ์ ์์ต๋๋ค. (Additional 3)
-
Union by Size : ๊ฐ ํธ๋ฆฌ๋ง๋ค, ํธ๋ฆฌ์ ํฌ๊ธฐ (๋ ธ๋์ ๊ฐ์) ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์์ ํธ๋ฆฌ๋ฅผ ํฐ ํธ๋ฆฌ์ ๋ถ์ด๋๋ก ๊ฐ์ ํฉ๋๋ค. ์ญ์ Union by Rank์ ๋ง์ฐฌ๊ฐ์ง๋ก, ํธ๋ฆฌ์ ๋์ด๊ฐ ์ ๋ $\log n$ ์ด์์ผ๋ก ์ปค์ง์ง ์์์ ๋ณด์ผ ์ ์์ต๋๋ค. (Additional 4)
-
Path Compression : ๋งค๋ฒ Find ์ฐ์ฐ์ ํ๋ค ๋ณด๋ฉด, $x$๊ฐ ํฌํจ๋ ํธ๋ฆฌ์ ๋ฃจํธ๋ฅผ ์๊ฒ ๋ฉ๋๋ค. ์ด๋, Heuristic์ ์ธ ์๊ฐ์ผ๋ก, ๋ด๊ฐ 3-4-1-5-2-6์ ๊ณผ์ ์ผ๋ก 3์์๋ถํฐ parent๋ฅผ ํ๊ณ ์ฌ๋ผ๊ฐ 6์ ๋๋ฌํ๋ค๋ฉด, ์ด ํธ๋ฆฌ๋ฅผ ๋ชจ๋ ๋ฏ์ด๋ฒ๋ฆฌ๊ณ 3, 4, 1, 5, 2๋ฅผ ์ ๋ถ 6์ ๊ทธ๋๋ก ๋งค๋ฌ์๋ ๋ฉ๋๋ค. ์ด ์ฐ์ฐ์ ํธ๋ฆฌ์ ๋์ด๋ฅผ ์ค์ฌ ์ค ๊ฒ ๊ฐ์ต๋๋ค.
์ค์ ๊ตฌํ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ [Union by Rank or Size] + [Path Compression] ์ ๋๋ค. ์ดํ, [Union Rule]๊ณผ [Path Comp] ๋ผ๊ณ ์ค์ด๊ฒ ์ต๋๋ค.
Time Complexity
Additional 3๊ณผ 4์์ ๋ค๋ฃฌ ๋ฐ์ ๊ฐ์ด, [Union Rule] ์ ํ๋ฒ ์ฐ์ฐ์ ๋๋ต $\order{\log n}$ ์ ๋๊ฐ ๊ฑธ๋ฆผ์ ๋ณด์ฅํฉ๋๋ค. Union Rule ์์ด Path Comp ๋ง์ผ๋ก๋, ์ฒซ ๋ช๋ฒ์ Path comp๋ ๋ณ๋ก ํจ์จ์ ์ด์ง ๋ชปํ์ง๋ง ๋์ค์ case๋ค์ด ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์, ์๋นํ ์ข์ Bound๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.2 ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋, ํจ์จ์ ์ธ ๊ตฌํ์ ๊ฒฝ์ฐ, Find ์ฐ์ฐ์ด ํ๊ท ์ ์ผ๋ก ๋๋จํ ๋น ๋ฅด๊ฒ ์ํ๋ฉ๋๋ค. ์ด๋, ์ด ์๊ฐ ๋ณต์ก๋๋ฅผ $\alpha(n)$ ์ด๋ผ๋ ํจ์๋ก ์๋๋ค. ์ด ํจ์๋ Inverse Ackermann ํจ์๋ผ๋ ๊ฒ์ธ๋ฐ, ์ฐ๋ฆฌ๊ฐ ์์ํ ์ ์๋ ๋๋ถ๋ถ์ ํจ์๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ต๋๋ค. ์ธ๊ฐ์ด ๊ฐ์ง๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋ ํฉ์ณ๋, ๊ทธ ์์ ๋ค์ด๊ฐ๋ $n$์ ๊ฐ์ ๋ํด $\alpha(n) < 5$์ด๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ด ํจ์๋ฅผ ์ฌ์ค์ ์์๋ผ๊ณ ์๊ฐํด๋ ํฐ ๋ฌธ์ ๋ ์์ต๋๋ค.
Additional Topics / Problems
-
Balanced Binary Search Tree์ ์์๋ก, AVL-Tree, Red-Black-Tree, B-Tree์ ๊ทธ ํน์ํ ํํ์ธ 2-3-4 Tree๊ฐ ์์ต๋๋ค. ์ด ์๋ฃ๊ตฌ์กฐ๋ค์ ํฌ๊ฒ ๊ฒ์๊ณผ ๊ฒ์ ๊ธฐ๋ฐ ์ฐ์ฐ (์ฝ์ , ์ญ์ , ๊ฒ์)์ $\order{\log n}$ ์ ์ํํฉ๋๋ค. ๊ทธ ๋ฐ์๋, ์ผ๋ฐ์ ์ธ ์ด๋ฐ ํธ๋ฆฌ๋ก๋ ์ ๋ ์ํํ ์ ์์ด ๋ณด์ด๋ ๊ธฐ๊ดดํ ์ฐ์ฐ์ ์ ๊ณตํ๋ ์๋ฃ๊ตฌ์กฐ๋ค์ด ์กด์ฌํฉ๋๋ค.3 ์ฐ๋ฆฌ๋ ๋ค๋ฃจ์ง ์์ ์์ ์ด๊ณ ์ฌ์ค ์ ๋ ์ฝ๋ฉํ ์ค ๋ชจ๋ฅด์ง๋ง โ๋ฃจํธ๋ฅผ ๋ฐ๊พธ๋ ์ฐ์ฐโ์ Amortized $\order{\log n}$์ ํด ์ค๋ค๊ฑฐ๋ ํ๋... ๋ญ ๊ทธ๋ฐ ๊ฒ๋ ์๋ค๊ณ ํฉ๋๋ค (?)
-
Union by rank๋ง ์ฌ์ฉํ์์ ๋, ํธ๋ฆฌ์ ๋์ด๊ฐ $O(\log n)$ ์ด์์ผ๋ก ์ฆ๊ฐํ์ง ์๋๋ค๋ ์ฌ์ค์ ๋ฉ๋ํ์ธ์. ํธ๋ฆฌ์ ๋์ด๊ฐ ํฉ์น๋ ค๋ ํธ๋ฆฌ์ ๋์ด $h_1, h_2$๋ณด๋ค 1๋งํผ ์ฆ๊ฐํ๊ธฐ ์ํด์๋, ์์ชฝ์ ๋์ด๊ฐ ๊ฐ์์ผ ํ๋ฉฐ, ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ๊ทธ ํธ๋ฆฌ์ ๋ ธ๋ ์๋ ์ ์ด๋ $2h_1$๊ฐ๊ฐ ๋์ด์ผ ํฉ๋๋ค. ๊ท๋ฉ๋ฒ์ ํตํด, ๋์ด๊ฐ $h$์ธ ํธ๋ฆฌ๊ฐ ๋๋ ค๋ฉด $2^h$๊ฐ ์ ๋์ ๋ ธ๋๊ฐ ํ์ํจ์ ๋ณด์ด์ธ์.
-
Union by size์ ๋ํด์, ์ ๋ฌธ์ ์ ๊ฐ์ ๋ด์ฉ์ ๋ณด์ด์ธ์.
-
2, 3์์ ์ ์๋ ์์ด๋์ด์ ํต์ฌ์ ์์ฝํ๋ฉด, โ๋งค๋ฒ ํฐ ์ชฝ์ ์์ ์ชฝ์ ๋ถ์ด๋๋ก ๊ฐ์ ํ๋ฉด, ํ๋ฒ ํฉ์น๋ ์ฐ์ฐ์ ํ ๋ ๊ฒฐ๊ณผ๋ฌผ์ ํฌ๊ธฐ๋ ์ ์ด๋ ์์ ์ชฝ์ 2๋ฐฐ๊ฐ ๋๋คโ ๋ผ๋ ๊ฒ์ ๋๋ค. ์ด ์์น์ ๋น์ฐํด ๋ณด์ด์ง๋ง, Tree DP ๋ฑ์์ ๋ณต์ก๋๋ฅผ ์ค์ด๋ ํต์ฌ์ ์ธ ํธ๋ฆญ ์ค ํ๋์ ๋๋ค. ๊ฐ๋จํ ์ ์ฝ์ ํตํด $O(n^2)$ ์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ $O(n \log n)$ ๋๋ $O(n \log^2 n)$ ์ผ๋ก ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
-
Wikipedia์๋ Union Rule + Path Comp๋ฅผ ์ํํ ๋, ์๊ฐ ๋ณต์ก๋๊ฐ $O(\log^* n)$ ์์ ๋ณด์ด๋ ์ฆ๋ช ์ด ์์ต๋๋ค. $\log^* n$ ์ด๋ผ๋ ํจ์๋, ๋๋ต $\log \log \log \dots \log n$์ ๊ฐ์ด 1๋ณด๋ค ์์์ง๊ธฐ ์ํด ํ์ํ $\log$์ ๊ฐ์์ ๋๋ค. ์ด ํจ์๋ ๋น์ฐํ ๋งค์ฐ ๋๋ฆฌ๊ฒ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์, ์ค์ฉ์ ์ผ๋ก๋ 5 ์ดํ์ ๊ฐ์ ๊ฐ์ง๋ค๊ณ ๊ฐ์ ํด๋ ๋ฉ๋๋ค. CLRS ์ฑ ์ chapter 21์๋ Inverse ackermann ํจ์์ ๊ดํ ์ฆ๋ช ์ด ์๋ก๋์ด ์์ต๋๋ค. ๊ด์ฌ์ด ์๋ค๋ฉด ์ฐธ๊ณ ํ์ธ์. ์ฐ๋ฆฌ๊ฐ ๋ค๋ฃจ๊ธฐ์๋ ํ์ ์ด์์ผ๋ก ๋ณต์กํ๊ณ , ๋ณ๋ก ์ค์ํ์ง ์์ต๋๋ค. ๋ค๋ง ๋ ์ฆ๋ช ๋ชจ๋ ์๋นํ Elegantํฉ๋๋ค.
-
($\star$) Union Find์ ๊ทธ๋ํ์ ์ฉ์ด๋ก ์ฐ๋ฉด, ๋ ธ๋๋ค์ ์๋ ์ฐ์ฐ๊ณผ ๋ ๋ ธ๋๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋์ง ๋ฌป๋ ์ฐ์ฐ์ด๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ Incremental connectivity๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๋ฐ๋๋ก, ๊ฐ์ ์ด ์ฒ์์๋ ์ฐ๊ฒฐ๋์ด ์๊ณ , ์ญ์ ๋๋ ๊ฒฝ์ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๊น์? ์ฆ, union-find์ union ๋์
disconnect(u, v)
์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ๊ตฌํํ ์ ์์๊น์? ์ด ๋ฌธ์ ๋ incremental๋ณด๋ค ํจ์ฌ ์ด๋ ต์ต๋๋ค. ์ฒ์์ ์ฐ๊ฒฐ๋ ์ํ๊ฐ Tree์ธ ๊ฒฝ์ฐ, 1981๋ ์ Evan๊ณผ Shiloach๊ฐ $O(n \log n)$ ์๊ณ ๋ฆฌ์ฆ์, 1997๋ ์ Alstrup ๋ฑ์ด $O(n + m)$ ์ ๊ฐ๋ฅํจ์ ๋ณด์์ต๋๋ค. Planar graph์ ๋ํด์ ์ ํ ์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ด ์ ์๋ ๊ฒ์ 2015๋ ์ ์ผ์ ๋๋ค. -
($\star\star$) ์ด์ , ๋ ๋ฌธ์ ๋ฅผ ํฉ์ณ ๋ด ์๋ค. connect์ disconnect์ฐ์ฐ์ ๋ชจ๋ ์ง์ํ ์ ์์๊น์? ์ด ๋ฌธ์ ๋ ๊ทธ๋ํ๊ฐ ๋ชจ๋ ์ํฉ์์ Forest (์๋ก ์ฐ๊ฒฐ๋์ง ์์ ํธ๋ฆฌ๋ค) ์์ด ๋ณด์ฅ๋๋ ๊ฒฝ์ฐ $O(n \log n)$ ์, ์ผ๋ฐ ๊ทธ๋ํ์์๋ ์ฟผ๋ฆฌ๋น poly-logarithmic ์๊ฐ์ ํ ์ ์์์ด ์๋ ค์ ธ ์์ต๋๋ค.
Programming Practice
-
C++์ STL multiset ๋ฑ์ ์ฌ์ฉํ์ฌ, BOJ 7662๋ฒ์ ํด๊ฒฐํด ๋ณด์ธ์.
-
์ฒ์์ผ๋ก STL์์ ์์ ์ง์ํ์ง ์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํด ๋ณด๊ฒ ๋์์ต๋๋ค. Disjoint set ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํด ๋ณด๊ณ , ๊ตฌํ์ฒด๋ฅผ BOJ 1717๋ฒ์ ์ ์ถํด์ ํ์ธํด ๋ณด์ธ์. C++๋ก ๊ตฌํํ ์ฌ๋ฐ๋ฅธ ๊ตฌํ์ฒด๋ 100ms ๋ฏธ๋ง์ผ๋ก ๋์ํฉ๋๋ค. ๋ง์ฝ ์๊ฐ๋ณด๋ค ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ฉด, ๋ค๋ฅธ ์ฌ๋์ ๋น ๋ฅธ ๊ตฌํ์ ์ฐธ๊ณ ํด์ ์ด๋ค ๋ถ๋ถ์ ๊ฐ์ ํ ์ ์์์ง ์์๋ณด์ธ์.