λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ•Œκ³ λ¦¬μ¦˜

14-4κ°•. DAG와 μœ„μƒμˆœμ„œ

by devshin.kr 2020. 12. 8.
728x90
λ°˜μ‘ν˜•

DAG (Directed Acyclic Graph)

: λ°©ν–₯ 사이클(directed cycle)이 μ—†λŠ” λ°©ν–₯ κ·Έλž˜ν”„.

(자기 μžμ‹ μœΌλ‘œ λŒμ•„μ˜€μ§€ μ•ŠλŠ” λ°©ν–₯κ·Έλž˜ν”„..)

예) μž‘μ—…λ“€μ˜ μš°μ„ μˆœμœ„

 

DAG의 예

μœ„μ˜ κ·Έλž˜ν”„μ—μ„œ bκ°€ 되기 μœ„ν•΄μ„œλŠ” aκ°€ λ°˜λ“œμ‹œ μ„ ν–‰λ˜μ–΄μ•Ό ν•œλ‹€!

 

 

μœ„μƒμ •λ ¬ (topological ordering)

- DAGμ—μ„œ λ…Έλ“œλ“€μ˜ μˆœμ„œν™”(sorting) .. v1, v2, ..., vn.

단 λͺ¨λ“  에지(vi, vj)에 λŒ€ν•΄μ„œ i < jκ°€ λ˜λ„λ‘!

 

μœ„μƒμ •λ ¬μ˜ 예

μœ„μ˜ κ·Έλž˜ν”„μ—μ„œ μœ„μƒμ •λ ¬μ„ ν–ˆμ„ λ•Œ, μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½ λ°©ν–₯으둜 μ •λ ¬ν–ˆμ„ λ•Œ, a-g-... λ˜λŠ” a-b-... 인데, μ—­λ°©ν–₯으둜 κ°€λ©΄ μ•ˆ λœλ‹€. (였λ₯Έμͺ½μ—μ„œ μ™Όμͺ½μœΌλ‘œ κ°€λ©΄ μ ˆλŒ€ μ•ˆ λœλ‹€.)

 

 

μ–΄λ–€ λ…Έλ“œμ— λŒ€ν•΄μ„œ λ“€μ–΄μ˜€λŠ” λ…Έλ“œμ˜ 갯수λ₯Ό in-degree, λ‚˜κ°€λŠ” λ…Έλ“œμ˜ 갯수λ₯Ό out-degree라 ν•œλ‹€.

예) λ…Έλ“œ aλŠ” in-degree κ°€ 0이닀. : λ…Έλ“œ aμ—λŠ” λ“€μ–΄ μ˜€λŠ” λ…Έλ“œλ“€μ΄ μ—†λ‹€..

 

 

1. 이 κ·Έλž˜ν”„μ˜ λͺ¨λ“  λ…Έλ“œλ“€μ— λŒ€ν•œ in-degreeκ°€ 0인 λͺ¨λ“  λ…Έλ“œλ“€μ„ μ°ΎλŠ”λ‹€.

2. μœ„μ˜ κ·Έλž˜ν”„μ—μ„œ in-degreeκ°€ 0인 λ…Έλ“œλŠ” λ…Έλ“œ a와 λ…Έλ“œ g이닀.

(in-degreeκ°€ 0μ΄λΌλŠ” μ˜λ―ΈλŠ” λ…Έλ“œ a와 λ…Έλ“œ g에 μ„ ν–‰ν•˜λŠ” μž‘μ—…μ΄ μ—†λ‹€λŠ” 뜻! λ…Έλ“œ aλ₯Ό λ¨Όμ € ν•˜λ“  λ…Έλ“œ gλ₯Ό λ¨Όμ € ν•˜λ“  상관이 μ—†λ‹€..)

3. λ…Έλ“œ a의 in-degree λŠ” 0이닀.

4. λ…Έλ“œ aμ—μ„œ λ‚˜κ°€λŠ” λ…Έλ“œμ˜ 갯수인 out-degreeλŠ” λ…Έλ“œ b와 λ…Έλ“œ d둜 2κ°œμ΄λ‹€.

5. λ…Έλ“œ b와 λ…Έλ“œ dλ₯Ό 좜λ ₯ν•˜κ³ , λ…Έλ“œ a에 λŒ€ν•œ out-degree 두 개λ₯Ό μ§€μš΄λ‹€.

6. 이 κ·Έλž˜ν”„μ—μ„œ in-degreeκ°€ 0인 λ…Έλ“œλ₯Ό λͺ¨λ‘ μ°ΎλŠ”λ‹€.

(이제 λ…Έλ“œ gλ₯Ό λ¨Όμ € ν•˜λ“  λ…Έλ“œ bλ₯Ό λ¨Όμ € ν•˜λ“  상관 μ—†λ‹€.)

7. λ…Έλ“œ g의 in-degreeλŠ” 0이닀.

8. λ…Έλ“œ gμ—μ„œ λ‚˜κ°€λŠ” λ…Έλ“œμ˜ 갯수인 out-degreeλŠ” λ…Έλ“œ d둜 1κ°œμ΄λ‹€.

9. λ…Έλ“œ b의 in-degreeλŠ” 0이닀. (λ…Έλ“œ a의 out-degreeλ₯Ό μ‚­μ œν–ˆμœΌλ‹ˆ)

10. λ…Έλ“œ b에 λŒ€ν•œ out-degreeλŠ” λ…Έλ“œ c와 λ…Έλ“œ e둜, 2이닀.

... 반볡

 

 

// μœ„μƒμ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ sudo code 1
topologicalSort1 (G)
{
	for <- 1 to n	// n개의 λ…Έλ“œλ₯Ό 좜λ ₯ν•˜λ©΄ λ˜λ‹ˆκΉŒ
    {
    	μ§„μž…κ°„μ„ (Ingoing degree)이 μ—†λŠ” μž„μ˜μ˜ 정점 uλ₯Ό μ„ νƒν•œλ‹€;
        A[i] <- u;
        정점 u와 u의 μ§„μΆœκ°„μ„ (Outgoing degree)을 λͺ¨λ‘ μ œκ±°ν•œλ‹€;
    }
    > λ°°μ—΄ A[1...n]μ—λŠ” 정점듀을 μœ„μƒμ •λ ¬λ˜μ–΄ μžˆλ‹€
}

μœ„μ˜ sudo codeμ—μ„œ 1) indegree = 0인 λ…Έλ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ μ–΄λ–‘ν•˜μ§€?

 

 

μœ„μƒμ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ sudo code 2
DFS-TS(v: λ…Έλ“œ, R: μ—°κ²°λ¦¬μŠ€νŠΈ)

 

 

 

 

 

 

www.inflearn.com/course/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B0%95%EC%A2%8C/lecture/4108?tab=curriculum

 

μ˜λ¦¬ν•œ ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ μ•Œκ³ λ¦¬μ¦˜ κ°•μ’Œ - μΈν”„λŸ°

μ˜λ¦¬ν•˜κ²Œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 있기 μœ„ν•œ κΈ°λ³Έ μ†Œμ–‘μΈ 'μ•Œκ³ λ¦¬μ¦˜' 을 배우고 μ‘μš©ν•˜λŠ” 방법을 λ°°μ›λ‹ˆλ‹€. μ΄ˆκΈ‰ μ•Œκ³ λ¦¬μ¦˜ μ•Œκ³ λ¦¬μ¦˜ 온라인 κ°•μ˜ ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ μ•Œκ³ λ¦¬μ¦˜ κ°•μ’Œ

www.inflearn.com

 

λ°˜μ‘ν˜•

λŒ“κΈ€