๐Ÿ–ฅ Computer Science/์•Œ๊ณ ๋ฆฌ์ฆ˜

๐Ÿง DAG : Directed Acyclic Graph DAG๋Š” Cycle์ด ์—†๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ $G$ ์—์„œ Cycle์ด ์—†๋‹ค๋Š” ๊ฒƒ์€, $G$ ์— ๋Œ€ํ•œ DFS Tree๊ฐ€ Back Edge๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋Š” ๋ง๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘‰ ์ฆ๋ช… ๋”๋ณด๊ธฐ ๐Ÿง ์œ„์ƒ ์ •๋ ฌ(Topological Sort) ์œ„์ƒ ์ •๋ ฌ์€ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ์žˆ๋Š” ์ž‘์—…์„ ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ ๊ทธ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์œ„์ƒ ์ •๋ ฌ์€ ์˜ค์ง DAG ์—์„œ๋งŒ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์ƒ ์ •๋ ฌ์—์„œ์˜ ์ •๋ ฌ ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ„์„  $($ $u$, $v$ $)$ ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ(์ฆ‰ $u$ ์—์„œ $v$ ๋กœ์˜ edge๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ), ์ •์  $u$ ๋Š”, ์ •์  $v$ ๋ณด๋‹ค ์ˆœ์„œ๊ฐ€ ์•ž์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„ ๊ทธ๋ž˜ํ”„์—์„œ..
๐Ÿง ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ์˜ 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..
๐Ÿง 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๋Š”..
๐Ÿง ๋ถ„ํ•  ์ •๋ณต์ด ๋ญ์˜ˆ์š”? ์ผ๋ฐ˜์ ์œผ๋กœ ์–ด๋– ํ•œ ๋ฌธ์ œ๋ฅผ ๋” ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•˜๊ณ , ๋ถ„ํ• ํ•œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•œ ํ›„ ์กฐํ•ฉํ•˜์—ฌ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ณผ์ •์„ ๋‚˜์—ดํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 1. ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ๋” ์ž‘์€ ๋ฌธ์ œ(Subproblem)์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์ด๋•Œ ์ž‘์•„์ง„ ๋ฌธ์ œ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ํฐ ๋ฌธ์ œ์™€ ๋™์ผํ•˜๋‚˜ ๋‹จ์ง€ ์ž…๋ ฅ(input)์˜ ํฌ๊ธฐ๋งŒ ์ž‘์•„์ง„ ๋ฌธ์ œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 2. 1๋ฒˆ ๊ณผ์ •์—์„œ ๋‚˜๋ˆˆ Subproblem ๋“ค์„ ์žฌ๊ท€์ ์œผ๋กœ(๋” ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๋ฉฐ) ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. 3. 2๋ฒˆ์—์„œ ํ•ด๊ฒฐํ•œ Subproblem๋“ค์˜ ๋‹ต์„ ์ ์ ˆํ•˜๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ, ๊ธฐ์กด ํฐ ๋ฌธ์ œ์˜ ๋‹ต์„ ๋„์ถœํ•ฉ๋‹ˆ๋‹ค. 1๋ฒˆ์˜ ๊ณผ์ •์€ Divide 2, 3๋ฒˆ์˜ ๊ณผ์ •์€ Conquer ๊ณผ์ •์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๐Ÿง ๋ถ„ํ•  ์ •๋ณต์˜ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด ๋ถ„ํ•  ์ •๋ณต์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ..
๋ง ๋ž‘
'๐Ÿ–ฅ Computer Science/์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)