μ§μ μ μΈ κ΄κ³ κ° μλ κ²½μ° λ μ μ¬μ΄λ₯Ό μ΄μ΄μ£Όλ μ μ΄ μλ€.
κ°μ μ μΈ κ΄κ³ λΌλ©΄ λͺ κ°μ μ κ³Ό μ μ κ±Έμ³ μ΄μ΄μ§λ€.
κ·Έλνμμ νλμ μ μ μ μ (vertex) μ΄λΌκ³ νννλ©°, νλμ μ μ κ°μ (edge) μ΄λΌκ³ νλ€.
// μμ μ½λ
/*
1 == μμΈ, 2 == λΆμ°, 3 == λμ
0μ μ°κ²°λμ§ μμ μν, 1μ μ°κ²°λ μν (κ°μ μ μ μλ‘ νν)
*/
[1] = [0, 1, 1]// μμΈ - λΆμ° , μμΈ - λμ
[2] = [1, 0, 1]// λΆμ° - μμΈ , λΆμ° - λμ
[3] = [1, 1, 0]// λμ - μμΈ , λμ - λΆμ°
μ μ (vertex)
λ
Έλ(node)λΌκ³ λ νλ©° λ°μ΄ν°κ° μ μ₯λλ κ·Έλνμ κΈ°λ³Έ μμ
κ°μ (edge)
λ μ μ μ μ°κ²°νλ©°, μ΄λ€μ κ΄κ³λ₯Ό λνλ΄λ μ .
μΈμ μ μ (adjacent vertex)
κ°μ μ μν΄ μ§μ μ°κ²°λ μ μ μ μλ―Έ
κ°μ€μΉ κ·Έλν (weighted Graph)
μ°κ²°μ κ°λ(μΆκ°μ μΈ μ 보, μμλ‘ μμΈ-λΆμ°μΌλ‘ κ°λ 거리)λ₯Ό λνλ΄λ κ·Έλν
λΉκ°μ€μΉ κ·Έλν (unweighted Graph)
μ°κ²°μ κ°λλ₯Ό νννμ§ μλ κ·Έλν
무ν₯(무방ν₯) κ·Έλν (undirected graph)
κ°μ μ΄ μλ°©ν₯μ κ°λ¦¬ν€λ κ·Έλν.
μ΄ κ²½μ°, ν μ μ μμ λ€λ₯Έ μ μ μΌλ‘ μ΄λνλ κ²κ³Ό λ°λλ‘ μ΄λνλ κ² λͺ¨λ κ°λ₯νλ€.
μ§μ
μ°¨μ (in-degree) / μ§μΆμ°¨μ (out-degree)
ν μ μ μΌλ‘ λ€μ΄μ€λ κ°μ κ³Ό λκ°λ κ°μ μ μ
μΈμ (adjacency)
λ μ μ μ΄ μ§μ μ°κ²°λμ΄ μλ κ²½μ°, μ΄λ€μ μΈμ νλ€κ³ νννλ€
μκΈ° 루ν (self loop)
ν μ μ μμ μμν΄μ λ°λ‘ κ·Έ μ μ μΌλ‘ λμμ€λ κ²½λ‘
μ¬μ΄ν΄ (cycle)
ν μ μ μμ μμν΄μ λ€μ κ·Έ μ μ μΌλ‘ λμμ€λ κ²½λ‘κ° μ‘΄μ¬νλ€λ©΄, μ΄λ₯Ό μ¬μ΄ν΄μ΄ μλ€κ³ λ§νλ€.
λ΄λΉκ²μ΄μ
κ·Έλνλ μμΈ β> λμ β> λΆμ° β> μμΈ
λ‘ μ΄λμ΄ κ°λ₯νλ―λ‘, μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ κ·ΈλνλΌκ³ ν μ μλ€.
κ·Έλνμ μ¬λ¬ ꡬ쑰 μ€ λ¨λ°©ν₯ νν μ€ νλλ‘ νλμ λΏλ¦¬μμ λ€μν λ°©ν₯μΌλ‘ κ°μ§κ° λ»μ΄ λκ°λ ννλ₯Ό κ°μ§κ³ μλ€.
λ§μΉ κ°κ³λμ μ μ¬ν ννλ₯Ό κ°μ§κ³ μλ κ³μΈ΅μ μλ£ κ΅¬μ‘°λ‘μ, λ°μ΄ν°κ° λ°λ‘ μλμ μλ νλ μ΄μμ λ°μ΄ν°μ 무방ν₯μΌλ‘ μ°κ²°λλ€.
λ°μ΄ν°λ₯Ό μμ°¨μ μΌλ‘ λ°°μ΄ν μ ν ꡬ쑰μ λ¬λ¦¬, νλμ λ°μ΄ν° μλ μ¬λ¬ λ°μ΄ν°κ° μ‘΄μ¬νλ λΉμ ν ꡬ쑰μ΄λ€.
κ³μΈ΅μ μΌλ‘ νν₯μ κ΅¬μ‘°λ‘ ννμ΄ λκΈ° λλ¬Έμ μ¬μ΄ν΄μ΄ μ‘΄μ¬νμ§ μλλ€.
νΈλ¦¬ ꡬ쑰λ β루νΈ(Root)β λΌλ νλμ κΌμ§μ λ°μ΄ν°λ‘ μμν΄ μ¬λ¬ κ°μ λ°μ΄ν°λ₯Ό βκ°μ (Edge)β μΌλ‘ μ°κ²°νλ€. κ° λ°μ΄ν°λ βλ Έλ(Node)β λΌκ³ νλ©°, λ λ Έλκ° μν κ³μΈ΅μΌλ‘ μ°κ²°λ λΆλͺ¨/μμ κ΄κ³λ₯Ό νμ±νλ€.
νΈλ¦¬ μλ£ κ΅¬μ‘°λ κΉμ΄, λ 벨, κ·Έλ¦¬κ³ λμ΄ λ₯Ό μΈ‘μ ν μ μλ€.
κΉμ΄ (Depth)
νΈλ¦¬ ꡬ쑰μμ κΉμ΄ λ 루νΈλΆν° νΉμ λ
ΈλκΉμ§μ 거리
μ΄λ, λ£¨νΈ μμ μ κΉμ΄λ '0'μ΄λ€.
λ 벨(Level)
λ 벨 μ κ°μ κΉμ΄λ₯Ό κ°μ§ λ
Έλμ μ§ν© μ μλ―Έ
κΉμ΄κ° 0μΈ λ£¨νΈ μμ μ λ 벨μ 1μ΄λ€.
κ°μ λ 벨μ λλν μλ λ
Έλλ₯Ό νμ λ
Έλ(Sibling Node)λΌκ³ νλ€.
λμ΄(Height)
λμ΄ λ 리ν λ
Έλλ‘λΆν° λ£¨νΈ λ
ΈλκΉμ§μ 거리
λΆλͺ¨ λ
Έλλ μμ λ
Έλμ κ°μ₯ λμ λμ΄ κ°μ 1μ λν κ°μ λμ΄λ‘ κ°μ§λ€.
H
, I
, E
, F
, J
μ λμ΄μ D
,G
μ λμ΄λ κ°κ° 0κ³Ό 1. B
μ C
μ λμ΄λ 2μ΄λ€. μ΄λ B
λ D
μ λμ΄μμ 1μ λν κ°μ λμ΄λ‘ κ°μ§λ©°, κ°μ κ³μ°μ λ°λΌ λ£¨νΈ A
μ λμ΄λ 3μ΄λλ€. μλΈ νΈλ¦¬(Sub tree)
νΈλ¦¬ ꡬ쑰μ 루νΈμμ λ»μ΄ λμ€λ ν° νΈλ¦¬μ λ΄λΆμ, νΈλ¦¬ ꡬ쑰λ₯Ό κ°μΆ μμ νΈλ¦¬λ₯Ό μλΈ νΈλ¦¬
1. ν¨κ³Όμ μΈ κ³μΈ΅ ꡬ쑰 νν
μλ₯Ό λ€μ΄, νμ¬μμ μ‘°μ§λλ₯Ό μμ±ν λ!
2. μ λ ¬κ³Ό νμμ νμ© κ°λ₯
μ΄μ§ νμ νΈλ¦¬, ν(Heap) λ±κ³Ό κ°μ λ€μν ννλ‘ μ¬μ©λ μ μμΌλ©°, μ λ ¬κ³Ό νμμ μν μκ³ λ¦¬μ¦μ ꡬννλ λ°μλ μ¬μ©λλ€.
3. μ½μ
κ³Ό μμ κ° μ©μ΄ν¨
λ
Έλμ μ½μ
κ³Ό μμ κ° μ½λ€. μ΄λ μ½μ
λ° μμ μμ ν΄λΉ λ
Έλμ λΆλͺ¨μ μμ λ
Έλλ§ μμ νλ©΄ λκΈ° λλ¬Έ!
4. ꡬ쑰 νμ
μ μ©μ΄ν¨
μκ°νκ° μ¬μ°λ―λ‘, νΈλ¦¬λ₯Ό μκ°μ μΌλ‘ νννμ¬ μ΄ν΄νκΈ° μ½λ€.
5. λ€μν λΆμΌμ νμ© κ°λ₯
λ€μν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λ€μν μκ³ λ¦¬μ¦μ κΈ°μ΄κ° λκΈ°λλ¬Έμ λ°μ΄ν°λ² μ΄μ€, μκ³ λ¦¬μ¦ λ± λ€μν λΆμΌμμ νμ©λλ€.
μ΄μ§ νμμ μμ±μ΄ μ΄μ§ νΈλ¦¬μ μ μ©λ νΉλ³ν ννμ μ΄μ§ νΈλ¦¬
μ λ ¬λ λ°μ΄ν° μ€μμ νΉμ ν κ°μ μ°ΎκΈ° μν νμ μκ³ λ¦¬μ¦ μ€ νλ
μ’ λ μμΈν μ€λͺ
νλ©΄,
μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ λ°μ΄ν°λ₯Ό
κ°μ ν¬κΈ°μ λ λΆλΆμΌλ‘ λλ ν,
λ λΆλΆ μ€ νμμ΄ νμν λΆλΆμμλ§ νμνλλ‘ νμ λ²μλ₯Ό μ ννμ¬ μνλ κ°μ μ°Ύλ μκ³ λ¦¬μ¦μ΄λ€.
μ 체 λ°μ΄ν°μμ μ€κ°κ°μ μ°Ύμ λ΄κ° μ°Ύκ³ μ νλ κ°μ΄ μλμ§ νμΈνλ€.
μ€κ°κ°μ΄ λ΄κ° μ°Ύκ³ μ νλ κ°μ΄ μλ κ²½μ°, μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ λ°μ΄ν°μμ μ€κ°κ°λ³΄λ€ ν° κ°μΈμ§ μμ κ°μΈμ§ νλ¨ (Up? Down?)
μ°Ύκ³ μ νλ κ°μ΄ μ€κ°κ°λ³΄λ€ μμ κ°μΌ κ²½μ°, λ°μ΄ν°μ 맨 μλΆν° μ€κ°κ° μ κΉμ§μ λ²μλ₯Ό νμ λ²μλ‘ μ€μ νκ³ νμμ λ°λ³΅ μν
μ°Ύκ³ μ νλ κ°μ΄ μ€κ°κ°λ³΄λ€ ν° κ°μΌ κ²½μ°, λ°μ΄ν°μ μ€κ°κ°μ λ€μ κ°λΆν° 맨 λ§μ§λ§κΉμ§λ₯Ό νμ λ²μλ‘ μ‘κ³ νμμ λ°λ³΅ μν
μ΄μ§ νμ νΈλ¦¬λ μ΄λ¬ν μ΄μ§ νμμ μ리λ₯Ό μ΄μ§ νΈλ¦¬μ μ μ©ν κ².
νΈλ¦¬μ λ£¨νΈ λ Έλλ μ 체 λ°μ΄ν°μ μ€κ°κ°μ ν΄λΉνλ©°, λ£¨νΈ λ Έλμ μΌμͺ½ μλΈ νΈλ¦¬λ λͺ¨λ λ£¨νΈ λ Έλ κ°λ³΄λ€ μμ κ°λ€λ‘, μ€λ₯Έμͺ½ μλΈ νΈλ¦¬λ λ£¨νΈ λ Έλ κ°λ³΄λ€ ν° κ°λ€λ‘ μ΄λ£¨μ΄μ Έ μλ€.
κ° λ
Έλλ μ€λ³΅λμ§ μλ ν€(Key
)λ₯Ό κ°μ§λ€. μ΄ ν€(Key
)λ κ° λ
Έλμ μ μ₯λ κ°μ΄λ€.
λ£¨νΈ λ Έλμ μΌμͺ½ μλΈ νΈλ¦¬λ ν΄λΉ λ Έλμ ν€λ³΄λ€ μμ ν€λ₯Ό κ°μ§ λ Έλλ€λ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, μ€λ₯Έμͺ½ μλΈ νΈλ¦¬λ ν΄λΉ λ Έλμ ν€λ³΄λ€ ν° ν€λ₯Ό κ°μ§ λ Έλλ€λ‘ μ΄λ£¨μ΄μ Έ μλ€.
κ°κ°μ μλΈ νΈλ¦¬λ λͺ¨λ μ΄μ§ νμ νΈλ¦¬μ μμ±μ κ°μ§λ€.
μΈμ νλ ¬μ μλ‘ λ€λ₯Έ λ Έλλ€μ΄ μ΄λ»κ² μΈμ ν΄ μλμ§λ₯Ό 보μ¬μ£Όλ 2μ°¨μ λ°°μ΄
μ¦, A λ
Έλμ B λ
Έλκ° μ°κ²°λμ΄ μλ€λ©΄ 1(true)λ‘ νμνκ³ , μ°κ²°λμ΄ μμ§ μλ€λ©΄ 0(false)λ‘ νμνλ ν!
(κ°μ€μΉκ° μ‘΄μ¬νλ κ·ΈλνλΌλ©΄ 1 λμ κ΄κ³μ μλ―Έλ₯Ό λνλ΄λ κ°μ΄ μ μ₯λλ€)
μΈμ νλ ¬μ λ³Έμ§μ μΌλ‘ ν° νμ κ°μ ννλ‘, μ΄λ λ κ°μ μ μ κ°μ μ°κ²° μ¬λΆλ₯Ό νμΈνλλ° λ§€μ° μ μ©νκ² μ¬μ©λλ€.
λν, μΈμ νλ ¬μ μ΅λ¨ κ²½λ‘ λ¬Έμ λ₯Ό ν΄κ²°νκ³ μ ν λ μ£Όλ‘ μ¬μ©λλ€.
μμ κ°μ κ·Έλνλ₯Ό μΈμ νλ ¬λ‘ νννλ©΄ μλμ κ°λ€.
[0][2] == 1
[1][0] == 1
[1][2] == 1
[2][0] == 1
κ·Έλνμ μ μ κ° μ°κ²°μ 리μ€νΈ νμμΌλ‘ νννλ λ°©μ
κ° μ μ μ΄ μ΄λ€ λ€λ₯Έ μ μ λ€κ³Ό μ°κ²°λμ΄ μλμ§λ₯Ό μκΈ° μ½κ² ν΄μ€λ€.
κ° μ μ λ§λ€ νλμ 리μ€νΈλ₯Ό κ°μ§κ³ μμΌλ©°, μ΄ λ¦¬μ€νΈλ μμ κ³Ό μΈμ ν λ€λ₯Έ μ μ μ λ΄κ³ μλ€.
μΈμ νλ ¬μ λͺ¨λ κ°λ₯ν μ°κ²°μ μ μ₯νλ―λ‘, λ©λͺ¨λ¦¬ μ¬μ©λμ΄ λκ² λνλ μ μλ λ°λ©΄, μΈμ 리μ€νΈλ μ€μ μ°κ²°λ§μ μ μ₯νκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ μ¬μ©μ΄ λ ν¨μ¨μ μ΄λ€.
μμμ λ³Έ κ·Έλνλ₯Ό μΈμ 리μ€νΈλ‘ νννλ©΄ μλ κ·Έλ¦Όκ³Ό κ°λ€.
graph = [
[2, None],
[0, 2, None],
[0, None]
]