ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Data Structure] κ·Έλž˜ν”„μ™€ 트리
    Data Structure 2022. 3. 14. 09:13

    κ·Έλž˜ν”„μ˜ νŠΉμ§•

    • λ…Έλ“œμ™€ λ…Έλ“œλ₯Ό μ—°κ²°ν•˜λŠ” 간선을 ν•˜λ‚˜λ‘œ λͺ¨μ•„놓은 자료ꡬ쑰
    • λ°©ν–₯ κ·Έλž˜ν”„ (Directed) 와 무방ν–₯ κ·Έλž˜ν”„ (Undirected) 둜 λ‚˜λ‰œλ‹€.
    • 사이클 (Cycle) 이 μžˆμ„ μˆ˜λ„ 있고, 자체 κ°„μ„  (Self-loop) 도 μžˆμ„ 수 μžˆλ‹€.
    • 루트 λ…Έλ“œ, λΆ€λͺ¨-μžμ‹μ˜ κ°œλ…μ΄ μ—†λ‹€.
    • 순회 방법은 BFS, DFSκ°€ μžˆλ‹€.
    • κ°„μ„ μ˜ μˆ˜κ°€ μ œν•œλ˜μ–΄μžˆμ§€ μ•Šλ‹€.

    κ·Έλž˜ν”„ μš©μ–΄

    정점 (vertex) : μœ„μΉ˜ (node)

    κ°„μ„  (edge) : μœ„μΉ˜ κ°„μ˜ 관계. λ…Έλ“œλ₯Ό μ—°κ²°ν•˜λŠ” μ„  (link)

    인접 정점 (adjacent vertex) : 간선에 μ˜ν•΄ 직접 μ—°κ²°λœ 정점

    μ •μ μ˜ 차수 (degree) : 무방ν–₯ κ·Έλž˜ν”„μ—μ„œ ν•˜λ‚˜μ˜ 정점에 μΈμ ‘ν•œ μ •μ μ˜ 수

    μ§„μž… 차수 (in-degree) : λ°©ν–₯ κ·Έλž˜ν”„μ—μ„œ μ •μ μœΌλ‘œ λ“€μ–΄μ˜€λŠ” κ°„μ„ μ˜ 수

    μ§„μΆœ 차수 (out-degree) : λ°©ν–₯ κ·Έλž˜ν”„μ—μ„œ μ •μ μœΌλ‘œ ν–₯ν•˜λŠ” κ°„μ„ μ˜ 수

    λ‹¨μˆœ 경둜 (Simple path) : 경둜 μ€‘μ—μ„œ λ°˜λ³΅λ˜λŠ” 정점이 μ—†λŠ” 경우

    사이클 (Cycle) : λ‹¨μˆœ 경둜의 μ‹œμž‘ 정점과 λ 정점이 λ™μΌν•œ 경우

    무ν–₯ κ·Έλž˜ν”„ (Undirected Graph)

    • 간선을 ν†΅ν•΄μ„œ μ–‘ λ°©ν–₯으둜 갈 수 μžˆλ‹€. (u, v) = (v, u)
    • ex) μ–‘λ°©ν–₯ 톡행 λ„λ‘œ

    유ν–₯ κ·Έλž˜ν”„ (Directed Graph)

    • 간선에 λ°©ν–₯성이 쑴재. <u, v> != <u, v>
    • ex) 일방 톡행 λ„λ‘œ

    μ™„μ „ κ·Έλž˜ν”„ (Complete Graph)

    • κ·Έλž˜ν”„μ— μ†ν•œ λͺ¨λ“  정점이 μ„œλ‘œ μ—°κ²°λ˜μ–΄ μžˆλŠ” κ·Έλž˜ν”„λ‘œ, μ΅œλŒ€ 정점을 κ°–λŠ”λ‹€.
    • n개의 vertexλ₯Ό κ°€μ§„ 무방ν–₯ κ·Έλž˜ν”„μ˜ μ΅œλŒ€ 정점 수 = n(n - 1) / 2
    • n 개의 vertexλ₯Ό κ°€μ§„ λ°©ν–₯ κ·Έλž˜ν”„μ˜ μ΅œλŒ€ 정점 수 = n(n - 1)

    κ°€μ€‘μΉ˜ κ·Έλž˜ν”„ (Weighted Graph)

    • 간선에 λΉ„μš©μ΄λ‚˜ κ°€μ€‘μΉ˜κ°€ ν• λ‹Ήλœ κ·Έλž˜ν”„λ‘œ, λ„€νŠΈμ›Œν¬λΌκ³ λ„ ν•œλ‹€.
    • ex) 톡신망 μ‚¬μš©λ£Œ

    μ—°κ²° κ·Έλž˜ν”„ (Connected Graph)

    • 무방ν–₯ κ·Έλž˜ν”„μ— μžˆλŠ” λͺ¨λ“  μ •μ μŒ 사이에 항상 κ²½λ‘œκ°€ μ‘΄μž¬ν•˜λŠ” κ·Έλž˜ν”„
    • ex) 트리 (Tree) : 사이클을 κ°–μ§€ μ•ŠλŠ” μ—°κ²° κ·Έλž˜ν”„

    λΉ„μ—°κ²° κ·Έλž˜ν”„ (Unconnected Graph)

    • 무방ν–₯ κ·Έλž˜ν”„μ—μ„œ νŠΉμ • μ •μ μŒ 사이에 κ²½λ‘œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” κ·Έλž˜ν”„

    트리의 νŠΉμ§•

    • μ—°κ²° κ·Έλž˜ν”„μ΄λ‹€. 
    • λ°©ν–₯성이 μžˆλŠ” λΉ„μˆœν™˜ κ·Έλž˜ν”„μ΄λ‹€. (사이클 X, 자체 κ°„μ„  X)
    • 트리의 κ°„μ„  κ°œμˆ˜λŠ” λ°˜λ“œμ‹œ 정점 수 - 1이닀.
    • 계측 관계 (λΆ€λͺ¨ - μžμ‹ 관계)μ΄λ―€λ‘œ 1개의 루트 λ…Έλ“œλ§Œ μ‘΄μž¬ν•˜κ³ , λͺ¨λ“  μžμ‹ λ…Έλ“œλŠ” 1개의 λΆ€λͺ¨ λ…Έλ“œλ§Œμ„ κ°€μ§„λ‹€.
    • 순회 방법 : DFS, BFS, μ „μœ„ 순회, μ€‘μœ„ 순회, ν›„μœ„ 순회

     

     

    κ·Έλž˜ν”„ κ΅¬ν˜„ 방법 (1) - 인접 리슀트

    • κ°€μž₯ 일반적인 λ°©λ²•μœΌλ‘œ vector, arrayList둜 κ΅¬ν˜„
    • μ–΄λ–€ λ…Έλ“œμ— μΈμ ‘ν•œ λ…Έλ“œλ“€μ„ μ‰½κ²Œ 찾을 수 μžˆλ‹€.
    • λͺ¨λ“  κ°„μ„ μ˜ 수λ₯Ό O(N+E) 에 μ•Œ 수 μžˆλ‹€.
    • κ°„μ„ μ˜ 쑴재 μ—¬λΆ€λ₯Ό μ•ŒκΈ° μœ„ν•΄μ„œλŠ” μ •μ μ˜ 차수만큼의 μ‹œκ°„ ν•„μš”

     

    κ·Έλž˜ν”„ κ΅¬ν˜„ 방법 (2) - 인접 ν–‰λ ¬

    • 간선이 λ§Žμ€ λ°€μ§‘ κ·Έλž˜ν”„μ˜ κ²½μš°μ— μ‚¬μš©
    • 두 정점을 μ—°κ²°ν•˜λŠ” κ°„μ„ μ˜ μ—¬λΆ€λ₯Ό O(1)에 μ•Œ 수 μžˆλ‹€.
    • μ •μ μ˜ μ°¨μˆ˜λŠ” O(N)에 μ•Œ 수 μžˆλ‹€.
    • μ–΄λ–€ λ…Έλ“œμ— μΈμ ‘ν•œ λ…Έλ“œλ₯Ό μ°ΎκΈ° μœ„ν•΄μ„œλŠ” λͺ¨λ“  λ…Έλ“œλ₯Ό μˆœνšŒν•΄μ•Όν•œλ‹€.
    • κ·Έλž˜ν”„μ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  κ°„μ„ μ˜ μˆ˜λŠ” O(N^2)에 μ•Œ 수 μžˆλ‹€.

    'Data Structure' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

    [Data Structure] 큐 (Queue)  (0) 2022.02.13
    [Data Structure] μŠ€νƒ (Stack)  (0) 2022.02.09
    [Data Structure] Linked List (Feat. Array)  (0) 2022.01.12

    λŒ“κΈ€

Designed by Tistory.