ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Topological Sort(์œ„์ƒ ์ •๋ ฌ)
    ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2025. 2. 18. 15:28

    ๐Ÿง  Topological Sort(์œ„์ƒ ์ •๋ ฌ):

    **๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„(Directed Acyclic Graph, DAG)**์—์„œ ์„ ํ–‰ ์ž‘์—…์ด ๋ฐ˜๋“œ์‹œ ๋จผ์ € ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—… ํ๋ฆ„์„ ๊ฒฐ์ •ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

    ์ฆ‰, ์ž‘์—…์˜ ์ˆœ์„œ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๊ณผ์ •!

     

    โš™๏ธ 1๏ธโƒฃ ํ•ต์‹ฌ ๊ฐœ๋…

    1. Directed Acyclic Graph(DAG)
      • ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋Š” ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„
      • **์ˆœํ™˜(Cycle)**์ด ์žˆ์œผ๋ฉด ์œ„์ƒ ์ •๋ ฌ ๋ถˆ๊ฐ€
    ๐Ÿ“ **๊ทธ๋ž˜ํ”„(Graph)**๋ž€?
    • ์ •์ (Vertex, Node): ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ
    • ๊ฐ„์„ (Edge): ์ •์  ๊ฐ„ ๊ด€๊ณ„
    ์ข…๋ฅ˜:
    • ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Directed Graph): ๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ ์กด์žฌ → A → B
    • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Undirected Graph): ๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ ์—†์Œ → A — B
    ๐Ÿ› ๏ธ DAG ํŠน์ง•
    1. ๋ฐฉํ–ฅ(Directed): **๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋Š” ๊ฐ„์„ (Edge)**๋กœ ๊ด€๊ณ„ ํ‘œ์‹œ
    2. ๋น„์ˆœํ™˜(Acyclic): ์‚ฌ์ดํด์ด ์—†๋Š” ๊ตฌ์กฐ
      • ์‚ฌ์ดํด: ์ถœ๋ฐœ์  → ์ค‘๊ฐ„ → ์ถœ๋ฐœ์ ์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ค๋Š” ๊ฒฝ๋กœ
    DAG ์˜ˆ์ œ

       1 → 2 → 3
           ↑ ↓
           4

    โžก๏ธ ๋ฐฉํ–ฅ์„ฑ:
    • 1 → 2 → 3 ์ผ๋ฐฉํ–ฅ ํ๋ฆ„
    โžก๏ธ ์ˆœํ™˜ ์—†์Œ:
    • ์–ด๋А ๋…ธ๋“œ์—์„œ๋„ ์ถœ๋ฐœํ•ด๋„ ๋˜๋Œ์•„์˜ค์ง€ ์•Š์ŒDAG ๋งž์Œ! โœ…
    DAG๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ

       1 → 2 → 3
           ↑   ↓
           5 ← 4

    • 2 → 3 → 4 → 5 → 2: ์‚ฌ์ดํด ์กด์žฌ ๐Ÿšจ
    • DAG ์•„๋‹˜!
    1. ์ง„์ž… ์ฐจ์ˆ˜(In-degree)
      • ํ•ด๋‹น ๋…ธ๋“œ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜
      • ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌ
    โš™๏ธ  ์ง„์ž… ์ฐจ์ˆ˜(In-degree)
    ๐Ÿ“ ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ:
    • ๋…ธ๋“œ(Node) = ์ž‘์—…(Task)
    • ๊ฐ„์„ (Edge) = ์˜์กด ๊ด€๊ณ„(Dependency)
    ์˜ˆ:
    • A → B: B๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด A๊ฐ€ ์„ ํ–‰๋˜์–ด์•ผ ํ•จ
    • B์˜ In-degree = 1 (A๋กœ๋ถ€ํ„ฐ ์˜ค๋Š” ํ•˜๋‚˜์˜ ํ™”์‚ดํ‘œ)
       A → B → C
       ↑    ↓
       D → E
    ๐Ÿ“– ์ง„์ž… ์ฐจ์ˆ˜์˜ ํ•ต์‹ฌ ์—ญํ• 
    • **์œ„์ƒ ์ •๋ ฌ(Topological Sort)**์—์„œ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ ์‹œ์ž‘
    • ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ ์ค„์–ด๋“œ๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์˜์กด ๊ด€๊ณ„ ํ•ด์†Œ

     

    ๐ŸŒ ์‹ค์ œ ํ™œ์šฉ ์˜ˆ์‹œ

    • ์ปดํŒŒ์ผ๋Ÿฌ: ์ฝ”๋“œ์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ ์ˆœ์„œ ๊ฒฐ์ •
    • ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ: **์ž‘์—…(Task)**์˜ ์„ ํ›„ ๊ด€๊ณ„ ์ •์˜ (Jira, MS Project)
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ˆœ์„œ ๊ฒฐ์ •(Foreign Key ์˜์กด์„ฑ)

     

    ๐Ÿ“ ์œ„์ƒ์ •๋ ฌ ๋ถ„์„

       1 → 2 → 3
           ↑ ↓
           4

     

    ๐Ÿ”  ํ•ต์‹ฌ ๊ฐœ๋…: ์ง„์ž… ์ฐจ์ˆ˜(In-degree)

    ์œ„์ƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ **์ง„์ž… ์ฐจ์ˆ˜(In-degree)**๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘.

    • ์ง„์ž… ์ฐจ์ˆ˜(In-degree): ๋…ธ๋“œ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ„์„ ์˜ ์ˆ˜
    • ์œ„์ƒ ์ •๋ ฌ ์‹œ์ž‘์ : ์ง„์ž… ์ฐจ์ˆ˜ 0์ธ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘
    ๋…ธ๋“œ In-degree ์ด์œ 
    1 0 ๋“ค์–ด์˜ค๋Š” ๊ฐ„์„  ์—†์Œ
    2 2 1 → 2 & 4 → 2
    3 1 2 → 3 
    4 0 ๋“ค์–ด์˜ค๋Š” ๊ฐ„์„  ์—†์Œ

     

    โš™๏ธ ์ •๋ ฌ ๊ณผ์ •

    ๐ŸŸข STEP 1: ์ดˆ๊ธฐ ํ ์ƒ์„ฑ
    • In-degree 0: 1, 4
    • Queue: 1, 4
    • ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ: []
    ๐ŸŸข STEP 2: 1 ๊บผ๋‚ด๊ธฐ
    • Queue: 4
    • ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ: [1]
    ๋™์ž‘:
    • 1 → 2๋กœ ์—ฐ๊ฒฐ → ๋…ธ๋“œ 2์˜ In-degree ๊ฐ์†Œ
      • In-degree(2): 2 → 1
    ๐ŸŸข STEP 3: 4 ๊บผ๋‚ด๊ธฐ
    • Queue: 2
    • ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ: [1, 4]
    ๋™์ž‘:
    • 4 → 2๋กœ ์—ฐ๊ฒฐ → ๋…ธ๋“œ 2์˜ In-degree ๊ฐ์†Œ
      • In-degree(2): 1 → 0 → ํ์— 2 ์ถ”๊ฐ€
    ๐ŸŸข STEP 4: 2 ๊บผ๋‚ด๊ธฐ
    • Queue: 3
    • ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ: [1, 4, 2]
    ๋™์ž‘:
    • 2 → 3์œผ๋กœ ์—ฐ๊ฒฐ → ๋…ธ๋“œ 3์˜ In-degree ๊ฐ์†Œ
      • In-degree(3): 1 → 0 → ํ์— 3 ์ถ”๊ฐ€
    ๐ŸŸข STEP 5: 3 ๊บผ๋‚ด๊ธฐ
    • Queue: empty
    • ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ: [1, 4, 2, 3]

     

    '์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•(Euclidean Algorithm)  (0) 2025.02.07
Designed by Tistory.