๐ค ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ
๊ทธ๋ํ๋ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฒ์ด๋ผ๊ธฐ ๋ณด๋ค๋ ์ฌ๋ฌ๊ฐ์ง ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
๊ทธ๋ํ๋ ์ ์ ๊ณผ ๊ฐ์ ์ผ๋ก ๊ตฌ์ฑ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ปํฉ๋๋ค.
์ด๋ฒ ์๊ฐ์ ์ ๋ฒ ํฌ์คํ ์ ์ด์ด DFS์ ๋ํด ์กฐ๊ธ ๋ ์์๋ณด๊ณ Biconnected Graph์์ Articulation Point๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ง์ค์ ์ผ๋ก ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ ์ด์ ํฌ์คํ
๐ Connected graph G์ ๋ํ ๋ฌธ์
โ๏ธ DFS tree์ ์ฑ์ง
Problem 1 : G์ ๋ชจ๋ articulation point ์ฐพ๊ธฐ.
Problem 2 : Problem 1์ ์ด์ฉํ์ฌ G์ bioconnected component์ฐพ๊ธฐ
ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด DFS tree์ ์ฑ์ง์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ Articulation Point์ ๊ด๋ จ๋ DFS tree์ ์ฑ์ง์ ๋จผ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
โ๏ธ Lemma 1
DFS tree ์ root node ์ child node๊ฐ ๋ ๊ฐ ์ด์์ด๋ผ๋ฉด root node๋ articulation point์ด๋ฉฐ, ์ญ๋ ์ฑ๋ฆฝํ๋ค.
์ฆ๋ช 1
์ด๋ ๋ง์ฝ $(r, a)์ (r, b)$๋ฅผ ํฌํจํ๋ cycle์ด ์กด์ฌํ๋ฉด ๋ ์ค ํ๋๋ back edge๊ฐ ๋์ด์ผ ํ๋ฏ๋ก ๋ชจ์์ ๋๋ค.
์ฆ๋ช 2
โ๏ธ Lemma 2
DFS tree์์ (i) s ๊ฐ v์ child node์ด๊ณ (ii) s์ descendant(s ํฌํจ)๊ณผ v์ proper ancestor(v ๋ฏธํฌํจ)๋ฅผ ์ฐ๊ฒฐํ๋ back edge๊ฐ ์กด์ฌํ์ง ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ non-root node v, s๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ v๋ articulation point์ด๋ค.
์ฆ๋ช 1
๋ง์ฝ ์ ์กฐ๊ฑด์ ํด๋นํ๋ node s๊ฐ ์๋ค๊ณ ํ๊ฒ ์ต๋๋ค.
๊ทธ๋ฌ๋ฉด v๋ฅผ ์ ๊ฑฐํ๋ฉด s์ subtree์์ ์ด๋ค node๋ ํด๋น node ์์ v์ proper ancestor๋ก ๊ฐ๋ path๊ฐ ์กด์ฌํ์ง ์๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก v๋ articulation point ์ ๋๋ค.
ํด๋น path๊ฐ ์กด์ฌํ๋ ค๋ฉด s์์ v์ proper ancestor๋ก ๊ฐ๋ back edge๊ฐ ํ์ํฉ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก v๋ articulation point ์ ๋๋ค.
์ฆ๋ช 2
โ๏ธ Lemma 3
DFS tree ์ leaf node๋ articulation point ๊ฐ ์๋๋ค.
์ฆ๋ช
Leaf node๋ child node๊ฐ ์๊ธฐ ๋๋ฌธ์ node๋ฅผ ์ ๊ฑฐํด๋ ๋๋จธ์ง๋ ์ฌ์ ํ tree edge ๋ง์ผ๋ก tree ๊ฐ ๋๋ฉฐ, tree์ ์ ์์ ์ํด ํด๋น ๊ทธ๋ํ๋ ์ฌ์ ํ connected ํฉ๋๋ค.
์์ ๋ฌธ์ ๋ฅผ ํ๋ฉฐ articulation point์ biconnected component๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ดํดํด๋ณด๊ฒ ์ต๋๋ค.
๐ Problem 1
Connected Graph G๊ฐ ์ฃผ์ด์ก์ ๋ G์ ๋ชจ๋ articulation point ์ฐพ๊ธฐ
โ๏ธ Solution 1.
Vertex๋ฅผ ํ๋์ฉ ์ ๊ฑฐํ๋ฉด์ DFS๋ฅผ ์ด์ฉํ์ฌ connectivity check๋ฅผ ์งํํฉ๋๋ค.
Vertex v๋ฅผ ์ ๊ฑฐํ ๋ค G๊ฐ disconnected์ด๋ฉด v๋ articulation point์ ๋๋ค.
์ด๋ฅผ ์๋ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
for each vetex v:
remove v;
test resulting graph for connectivity;
put back v;
ํด๋น ์ฝ๋์ ์๊ฐ๋ณต์ก๋๋ $O(n(n + m))$์ ๋๋ค.
โ๏ธ Solution 2.
Connected Graph G๊ฐ ์ฃผ์ด์ก์ ๋ ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ Tree ํํ์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์์ต๋๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ์์ ๊ฐ์ ๊ทธ๋ฆผ์ด ์ฃผ์ด์ก์ ๋ Articulation Point๋ Node 2์ Node 6์ ๋๋ค.
์ด๋ DFS Tree ์ ์ฑ์ง์ ์ด์ฉํ์ฌ Articulation Point๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์ด์
Node 2 : Lemma1์ ์ํด Child node๊ฐ ๋ ๊ฐ ์ด๋ฏ๋ก articulation point ์ ๋๋ค.
Node 6: Lemma2์ ์ํด Node 6์ child Node์ธ Node 7์ descendant๋ก ๋ถํฐ Node 6์ proper ancestor๋ก์ back edge๊ฐ ์์ผ๋ฏ๋ก articulation point ์ ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ ์ธ ์ฐจ์์์ ์ ๊ทผํ๊ธฐ
์์ Tree๊ทธ๋ํ๋ฅผ DFS tree์ ํํ๋ก ๋ํ๋ด๊ฒ ์ต๋๋ค.
์ ์ ์ ํ๋์ฉ ์ ๊ฑฐํ๋ฉด์ DFS๋ฅผ ์ด์ฉํด ์ฐ๊ฒฐ ๋์ด์๋์ง๋ฅผ ์ฒดํฌํฉ๋๋ค.
DFS tree์ ๊ฐ node v์ ๋ํด, v์ ์ด๋ค descendant u (u = v์ผ ์ ์์)์ incidentํ back edge (u, w)๊ฐ ์กด์ฌํ๋ค๋ฉด
$$low(v) = min(pre(v), pre(w))$$
๋ก ์ ์ํ๊ฒ ์ต๋๋ค.
KEY LEMMANon Root Node v๊ฐ low(u) ≥ pre(v)๋ฅผ ๋ง์กฑํ๋ child node u๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, v๋ articulation point ์ด๋ฉฐ, ์ญ๋ ์ฑ๋ฆฝํ๋ค.KEY LEMMA ์ฆ๋ช low(u) ≥ pre(v)๋ผ ํ์.(u๋ v์ child node) v์ proper ancestor ๋ v๋ณด๋ค pre-order number๊ฐ ํญ์ ์๊ฑฐ๋ ๊ฐ์ผ๋ฏ๋ก child node u์์ v์ proper ancestor๋ก์ backedge๊ฐ ์กด์ฌํ์ง ์๋๋ค. ์ด๋ " Lemma 2 " ์ ์ํด v๋ articulation point ์ด๋ค. ์๋์ ๊ทธ๋ฆผ์์ Node 6์ ๊ฒฝ์ฐ child node 7์ low๋ 8์ด๋ฏ๋ก low(7) ≥ pre(6)์ ๋ง์กฑํฉ๋๋ค. ์ญ๋ ์ฑ๋ฆฝํจ์ ์ฆ๋ช |
์์ ๊ทธ๋ฆผ์ ๋ฐํ์ผ๋ก DFS tree๋ฅผ ์ด์ฉํ์ฌ articulation point๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ์ค์ํ ์๊ฐ์ ํ๋ฆ์ "DFS ๋ฅผ ํ ๋ฒ ์ํํ๋ฉด์ ๋ชจ๋ articulation point๋ค์ returnํ๋ค"์ ๋๋ค.
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์๋์ ์์๋๋ก ์งํ๋ฉ๋๋ค.
1. Root node๋ฅผ ๋จผ์ ํ์ํ๋๋ฐ child๊ฐ ๋ ๊ฐ ์ด์ ์๋์ง ํ์ธ๋ง ํ๋ฉด ๋๋ฏ๋ก ์ฝ๊ฒ ํ๋ณ ๊ฐ๋ฅํฉ๋๋ค. |
2. Non root node์ ๊ฒฝ์ฐ ๋ ๊ฐ์ง๋ฅผ ๊ณ ๋ คํด์ผํฉ๋๋ค. i) DFS ์์ low๊ฐ์ ๊ณ์ updateํด ๋๊ฐ๋ฉฐ, low(v)๊ฐ์ postvisit(v) ์์ ์์ ์์ ํ ๊ฒฐ์ ๋ฉ๋๋ค. ii) ๋ฐ๋ผ์ vertex v์ child node u์ ๋ํ explore๊ฐ ๋๋ ๋ค, pre(v)์ low(u)๋ฅผ ๋น๊ตํ์ฌ, low(u) ≥ pre(v)์ด๋ฉด v๋ articulation point์ ๋๋ค. |
DFS ๋์ค low(v)๋ ์ด๋ป๊ฒ update ํ๋์?
์ด๊ธฐ๊ฐ์ pre(v) ← previsit(v) ๋ ๊ฒฐ์ ๋ฉ๋๋ค.
Back edge(v, u)๊ฐ ์๋ค๋ฉด low(v) = min (low(v), pre(u)) ๋ก update ๋ฉ๋๋ค.
v์ child u์ ๋ํ explore๊ฐ ๋๋๋ฉด low(v) = min (low(v), low(u)) ๋ก updateํฉ๋๋ค.
์ด๋ฅผ ์๋์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
์์ ๋ฅผ ํตํด ์๋์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
โ๏ธ ์๊ฐ ๋ณต์ก๋
DFS๋ฅผ ์ด์ฉํ์ฌ articulation point๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ๋ณต์ก๋๋
1) DFS๋ฅผ ํตํด low, pre, post๊ฐ์ ์ฐพ์ผ๋ฉฐ tree๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ์ $O(n+m)$
2) ๋ชจ๋ ์ ์ ์ ํ์ํ๋ฉฐ low์ pre๊ฐ์ ๋น๊ตํ๋ ๋ฐ์ $O(n)$
$$O(n + m)$$
์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
๐ Problem 2
Problem 1์ ์ด์ฉํ์ฌ G์ biconnected component ์ฐพ๊ธฐ
์ฌ๊ธฐ์ Graph๋ connected ๋ผ ๊ฐ์ ํ๋ฉฐ, ์๋ ๊ฒฝ์ฐ graph์ ๊ฐ connected component์ ๋ํด biconnected component๋ฅผ c์ฐพ์ต๋๋ค.
Biconnected component๋ edge๋ฅผ partitioningํ๋ฏ๋ก biconnected component๋ฅผ ํ๋ return ํ ๋๋ง๋ค ํด๋น component์ ์ํด์๋ edge๋ค์ return ํฉ๋๋ค.
์ด ๋ํ DFS๋ฅผ ์ด์ฉํฉ๋๋ค.
DFS๋ฅผ ํ๋ฉด์ ๊ฑฐ์ณ๊ฐ๋ edge๋ฅผ ์ ์ฅํ๋ stack์ ์ด์ฉํ์ฌ biconnected component๋ฅผ ์ฐพ์ต๋๋ค.
Vertex v๋ฅผ exploreํ๋ฉด์ edge(v, u)๋ฅผ check ํ ๋๋ง๋ค ํด๋น edge๋ฅผ stack์ pushํฉ๋๋ค.
๋ง์ฝ v๋ฅผ explore ํ๋ฉด์ v์ child node u์ ์ํด v๊ฐ articulation point์์ด ๋ฐํ์ง๊ฑฐ๋(low(u) ≥ pre(v)) root node์ ๋ํ explore๊ฐ ๋๋๋ฉด edge(u, v)๊ฐ ๋์ฌ ๋๊น์ง stack ์์ ๋ชจ๋ edge๋ค์ popํ๋ฉฐ, ์ด๊ฒ์ด ํ๋์ biconnected component๊ฐ ๋ฉ๋๋ค.
Articulation point๋ฅผ ์ฐพ์ ๋์๋ ๋ฌ๋ฆฌ root node case๋ฅผ ๋ฐ๋ก ์ฒ๋ฆฌํด์ค ํ์๋ ์์ต๋๋ค.
์ด๋ฅผ ์๋์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
ํด๋น ์๋์ฝ๋๋ฅผ ๋ถ์ํด๋ณด๊ฒ ์ต๋๋ค.
์์๋ก ์ง์ ํ v๋ถํฐ ์์ํ์ฌ DFS๋ฅผ ์งํํฉ๋๋ค.
articulation point๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ์งํ๋์ง๋ง stack์ ์์ฑํ์ฌ ๊ฐ vertex์ ๊ฐ์ stack์ ์ ์ฅํฉ๋๋ค.
articulation์ ์ฐพ๊ฒ ๋๋ฉด low(u)์ pre(v)๋ฅผ ๋น๊ตํ์ฌ stack์ ์ ์ฅ๋ ๊ฐ๋ค์ popํด์ค๋๋ค.
๊ทธ๋ pop๋์ด์ ธ ๋์จ ๊ฐ๋ค์ ์งํฉ์ด biconnected component์ ๋๋ค.
โ๏ธ ์๊ฐ๋ณต์ก๋
1) DFS๋ฅผ ์งํํ๋ ๋ฐ์ $O(n + m)$
2) push์ pop์ ๊ฐ m๋ฒ ์งํํ์ฌ $O(m)$
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋
$$O(n + m)$$
์ ๋๋ค.
๋ค์ ํฌ์คํ ์์๋Directed Graph์์ DFS๋ฅผ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
'Computer Science > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ๋ถํ ์ ๋ณต(4) - Selection (0) | 2022.10.20 |
---|---|
[Algorithm] ๋ถํ ์ ๋ณต(3) - Matrix Multiplication (0) | 2022.10.20 |
[Algorithm] ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ(2) - DFS(๊น์ด์ฐ์ ํ์)(1) (0) | 2022.10.08 |
[Algorithm] ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ(1) - ๊ทธ๋ํ์ ๊ธฐ๋ณธ ์ฉ์ด (0) | 2022.10.04 |
[Algorithm] ๋ถํ ์ ๋ณต(5) - Median of Medians (0) | 2022.10.04 |