κ·Έλν(Graph)
κ·Έλνλ?
νΈλ¦¬μ²λΌ λ Έλ(λ°μ΄ν°)λ€μ΄ μ°κ²°λμ΄ μλ μλ£κ΅¬μ‘°λ‘, λ Έλκ°μ κ΄κ³λ₯Ό ννν λ μ£Όλ‘ μ°μΈλ€. νΈλ¦¬μ λ¬λ¦¬ λ Έλλ€μ λΆλͺ¨/μμ κ΄κ³κ° μμ΄ μ λΆ μ΄μ΄μ§ μ μλ€. κ·Έλ¦¬κ³ λ Έλμ λ Έλ μ¬μ΄λ₯Ό μλ μ μ κ°μ μ΄λΌκ³ νλ€.
μ΄ κ°μ μ λ°©ν₯μ λνλΌ μλ μλ€. λ°©ν₯μ΄ μλ κ·Έλνλ₯Ό Directed Graph λΌκ³ νκ³ λ°©ν₯μ΄ μλ κ·Έλνλ₯Ό Undirected Graph λΌκ³ νλ€. λ°©ν₯ κ·Έλνλ λ¨λ°©ν₯ νΉμ μλ°©ν₯μΌλ‘λ ννλλ€. μ°Έκ³ λ‘ νΈλ¦¬λ μ, μλλ‘ νλ₯΄λ―λ‘ λ°©ν₯ κ·ΈλνμΈλ° λ°©ν₯μ μλ΅ν κ²μ΄λ€.
μ΄μ΄μ§λ λ
Έλλ€μ λ°λΌκ°λ€λ³΄λ©΄ μ²μ μμν λ
Έλλ‘ λμμ€λ κ·Έλνλ μλ€. μ΄κ²μ μ¬μ΄ν΄μ΄λΌκ³ νλλ°, μ¬μ΄ν΄μ΄ νλλΌλ μλ κ·Έλνλ₯Ό Cyclic Graph, μ¬μ΄ν΄μ΄ νλλ μλ κ·Έλνλ₯Ό Acyclic Graph λΌκ³ νλ€.
μ°Έκ³ λ‘ νΈλ¦¬λ 맨 μ 루νΈλΌλ μΆλ°μ μ΄ μκ³ μ¬μ΄ν΄μ΄ μκ³ μ, μλλ‘λ§ νλ₯΄λ κ³μΈ΅ ννμ λ°©ν₯ κ·Έλνλ€!
κ·Έλν νν λ°©λ²
Adjacency Matrix
κ·Έλνλ₯Ό 2μ°¨μ λ°°μ΄μ νννλ€. μ°κ²°λμ΄ μμΌλ©΄ 1 μλλΌλ©΄ 0μ κ°μΌλ‘ νννλ€.
Adjacency List
κ·Έλνλ₯Ό Linked List λ‘ νννλ€. λ Έλμ μ°κ²°λμ΄ μλ λ€λ₯Έ λ Έλλ₯Ό μμ μκ΄ μμ΄ μ°κ²°νλ€. κ·Έλ°λ° a λ Έλκ° b λ Έλμ μ°κ²°λμ΄ μλκ²μ ννν λ, a->b, b->a μ΄ λλ²μΌλ‘ ννν΄μΌν΄μ μ°κ²°λ¦¬μ€νΈλ κ°μ μ κ°μ mκ°λ³΄λ€ 2λ°° λ λ§μ 2mκ°μ λ Έλλ₯Ό κ°κ² λλ€.
Graph κ²μ μκ³ λ¦¬μ¦
DFS(Depth-First Search)
μ΄μ§νμνΈλ¦¬μμμ inorder, preorder, postorder νμμ΄ λ°λ‘ κΉμ΄ μ°μ νμ λ°©λ²μ΄λ€. λ£¨νΈ λ Έλμ child λ Έλ, κ·Έ λ Έλμ child λ Έλ... μ μ μλλ‘ νμνλ λ°©μμ΄λ€.
BFS(Breadth-First Search)
λμ΄ μ°μ νμμ λ£¨νΈ λ Έλμ κ°μ λ 벨 μμ μλ λͺ¨λ child λ Έλλ₯Ό λ€ λ°©λ¬Έ νκ³ κ·Έ λ€μ λ 벨μ λ°©λ¬Ένλ λ°©μμ΄λ€.
μ μ₯ νΈλ¦¬(Spanning Tree)
Spanning Treeλ μ°κ²° κ·Έλν(μ€κ°μ λ겨μμ§ μμ κ·Έλν) μ λΆλΆ κ·Έλνλ€μ΄λ€. λͺ¨λ λ Έλλ€μ΄ ν¬ν¨λκ³ μ¬μ΄ν΄μ΄ μ‘΄μ¬νμ§ μμμΌ νλ€.
μ΅μλΉμ© μ μ₯νΈλ¦¬(MST, Minimum Cost Spanning Tree)
κ°μ λ€μ κ°μ€μΉλ₯Ό ν©ν κ°μ΄ μ΅μκ° λλ μ μ₯ νΈλ¦¬λ€. μ¦, μ΅μ λΉμ©μΌλ‘ λ§λ€ μ μλ μ μ₯ νΈλ¦¬. 무방ν₯ κ·ΈλνμΌ λ ꡬν μ μλ€. μ°κ²° κ·Έλνμμ μ΅μλΉμ© μ μ₯νΈλ¦¬λ₯Ό μ°Ύμλ΄λ μκ³ λ¦¬μ¦ μ€μλ ν¬λ£¨μ€μΉΌ μκ³ λ¦¬μ¦(Kruskal Algorithm)μ΄ λνμ μ΄λ€.