6/1 μ§ννλ μ€μννΈ λ°μ΄ν° ꡬ쑰μ μκ³ λ¦¬μ¦ μ± μ 5μ₯ 'νΈλ¦¬ ꡬ쑰 κΈ°λ°μ μκ³ λ¦¬μ¦' μ€ν°λ μ 리μ λλ€!
1. κ·Έλνμ κ°λ , κ·Έλνμ μ’ λ₯
2. κ·Έλνμ νν λ°©μ (μ½λμ μΌλ‘)
3. κ·Έλν νμ - DFS(κΉμ΄μ°μ νμ), BFS(λλΉμ°μ νμ)
π‘ κ·Έλν(Graph)
κ·Έλνλ λ Έλ(Vertex; κΌμ§μ )μ λ Έλλ₯Ό μ°κ²°νλ κ°μ (Edge; λͺ¨μ리)μ μ§ν©μΌλ‘ μ΄λ£¨μ΄μ§ λ°μ΄ν° ꡬ쑰μ λλ€.
κ·Έλνλ₯Ό ν΅ν΄ μ°κ²°λμ΄ μλ κ°μ²΄λ€μ κ΄κ³λ₯Ό ννν μ μμ΅λλ€.
κ·Έλνμ νμ© μμ : SNS μμ μ°κ²°λ μ¬λλ€, μ§λ, μ§νμ² λ Έμ λμ μ΅λ¨ κ²½λ‘, μ μ κ³Όλͺ© λ± ..
βοΈ κ·Έλν(Graph)μ μ’ λ₯
1) 무방ν₯ κ·Έλν(Undirected Graph)
λ Έλλ₯Ό μ°κ²°νλ κ°μ μ΄ μλ°©ν₯μ±μΈ κ·Έλνμ λλ€. λ°©ν₯μ΄ μλ€λ κ²μ μμͺ½μ λ°©ν₯ λͺ¨λ μ΄λν μ μλ€λ μλ―Έμ λλ€.
ex) μΉκ΅¬ κ΄κ³ A <- - -> B
2) λ°©ν₯ κ·Έλν(Directed Graph)
λ Έλλ₯Ό μ°κ²°νλ κ°μ μ λ°©ν₯μ±μ΄ μ‘΄μ¬νλ κ·Έλνμ λλ€. κ°μ μ λμ λ°©ν₯μ±μ λνλ΄λ νμ΄νλ₯Ό μΆκ°ν΄ νμν©λλ€.
ex) λμλ₯Ό μ볡 μ¬νν λμ κ²½λ‘ A -> B -> C -> A
3) κ°μ€μΉ κ·Έλν(Weighted Graph)
κ°μ μ κ°μ€μΉλ λΉμ© λ± μΆκ°μ μΈ μ λ³΄κ° λ§€κ²¨μ§ κ·Έλνμ λλ€. λ€νΈμν¬(Network) λΌκ³ λ λΆλ¦ λλ€.
ex) λμλ₯Ό μ볡 μ¬νν λμ κ²½λ‘μμ, κ° κ²½λ‘λ§λ€ λΉμ©μ΄ μμ λ μ΅μ’ λΉμ©μ ꡬνλ λ±.
βοΈ μ°κ²° κ·Έλν vs λΉ μ°κ²° κ·Έλν
1) μ°κ²° κ·Έλν(Connected Graph)
무방ν₯ κ·Έλνμ μλ λͺ¨λ λ Έλμμ λν΄μ νμ κ²½λ‘κ° μ‘΄μ¬νλ κ²½μ°, λͺ¨λ λ Έλκ° μ°κ²°λ κ·Έλνμ λλ€.
ex) νΈλ¦¬λ μ¬μ΄ν΄μ κ°μ§μ§ μλ μ°κ²° κ·Έλν
2) λΉμ°κ²° κ·Έλν(Disconnected Graph)
무방ν₯ κ·Έλνμμ νΉμ λ Έλμ μ¬μ΄μ κ²½λ‘κ° μ‘΄μ¬νμ§ μλ κ²½μ°, κ·Έλνκ° μ λΆ μ°κ²°λμ΄ μμ§ μλ κ²½μ°μ λλ€. κ·Έλνκ° μ¬λ¬ κ°μ λΆλΆ κ·Έλνλ‘ κ΅¬μ±λ μ μμ΅λλ€.
βοΈ μ¬μ΄ν΄ vs λΉμν κ·Έλν
1) μ¬μ΄ν΄(Cycle)
λ¨μ κ²½λ‘μ μμ λ Έλμ μ’ λ£ λ Έλκ° λμΌν κ²½μ°, μ¬μ΄ν΄μ΄ μλ€κ³ ννν©λλ€.
λ¨μ κ²½λ‘λ λ°λ³΅λλ μ μ μ΄ μλ κ²½λ‘λ₯Ό μλ―Έν©λλ€.
2) λΉμν κ·Έλν(Acyclic Graph)
μ¬μ΄ν΄μ΄ μλ κ·Έλνλ₯Ό λΉμν κ·ΈλνλΌκ³ ν©λλ€. νΉμ κ²½λ‘μμ κ°μ λ Έλλ₯Ό λ°λ³΅ν μ μμ΅λλ€.
ex) νΈλ¦¬λ μ¬μ΄ν΄μ κ°μ§μ§ μλ μ°κ²° κ·Έλν
βοΈ μμ κ·Έλν(Complete Graph)
μμ κ·Έλνλ κ·Έλνμ μν΄ μλ λͺ¨λ μ μ μ΄ μλ‘ μ°κ²°λμ΄ μλ κ·Έλνμ λλ€.
무방ν₯ μμ κ·Έλνμ λ Έλ μκ° n κ°λΌλ©΄, κ°μ μ μλ n * (n-1) / 2 κ° μ λλ€.
π‘ κ·Έλνμ νν λ°©μ
1) ꡬ쑰체 / ν΄λμ€ νμ©
λ Έλλ μλ³μ, κ°μ€μΉ λ±μ μμ±μΌλ‘ κ°λ ꡬ쑰체 λλ ν΄λμ€λ‘, κ°μ μ μ°κ²°λ λ Έλμ λν μ°Έμ‘°κ°μ κ°λ ꡬ쑰체 λλ ν΄λμ€λ‘ ννν μ μμ΅λλ€. λ Έλκ° nκ°, κ°μ μ΄ mκ°λΌλ©΄, O(n+m) 곡κ°λ³΅μ‘λλ₯Ό κ°μ΅λλ€.
2) μ΄μ λͺ©λ‘ (Adjacency list)
λͺ¨λ λ Έλλ μ΄μ λͺ©λ‘μ κ°μ§κ³ μκ³ , κ°κ°μ μ΄μ λͺ©λ‘μλ λ Έλμ μ°κ²°λ λ Έλλ€μ΄ ν¬ν¨λ©λλ€.
@μ΄μ λͺ©λ‘ A: [C], B: [C, D], C: [A, B], D: [B]
3) μ΄μ 맀νΈλ¦μ€ (Adjacency matrix)
λ Έλκ° nκ°μΌ λ, n x n μ μ΄μ°¨μ λ°°μ΄μ λ§λ€μ΄, λ λ Έλλ₯Ό μ°κ²°νλ λͺ¨μλ¦¬κ° μμΌλ©΄ 1, μμΌλ©΄ 0 μΌλ‘ νμν©λλ€.
νΉμ κ°μ μ μ‘΄μ¬ μ¬λΆλ₯Ό νμΈν λ μ μ©νλ€. μ΄μ λͺ©λ‘μ λΉν΄ λ λ§μ 곡κ°μ νμλ‘ ν©λλ€.
A B C D
A 0 0 1 0
B 0 0 1 1
C 1 1 0 0
D 0 1 0 0
4) κ·Όμ 맀νΈλ¦μ€ (Incidence matrix)
ν(row)μ λ Έλλ‘, μ΄(column)μ κ°μ μΌλ‘ νμνμ¬ λ Έλκ° μ°κ²°λ κ°μ μ 1μ, μ°κ²°λμ§ μμ κ³³μλ 0μ νμν©λλ€.
κ° νμ μ½μ΄λ³΄λ©΄, νΉμ λ Έλμ μ΄λ κ°μ μ΄ μ°κ²°λμ΄ μλμ§ μ μ μμ΅λλ€.
1 2 3
A 1 0 0
B 0 1 1
C 1 1 0
D 0 0 1
π‘κ·Έλν νμ - κΉμ΄ μ°μ νμ(DFS, Depth-First Search)
νΉμ λ Έλμμ μμν΄, λ€μ λΆκΈ°(branch)λ‘ λμ΄κ°κΈ° μ , ν΄λΉ λΆκΈ°λ₯Ό μλ²½νκ² νμνλ λ°©λ²μ λλ€. μΌλ°μ μΌλ‘ λͺ¨λ λ Έλλ₯Ό λ°©λ¬Ένκ³ μ ν λ, DFS λ₯Ό μ¬μ©ν©λλ€.
νΈλ¦¬μ κ²½μ°, λ£¨νΈ λ Έλμμ μμν΄ μλλ‘ λ΄λ €κ° κΉκ² νμνλ κ²μ λλ€.
"μ’μΈ‘ λ Έλ λ°©λ¬Έ -> μ€μ λ Έλ λ°©λ¬Έ -> μ°μΈ‘ λ Έλ λ°©λ¬Έ" μμλ‘ νμνλ©°, μ΄μ§κ²μνΈλ¦¬μ In-order tree walk μ λμΌν©λλ€.
π‘κ·Έλν νμ - λλΉ μ°μ νμ(BFS, Breadth-First Search )
κ·Έλν νμ μ, νΉμ λ Έλμμ μμν΄ μΈμ ν λ Έλλ₯Ό λ¨Όμ νμν©λλ€. λ λ Έλ μ¬μ΄μ μ΅λ¨ κ²½λ‘, μμμ κ²½λ‘λ₯Ό μ°Ύκ³ μΆμ λ BFS λ₯Ό μ¬μ©ν©λλ€. BFS λ κ°κ°μ λ Έλλ₯Ό λ¨ νλ²λ§ λ°©λ¬Ένλ€λ νΉμ§μ΄ μμ΅λλ€.
νΈλ¦¬μ κ²½μ°, λ£¨νΈ λ Έλμμ μμν΄ λ€μ λ 벨μ λ Έλλ₯Ό μ λΆ νμν ν, μλλ‘ λ΄λ €κ°λ κ²μ λλ€.
π©π» κ·Έλν νμ (DFS / BFS) - μκ³ λ¦¬μ¦ λ¬Έμ νμ΄
μ°Έκ³ λ§ν¬