# κ·Έλν(Graph)
written by sohyeon, hyemin π‘
# 1. κ·Έλνλ?
κ·Έλν(Graph)
λ λ
Έλ(node)μ κ°μ (κ°μ§, edge)μ νλλ‘ λͺ¨μ λμ μλ£κ΅¬μ‘°λ₯Ό λ§νλ€.
μ¦, μ°κ²°λμ΄ μλ κ°μ²΄ κ°μ κ΄κ³λ₯Ό ννν μ μλ μλ£κ΅¬μ‘°
# 2. κ·Έλνμ νΉμ§
κ·Έλνλ
λ€νΈμν¬ λͺ¨λΈ
μ΄λ€.2κ° μ΄μμ κ²½λ‘κ° κ°λ₯νλ€.
self-loop
λΏλ§ μλλΌloop/circuit
μ λΆ κ°λ₯νλ€.νΈλ¦¬μ λ¬λ¦¬
루νΈ, λΆλͺ¨-μμμ κ°λ μ΄ μλ€.
μνλ
DFS(Depth-First Search)
λBFS(Breadth-First Search)
λ‘ μ΄λ£¨μ΄μ§λ€.κ·Έλνλ
μν(Cyclic)
νΉμλΉμν(Acyclic)
μ΄λ€.- μν κ·Έλν(Cycle)
λ¨μ κ²½λ‘μ μμ μ μ κ³Ό μ’ λ£ μ μ μ΄ λμΌν κ²½μ°λ₯Ό λ§νλ€. - λΉμν κ·Έλν
μ¬μ΄ν΄μ΄ μλ κ·Έλνλ₯Ό μλ―Ένλ€.
- μν κ·Έλν(Cycle)
κ·Έλνλ
λ°©ν₯ κ·Έλν(Undirected Graph)
μ무방ν₯ κ·Έλν(Directed Graph)
κ° μλ€.- 무방ν₯ κ·Έλν
κ°μ μ ν΅ν΄μ μλ°©ν₯μΌλ‘ κ° μ μλ€. - λ°©ν₯ κ·Έλν
κ°μ μ λ°©ν₯μ±μ΄ μ‘΄μ¬νλ κ·Έλνμ΄λ€.
- 무방ν₯ κ·Έλν
κ·Έλνλ
μ°κ²° κ·Έλν(Connected Graph)
νΉμλΉμ°κ²° κ·Έλν(Disconnected Graph)
μ΄λ€.- μ°κ²° κ·Έλν
무방ν₯ κ·Έλνμμ λͺ¨λ μ μ μμ λν΄ νμ κ²½λ‘κ° μ‘΄μ¬νλ κ·Έλνex) νΈλ¦¬
- λΉμ°κ²° κ·Έλν
무방ν₯ κ·Έλνμμ νΉμ μ μ μ μ¬μ΄μ κ²½λ‘κ° μ‘΄μ¬νμ§ μλ κ·Έλν
- μ°κ²° κ·Έλν
μ΄μΈμλ κ·Έλνμ μ’ λ₯μλ
κ°μ€μΉ κ·Έλν(Weighted Graph)
,μμ κ·Έλν(Complete Graph)
λ±μ΄ μλ€.- κ°μ€μΉ κ·Έλν
κ°μ μ λΉμ©μ΄λ κ°μ€μΉκ° ν λΉλ κ·Έλν - μμ κ·Έλν
κ·Έλνμ μν΄ μλ λͺ¨λ μ μ μ΄ μλ‘ μ°κ²°λμ΄ μλ κ·Έλν
- κ°μ€μΉ κ·Έλν
# 3. κ·Έλνμ κ΄λ ¨ μ©μ΄
μ μ (vertex)
μμΉλ₯Ό μλ―Ένλ€. (nodeμ κ°μ μλ―Έ)κ°μ (edge)
μμΉ κ°μ κ΄κ³λ‘ λ Έλ(node)λ₯Ό μ°κ²°νλ μ μ΄λ€.μΈμ μ μ (adjacent vertex)
κ°μ μ μν΄ μ§μ μ°κ²°λ μ μ μ μλ―Ένλ€.μ μ μ μ°¨μ(degree)
무방ν₯ κ·Έλνμμ νλμ μ μ μ μΈμ ν μ μ μ μλ₯Ό μλ―Ένλ€.
무방ν₯ κ·Έλνμ μ‘΄μ¬νλ μ μ μ λͺ¨λ μ°¨μμ ν© = κ·Έλνμ κ°μ μμ 2λ°°
μ§μ μ°¨μ(in-degree)
λ°©ν₯ κ·Έλνμμ μΈλΆμμ μ€λ κ°μ μ μλ₯Ό μλ―Ένλ€.μ§μΆ μ°¨μ(out-degree)
λ°©ν₯ κ·Έλνμμ μΈλΆλ‘ κ°λ κ°μ μ μλ₯Ό μλ―Ένλ€.κ²½λ‘ κΈΈμ΄(path length)
κ²½λ‘λ₯Ό ꡬμ±νλ λ° μ¬μ©λ κ°μ μ μλ₯Ό μλ―Ένλ€.λ¨μ κ²½λ‘(simple path)
κ²½λ‘ μ€μμ λ°λ³΅λλ μ μ μ΄ μλ κ²½μ°λ₯Ό λ§νλ€.μ¬μ΄ν΄(cycle)
λ¨μ κ²½λ‘μ μμ μ μ κ³Ό μ’ λ£ μ μ μ΄ κ°μ κ²½μ°λ₯Ό λ§νλ€.
# 4. κ·Έλνμ νΈλ¦¬μ μ°¨μ΄μ
κ·Έλν(Graph) | νΈλ¦¬(Tree) | |
---|---|---|
μ μ | λ Έλ(node)μ κ·Έ λ Έλλ₯Ό μ°κ²°νλ κ°μ (edge)μ νλλ‘ λͺ¨μ λμ μλ£κ΅¬μ‘° | κ·Έλνμ ν μ’
λ₯ DAG(Directed Acyclic Graph)μ ν μ’ λ₯ |
λ°©ν₯μ± | λ°©ν₯κ·Έλν(Directed), 무방ν₯ κ·Έλν(Undirected) λͺ¨λ μ‘΄μ¬ | λ°©ν₯κ·Έλν(Directed) |
μ¬μ΄ν΄ | μ¬μ΄ν΄(Cycle)μ μ체 κ°μ (self-loop) κ°λ₯ μν κ·Έλν(Cyclic), λΉμν κ·Έλν(Acyclic) λͺ¨λ μ‘΄μ¬ | μ¬μ΄ν΄(Cycle)μ μ체 κ°μ (self-loop) λΆκ°λ₯ λΉμν κ·Έλν(Acyclic) |
λ£¨νΈ | λ£¨νΈ λ Έλμ κ°λ μ΄ μμ | ν κ°μ λ£¨νΈ λ Έλλ§μ΄ μ‘΄μ¬, λͺ¨λ μμ λ Έλλ ν κ°μ λΆλͺ¨ λ Έλλ§μ κ°μ§ |
λΆλͺ¨-μμ | λΆλͺ¨-μμμ κ°λ μ΄ μμ | λΆλͺ¨-μμ κ΄κ³, top-bottom λλ bottom-topμΌλ‘ μ΄λ£¨μ΄μ§ |
λͺ¨λΈ | λ€νΈμν¬ λͺ¨λΈ | κ³μΈ΅ λͺ¨λΈ |
μν | DFS, BFS | DFS, BFSμμ Pre-order, In-order, Post-order |
κ°μ μ μ | κ·Έλνμ λ°λΌ κ°μ μ μκ° λ€λ¦ κ°μ μ΄ μμ μλ μμ | λ Έλκ° NμΈ νΈλ¦¬λ νμ N-1μ κ°μ μ κ°μ§ |
κ²½λ‘ | - | μμμ λ λ Έλ κ°μ κ²½λ‘λ μ μΌ |
μμ λ° μ’ λ₯ | μ§λ, μ§νμ² λ Έμ λμ μ΅λ¨ κ²½λ‘, μ κΈ° νλ‘μ μμλ€, λλ‘(κ΅μ°¨μ κ³Ό μΌλ°© ν΅νκΈΈ) | μ΄μ§ νΈλ¦¬, μ΄μ§ νμ νΈλ¦¬, κ· ν νΈλ¦¬(AVLνΈλ¦¬, red-black νΈλ¦¬), μ΄μ§ ν(μ΅λν, μ΅μν) λ± |
# 5. κ·Έλνμ ꡬν 2κ°μ§
# μΈμ 리μ€νΈ(adjacency list)
μΈμ 리μ€νΈλ‘ κ·Έλνλ₯Ό νννλ κ²μ΄ κ°μ₯ μΌλ°μ μΈ λ°©λ²μ΄λ€.
- λͺ¨λ μ μ (νΉμ λ
Έλ)μ μΈμ 리μ€νΈμ μ μ₯νλ€. μ¦, κ°κ°μ μ μ μ μΈμ ν μ μ λ€μ 리μ€νΈλ‘ ννν κ²μ΄λ€.
- λ°°μ΄(νΉμ ν΄μν μ΄λΈ)κ³Ό λ°°μ΄μ κ° μΈλ±μ€λ§λ€ μ‘΄μ¬νλ λ λ€λ₯Έ 리μ€νΈ(λ°°μ΄, λμ κ°λ³ ν¬κΈ° λ°°μ΄(arraylist), μ°κ²°λ¦¬μ€νΈ(linked list) λ±)λ₯Ό μ΄μ©ν΄μ μΈμ 리μ€νΈλ₯Ό ννν μ μλ€.
0 : 1
1 : 2
2 : 0, 3
3 : 2
4 : 6
5 : 4
6 : 5
무방ν₯ κ·Έλν(undirected graph)μμ (a, b) κ°μ μ λ λ² μ μ₯λλ€.
- ν λ²μ a μ μ μ μΈμ ν κ°μ μ μ μ₯νκ³ λ€λ₯Έ ν λ²μ bμ μΈμ ν κ°μ μ μ μ₯νλ€.
κ·Έλνμμ νΉμ λ Έλμμ λ€λ₯Έ λͺ¨λ λ Έλλ‘ μ κ·Όμ΄ κ°λ₯νμ§ μλ€ => Graph ν΄λμ€ νμ
- νΈλ¦¬μμ νΉμ λ Έλ νλ(λ£¨νΈ λ Έλ)μμ λ€λ₯Έ λͺ¨λ λ Έλλ‘ μ κ·Όμ΄ κ°λ₯ => Tree ν΄λμ€ λΆνμ
# ex) λ Έλλ₯Ό μ μνλ κ°λ¨ν ν΄λμ€
class Graph {
public Node[] nodes;
}
class Node {
}
# μΈμ νλ ¬
μΈμ νλ ¬
μ N X N λΆλ¦° νλ ¬(boolean matrix)λ‘μ matrix[i][j]κ° trueλΌλ©΄ iμμ jλ‘μ κ°μ μ΄ μλ€λ λ»μ΄λ€.
0κ³Ό 1μ μ΄μ©ν μ μ νλ ¬(integer matrix)μ μ¬μ©ν μ μλ€.
μΈμ 리μ€νΈ
μμλ μ΄λ€ λ Έλμ μΈμ ν λ Έλλ€μ μ½κ² μ°Ύμ μ μμ§λ§,μΈμ νλ ¬
μμλ μ΄λ€ λ Έλμ μΈμ ν λ Έλλ₯Ό μ°ΎκΈ° μν΄μλ λͺ¨λ λ Έλλ₯Ό μ λΆ μνν΄μΌ μ μ μλ€.
# Reference & Additional Resources
μ½λ© μΈν°λ·° μμ λΆμ
https://gmlwjd9405.github.io/2018/08/13/data-structure-graph.html