λ°μν
κ·Έλν(Graph)
- μ°κ²°λμ΄μλ μμκ°μ κ΄κ³λ₯Ό ννν μλ£κ΅¬μ‘°
- λ Έλ(Node)μ κ·Έ λ Έλλ₯Ό μ°κ²°νλ κ°μ (Edge)μ νλλ‘ λͺ¨μ λμ μλ£κ΅¬μ‘°
κ·Έλν κ΄λ ¨ μ©μ΄
- μ μ (vertex): μμΉλΌλ κ°λ (node λΌκ³ λ λΆλ¦)
- κ°μ (edge): μμΉ κ°μ κ΄κ³, λ Έλλ₯Ό μ°κ²°νλ μ (link, branch λΌκ³ λ λΆλ¦)
- μΈμ μ μ (adjacent vertex): κ°μ μ μ ν΄ μ§μ μ°κ²°λ μ μ
- μ μ μ μ°¨μ(degree): 무방ν₯ κ·Έλνμμ νλμ μ μ μ μΈμ ν μ μ μ μ
- 무방ν₯ κ·Έλνμ μ‘΄μ¬νλ μ μ μ λͺ¨λ μ°¨μμ ν© = κ·Έλνμ κ°μ μμ 2λ°°
- μ§μ μ°¨μ(in-degree): λ°©ν₯ κ·Έλνμμ μΈλΆμμ μ€λ κ°μ μ μ (λ΄μ°¨μ λΌκ³ λ λΆλ¦)
- μ§μΆ μ°¨μ(out-degree): λ°©ν₯ κ·Έλνμμ μΈλΆλ‘ ν₯νλ κ°μ μ μ (μΈμ°¨μ λΌκ³ λ λΆλ¦)
- λ°©ν₯ κ·Έλνμ μλ μ μ μ μ§μ μ°¨μ λλ μ§μΆ μ°¨μμ ν© = λ°©ν₯ κ·Έλνμ κ°μ μ μ(λ΄μ°¨μ + μΈμ°¨μ)
- κ²½λ‘ κΈΈμ΄(path length): κ²½λ‘λ₯Ό ꡬμ±νλ λ° μ¬μ©λ κ°μ μ μ
- λ¨μ κ²½λ‘(simple path): κ²½λ‘ μ€μμ λ°λ³΅λλ μ μ μ΄ μλ κ²½μ°
- μ¬μ΄ν΄(cycle): λ¨μ κ²½λ‘μ μμ μ μ κ³Ό μ’ λ£ μ μ μ΄ λμΌν κ²½μ°
κ·Έλνμ νΉμ§
- λ€νΈμν¬ λͺ¨λΈ
- 2κ° μ΄μμ κ²½λ‘κ° κ°λ₯
- λ Έλλ€ μ¬μ΄μ 무방ν₯/λ°©ν₯μμ μλ°©ν₯ κ²½λ‘λ₯Ό κ°μ§ μ μμ
- self-loop λΏ μλλΌ loop/circuit λͺ¨λ κ°λ₯
- λ£¨νΈ λ ΈλλΌλ κ°λ μ΄ μμ
- λΆλͺ¨-μμ κ΄κ³λΌλ κ°λ μ΄ μμ
- μνλ DFSλ BFSλ‘ μ΄λ£¨μ΄μ§
- κ·Έλνλ μν(Cyclic) νΉμ λΉμν(Acyclic)
- κ·Έλνλ ν¬κ² λ°©ν₯ κ·Έλνμ 무방ν₯ κ·Έλνκ° μμ
- κ°μ μ μ 무λ κ·Έλνμ λ°λΌ λ€λ¦
κ·Έλνμ μ’ λ₯
1. 무방ν₯ κ·Έλν (Undirected Graph)
- λ μ μ μ μ°κ²°νλ κ°μ μ λ°©ν₯μ΄ μλ κ·Έλν
- μ μ Aμ μ μ Bλ₯Ό μ°κ²°νλ κ°μ μ (A, B)μ κ°μ΄ μ μ μ μμΌλ‘ νν
- (A, B)λ (B, A) λμΌ
2. λ°©ν₯ κ·Έλν (Directed Graph)
- λ μ μ μ μ°κ²°νλ κ°μ μ λ°©ν₯μ΄ μλ κ·Έλν
- A -> Bλ‘λ§ κ° μ μλ κ°μ μ <A, B>λ‘ νμ
- <A, B>λ <B, A>λ λ€λ¦
3. μμ κ·Έλν (Complete Graph)
- κ·Έλνμ μν΄ μλ λͺ¨λ μ μ μ΄ μλ‘ μ°κ²°λμ΄ μ΅λ κ°μ μλ₯Ό κ°λ κ·Έλν
- μ μ μ΄ nκ°μΈ μμ κ·Έλνμμ 무방ν₯ κ·Έλνμ μ΅λ κ°μ μλ n*(n-1)/2
- μ μ μ΄ nκ°μΈ μμ κ·Έλνμμ λ°©ν₯ κ·Έλνμ μ΅λ κ°μ μλ (n-1)
4. λΆλΆ κ·Έλν (Subgraph)
- κΈ°μ‘΄μ κ·Έλνμμ μΌλΆ μ μ μ΄λ κ°μ μ μ μΈνμ¬ λ§λ κ·Έλν
5. κ°μ€ κ·Έλν (Weight Graph)
- μ μ μ μ°κ²°νλ κ°μ μ κ°μ€μΉ(Weight)λ₯Ό ν λΉν κ·Έλν
6. μ ν₯ λΉμν κ·Έλν (DAG, Directed Acyclic Graph)
- λ°©ν₯ κ·Έλνμμ μ¬μ΄ν΄μ΄ μλ κ·Έλν
7. μ°κ²° κ·Έλν (Connected Graph)
- λ¨μ΄μ Έ μλ μ μ μ΄ μλ κ·Έλν
8. λ¨μ κ·Έλν (Disconnected Graph)
- μ°κ²°λμ§ μμ μ μ μ΄ μλ κ·Έλν
κ·Έλνμ ꡬν
μΈμ 리μ€νΈ
- κ·Έλν λ΄μ μ μ μ«μμ κ°μ λ§μ κ°μ§λ ν¬μ κ·Έλν(Sparse Graph) μ κ²½μ°
- μ₯μ
- μ΄λ€ λ Έλμ μΈμ ν λ Έλλ€ μ μ½κ² μ°Ύμ μ μμ
- κ·Έλνμ μ‘΄μ¬νλ λͺ¨λ κ°μ μ μ λ O(N+E) μμ μ μ μμ -> μΈμ 리μ€νΈ μ 체λ₯Ό μ‘°μ¬ν¨
- λ¨μ
- κ°μ μ μ‘΄μ¬ μ¬λΆμ μ μ μ μ°¨μ: μ μ iμ 리μ€νΈμ μλ λ Έλμ μ μ¦, μ μ μ°¨μλ§νΌμ μκ°μ΄ νμ
μΈμ νλ ¬
- κ·Έλνμ κ°μ μ΄ λ§μ΄ μ‘΄μ¬νλ λ°μ§ κ·Έλν(Dense Graph) μ κ²½μ°
- μ₯μ
- λ μ μ μ μ°κ²°νλ κ°μ μ μ‘΄μ¬ μ¬λΆ (M[i][j])λ₯Ό O(1) μμ μ¦μ μ μ μμ
- μ μ μ μ°¨μ λ O(N) μμ μ μ μμ -> μΈμ λ°°μ΄μ iλ² μ§Έ ν λλ μ΄μ λͺ¨λ λν¨
- λ¨μ
- μ΄λ€ λ Έλμ μΈμ ν λ Έλλ€μ μ°ΎκΈ° μν΄μλ λͺ¨λ λ Έλλ₯Ό μ λΆ μνν΄μΌ ν¨
- κ·Έλνμ μ‘΄μ¬νλ λͺ¨λ κ°μ μ μλ O(N^2) μμ μ μ μμ -> μΈμ νλ ¬ μ 체λ₯Ό μ‘°μ¬
κ·Έλνμ νμ
1. κΉμ΄ μ°μ νμ(DFS, Depth-Firsh Search)
- λ£¨νΈ λ Έλ(νΉμ λ€λ₯Έ μμμ λ Έλ)μμ μμν΄μ λ€μ λΆκΈ°(branch)λ‘ λμ΄κ°κΈ° μ μ ν΄λΉ λΆκΈ°λ₯Ό μλ²½νκ² νμνλ λ°©λ²
- λͺ¨λ λ Έλλ₯Ό λ°©λ¬Έ νκ³ μ νλ κ²½μ°μ μ΄ λ°©λ²μ μ ν
- BFS λ³΄λ€ μ’ λ κ°λ¨
2. λλΉ μ°μ νμ(BFS, Breadth-Firsh Search)
- λ£¨νΈ λ Έλ(νΉμ λ€λ₯Έ μμμ λ Έλ)μμ μμν΄μ μΈμ ν λ Έλλ₯Ό λ¨Όμ νμνλ λ°©λ²
- λ λ
Έλ μ¬μ΄μ μ΅λ¨ κ²½λ‘ νΉμ μμμ κ²½λ‘λ₯Ό μ°Ύκ³ μΆμ λ μ΄ λ°©λ²μ μ ν
λ°μν
'π Computer Science > Data Structure' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ£κ΅¬μ‘°] ν(Heap) (0) | 2023.03.13 |
---|---|
[μλ£κ΅¬μ‘°] νΈλ¦¬(Tree) (0) | 2023.03.09 |
[μλ£κ΅¬μ‘°] Time Complexity (μκ° λ³΅μ‘λ) (0) | 2023.03.07 |
[μλ£κ΅¬μ‘°] ν(Queue) (0) | 2023.03.06 |
[μλ£κ΅¬μ‘°] μ€ν(Stack) (0) | 2023.02.14 |