๋ฐ˜์‘ํ˜•

 

๊ตญ๋ฏผ๋Œ€ํ•™๊ต์—์„œ "์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜" ๊ต์žฌ๋ฅผ ์ด์šฉํ•œ
 ๋ฐ•ํ•˜๋ช… ๊ต์ˆ˜๋‹˜์˜ ๊ฐ•์˜ ๊ต์•ˆ์„ ์ด์šฉํ•˜์—ฌ ์ˆ˜์—… ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค

 

 

Topological Sorting

 

์œ„์ƒ์ •๋ ฌ์ด๋ž€ ์ž‘์—…๋“ค์˜ ์„ ํ›„ ๊ด€๊ณ„๋ฅผ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•  ๋•Œ ์„ ํ›„ ๊ด€๊ณ„๋ฅผ ์–ด๊ธฐ์ง€ ์•Š๋„๋ก ์ •์ ์„ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ž„

 

=> ๋ชจ๋“  ๊ฐ„์„  (u, v)์— ๋Œ€ํ•ด ์ •์  u๊ฐ€ ์ •์  v๋ณด๋‹ค ์•ž์— ์œ„์น˜ํ•˜๋„๋ก ์ •๋ ฌ

 

๋Œ€์ƒ์ด directed graph๋กœ cycle์ด ์—†์–ด์•ผํ•จ!

= DAG

 

Kahn's Algorithm

 

์ง„์ž… ๊ฐ„์„ , ์ง„์ถœ ๊ฐ„์„ 

 

์•„์ด๋””์–ด๋Š” ์ง„์ž… ๊ฐ„์„ ์ด ์—†๋Š” ์ •์ ์„ ์•ž์— ๋‘๋Š” ๊ฒƒ์ž„

 

์™ผ์ชฝ 4๊ฐœ, ์˜ค๋ฅธ์ชฝ 4๊ฐœ ์ˆœ์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ๊ทธ๋ฆผ

 

 

์ˆœ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด

 

1. ์ง„์ž… ๊ฐ„์„ ์ด ์—†๋Š” ์ •์ ์„ ๊ณจ๋ผ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์Œ

2. ๊ณ ๋ฅธ ์ •์ ์„ ์ œ๊ฑฐํ•˜๊ณ , ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ๋„ ์ œ๊ฑฐํ•จ

๋ชจ๋“  ์ •์ ์ด ์ œ๊ฑฐ๋  ๋•Œ๊นŒ์ง€ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณต

 

Implementation Details

 

pseudo code๋ฅผ ์‚ดํŽด๋ณด๋ฉด

 

 

  • ๊ฐ ์ •์ ์˜ ์ง„์ถœ ๊ฐ„์„ ์„ O(1) ๋งŒ์— ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„

  • S์— ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ๋„ฃ๊ณ  ๋นผ๋ ค๋ฉด List๋‚˜ Queue๋“ฑ์œผ๋กœ ๊ตฌํ˜„

    => ์ •์  ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š๊ธฐ์—

  • ์ •์  v์— ์ง„์ž… ๊ฐ„์„ ์ด ์—†์Œ์„ O(1)๋งŒ์— ํ™•์ธํ•˜๋ ค๋ฉด ๋ชจ๋“  ์ •์  v๋งˆ๋‹ค ์ง„์ž… ๊ฐ„์„  ์ˆ˜๋ฅผ d[v]์— ๊ธฐ๋ก

  • ๊ฐ„์„ ์„ ์ง์ ‘ ์ง€์šธ ํ•„์š” ์—†์Œ

    => d[v]๋ฅผ ํ†ตํ•ด ์ง„์ž… ๊ฐ„์„  ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ

 

 

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ๊ฐ๊ฐ์˜ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์–ด๋–ค ๋…ธ๋“œ๋กœ ํ–ฅํ•˜๋Š”์ง€๋ฅผ ๊ธฐ๋กํ•ด๋‘ 

 

 

Complexity Analysis

 

๊ต‰์žฅํžˆ ์ง๊ด€์ ์œผ๋กœ ๋ณต์žก๋„๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ

 

pseudo code๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ

 

 

 

adj๋ฅผ ํ†ตํ•ด ๊ฐ ๋…ธ๋“œ์˜ ์ง„์ž… ๊ฐ„์„  ๊ฐฏ์ˆ˜๋ฅผ ์„ธ์ฃผ๋Š” ๋ถ€๋ถ„์€ ๊ฐ„์„  ์ˆ˜ ๋งŒํผ์ธ O(|E|)

 

๊ฐ ๋…ธ๋“œ๊ฐ€ ์ง„์ž… ๊ฐ„์„ ์ด ์—†๋Š”์ง€ ํŒ๋ณ„ํ•˜๊ณ  S์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋…ธ๋“œ ์ˆ˜ ๋งŒํผ์ธ O(|V|)

 

while์„ ํ†ตํ•ด S๊ฐ€ 0์ด๋  ๋•Œ ๊นŒ์ง€ ์ฆ‰, ๋…ธ๋“œ ๊ฐฏ์ˆ˜์ธ |V| ๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉฐ

for๋ฌธ์„ ํ†ตํ•ด adj๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ๊ฐ„์„ ์„ ๋‹ค ๋Š์–ด๋ฒ„๋ฆฌ๋ฏ€๋กœ (d[v]๋ฅผ -1 ํ•จ) ๊ฐ„์„  ๊ฐฏ์ˆ˜์ธ |E| ๋งŒํผ์ด ์‹คํ–‰๋จ

 

์ฆ‰, O(|V| + |E|)

 

์ด ํ•ฉ์น˜๋ฉด O(|V| + |E|) ๊ฐ€ ๋จ

(for๋ฌธ์ด ๊ฐ ๊ฐ„์„ ์„ ํ•œ ๋ฒˆ๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์ฆ‰, while๋ฌธ์ด ๋Œ ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ๊ฐ„์„ ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ธฐ์— |V| x |E| ๊ฐ€ ์•„๋‹ˆ๊ณ  |V| + |E|์ž„)

=> ๋ชจ๋“  ์ •์ ๊ณผ ๊ฐ„์„ ์„ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธ

 

 

DFS ๊ธฐ๋ฐ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

J์—์„œ ์‹œ์ž‘ํ•˜๊ณ  ์œ„์˜ ์ž์‹์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๋Š” DFS ์˜ˆ์‹œ

 

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)์˜ ํŠน์ง•์„ ์‘์šฉํ•˜์—ฌ ์œ„์ƒ์ •๋ ฌ ํ•˜๋Š” ๊ฒƒ์ž„

 

=> out-degree๊ฐ€ ์—†๋Š” ์ •์ ์„ ๋จผ์ € ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ์‹

 

Kahn's Algorithm๊ณผ ๋ฐ˜๋Œ€๋กœ, DFS๋ฅผ ํ›„์ฒ˜๋ฆฌ(post-order visit) ๋ฐฉ์‹์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด

๋ฐฉ๋ฌธํ•œ ์ˆœ์„œ๊ฐ€ ์œ„์ƒ์ •๋ ฌ์˜ ์—ญ์ˆœ์ด ๋œ๋‹ค๋Š” ์ ์„ ์ด์šฉ

 

1, 2
3, 4

 

 

 

์ˆœ์„œ๋Š” ์ด๋Ÿฌํ•œ๋ฐ

 

1. ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์ €์žฅํ•  Stack ์ƒ์„ฑ

 

2. ๋ฐฉ๋ฌธ๋˜์ง€ ์•Š์€ ์ •์ ์„ ์„ ํƒํ•˜์—ฌ DFS ์ˆ˜ํ–‰, ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ Stack์— ์ €์žฅ

 

๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ ๊นŒ์ง€ 2๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๋จ

 

(Stack์—์„œ ๊ฐ’์„ ๊บผ๋‚ด๋Š” ์ˆœ์„œ๊ฐ€ ์œ„์ƒ์ •๋ ฌ ์ˆœ์„œ๊ฐ€ ๋จ)

 

Complexity Analysis

 

pseudo code๋ฅผ ์‚ดํŽด๋ณด๋ฉด

 

 

 

DFS์˜ ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๋™์ผํ•จ

=> DFS๋Š” ๋ชจ๋“  ์ •์ ๊ณผ ๊ฐ„์„ ์„ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋ฏ€๋กœ O(|V| + |E|)

๋ฐ˜์‘ํ˜•

'๐Ÿ”ฅ Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

L15 - Boyer-Moore Algorithm  (0) 2024.11.30
L14 - KMP Algorithm  (1) 2024.11.30
L12 - Single Source Shortest Paths  (0) 2024.11.28
L11 - Minimum Spanning Trees  (0) 2024.11.26
L10 - Disjoint Sets  (0) 2024.11.22