π»κ·Έλν(Graph)λ?
κ·Έλνλ μ μ (Vertex)κ³Ό κ·Έ μ¬μ΄λ₯Ό μλ κ°μ (Edge)λ‘ μ΄λ£¨μ΄μ Έ μλ€. μ¦ μ μ λ€ μ¬μ΄μ κ΄κ³λ₯Ό λνλ΄λ μλ£κ΅¬μ‘°μ΄λ€. G = (V,E)μ νμμΌλ‘ μ μνλλ° μ¬κΈ°μ Vλ μ μ , Eλ κ°μ μ μλ―Ένλ€. κ·Έλνμ λνμ μΈ μμλ μ§νμ² λ Έμ λλ₯Ό λ€ μ μμ κ² μ΄λ€. μ§νμ² μκ³Ό κ·Έ μ¬μ΄μ λ Έμ μ νννλ μ§νμ² λ Έμ λλ λνμ μΈ κ·Έλνμ μμλΌκ³ ν μ μλ€.
πΈκ·Έλνμ μ’ λ₯
무방ν₯ κ·Έλν(Undirected graph)
κ°μ μ λ°©ν₯μ±μ΄ ν¬ν¨λμ΄ μμ§ μμ κ·Έλνμ΄λ€. κ·Έλ¦Όμμ Aμ Bλ₯Ό μ°κ²°νλ κ°μ μ (A, B)λΌκ³ νλ©΄, (A,B)μ (B,A)λ μλ‘ κ°μ κ°μ μ΄λ€.
μ μ μ΄ nκ°λΌν λ 무방ν₯ κ·Έλνκ° κ°μ§ μ μλ μ΅λμ κ°μ κ°μλ n(n-1)/2κ° μ΄λ€.
λ°©ν₯ κ·Έλν(Directed graph)
λ§ κ·Έλλ‘ κ°μ μ λ°©ν₯μ±μ΄ ν¬ν¨λμ΄ μλ κ·Έλνμ΄λ€. κ·Έλ¦Όμμ Aμμ Bλ‘κ°λ κ°μ μ (A, B)λΌκ³ νλ©΄, μ΄ κ°μ μ Aμμ Bλ‘λ§ κ° μ μκ³ κ·Έ λ°λλ λΆκ°λ₯νλ€. (A,B)μ (B,A)λ μλ‘ λ€λ₯Έ κ°μ μ΄λ€. λ°©ν₯κ·Έλνλ₯Ό digraphλΌκ³ λ νλ€.
μ μ μ΄ nκ°λΌν λ 무방ν₯ κ·Έλνκ° κ°μ§ μ μλ μ΅λμ κ°μ κ°μλ n(n-1)κ° μ΄λ€.
μμ κ·Έλν(Complete graph)
ν μ μ μμ λͺ¨λ λ€λ₯Έ μ μ κ³Ό μ°κ²°λμ΄ μ΅λμ κ°μ μλ₯Ό κ°μ§λ κ·Έλνμ΄λ€.
κ°μ€μΉ κ·Έλν(Weighted graph)
κ°μ μ λΉμ©μ΄λ κ°μ€μΉλ₯Ό ν¬ν¨νκ³ μλ κ·Έλνμ΄λ€.
[κ·Έλνμμ μ¬μ©λλ μ©μ΄λ€]
μ μ (Vertex) : κ·Έλνμ μ μ₯νκ³ μλ κ°μ²΄
κ°μ (Edge) : μ μ λ€ μ¬μ΄λ₯Ό μλ μ
μ°¨μ(Degree) : μ μ μ μ°κ²°λμ΄ μλ κ°μ μ μ, λ°©ν₯ κ·Έλνμμ μ§μ /μ§μΆ μ°¨μμ ν©
μ§μ μ°¨μ(In-Degree) : λ°©ν₯ κ·Έλνμμ μ μ μΌλ‘ λ€μ΄μ€λ κ°μ μ μ
μ§μΆμ°¨μ(Out-Degree) : λ°©ν₯ κ·Έλνμμ μ μ μμ λκ°λ κ°μ μ μ
μ¬μ΄ν΄(Cycle) : κ²½λ‘μ μμ μ μ κ³Ό λ§μ§λ§ μ μ μ΄ κ°μ κ²½λ‘
μΈμ μ μ (adjacent vertex): ν μ μ μμ κ°μ μ ν΅νμ¬ κ° μ μλ λ€λ₯Έ μ μ
πΈκ·Έλνμ νν
μ΄λ¬ν κ·Έλνλ₯Ό ννν μ μλ λ°©λ²μ ν¬κ² μΈμ νλ ¬λ‘ νννλ λ°©λ², 리μ€νΈλ‘ νννλ λ°©λ² λκ°μ§κ° μ‘΄μ¬νλ€.
μΈμ νλ ¬
μ΄λ¬ν 5κ°μ μ μ μ κ°μ§λ κ·Έλνλ₯Ό 5x5 νλ ¬λ‘ νννλ©΄ μ΄λ κ² ννν μ μμ κ²μ΄λ€. 무방ν₯ κ·ΈλνλΌλ©΄ νλ ¬μ λκ°μ λμΉμ μ΄λ£¬λ€.
λ°©ν₯ κ·Έλνλ₯Ό νλ ¬λ‘ λνλ΄λ©΄ μ΄λ° μμΌλ‘ νν ν μ μλ€.
κ·Έλν μλ£κ΅¬μ‘°λ₯Ό νλ ¬λ‘ νννλ©΄ λ€μκ³Ό κ°μ νΉμ±μ κ°μ§λ€.
- n^2bitμ ν¬κΈ°λ₯Ό μ°¨μ§νλ€. (무방ν₯ κ·Έλνμμλ μ΄μ°¨νΌ λμΉμ΄λ―λ‘ (n-1)n/2 bitλ§μΌλ‘λ νν κ°λ₯νλ€.)
- μ μ μ μ°¨μ λλ μΈμ ν μ μ λ€μ μ°Ύμ λμ O(n)μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λ€.
리μ€νΈ
μ μ λ§λ€ 1κ°μ λ°°μ΄μ κ°μ§λ©° κ·Έ λ°°μ΄μλ κ·Έ μ μ κ³Ό μΈμ ν μ μ λ€μ μ λ³΄κ° λ€μ΄κ°λ€.
리μ€νΈλ₯Ό μ¬μ©ν λλ λ λκ°λ‘ λλ μ μλλ° Linked Listλ₯Ό μ¬μ©ν λμ Arrayλ₯Ό μ¬μ©ν λμ΄λ€.
Linked List
Array
πΈλ¦¬μ€νΈ vs νλ ¬
κ·Έλ λ€λ©΄ 리μ€νΈμ νλ ¬μ€μ μ΄λ λ°©μμ μ±νν΄μ κ·Έλνλ₯Ό ꡬμ±νλ κ²μ΄ ν¨μ¨μ μΌκΉ?
λ¨Όμ νλ ¬μ μ¬μ©ν κ²½μ° λ¦¬μ€νΈλ₯Ό μ¬μ©νλ λ°©μλ³΄λ€ κ³΅κ°μ μΌλ‘ μλͺ¨κ° λ ν¬λ€. νμ§λ§ μ°κ²°λ μ μ λ€μ μ°Ύλ μ°μ°μλκ° λ λΉ λ₯΄λ€. κ·Έ μ΄μ λ νλ ¬μ μ΄μ€λ°°μ΄μμμ λ°λ‘ μ°κ²° μ 무λ₯Ό νμ ν μ μμ§λ§, 리μ€νΈλ‘ ꡬνν κ²½μ° μ°κ²°λμ΄ μλμ§λ₯Ό νμΈνλ €λ©΄ ν΄λΉ μ μ μ μ£μ§μ 보λ₯Ό λͺ¨λ νμν΄μΌνκΈ° λλ¬Έμ΄λ€.
λ§μ½ μ μ λ€ μ¬μ΄μ μ°κ²°μ΄ λ§μ΄ μλ€λ©΄ 리μ€νΈλ₯Ό μ¨μ κ·Έλνλ₯Ό ꡬμ±νλ κ²μ΄ 곡κ°μ μλ μ μλ€. νμ§λ§ μ μ μ¬μ΄μ μ°κ²°μ΄ λ§λ€λ©΄ νλ ¬μ μ¨μ μ±λ₯μ λμ΄λκ² μ’λ€.
νμ§λ§ 곡κ°μ μ‘°κΈλ μ°λλΌλ μ±λ₯μ λμ΄λ μͺ½μ΄ λ μ’μ κ² κ°λ€λ μκ°μ΄ λ λ€. λ°λΌμ 곡κ°μ μ μ½μ΄ μ¬ν κ²½μ°κ° μλλΌλ©΄ νλ ¬μ μ΄μ©νμ¬ κ΅¬ννλ κ²μ΄ μ’μ κ² κ°λ€.
π»κ·Έλν νμ μκ³ λ¦¬μ¦ : DFSμ BFS
κ·Έλν νμ μκ³ λ¦¬μ¦μ΄λ ν μ μ μμ μμνμ¬ μ°¨λ‘λλ‘ κ·Έλνμ μλ λͺ¨λ μ μ λ€μ νλ²μ© λ°©λ¬Ένλ μκ³ λ¦¬μ¦μ λ»νλ€. κΉμ΄ μ°μ νμ(DFS - Depth-First Search)μ λλΉ μ°μ νμ(BFS - Breadth-First Search) λκ°μ§μ μκ³ λ¦¬μ¦μ΄ μ‘΄μ¬νλ€.
μ κ·Έλ¦Όμ 보면 μ΄λ€ λλμΈμ§ κ°μ΄ μ¬ κ²μ΄λ€. μ μ¬μ§λλ‘ DFSλ κΉμ΄λ₯Ό μ°μ μΌλ‘ μ¦, μΈλ‘λ‘ νμ€μ© νμμ ν΄λκ°λ κ²μ΄κ³ , BFSλ λλΉλ₯Ό μ°μ μΌλ‘ μ¦, κ°λ‘λ‘ νμ€μ© νμμ ν΄λκ°λ μκ³ λ¦¬μ¦μ΄λΌκ³ μκ°νλ©΄ λλ€. DFSμ BFSμκ³ λ¦¬μ¦ κ°μ κ²½μ°μλ κ΅μ₯ν μ€μν μκ³ λ¦¬μ¦μ€μ νλμ΄λ―λ‘ μ μ΄ν΄νλ κ²μ΄ μ€μνλ€.
DFSμ BFSμ λν΄ μμΈνκ² λ΄μ©μ λ€λ£¨κ³ μΆμ΄μ λ°λ‘ κΈμ λΆλ¦¬νμλ€. μμΈν μ€λͺ μ μλ ν¬μ€νΈμ κΈ°μ λμ΄ μλ€.
κ°λ¨ν μ 리νμλ©΄, DFSλ μ¬κ·ν¨μλλ μ€νμ μ¬μ©νμ¬ κ΅¬ν, BFSλ νλ₯Ό μ¬μ©νμ¬ κ΅¬ννλ€. λν DFSμ BFSμ μκ°λ³΅μ‘λλ λμΌνλ€. μΈμ νλ ¬μ μ¬μ©νμ¬ κ΅¬νν κ·Έλνμμλ O(n^2), μΈμ 리μ€νΈλ₯Ό μ¬μ©νμ¬ κ΅¬νν κ·Έλνμμλ O(n+e)μ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ€. (n = μ μ μ κ°μ, e = κ°μ μ κ°μ)
'CS > Data Structure' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ£κ΅¬μ‘°] ν(Heap)κ³Ό μ°μ μμ ν(Priority Queue) (0) | 2022.03.20 |
---|---|
[μλ£κ΅¬μ‘°] νΈλ¦¬(Tree) (0) | 2022.03.19 |
[μλ£κ΅¬μ‘°] μ€ν(Stack), ν(Queue) (0) | 2022.03.08 |
[μλ£κ΅¬μ‘°] μ°κ²° 리μ€νΈ ꡬννκΈ° (0) | 2022.03.08 |
[μλ£κ΅¬μ‘°] λμ λ°°μ΄ κ΅¬ννκΈ° (0) | 2022.03.08 |
κ²μκ°λ°μλ₯Ό κΏκΎΈλ λνμμ κ°λ° κ³΅λΆ λΈλ‘κ·Έ
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!