๐ง DAG : Directed Acyclic Graph DAG๋ Cycle์ด ์๋ ๋ฐฉํฅ ๊ทธ๋ํ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ฐฉํฅ ๊ทธ๋ํ $G$ ์์ Cycle์ด ์๋ค๋ ๊ฒ์, $G$ ์ ๋ํ DFS Tree๊ฐ Back Edge๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ ๋ง๊ณผ ๋์ผํฉ๋๋ค. ๐ ์ฆ๋ช
๋๋ณด๊ธฐ ๐ง ์์ ์ ๋ ฌ(Topological Sort) ์์ ์ ๋ ฌ์ ์์๊ฐ ์ ํด์ ธ์๋ ์์
์ ์ฐจ๋ก๋ก ์ํํด์ผ ํ ๋ ๊ทธ ์์๋ฅผ ๊ฒฐ์ ํด์ฃผ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค. ์์ ์ ๋ ฌ์ ์ค์ง DAG ์์๋ง ์ํ๋ ์ ์์ต๋๋ค. ์์ ์ ๋ ฌ์์์ ์ ๋ ฌ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ฐ์ $($ $u$, $v$ $)$ ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ(์ฆ $u$ ์์ $v$ ๋ก์ edge๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ), ์ ์ $u$ ๋, ์ ์ $v$ ๋ณด๋ค ์์๊ฐ ์์
๋๋ค. ์๋ฅผ ๋ค์ด ์ ๊ทธ๋ํ์์..
๐ฅ Computer Science
๐ง ๋ฐฉํฅ์ฑ์ด ์๋ ๊ทธ๋ํ์์์ DFS ๋ฐฉํฅ์ฑ์ด ์๋ ๊ทธ๋ํ(Directed Graph) ์์๋ Undirected Graph์ ๋๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก DFS๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ Directed Graph์์๋ ๊ฐ์ ์ ๋ฐฉํฅ์ฑ์ด ์์ผ๋ฏ๋ก, undirected graph์ ๋ฌ๋ฆฌ DFS Tree์์ Tree Edge๊ฐ ์๋ ๋ถ๋ถ๋ค์ ๋ ์ธ๋ถํ ํ ์ ์์ต๋๋ค. Directed Graph์์ DFS Tree์ ๋ฑ์ฅํ๋ Edge๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Tree Edge : Undirected Graph์ ๋์ผํฉ๋๋ค. DFS Tree ์์ ํ์๋๋ ๊ฐ์ ์ ์๋ฏธํฉ๋๋ค. Back Edge $($ $u$, $v$ $)$: $u$ ๋ $v$ ์ descendant Forward Edge $($ $u$, $v$ $)$ : $u$ ๋ ..
๐ง Biconnected Components ๊ทธ๋ํ $G$ ๊ฐ biconnected ํ๋ค๋ ๊ฒ์ ๋ค์์ ์๋ฏธํฉ๋๋ค. $G$ ๋ connected graph ์ด๋ฉฐ, articulation point๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค. biconnected๋ฅผ ํตํ biconnected component์ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Biconnected component $G’$ of $G$ : $G$ ์ maximal biconnected subgraph ์ฆ $G$ ์ biconnected component๋ก $G$ ์ ๊ฐ์ ๋ค์ partitioning ํ ์ ์์ผ๋ฉฐ, ์๋ก ๋ค๋ฅธ biconnected component๋ ์ต๋ ํ๊ฐ์ ์ ์ (articulation vertex)๋ฅผ ๊ณต์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์์ ๊ทธ๋ฆผ์ฒ๋ผ Articula..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEZWfp%2FbtrMUMHQHJl%2F3nuc269TKFu9R0Ns3Jx5r1%2Fimg.png)
๐ง Connected Components ๊ทธ๋ํ $G$ ์ Connected Component ์ธ $G'$ ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋ฉ๋๋ค. Connected Component $G'$ of $G$ : Maximal connected subgraph of $G$ โ๏ธ Maximum๊ณผ Maximal์ ์ฐจ์ด Maximum : ์ต๋๋ฅผ ์๋ฏธํฉ๋๋ค. Maximal : ๋์ด์ ์ถ๊ฐํ ์ ์๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฆ Connected Component์ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ด ํด์ ๊ฐ๋ฅํฉ๋๋ค. $G'$ ์์ ์ถ๊ฐ์ ์ผ๋ก $G$ ์ ์กด์ฌํ๋ ์๋ฌด ์ ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ ์๊ฐ disconnected๊ฐ ๋๋ฉฐ, $G'$ ์ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ์ ํฌํจํ๊ณ ์์ด์ผ ํฉ๋๋ค. ์ฆ induced subgraph๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด์ Connecte..
๐ง DFS (Depth-First Search) - ๊น์ด์ฐ์ ํ์ ์ด์ ๊ธ์์ ์ดํด๋ณธ explore procedure๋ฅผ ์ด์ฉํ์ฌ ๊ทธ๋ํ ์์ ๋ชจ๋ ์ ์ ์ ํ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ๋ฒ์ธ DFS ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ค ์์๋ดค์ต๋๋ค :) ์ฝ๋๋ก ๊ตฌํ ๋๋ณด๊ธฐ ๋ค์ ๊ทธ๋ํ์ ๋ํ dfs๋ฅผ ์ฝ๋๋ก ๊ตฌํํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. /** * Created by ShinD on 2022/09/22. */ fun main() { val graph = GraphMaker().make() GraphExplorer().dfs(graph) GraphMaker.vertexSet().forEach { println("END [${it.value}], [ ${it.preOrder}, ${it.postOrder} ]") } } ..
๐ง ๊ทธ๋ํ (Graph) ๊ทธ๋ํ๋ ์ ์ (vertex)๋ค๊ณผ ๊ฐ์ (edge)๋ค๋ก ์ด๋ฃจ์ด์ง ๊ตฌ์กฐ๋ก์จ, ๊ธฐํธ๋ก๋ ๋ค์๊ณผ ๊ฐ์ด ํํํฉ๋๋ค. $$G = (V(G), E(G))$$ $V$ ๋ ์ ์ ์, $E$ ๋ ๊ฐ์ ์ ์๋ฏธํฉ๋๋ค. ๐ง Simple Graph Self loop ๋๋ Multiple Edge๋ฅผ ๊ฐ์ง์ง ์๋ ๊ทธ๋ํ๋ฅผ Simple Graph๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋ฆผ์ผ๋ก๋ ์๋์ ๊ฐ์ต๋๋ค. ์์ผ๋ก ๋ฑ์ฅํ๋ ๋ชจ๋ ๊ทธ๋ํ๋, ํน๋ณํ ์ค๋ช
์ด ์๋ ์ด์ Simple Graph๋ผ๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ๐ง Directed Graph์ Undirected Graph ๊ทธ๋ํ์ ์ํ $E$ (๊ฐ์ )์ ๊ฐ ์์๋ค์ด ordered pair ์ฆ ๋ฐฉํฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ, ํด๋น ๊ทธ๋ํ๋ฅผ ๋ฐฉํฅ ๊ทธ๋ํ(Directed Graph)๋ผ๊ณ ํฉ๋๋ค. ๋ฐ๋๋ก ..
๐ง Selection ์๊ณ ๋ฆฌ์ฆ ํฌ๊ธฐ๊ฐ $n$ ์ธ ๋ฐฐ์ด $A$ ๊ฐ ์ฃผ์ด์ก์ ๋, $A$ ์์ $k$ ๋ฒ์งธ๋ก ์์ ์์๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก๋ $A$ ๋ฅผ ์ ๋ ฌํ์ฌ $k$ ๋ฒ์งธ ์๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฐฐ์ด์ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ๋ค ์ค์์ worst-case๊ฐ $O(n \; logn)$ ์ธ ์๊ณ ๋ฆฌ์ฆ(merge sort, heap sort, ๋ฑ๋ฑ)์ ์ฌ์ฉํ๋ค๋ฉด, ์ดํ $k$ ๋ฒ์งธ ์์์ ์ ๊ทผํ๋ ๊ฒ์ $O(1)$ ์ ์๊ฐ์ด ์์๋๋ฏ๋ก ์ด ์๊ฐ ๋ณต์ก๋๋ $O(n \; log n)$ ์
๋๋ค. ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ Devide and Conquer ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋์ธ Quick Select ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๐ง Quick Select Quick Select๋..
์ฑ๋ฅ์ ์ ์ ์ด๋ค ์ปดํจํฐ๊ฐ ๋ค๋ฅธ ์ปดํจํฐ๋ณด๋ค ์ฑ๋ฅ์ด ์ข๋ค๋ ๊ฒ์ ์๋ฏธ๋ ๋ฌด์์ผ๊น์? ๋จ์ํ ๋ ์ปดํจํฐ์์ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ ๊ฒฝ์ฐ, ๋จผ์ ์คํ๋๊ณ ๋จผ์ ๋๋๋ ์ชฝ์ด ๋ ์ฑ๋ฅ์ด ์ข๋ค๊ณ ๋ณผ ์๋ ์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ฌ ๋์ ์๋ฒ๋ฅผ ๊ฐ์ง๊ณ , ์ฌ๋ฌ ์ฌ์ฉ์์ ์์
์ ์ฒ๋ฆฌํ๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ, ํ๋ฃจ ๋์ ๋ ๋ง์ ์์
์ ์ฒ๋ฆฌํ๋ ์ปดํจํฐ๊ฐ ๋ ์ฑ๋ฅ์ด ์ข๋ค๊ณ ๋ณผ ์ ์์ ๊ฒ์
๋๋ค. ์ปดํจํฐ ์ฌ์ฉ์ ๊ฐ์ธ์ ์
์ฅ์์๋ ์๋ต์๊ฐ(response time), ์ฆ ์คํ์๊ฐ์ด ์ ์ผ ์ค์ํ ์์์ผ ๊ฒ์ด๋ฉฐ, ์๋ฒ ๊ด๋ฆฌ์์ ๊ฒฝ์ฐ์๋ ์ฒ๋ฆฌ๋(throughput) ํน์ ๋์ญํญ(bandwidth)์ด ๋ ์ค์ํ ๊ฒ์
๋๋ค. ๊ฐ์กฐํ๊ณ ์ถ์ ๋ด์ฉ์ ์ํฉ์ ๋ฐ๋ผ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ธก์ ํ๋ ์ฒ๋๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์์ ๋..