[Data Structure] Graph

GoghΒ·2023λ…„ 1μ›” 2일

Data Structure

λͺ©λ‘ 보기
5/5

🎯 λͺ©ν‘œ : κ·Έλž˜ν”„ μžλ£Œκ΅¬μ‘°μ™€ ν™œμš©μ˜ 이해

πŸ“’ Graph

πŸ“Œ κ·Έλž˜ν”„μ˜ νŠΉμ§•κ³Ό ꡬ쑰

  • μ—¬λŸ¬κ°œμ˜ 점듀이 μ„œλ‘œ λ³΅μž‘ν•˜κ²Œ μ—°κ²°λ˜μ–΄ μžˆλŠ” 관계λ₯Ό ν‘œν˜„ν•œ 자료ꡬ쑰
  • μ—¬λŸ¬κ°œμ˜ 정점(Vertex)와  κ°„μ„ (Edge)λ“€μ˜ μ§‘ν•©μœΌλ‘œ κ΅¬μ„±λœλ‹€.
  • 직접적인 관계라면 두 정점에 간선이 μ‘΄μž¬ν•œλ‹€.
  • 간접적인 관계라면 두 정점 사이에 μ—¬λŸ¬κ°œμ˜ 정점과 간선이 μ‘΄μž¬ν•œλ‹€.

πŸ“ŒΒ κ·Έλž˜ν”„μ˜ μš©μ–΄ 정리

  • 정점(Vertex)
    • λ…Έλ“œλΌκ³ λ„ ν•˜λ©° 데이터가 μ €μž₯λ˜λŠ” κ·Έλž˜ν”„μ˜ κΈ°λ³Έ μ›μ†Œ
  • κ°„μ„ (Edge)
    • 정점을 μ΄μ–΄μ£ΌλŠ” μ„ 
  • 인접정점(Adjacent Vertex)
    • ν•˜λ‚˜μ˜ μ •μ μ—μ„œ 간선에 μ˜ν•΄ 직접 μ—°κ²°λ˜μ–΄ μžˆλŠ” 정점
  • κ°€μ€‘μΉ˜ κ·Έλž˜ν”„(Weighted Graph)
    • μ—°κ²°μ˜ 강도(좔가적인 정보 λ“±)κ°€ μ ν˜€μžˆλŠ” κ·Έλž˜ν”„, λΉ„ κ°€μ€‘μΉ˜ κ·Έλž˜ν”„λŠ” λ°˜λŒ“λ§.
  • 무방ν–₯ κ·Έλž˜ν”„(Undirected Graph)
    • 두 정점을 μ—°κ²°ν•˜λŠ” 간선에 λ°©ν–₯이 μ—†μœΌλ©° μ–‘λ°©ν–₯으둜 이동 κ°€λŠ₯ν•˜λ‹€. 정점 A, Bκ°€ μžˆλ‹€λ©΄ (A,B)둜 ν‘œν˜„ν•œλ‹€.
  • λ°©ν–₯ κ·Έλž˜ν”„(Directed Graph)
    • 두 정점을 μ—°κ²°ν•˜λŠ” 간선에 λ°©ν–₯이 μ‘΄μž¬ν•˜λ©° κ°„μ„ μ˜ λ°©ν–₯으둜만 이동 ν• μˆ˜ μžˆλ‹€. 정점 A,Bκ°€ μžˆλ‹€λ©΄ <A,B>둜 ν‘œν˜„ν•œλ‹€.
  • μ§„μž…μ°¨μˆ˜(In-degree) / μ§„μΆœμ°¨μˆ˜(Out-degree)
    • ν•œ μ •μ μ—μ„œ λ“€μ–΄μ˜€λŠ” κ°„μ„ ν•˜κ³  λ‚˜κ°€λŠ” 간선이 λͺ‡ κ°œμΈμ§€λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
  • 인접(Adjacency)
    • 두 정점 간에 간선이 직접 이어져 μžˆλ‹€λ©΄ 두 정점은 μΈμ ‘ν•œ 정점이닀.
  • 자기 루프(Self Loop)
    • μ •μ μ—μ„œ μ§„μΆœν•˜λŠ” 간선이 κ³§λ°”λ‘œ 자기 μžμ‹ μ—κ²Œ μ§„μž…ν•˜λŠ” 경우 자기 루프λ₯Ό κ°€μ‘Œλ‹€ ν‘œν˜„ν•œλ‹€. λ‹€λ₯Έ 정점을 κ±°μΉ˜μ§€ μ•ŠλŠ”λ‹€.
  • 사이클(Cycle)
    • ν•œ μ •μ μ—μ„œ μΆœλ°œν•˜μ—¬ λ‹€μ‹œ ν•΄λ‹Ή μ •μ μœΌλ‘œ λŒμ•„κ°ˆ 수 μžˆλ‹€λ©΄ 사이클이 μžˆλ‹€κ³  ν‘œν˜„ν•œλ‹€.

πŸ“ŒΒ κ·Έλž˜ν”„μ˜ ν‘œν˜„

  • 인접 ν–‰λ ¬ 은 A정점과 B정점이 μ„œλ‘œ 이어져 μžˆλ‹€λ©΄ 1 이어져 μžˆμ§€ μ•Šλ‹€λ©΄ 0으둜 ν‘œν˜„ν•œ ν–‰λ ¬ν‘œλ‹€.
  • κ°€μ€‘μΉ˜ κ·Έλž˜ν”„λΌλ©΄ 1 λŒ€μ‹  λ‹€λ₯Έ 데이터λ₯Ό μ €μž₯ν•œλ‹€.
  • 두 정점 사이에 관계가 μžˆλŠ”μ§€ μ—†λŠ”μ§€ ν™•μΈν•˜κΈ°μ— μš©μ΄ν•˜λ‹€. 예λ₯Ό λ“€μ–΄ μ§„μΆœ 간선이 μžˆλŠ”μ§€ ν–‰λ ¬ν‘œλ‘œ λ°”λ‘œ 확인이 κ°€λŠ₯ν•˜λ‹€.
  • κ°€μž₯ λΉ λ₯Έ 경둜λ₯Ό 찾고자 ν• λ•Œ 주둜 μ‚¬μš©λœλ‹€.
  • ν•˜μ§€λ§Œ, κ°„μ„ μ˜ μˆ˜μ™€ λ¬΄κ΄€ν•˜κ²Œ 항상 2차원 배열이 ν•„μš”ν•˜λ―€λ‘œ λ©”λͺ¨λ¦¬ 곡간이 λ‚­λΉ„λœλ‹€.
  • 그리고, κ·Έλž˜ν”„μ˜ λͺ¨λ“  κ°„μ„ μ˜ 수λ₯Ό μ•Œμ•„λ‚΄λ €λ©΄ 인접 ν–‰λ ¬ 전체λ₯Ό 확인해야 ν•˜λ―€λ‘œ λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λœλ‹€.
  • 인접 리슀트 λŠ” 각 정점이 μ–΄λ–€ 정점과 μΈμ ‘ν•˜λŠ”μ§€λ₯Ό 리슀트 ν˜•νƒœλ‘œ ν‘œν˜„ν•œλ‹€. 각 μ •μ λ§ˆλ‹€ ν•˜λ‚˜μ˜ 리슀트λ₯Ό κ°€μ§€κ³  있으며, 이 λ¦¬μŠ€νŠΈλŠ” μžμ‹ κ³Ό μΈμ ‘ν•œ λ‹€λ₯Έ μ •μ μ˜ 데이터λ₯Ό κ°€μ§€κ³ μžˆλ‹€.
  • μ‘΄μž¬ν•˜λŠ” κ°„μ„ λ§Œ κ΄€λ¦¬ν•˜λ©΄ λ˜λ―€λ‘œ λ©”λͺ¨λ¦¬ μ‚¬μš© μΈ‘λ©΄μ—μ„œ 보닀 νš¨μœ¨μ μ΄λ‹€.
  • λͺ¨λ“  κ°„μ„ μ˜ 수λ₯Ό μ•Œμ•„λ‚΄λ €λ©΄ 각 μ •μ μ˜ 헀더 λ…Έλ“œλΆ€ν„° λͺ¨λ“  인접 리슀트λ₯Ό νƒμƒ‰ν•˜λ©΄ λ˜λ―€λ‘œ 인접 행렬보닀 적은 μ‹œκ°„μ΄ μ†Œμš”λœλ‹€.
  • ν•˜μ§€λ§Œ 두 정점을 μ—°κ²°ν•˜λŠ” 간선을 μ‘°νšŒν•˜κ±°λ‚˜ μ •μ μ˜ 차수λ₯Ό μ•ŒκΈ° μœ„ν•΄μ„œλŠ” μ •μ μ˜ 인접 리슀트λ₯Ό 탐색해야 ν•˜λ―€λ‘œ μ •μ μ˜ 차수만큼 μ‹œκ°„μ΄ ν•„μš”ν•˜λ©°, 비ꡐ적 κ΅¬ν˜„μ΄ μ–΄λ ΅λ‹€.

p

  • μœ„ κ·Έλ¦Όμ—μ„œ λ°©ν–₯ κ·Έλž˜ν”„λ₯Ό 인접 ν–‰λ ¬κ³Ό 리슀트둜 ν‘œν˜„ν•˜κ²Œ 되면 μ•„λž˜μ™€ κ°™λ‹€.

p

  • μœ„ κ·Έλ¦Όμ—μ„œ 무방ν–₯ κ·Έλž˜ν”„λ₯Ό 인접 ν–‰λ ¬κ³Ό 리슀트둜 ν‘œν˜„ν•˜κ²Œ 되면 μ•„λž˜μ™€ κ°™λ‹€.

p


πŸ“ŒΒ κ·Έλž˜ν”„μ˜ κ΅¬ν˜„

  • κ°œλ… μ •λ¦¬λŠ” λΈ”λ‘œκΉ…μœΌλ‘œ λ§ˆλ¬΄λ¦¬ν•˜κ³ ,
  • λ‹€μŒ λΈ”λ‘œκΉ…μ—μ„œλŠ” 인접 ν–‰λ ¬κ³Ό 리슀트λ₯Ό κ΅¬ν˜„ν•΄ 보고 μœ„ 그림의 κ·Έλž˜ν”„μ˜ ν–‰λ ¬κ³Ό 리슀트λ₯Ό 좜λ ₯ν•΄ λ³΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  것이닀.
profile
컴퓨터가 할일은 컴퓨터가

0개의 λŒ“κΈ€