Fibonacci Heap
Contents
์ฐธ๊ณ ์๋ฃ : CLRS Chapter 19, MIT Lecture Note
Motivation
Minimum Spanning Tree๋ฅผ ์ฐพ๋ Primโs algorithm์ด๋, ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋ Dijkstra Algorithm์์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํ๋ ์๋ฃ๊ตฌ์กฐ๋ก Priority queue๊ฐ ์๋ค. ๋ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ๊ณผ์ ์ ๋ณด๋ฉด, ๋ค์ ๋ ์ฐ์ฐ์ด ํ์ํจ์ ์ ์ ์๋ค.
-
insert(x, e)
: ์๋ฃ๊ตฌ์กฐ์ ๊ฐ์ ๋๋ ์ ์ ๊ณผ ๊ทธ ๊ฐ์ค์น๋ฅผ ๋ฃ๋๋ค. ๊ฐ์ค์น๋ ๊ฐ์ ๊ฐ์ค์น๊ฑฐ๋ (Prim), ์์์ ์์ ๊ทธ ์ ์ ๊น์ง ์ค๋, ํ์ฌ๊น์ง ์ฐพ์์ง ์ต๋จ ๊ฑฐ๋ฆฌ์ด๊ฑฐ๋ (๋ค์ต์คํธ๋ผ)โฆ -
pop_min()
: ์ต์ ๊ฐ์ค์น๋ฅผ ๊ฐ๋ ๊ฐ์ /์ ์ ์ ๋ฃ๋๋ค.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๊ฒ ์ง๋ง, C++์ ์ผ๋ฐ์ ์ธ priority queue๋ฅผ ์ด๋ค๋ฉด ๋๋ต ์ด๋ฐ ๋๋์ผ๋ก ๊ตฌํํ ์ ์์ ๊ฒ์ด๋ค.
bool relax(Edge edge, int u, int dist[])
{
bool flag = 0;
int v = edge.dest, w = edge.w;
if (dist[v] > dist[u] + w && (dist[u]!=INF))
{
flag = true;
dist[v] = dist[u]+w;
}
return flag;
}
void dijkstra(int dist[], int start, vector<Edge> graph[])
{
fill(dist,dist+MX,INF);
dist[start] = 0;
priority_queue<Edge> pq;
pq.push({start,0});
while(!pq.empty())
{
Edge x = pq.top();
int v = x.dest, w = x.w;
pq.pop();
if (w>dist[v])
continue;
for (auto ed : graph[v])
if (relax(ed, v, dist))
pq.push({ed.dest,dist[ed.dest]});
}
}
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ณด๋ฉด, ๊ฐ๋ ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ฐพ๊ณ ์ถ์ ๊ฒ์ ๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ์์ ๋ฏธ๋ฐฉ๋ฌธ ์ ์ ์ด๋ค. ์ฆ, ์ฐ๋ฆฌ๋ ์ค์ ๋ก๋ ์ ์ ์ ๋ฝ๊ณ ์ถ์ง๋ง, priority queue์๋ ์ค์ ๋ก๋ ๊ฐ์ ์ ๋ฃ๊ณ ์๋ค. ๋ค์ ๋งํด, ํ์ฌ ๋ฐฉ๋ฌธํ ์ ์ ์งํฉ์ด $S$ ๊ณ , ์๋ก์ด ์ ์ $x$ ๋ก ๊ฐ๊ณ ์ถ์ ๋, ์ฐ๋ฆฌ๊ฐ ์๊ณ ์ถ์ ๊ฒ์ $d(x, S)$ ์ง๋ง, priority queue์ ์ค์ ๋ก ๋ฃ์ ๊ฒ์ $s \in S$ ์ ๋ํด ๊ฐ๊ฐ์ $d(x, s)$ ๋ฅผ ๊ฐ๊ณ ์๋ค. ๋ฌผ๋ก ๊ตฌํ ์์ฒด์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง, ์ด ๊ณผ์ ์์ priority queue์ ์ต๋ $E$๊ฐ์ ์ํธ๋ฆฌ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ฏ๋ก $E \log E$ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
์ $d(x, S)$ ๋ฅผ ๊ด๋ฆฌํ ์ ์์๊น? ์ด๋, $S$ ๊ฐ ๊ณ์ ๋ฐ๋๊ธฐ ๋๋ฌธ์, $d(x, S)$ ๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด priority_queue์ ๋ค์ ์ฐ์ฐ์ด ํ๋ ๋ ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
-
modify(x, v)
: $x$์ ๊ฐ์ค์น๋ฅผ $v$๋ก ๋ฐ๊พผ๋ค.
๊ทธ๋ฌ๋, ์ค์ ๋ก ์ ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋ ๊ณผ์ ์ ๋ณด๋ฉด, modify๋ ์ฝ๊ฐ ์ค๋ฒํฌ์ด๋ค. $S$๋ ์งํฉ์ผ๋ก์ ๋จ์กฐ์ฆ๊ฐ (์์๊ฐ ๋น ์ง์ง๋ ์๊ณ ์ถ๊ฐ๋ง ๋๋ค) ์ด๋ฏ๋ก, $d(x, S)$ ๊ฐ ์ํ ๊ณผ์ ์์ ๋จ์กฐ๊ฐ์ํจ์ ๊ด์ฐฐํ๋ฉด, ํ์ํ ์ฐ์ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ผ ์ ์๋ค.
-
decrease(x, v)
: $x$์ ๊ฐ์ค์น๋ฅผ $v$๋ก ์ค์ธ๋ค.
์ฌ์ ํ, C++์ priority_queue๋ heap์ผ๋ก ๊ตฌํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ฐ์ฐ์ ์ง์ํ์ง ์๋๋ค. ์ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ฐ๋ก Fibonacci Heap์ด๋ค.
Fibonacci Heap
ํผ๋ณด๋์น ํ์ ์ค์ ๋ก๋ ํ ์ฑ์ง์ ๋ง์กฑํ๋ ํธ๋ฆฌ ์ฌ๋ฌ ๊ฐ๋ก ๊ตฌ์ฑ๋๋ค. ์ฆ, ํธ๋ฆฌ $T_1, T_2, \dots$ ๊ฐ ํ ์ฑ์ง์ ๋ง์กฑํ๋ฉฐ, ๊ฐ ํธ๋ฆฌ์ ๋ฃจํธ ๋ ธ๋๋ค์ doubly linked list๋ก ๊ด๋ฆฌํ๋ค. ์ฌ๊ธฐ์ ํ ์ฑ์ง์ด๋, ์์์ edge์์ parent node์ ๊ฐ์ค์น๊ฐ child node๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๊ฒ ํ๋ ๊ฒ์ด๋ค. ๋จ, ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ Binary Heap ๊ณผ๋ ๋ฌ๋ฆฌ ์์์ ํ ์ฑ์ง์ ๋ง์กฑํ๋ ํธ๋ฆฌ๋ฅผ ์ด์ฉํ ๊ฒ์ด๋ค.
๋ช๊ฐ์ง ๋ณ์์ ์ฉ์ด๋กค ์ ์ํ๊ณ ๊ฐ์.
- root list๋, ๋น์ฐํ, root๋ค์ ์ด์ ๋ฆฌ์คํธ๋ฅผ ๋งํ๋ค. ์ด๋ฅผ $L$ ์ด๋ผ ํ๊ณ , ๊ทธ ํฌ๊ธฐ๋ฅผ $\abs{L}$ ์ด๋ผ๊ณ ์ฐ์.
- node
x
์rank(x)
๋, ๊ทธ ๋ ธ๋์ ์์ ๋ ธ๋์ ๊ฐ์๋ฅผ ๋งํ๋ค. ๋ํ, ํธ๋ฆฌ $T_i$์ rank๋ ํธ๋ฆฌ์ ๋ฃจํธ์ rank๋ก ์ ์ํ๋ค. ์ฆ, ๋ฃจํธ๋ก๋ถํฐ ๊ฑฐ๋ฆฌ๊ฐ 1์ธ ๋ ธ๋์ ๊ฐ์. - node
x
์ ์์ ๋ ธ๋ $y_1, y_2, \dots y_{\text{rank}(x)}$ ๊ฐ ์๋๋ฐ, ์ด๋ค์ ์ธ๋ฑ์ค๋ ํญ์ ์ถ๊ฐ๋ ์์๋๋ก ๋งค๊ธฐ๋ฉฐ, ์ค๊ฐ์ ๋ ธ๋๊ฐ ๋จ์ด์ง๋ฉด ๋๋จธ์ง์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ค๊ณ ๋ณธ๋ค. linked list์์์ ์์๋ฅผ ์๊ฐํ๋ฉด ๋๋ค. - ์ด๋ค ๋ ธ๋์ ๋ํด~ ๋ผ๊ณ ํ ๋, ์ฐ๋ฆฌ๋ ํญ์ ๊ทธ ๋ ธ๋๋ก ๋ฐ๋ก ์ฐ๊ฒฐ๋๋ ํฌ์ธํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ฃผํ๋ค. ์ด๊ฒ ์ ์ค์ํ์ง๋ ๋์ค์ ๋์ค๊ฒ ๋๋ค.
- ๊ฐ ๋
ธ๋๋ง๋ค
mark
๋ผ๋ boolean ๋ณ์๋ฅผ ํ๋ ๋๋ค. - Heap ์ฑ์ง์ ๋ง์กฑํ๋ฏ๋ก, ๊ฐ ํธ๋ฆฌ์ ๋ฃจํธ๋ (๋ค๋ฅธ ํธ๋ฆฌ์ ์๊ด์์ด) ์๊ธฐ ํธ๋ฆฌ์์ ์ต์๊ฐ์ด๋ค. ์ด๋ค ์ค ๋ค์ ์ต์๊ฐ์ ํญ์ ๊ฐ์ง๊ณ ์์ ๊ฒ์ด๋ฉฐ, ์ด๋ฅผ
global-min
์ด๋ผ๊ณ ํ์. ์ด์ , ์ฐ๋ฆฌ๊ฐ ํ์ํ ์ฐ์ฐ์ ๊ตฌํํ๊ธฐ ์ํด, ์ด ์๋ฃ๊ตฌ์กฐ์ ๋ํ ๊ธฐ๋ณธ์ฐ์ฐ๋ค์ ์ ์ํด์ผ ํ๋ค.
-
INSERT(x)
: ๋ชจ๋ insert(x) ์ฐ์ฐ์, ๋ ธ๋ $x$๋ฅผ ์๋ก์ด ํธ๋ฆฌ์ ๋ฃจํธ๋ผ๊ณ ๋ณด๊ณ , ๋ ธ๋ ํ๊ฐ์ง๋ฆฌ ํธ๋ฆฌ๋ฅผ root list ๋งจ ๋ค์ ์ง์ด๋ฃ๋ ๊ฒ์ผ๋ก ํ๋ค. -
MERGE(T1, T2)
: Merge ์ฐ์ฐ์, ํ ์ฑ์ง์ ๋ง์กฑํ๊ธฐ ์ํด, ๋ ํธ๋ฆฌ์ ๋ฃจํธ๊ฐ ๊ฐ๊ณ ์๋ ๊ฐ์ค์น ๊ฐ์ ํ์ธํด์, ํฐ ์ชฝ์ ์์ ์ชฝ์ ์์๋ ธ๋๋ก ๋ฐ์ด๋ฃ๋๋ค. -
CUT(x)
: root์ ๋ํ cut์ ์๋ฌด๊ฒ๋ ํ์ง ์๊ณ , Root๊ฐ ์๋ ๋ ธ๋๋ผ๋ฉด ๊ทธ ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก ํ๋ ์๋ธํธ๋ฆฌ๋ฅผ ์๋ผ์ root list ๋งจ ๋ค์ ์ง์ด๋ฃ๋๋ค. ์ด๋, ๋ค์๊ณผ ๊ฐ์ด ๊ฒฝ์ฐ๋ฅผ ๋๋๋ค.- Parent node๊ฐ ๋งํน๋์ด ์์ง ์๋ค๋ฉด, Parent node๋ฅผ ๋งํฌํ๋ค.
- Parent node๊ฐ ์ด๋ฏธ ๋งํน๋์ด ์๋ค๋ฉด, Parent node๋ฅผ ์ฌ๊ท์ ์ผ๋ก cut ํ๋ค.
์ฆ, ์ด๋ ๋ค์ ๋งํ์๋ฉด ์ด๋ค ๋ ธ๋์ ๋ํ ๋งํน์ ์์ ์ child node ์ค ์์ด๋ฒ๋ฆฐ(cut๋) ๋ ธ๋๊ฐ ์๋์ง ์ฌ๋ถ ์ ๋ํ ๋งํน์ผ๋ก ์ ์ํจ์ ๋งํ๋ค. root node๋ cut๋์ง๋ ์๊ณ , mark๋์ด์ผ ํ ์ํฉ์์๋ mark๋ฅผ ๋ฌด์ํ๊ธฐ๋ก ํ๋ค (์ด์ฐจํผ cutํ ๋ ์๋ฌด ์ผ๋ ์์ผ๋ฏ๋ก, ์๋์ผ๋ก ์ฌ๊ท์ cut์ ์ ์ฉํ์๋ค๊ณ ์๊ฐํด๋ ์ข๊ฒ ๋ค)
๊ฐ operation์ time complexity๋ฅผ ์๊ฐํ๋ฉด, INSERT
์ MERGE
๊ฐ $O(1)$์ ๋์ํจ์ ๋น์ฐํ๋ค. CUT
์ ๊ฒฝ์ฐ, ์ฌ๊ท์ ์ผ๋ก ์ฌ๋ผ๊ฐ ์ ์์ผ๋ฏ๋ก, ์ต๋ $O(H)$, ์ฆ ํธ๋ฆฌ์ ๋์ด๋งํผ ์ฌ๊ท๋ ์ ์๋ค.
์ด ๊ธฐ๋ณธ ์ฐ์ฐ๋ค์ ์ด์ฉํด์, ๋ค์๊ณผ ๊ฐ์ด POP-MIN
๊ณผ DECREASE
๋ฅผ ๊ตฌํํ๋ค.
-
DECREASE(x, v)
: ๋จผ์ , $x$ ๋ฅผCUT
ํด์ ์๋ก์ด ํธ๋ฆฌ๋ก ๋ง๋ ๋ค์ decrease๋ฅผ ์ค์ ๋ก ์ํํ๋ค. root๋ฅผ decreaseํ๋ ๊ฒ์ ํ ์ฑ์ง์ด ์ ๋ ๊นจ์ง์ง ์์ผ๋ฏ๋ก ํญ์ ๊ฐ๋ฅํ๋ค. ํ์ํ๋ค๋ฉด,global-min
ํฌ์ธํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ค. (decrease ๊ฒฐ๊ณผ ํ์ฌ์ global-min๋ณด๋ค ์์์ก๋ค๋ฉด). -
POP-MIN()
: ์ฐ๋ฆฌ๋global-min
์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, popํด์ผ ํ ๋ ธ๋๋ฅผ $O(1)$์ ์ ์ ์๋ค. ์ด ๋ ธ๋๋ฅผ ์ญ์ ํ๋ฉด์, ์ด ๋ ธ๋ ์๋์ ๋ฌ๋ ค์๋ ๋ ธ๋๋ค์ ๋ชจ๋ root list์ ๋ผ์๋ฃ๋๋ค. ์ฆ, root list๋ ์ต๋# of children of global-min - 1
๋งํผ ์ฆ๊ฐํ๊ฒ ๋๋ค. ์ด๋, ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ์ํํ๋ค.- ์ด๋ ๊ฒ ๋์ด๋
root list
๋ฅผ ๋ค์ ์ค์ผ ๊ฒ์ด๋ค.rank
๊ฐ ๊ฐ์ ๋ tree๋ฅผ merge ํด์,rank
๊ฐ ํ๋ ํฐ ํธ๋ฆฌ๋ฅผ ์ป๋๋ค. ์ด๋ฅผrank
๊ฐ ์์ ์ชฝ๋ถํฐ ๋ฐ๋ณต์ ์ผ๋ก ์ํํด์,rank
๊ฐ $k$ ์ธ ํธ๋ฆฌ๊ฐ ๋ชจ๋ ์ต๋ ํ๋์ฉ๋ง ์๊ฒ ํ๋ค. ๋ง์ฝ ์ฒ์์ ๋ญํฌ๊ฐ 1์ธ ํธ๋ฆฌ๊ฐ 4๊ฐ, 2์ธ ํธ๋ฆฌ๊ฐ 3๊ฐ, 3์ธ ํธ๋ฆฌ๊ฐ 1๊ฐ ์๋ค๋ฉด, 1์ธ ํธ๋ฆฌ๋ค์ ํฉ์ณ์rank = 2
์ธ ํธ๋ฆฌ๋ฅผ 2๊ฐ ์ป๊ณ , ์ด๋ ๊ฒ ์ด 5๊ฐ์ rank-2 ํธ๋ฆฌ๋ฅผ ํฉ์ณ์ rank-2 ํธ๋ฆฌ 1๊ฐ์ rank-3 ํธ๋ฆฌ 2๊ฐ๋ฅผ ์ถ๊ฐํ๋ ค (0, 1, 3, 0), ๋ง์ง๋ง์ผ๋ก ์ด๋ค์ ํฉ์ณ rank-4 ํธ๋ฆฌ๋ฅผ ํ๋ ์ป์ด (0, 1, 1, 1)๋ก ๋ง๋๋ ์์ด๋ค. - ์ต์ข
์ ์ผ๋ก ํฉ์ณ์ง
root list
๋ฅผ ๋๋ฉด์,global-min
์ ๋ค์ ์ง์ ์ฐพ๋๋ค.
- ์ด๋ ๊ฒ ๋์ด๋
์ฐ๋ฆฌ์ ๋ง์ง๋ง ๋ชฉํ๋, ์ด ์ฐ์ฐ๋ค์ complexity๊ฐ insert, decrease, pop-min ๊ฐ๊ฐ์ด Amortized $O(1)$, $O(\log n)$, $O(1)$ ์์ ๋ณด์ด๋ ๊ฒ์ด๋ค.
Time complexity์ ์ฆ๋ช
๋จผ์ , ๋ค์์ ๋งค์ฐ ์ค์ํ Lemma ๋ฅผ ๋ณด์. ์ด Lemman๋ ์ด ์๋ฃ๊ตฌ์กฐ์ ์ด๋ฆ์ด ํผ๋ณด๋์น ํ ์ธ ์ด์ ์ด๋ค.
Maximum Rank Lemma
ํผ๋ณด๋์น ํ์ ์ํ ๊ณผ์ ์์ ์๊ธธ ์ ์๋ ํธ๋ฆฌ๋ค์ ๋ํ์ฌ, maximum rank of tree with n nodes
$= O(\log n)$
ํผ๋ณด๋์น ํ์ ์ํ ๊ณผ์ ์ ๋ณด๋ฉด, merge๋ ๋ฐ๋์ ๋ญํฌ๊ฐ ๊ฐ์ ํธ๋ฆฌ์์๋ง ์ผ์ด๋จ์ ๊ด์ฐฐํ ์ ์๋ค. ์ด๋ฅผ Merge Rule ์ด๋ผ๊ณ ๋ถ๋ฅด์.
์ด๋ฅผ ๋ณด์ด๋ ๊ฒ์, ๋๋ต ๋ค์๊ณผ ๊ฐ๋ค. ๋จผ์ , $x$ ์ ์์๋ ธ๋ ์ค $i$ ๋ฒ์งธ ๋ ธ๋๋ฅผ ์๊ฐํด ๋ณด์. ์ด ๋ ธ๋๋ ์ ์ด๋ $i$๋ฒ์งธ์ ๋ฌ๋ฆฐ ๋ ธ๋์ด๋ฏ๋ก, ์ด ๋ ธ๋๊ฐ ๋ฌ๋ ค ์๋ค๋ ๊ฒ์ ์ ์ด๋ ์์ $i-1$๊ฐ์ ๋ ธ๋๊ฐ ๋ฌ๋ฆฐ ์ํ์๋ค๋ ๋ป์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก $x$์ $i$๋ฒ์งธ ์์ $y_i$ ๊ฐ ๋ฌ๋ฆฌ๊ธฐ ์ ์, $y_i$์ rank๋ $i-1$ ์ด์์ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์, $y_i$ ๋ ์ต๋ 1๊ฐ์ ์์ ๋ ธ๋๋ฅผ cut์ผ๋ก ์์ด๋ฒ๋ฆด ์ ์๋ค. ๊ทธ ์ด์ ์์ด๋ฒ๋ฆฐ๋ค๋ฉด mark์ ์์น์ ์ํด, $y_i$ ๊ฐ $x$๋ก๋ถํฐ ๋จ์ด์ ธ ๋๊ฐ์ ๊ฒ์ด๋ค. ๋ฐ๋ผ์, $x$์ $i$ ๋ฒ์งธ ์์์ ์ ์ด๋ $i-2$ ์ ๋ญํฌ๋ฅผ ๊ฐ๋๋ค.
์ด ์์น์ ์ฌ๊ท์ ์ผ๋ก ์ ์ฉํ๋ฉด, rank๊ฐ $k$ ์ธ ๊ฐ์ฅ ์์ ํธ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ $P_k$ ๋ผ๊ณ ํ ๋, ๋ค์์ ์ฌ๊ท์์ ์ป๋๋ค. \(P_k \geq 1 + \sum_{i = 0}^{k-2} P_{i}\)
$k$ ๋ฒ์งธ ํผ๋ณด๋์น ์ $F_k$ ์ ๋ํด, ๋ค์๊ณผ ๊ฐ์ ์ฌ์ค์ด ์ ์๋ ค์ ธ ์๋ค. \(F_k = 1 + \sum_{i = 0}^{k-2} F_{i}\)
๋ค๋ง, $P_0 = 1$, $P_1 = 2$ ๋ฅผ ์ด์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์ ๋ง์ถ์ด ์ฃผ์ด์ผ ํ๋ค. ์ธ๋ฑ์ค๋ฅผ ์ ๋ง์ถ์ด ์ฃผ๋ฉด, $P_k$ ๊ฐ ์ ์ด๋ ํผ๋ณด๋์น ์์ด๋งํผ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํจ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํผ๋ณด๋์น ์๊ฐ $(1.5)^k$ ๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฆ๊ฐํจ์ด ์ ์๋ ค์ ธ ์์ผ๋ฏ๋ก, $P_k$ ๋ ์ง์์ ์ผ๋ก ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋ค. ๋ฐ๋๋ก ๋งํ๋ฉด, ๋ ธ๋๊ฐ $n$ ๊ฐ์ธ ํธ๋ฆฌ์ ์ต๋ rank๋ $O(\log n)$ ์์ด ์ฆ๋ช ๋์๋ค.
Amortized Analysis
Amortized analysis ์ค potential method๋ฅผ ์ฌ์ฉํ์. potential function $\phi$ ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ค.
\[\phi(DS) = \text{size of root-list} + 2 * \text{number of marked nodes}\]$\phi(DS_0)$์ ๋น ํผ๋ณด๋์น ํ์ผ๋ก ์๊ฐํ๋ฉด $phi(DS_i) \geq \phi(DS_0)$ ์์ด ์๋ช ํ๋ฏ๋ก ์ ํจ์๋ potential function์ผ๋ก validํ๋ค. $C_{\text{amortized}} = C_{\text{real}} + \Delta\phi$ ๋ฅผ ์ด์ฉํด์ ๋ถ์ํด๋ณด๋ฉด,
-
INSERT
: ์ค์ cost ๋ $O(1)$ ์ด๊ณ , $\Delta\phi$ ๋ root๋ง ํ๋ ๋์ด๋๋ฏ๋ก 1์์ ์ ์ ์๋ค. -
POP-MIN
: ์ค์ cost ๋ฅผ ๋จผ์ ์๊ฐํ๋ฉด, $O(1)$ ๋ง์ ๋ ธ๋๋ฅผ ์ง์ฐ๊ณ , ๊ทธ ๋ ธ๋์ children์ ์๋งํผ, ์ฆrank(global-min)
๋งํผ root list๋ฅผ ๋๋ ค์ผ ํ๋ค. ์ด ๊ฐ์ $r$ ์ด๋ผ ํ์. ๋ง์ง๋ง์ผ๋ก, ๋ชจ๋ ํธ๋ฆฌ๋ค์ ๋๋ฉด์ merge ํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ ํ๋๋ฐ, ์ด๋ rank์ ๋ฐ๋ผ ๋ฒํท์ ๋ง๋ ๋ค๊ณ ์๊ฐํ๋ฉด $O(\abs{L} + \text{maximum rank})$ ์๊ฐ์ ๊ฐ๋ฅํ๋ค. $\Delta \phi$ ๋ฅผ ๋ช ํํ ์ก๊ธฐ ์ด๋ ค์ด๋ฐ, ์ด๋ ๊ฒ ์๊ฐํด ๋ณด์. ์ผ๋จ root-list ์ ํฌ๊ธฐ๊ฐ ์๋ ์ผ๋ง์๋์ง๋ ์ ์ ์์ผ๋,maximum rank
๊ฐ๋ณด๋ค ์ปค์ง ์๋ ์๋ค. (MERGE
๊ณผ์ ์ ๊ฑฐ์น๋ฏ๋ก) ๋ํ, marked node์ ๊ฐ์๋ ์๋ marked์๋์ง ์ ์ ์๋ ๋ ธ๋๋ค์ด root๊ฐ ๋๋ฉด์ ๊ฐ์ ๋ก unmark ๋๋ ๊ณผ์ ์ ๊ฑฐ์น๋ฏ๋ก, ๋ฐ๋์ ์ค์ด๋ ๋ค. ๋ฐ๋ผ์, $\Delta \phi \leq$maximum rank
์ ๋๋ ์ ์ ์๋ค. $\abs{L}$, ์ต๋ ๋ญํฌ ๋ ๋ชจ๋ $O(\log n)$ ์ด๋ฏ๋กPOP
์ฐ์ฐ์ amortizeํด๋ $O(\log n)$ ์ ์ด๋ฃจ์ด์ง๋ค. -
DECREASE
: Decrease๋ฅผ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฐ์ฅ ํฐ ์์ธ์ cut์ด ๋ช๋ฒ ์ผ์ด๋ ์ง ์ ์ ์๋ค๋ ์ ์ด๋ค. ์ต์ ์ ๊ฒฝ์ฐ, cut์height of tree
๋งํผ ์ผ์ด๋๋๋ฐ, ์ด ๊ฐ์ $h$ ๋ผ ํ์. ์ด๋, potential function์ ๋ณํ๋ $\Delta \phi$ ๋ฅผ ์๊ฐํด ๋ณด๋ฉด, ํ๋ฒ cut์ด ์ผ์ด๋ ๋๋ง๋ค marked node๊ฐ ํ๋์ฉ ์ค์ด๋ค๊ณ , root-list์ ํฌ๊ธฐ๊ฐ ํ๋์ฉ ๋์ด๋๋ค. ์์๋ฅผ ๊ณ์ฐํด ๋ณด๋ฉด $\Delta \Phi$ ๊ฐ $-h$ ์์ ์ ์ ์๋ค. cut์ ํ๋ ์๊ฐ ์ธ์, ๋๋จธ์ง ์ฐ์ฐ๋ค์ ์์ ์๊ฐ์ ๋ฒ์ด์ง๋ฏ๋ก, potential drop ์ actual cost์ ํฉ์ณ ๋ณด๋ฉด amortized $O(1)$ ์์ ์๋ค.
Why thenโฆ
์ฐ๋ฆฌ๋ ์ด๋ ๊ฒ decrease-key๋ผ๋ ์ฐ์ฐ์ $O(1)$ ์ ์ํํ๋ ๋๋ผ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ป์๋ค. ์ด์ dijkstra ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ๋ priority queue์ vertex๋ฅผ ์ง์ ๋๋ ค๋ฃ๊ณ decrease๋ฅผ ํ๋ ์์ผ๋ก ๊ตฌํํ๋ฉด $O(V \log V)$ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ป๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ ํ๋ฒ๋ ์ด๋ ๊ฒ ๊ตฌํํ ์ฝ๋๋ฅผ ๋ณธ ์ ์ด ์๊ณ ์๋ง ์ฝ๋ ์ฌ๋๋ ๋ง์ฐฌ๊ฐ์ง์ผํ ๋ฐ, ๊ทธ ์ด์ ๋ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋ค ์ ์๋ค.
- ๊ตฌํ์ด ์๋นํ ์ด๋ ต๋ค. DECREASE, POP ๋ชจ๋ ํฌ์ธํฐ์ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋งค์ฐ ์กฐ์ฌ์ค๋ฝ๊ฒ ์ ์ด์ฉํด์ผ ํ๋ค.
- ์ค์ ๋ก ์์ฑํด๋ณด๋ฉด ๋งค์ฐ ๋๋ฆฐ๋ฐ, binary heap์ด ๊ทธ๋ฅ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฃผ๋ ์์ผ๋ก ์ ๋ง ๋น ๋ฅด๊ฒ ๊ตฌํํ ์ ์๋ ๋ฐ๋ฉด Fibonacci heap์ ํ์ฐ์ ์ผ๋ก ํฌ์ธํฐ๋ฅผ ์ด์ฉํ ๋งํฌ๋ ๋ฆฌ์คํธ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด์ผ ํ๊ณ , ๋จ์ ์ ๊ทผ์ ๋นํด ์ด๋ฐ ์์ผ๋ก ๊ตฌํํ๋ฉด ๋ช ๋ฐฐ์ ์์๊ฐ ๋ถ๋๋ค.
๋ง์ฝ $E$๊ฐ $V$์ ๋นํด ์๋นํ ํฐ dense graph ๋ผ๋ฉด, priority queue๋ฅผ ์คํผ๋์ ํ๋ ๋ฐฉ๋ฒ์ด ๋ ์ ์๊ฒ ์ง๋ง, $E$ ๊ฐ $O(V)$ ๋ด์ง๋ ๊ทธ ์ธ์ ๋ฆฌ์ธ ์ ์ ์์๋ ๋ณ๋ก ๋์์ด ๋์ง ์๋๋ค. ์ฌ๊ธฐ์ ๊ธฐ ์ฐพ์๋ณด๋ $V$๊ฐ 10๋ง ๋จ์, $E$๊ฐ $10^7$ ๋จ์์ธ ๊ทธ๋ํ์์๋ ๋นจ๋ผ์ง๊ธด ํ๋ค๋ ๋ฏ ํ๋ค.