[πŸ“—cμ–Έμ–΄ μ‰½κ²Œ ν’€μ–΄μ“΄ 자료ꡬ쑰11] κ·Έλž˜ν”„2

μ•ˆμ§€μˆ˜Β·2023λ…„ 2μ›” 16일
0

πŸ‘‘ μ΅œμ†Œ λΉ„μš© μ‹ μž₯트리

μ‹ μž₯νŠΈλ¦¬λž€?
: κ·Έλž˜ν”„ λ‚΄μ˜ λͺ¨λ“  정점듀을 ν¬ν•¨ν•˜λŠ” 트리 (싸이클 μ—†λŠ” μ—°κ²°κ·Έλž˜ν”„)

  • n-1개의 κ°„μ„  (μ΅œμ†Œ μ—°κ²° λΆ€λΆ„ κ·Έλž˜ν”„)
  • 깊이 μš°μ„ , λ„ˆλΉ„ μš°μ„  탐색 도쀑 μ‚¬μš©λœ 간선을 λͺ¨μ•„ λ§Œλ“€ 수 있음

μ΅œμ†Œ λΉ„μš© μ‹ μž₯νŠΈλ¦¬λž€?
: κ²½λ‘œμ— κ°€μ€‘μΉ˜κ°€ μΆ”κ°€λ˜μ–΄, κ·Έ κ°€μ€‘μΉ˜μ˜ 합이 μ΅œμ†Œκ°€ λ˜λŠ” μ‹ μž₯트리

πŸ‘‘ 크루슀칼 μ•Œκ³ λ¦¬μ¦˜

  • νƒμš•μ μΈ 방법 (κ·Έ λ‹Ήμ‹œμ— κ°€μž₯ μ΅œμ„ μ˜ 선택을 함)
    & κ°€μ€‘μΉ˜μ˜ 값을 μ˜€λ¦„μ°¨μˆœ μ •λ ¬-> κ°„μ„ μ˜ 갯수 n-1개 될 λ•ŒκΉŒμ§€, 싸이클이 생기지 μ•Šκ²Œ 선택
    (집합에 μΆ”κ°€ν•  λ•Œ, 싸이클이 μƒκΈ°λŠ” 지 확인해야 함!!)
  • union-find(): 싸이클이 μƒκΈ°λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•œ ν•¨μˆ˜ (각 정점이 ν¬ν•¨λœ 집합을 λ°›μ•„, 합집합을 λ§Œλ“€μ–΄, 같은 집합에 μ†ν•˜λŠ” 지 확인함!!)
    -> λ£¨νŠΈκ°€ λ‹€λ₯΄λ©΄, λ‹€λ₯Έ 집합에 μ†ν•œ κ²ƒμž„

πŸ‘‘ Prim μ•Œκ³ λ¦¬μ¦˜

: μΈμ ‘ν•œ 정점듀 μ€‘μ—μ„œ μ΅œμ†Œκ±°λ¦¬μ˜ 정점을 선택

&& 크루슀칼 μ•Œκ³ λ¦¬κ³Όμ˜ 차이점

  • 크루슀칼: 간선을 기반으둜 선택/ 단지 μ΅œμ € κ°„μ„  선택 (λ§ˆμ§€λ§‰μ— μ‹ μž₯트리 μ™„μ„±)
  • ν”„λ¦Ό: 인접 정점을 기반으둜 선택/ 이전 λ‹¨κ³„μ˜ μ‹ μž₯트리λ₯Ό ν™•μž₯ (정점을 집합에 μΆ”κ°€)

πŸ‘‘ Dijkstra μ΅œλ‹¨ 경둜 μ•Œκ³ λ¦¬μ¦˜

μ΅œλ‹¨κ²½λ‘œ: κ°„μ„ λ“€μ˜ κ°€μ€‘μΉ˜μ˜ 합이 μ΅œμ†Œκ°€ λ˜λŠ” 경둜 μ°ΎκΈ°

  • νƒμš•μ  μ•Œκ³ λ¦¬μ¦˜ (μ‹œμž‘ μ •μ μœΌλ‘œλΆ€ν„° 경둜의 합은 집합에 κΈ°λ‘ν•˜μ—¬, μ΅œμ €μ˜ 기둝 선택)
    -> 더 μž‘μ€ κ°’μœΌλ‘œ μΈμ ‘ν•œ μ •μ μ˜ κ°„μ„  길이 update

πŸ‘‘ Floyd μ΅œλ‹¨ 경둜 μ•Œκ³ λ¦¬μ¦˜

: λͺ¨λ“  정점 μ‚¬μ΄μ˜ μ΅œλ‹¨ 거리λ₯Ό κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ (3쀑 반볡)

πŸ‘‘ μœ„μƒμ •λ ¬

: λ°©ν–₯ κ·Έλž˜ν”„μ— μ‘΄μž¬ν•˜λŠ” μ„ ν–‰ μˆœμ„œλ₯Ό μœ„λ°°ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ λͺ¨λ“  정점을 λ‚˜μ—΄ν•˜λŠ” 것

β­• TIL (Today I learned)

& μ‹ μž₯νŠΈλ¦¬λŠ” λͺ¨λ“  정점을 μ—°κ²°ν•˜λŠ”λ°, 싸이클을 ν˜•μ„±ν•˜μ§€ μ•ŠλŠ” νŠΈλ¦¬μ΄λ‹€. μ‹ μž₯트리 μ€‘μ—μ„œλ„ κ°„μ„ μ˜ κ°€μ€‘μΉ˜μ˜ 합을 μ΅œμ†Œλ‘œν•˜λŠ” 트리λ₯Ό μ΅œμ†Œ λΉ„μš© μ‹ μž₯트리라고 ν•œλ‹€. μ΅œμ†Œ λΉ„μš© μ‹ μž₯트리λ₯Ό κ΅¬ν•˜λŠ” 것은 κ°„μ„ μ˜ κ°―μˆ˜κ°€ n-1이 될 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•œλ‹€. (μ‹ μž₯νŠΈλ¦¬λŠ” 항상 κ°„μ„ μ˜ κ°œμˆ˜κ°€ n-1κ°œμž„!)
μ΅œλ‹¨κ²½λ‘œλŠ”, λͺ¨λ“  정점을 μ—°κ²°ν•˜μ§„ μ•Šμ§€λ§Œ, κ°€μ€‘μΉ˜μ˜ 합이 μ΅œμ†Œκ°€ 되게 ν•˜λŠ” 경둜λ₯Ό μ˜λ―Έν•œλ‹€. 2가지 방법이 μžˆλ‹€. μ²«λ²ˆμ§ΈλŠ” λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μΈλ°, 간선을 κΈ°μ€€μœΌλ‘œ μž‘μ€ 것뢀터 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜μ—¬, μ΅œμ†Œμ˜ 것뢀터 싸이클이 생기지 μ•Šκ²Œ ν•˜λ‚˜μ”© μ„ νƒν•˜λŠ” 것이닀. λ‘λ²ˆμ§ΈλŠ” ν”Œλ‘œμ΄λ“œ μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 이것은 인접 정점을 κΈ°μ€€μœΌλ‘œ κ°„μ„ μ˜ κ°€μ€‘μΉ˜ 값이 μž‘μ€ 정점을 μ„ νƒν•˜μ—¬ 집합에 μΆ”κ°€ν•˜λŠ” 것이닀.
μœ„μƒμ •λ ¬μ€ μ„ ν–‰μˆœμ„œμ— 따라 μ •λ ¬ν•œ κ·Έλž˜ν”„λ₯Ό λ§ν•œλ‹€.

profile
μ§€μˆ˜μ˜ μ·¨μ€€, 개발일기

0개의 λŒ“κΈ€