Graph μ©μ΄ μ 리
Graph μ’ λ₯
Graph ꡬν
Graph νμ
κ°μ²΄ κ°μ κ΄κ³λ₯Ό ννν μ μλ μλ£κ΅¬μ‘°
ex) μ§λ, μ§νμ² λ Έμ λμ μ΅λ¨ κ²½λ‘ λ±
-
μ μ (vertex; node)μ κ·Έ μ μ μ μ°κ²°νλ κ°μ (edge; arc)μ νλλ‘ λͺ¨μ λμ μλ£κ΅¬μ‘°
-
νΈλ¦¬λ κ·Έλνμ νΉμν νν
-
μΈμ μ μ (adjacent vertex): κ°μ μ μν΄ μ§μ μ°κ²°λ μ μ
-
μΈμ (adjacent) & λΆμ(incident): μμμ λ μ μ μ΄ νλμ κ°μ μΌλ‘ μ°κ²°λΌ μμ κ²½μ°, μ΄ μ μ λ€μ μλ‘ μΈμ (adjacent)ν΄ μλ€κ³ νλ€. κ°μ κ²½μ°μ μ΄ κ°μ μ λ λ Έλμ λΆμ(incident)νλ€κ³ νλ€.
-
λΆλΆ κ·Έλν(subgraph): κ·Έλνμ ν¬ν¨λλ μΌλΆ μ μ κ³Ό κ°μ μΌλ‘λ§ κ·Έλ¦° κ·Έλν. λΆλΆ κ·Έλν μ€μμ μλ κ·Έλνμ μ μ μ λͺ¨λ ν¬ν¨ν λΆλΆ κ·Έλνλ₯Ό λΆλΆμ μ₯ κ·Έλν(spanning graph) λΌκ³ νλ€.
-
μ μ μ μ°¨μ(degree): ν μ μ μ μ°¨μλ ν΄λΉ μ μ μ μ°κ²°λ κ°μ μ μ(νΉμ κ°μ κ°μ€μΉμ ν©)λ₯Ό κ°λ¦¬ν¨λ€.
- λ°©ν₯ κ·Έλνμ κ²½μ° μΈλΆμμ μ€λ κ°μ μ μλ₯Ό μ§μ μ°¨μ(in-degree) λΌκ³ νλ©°, μΈλΆλ‘ ν₯νλ κ°μ μ μλ₯Ό μ§μΆ μ°¨μ(out-degree) λΌκ³ νλ€.
-
루ν(loop) & isolated: λ μ μ μ΄ κ°μ μ μ μΈ κ°μ (μ μ μ μ체μ μ°κ²°νλ κ°μ )μ loopλΌ νκ³ μμμ ν μ μ μ λΆμν΄ μλ κ°μ μ΄ μ ν μμ λ ν΄λΉ μ μ μ isolated vertexλΌκ³ νλ€.
-
κ²½λ‘(path): κ°μ μ λ°λΌκ° μ μλ κΈΈμ λ§νλ©°, μ μ μ λμ΄νμ¬ νμνλ€.
-
κ²½λ‘μ κΈΈμ΄(length): κ²½λ‘λ₯Ό ꡬμ±νλ λ° μ¬μ©λ κ°μ μ μ
-
simple path & elementary path: κ²½λ‘ μ€μμ λ°λ³΅λλ κ°μ μ΄ μλ κ²½μ°λ₯Ό simple νλ€κ³ νκ³ λ°λ³΅λλ μ μ μ΄ μλ κ²½μ°λ₯Ό elementary νλ€κ³ νλ€.
-
-
μ¬μ΄ν΄(cycle): μμ μ μ κ³Ό μ’ λ£ μ μ μ΄ λμΌν κ²½λ‘
-
μ°κ²°(connected): λ μ μ μ¬μ΄μ κ²½λ‘κ° μ‘΄μ¬ν λ λ μ μ μ μ°κ²°λμλ€κ³ νλ€.
- κ°ν μ°κ²° & μ½ν μ°κ²°: λ°©ν₯κ·Έλνμ μμμ λ Έλμ π, πμ λν΄ πμμ πλ‘ κ°λ κ²½λ‘, πμμ πλ‘ κ°λ κ²½λ‘κ° μ‘΄μ¬νλ€λ©΄, ν΄λΉ λ°©ν₯κ·Έλνλ κ°ν μ°κ²°(strongly connected) λμλ€κ³ λ§νλ€. νμ§λ§ λ μ€ νλμ κ²½λ‘λ§ μ‘΄μ¬νλ€λ©΄, ν΄λΉ λ°©ν₯κ·Έλνλ μ½ν μ°κ²°(weakly connected) λμλ€κ³ νλ€.
-
무방ν₯ κ·Έλν(Undirected Graph)
- 무방ν₯ κ·Έλνμ κ°μ μ κ°μ μ ν΅ν΄μ μ λ°©ν₯μΌλ‘ κ° μ μλ€.
- μ μ Aμ μ μ Bλ₯Ό μ°κ²°νλ κ°μ μ (A,B)μ κ°μ΄ μ μ μ μμΌλ‘ νννλ€.
-
λ°©ν₯ κ·Έλν(Directed Graph)
- κ°μ μ λ°©ν₯μ±μ΄ μ‘΄μ¬νλ κ·Έλν
- A->Bλ‘λ§ κ° μ μλ κ°μ μ <A,B>λ‘ νμνλ€.
- κ°μ€μΉ κ·Έλν(Weighted Graph)
- κ°μ μ λΉμ©μ΄λ κ°μ€μΉκ° ν λΉλ κ·Έλν
-
μ°κ²° κ·Έλν(Connected Graph)
- 무방ν₯ κ·Έλνμ μλ λͺ¨λ μ μ μμ λν΄μ νμ κ²½λ‘κ° μ‘΄μ¬νλ κ²½μ°
-
λΉμ°κ²° κ·Έλν(Disconnected Graph)
- 무방ν₯ κ·Έλνμμ νΉμ μ μ μ μ¬μ΄μ κ²½λ‘κ° μ‘΄μ¬νμ§ μλ κ²½μ°
-
μ¬μ΄ν΄(Cycle)
- μμ μ μ κ³Ό μ’ λ£ μ μ μ΄ λμΌν κ²½λ‘
-
μν(cycle)μ κ°μ§κ³ μμΌλ©΄ μν κ·Έλνμ΄κ³ κ·Έλ μ§ μμΌλ©΄ λΉμν κ·Έλν(acyclic)
- μμ κ·Έλν(Complete Graph)
- κ·Έλνμ μν΄ μλ λͺ¨λ μ μ μ΄ μλ‘ μ°κ²°λμ΄ μλ κ·Έλν
- 무방ν₯ μμ κ·Έλν
- μ μ μκ° nκ°μ΄λ©΄ κ°μ μ μλ n*(n-1)/2
- λ°©ν₯ μμ κ·Έλν
- μ μ μκ° nκ°μ΄λ©΄ κ°μ μ μλ n*(n-1)
- κ·Έλνλ₯Ό ꡬννλ λ°©λ²μλ μΈμ νλ ¬(Adjacency Matrix)μ μΈμ 리μ€νΈ(Adjacency List) λ°©μμ΄ μλ€.
2μ°¨μ λ°°μ΄λ‘ κ·Έλνμ μ°κ²° κ΄κ³λ₯Ό νννλ λ°©μ
κ° μ μ μ μ°κ²°νλ μ μ μ λ€λ₯Έ μ μ λ€μ΄ μΈμ μ μ μ΄λΌλ©΄ 1, μλλ©΄ 0μ λ£μ΄μ€λ€.
λ§μ½ κ°μ μ κ°μ€μΉκ° μλ κ·ΈλνλΌλ©΄ 1 λμ μ κ°μ€μΉμ κ°μ μ§μ λ£μ΄μ£Όλ λ°©μμΌλ‘ ꡬν
μ₯μ
-
2μ°¨μ λ°°μ΄ μμ λͺ¨λ μ μ λ€μ κ°μ μ 보λ₯Ό λ΄κΈ° λλ¬Έμ λ°°μ΄μ μμΉλ₯Ό νμΈνλ©΄ λ μ μ λν μ°κ²° μ 보λ₯Ό μ‘°νν λ O(1)μ μκ°λ³΅μ‘λλ©΄ κ°λ₯
-
μ§κ΄μ μ΄λ©° μ½κ² ꡬν κ°λ₯
λ¨μ
-
λͺ¨λ μ μ μ λν΄ κ°μ μ 보λ₯Ό λμ ν΄μΌ νλ―λ‘ μ μ μ κ°μκ° nκ°μΈ κ·Έλνλ κ°μ μ μμ 무κ΄νκ² νμ n^2μ λ©λͺ¨λ¦¬ 곡κ°μ΄ νμνλ€.
-
μΈμ ν λ Έλλ₯Ό μ°ΎκΈ° μν΄μλ λͺ¨λ λ Έλλ₯Ό μ λΆ μνν΄μΌ νλ€.
리μ€νΈλ‘ κ·Έλνμ μ°κ²° κ΄κ³λ₯Ό νννλ λ°©μ
κ°κ°μ μ μ μ μΈμ ν μ μ λ€μ 리μ€νΈλ‘ νμν κ²μ΄λ€.
μ₯μ
-
μ μ λ€μ μ°κ²° μ 보λ₯Ό νμν λ O(n)μ μκ°μ΄λ©΄ κ°λ₯ (n: κ°μ μ κ°μ)
-
νμν λ§νΌμ 곡κ°λ§ μ¬μ©νκΈ° λλ¬Έμ 곡κ°μ λλΉκ° μ λ€.
λ¨μ
-
νΉμ λ μ μ΄ μ°κ²°λμλμ§ νμΈνλ €λ©΄ μΈμ νλ ¬μ λΉν΄ μκ°μ΄ μ€λ κ±Έλ¦°λ€. (λ°°μ΄λ³΄λ€ search μλκ° λλ¦Ό)
-
μΈμ νλ ¬μ λΉν΄ ꡬνμ΄ λΉκ΅μ μ΄λ ΅λ€.
첫 μ μ μμλΆν° κ·Έλνμ μ‘΄μ¬νλ λͺ¨λ μ μ λ€μ λͺ¨λ νλ²μ© λ°©λ¬Ένλ κ²
κ·Έλν νμμ λ°©λ²μ κΉμ΄ μ°μ νμ(DFS) κ³Ό λλΉ μ°μ νμ(BFS) λ°©μμ΄ μλ€.
λ λ°©μ λͺ¨λ 쑰건 λ΄μ λͺ¨λ λ Έλλ₯Ό κ²μνλ€λ μ μμ μκ° λ³΅μ‘λλ λμΌ
- μΈμ 리μ€νΈ : O(V+E)
- μΈμ νλ ¬ : O(VΒ²)
νμ λ Έλμ μΈμ λ Έλμ μμ λ Έλλ€μ λͺ¨λ νμνκ³ , λ€μ λμκ°μ νμ λ Έλμ λ€λ₯Έ μΈμ λ Έλ μμλ€μ λͺ¨λ νμνλ λ°©λ²
μΌμͺ½μ λ¨Όμ νμνλ, μ€λ₯Έμͺ½μ λ¨Όμ νμνλ κ°μ μμλ μ€μνμ§ μλ€.
μ€ν λλ μ¬κ·ν¨μλ‘ κ΅¬ν
νμ λ Έλμ μΈμ ν λ Έλλ₯Ό λ¨Όμ νμνλ λ°©λ²
μ£Όλ‘ λ λ Έλ μ¬μ΄μ μ΅λ¨ κ²½λ‘λ₯Ό μ°Ύκ³ μΆμ λ μ΄ λ°©λ²μ μ ν
νλ₯Ό μ΄μ©ν΄μ ꡬν
- κ·Έλνλ₯Ό ꡬννλ λ°©μλ€μ μ₯λ¨μ μ λΉκ΅νμμ€.
- κ·Έλνμ νΈλ¦¬μ μ°¨μ΄μ μ λν΄μ μ€λͺ νμμ€.
- BFSμ DFSμ μ°¨μ΄μ μ λν΄μ μ€λͺ νμμ€.