[πŸ—‚ 자료ꡬ쑰둠] κ·Έλž˜ν”„

νŒŒμ΄ν†¨μΉ˜Β·2022λ…„ 6μ›” 6일
2

λŒ€ν•™μˆ˜μ—…

λͺ©λ‘ 보기
30/32

κ°œμš” πŸ˜„

κ·Έλž˜ν”„κ°€ 뭘까?
κ·Έλž˜ν”„λž€ ν˜„μƒμ΄λ‚˜ 사물을 정점과 κ°„μ„ μœΌλ‘œ ν‘œν˜„ν•œ 것이라고 ν•œλ‹€. μž‘λ…„μ— 이산 μˆ˜ν•™ μ‹œκ°„μ— 배운 기얡이 μžˆλ‹€.

κ·Έλž˜ν”„λ₯Ό ν‘œν˜„ν•˜λŠ” 방식은 ꡉμž₯히 λ‹€μ–‘ν•˜λ‹€.

κ·Έλž˜ν”„μ˜ ν‘œν˜„

πŸ’‘ 첫번째 κ·Έλž˜ν”„ ν‘œν˜„: 인접 ν–‰λ ¬

인접행렬을 λ§Œλ“œλŠ” 것은 ꡉμž₯히 κ°„λ‹¨ν•˜λ‹€.

λ§Œμ•½μ— κ·Έλž˜ν”„κ°€ μ΄λ ‡κ²Œ μžˆμ—ˆλ‹€κ³  μƒκ°ν•΄λ³΄μž. 철수 κΈ°μ€€μœΌλ‘œ 생각해보면 μ² μˆ˜λŠ” 영희 / 동근 / μ€€ν˜Έ / μŠΉμš°μ™€ μ—°κ²°λ˜μ–΄ μžˆλ‹€.

그러면 이 μ—°κ²°λ˜μ–΄ μžˆλŠ” 것을 체크해주면 λœλ‹€.
이런 μ‹μœΌλ‘œ 말이닀. 영희 / 동근 / μ€€ν˜Έ / 승우 λŠ” 숫자둜 ν‘œν˜„ν•˜λ©΄ 1 / 2 / 3/ 5 이기 λ•Œλ¬Έμ΄λ‹€.

μ—¬κΈ°μ„œ μ’€ 더 λ³΅μž‘ν•˜κ²Œ λ°©ν–₯ κ·Έλž˜ν”„λ₯Ό 인접 ν–‰λ ¬λ‘œ ν‘œν˜„ν•  μˆ˜λ„ μžˆλ‹€. μ§€κΈˆ μœ„μ˜ 그림은 λŒ€μΉ­μ΄μ§€λ§Œ λ°©ν–₯ κ·Έλž˜ν”„λ‘œ λ§Œλ“€λ©΄ λŒ€μΉ­μ΄ μ•„λ‹ˆκ²Œ λœλ‹€.

μ˜ˆμ‹œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

ꡉμž₯히 μ§κ΄€μ μ΄λ©΄μ„œ κ°„μ„ μ˜ 쑴재 μ—¬λΆ€λ₯Ό μ¦‰κ°μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

ν•˜μ§€λ§Œ n * n 행렬을 μœ μ§€ν•˜κΈ° μœ„ν•΄μ„œ n ^ 2 의 곡간이 ν•„μš”ν•˜λ‹€λŠ” 단점이 있으면 또 이 ν–‰λ ¬μ˜ μ€€λΉ„κ³Όμ •μ—μ„œ n ^ 2의 μ‹œκ°„μ΄ ν•„μš”ν•˜λ‹€.

κ°„μ„ μ˜ 밀도가 높은 κ²½μš°μ—λŠ” μ ν•©ν•˜μ§€λ§Œ 그렇지 μ•ŠμœΌλ©΄ λ‚­λΉ„κ°€ μ‹¬ν•˜λ‹€.

πŸ’‘ λ‘λ²ˆμ§Έ κ·Έλž˜ν”„ ν‘œν˜„ : 인접 리슀트

인접 λ¦¬μŠ€νŠΈλŠ” 각 정점에 μΈμ ‘ν•œ 정점듀을 (μ—°κ²°) 리슀트둜 ν‘œν˜„ν•œ 것이라고 ν•œλ‹€.

λ°©ν–₯이 μ—†λŠ” κ·Έλž˜ν”„λ‘œ 총 λ…Έλ“œμ˜ μˆ˜λŠ” 총 κ°„μ„ μ˜ 수 * 2 라고 ν•œλ‹€.

인접 λ¦¬μŠ€νŠΈλŠ” μž₯접이 곡간 λ‚­λΉ„κ°€ 거의 μ—†λ‹€λŠ” 점이닀. ν•˜μ§€λ§Œ 링크λ₯Ό μœ„ν•΄μ„œ 곡간이 μ˜€λ²„ν—€λ“œ λœλ‹€.

간선이 λ³„λ‘œ μ—†λŠ” ν¬μ†Œ κ·Έλž˜ν”„μ—μ„œ μ ν•©ν•˜λ‹€κ³  ν•œλ‹€. κ°„μ„ μ˜ 밀도가 높은 κ²½μš°μ—λŠ” 링크λ₯Ό μœ„ν•œ μ˜€λ²„ν—€λ“œλ‘œ λΉ„νš¨μœ¨μ μ΄λ‹€.

πŸ’‘ μ„Έλ²ˆμ§Έ κ·Έλž˜ν”„ ν‘œν˜„ : 인접 λ°°μ—΄

μœ„μ— 것과 차별점은 각 정점에 μ—°κ²°λœ 정점듀을 μ—°κ²° 리슀트 λŒ€μ‹  λ°°μ—΄λ‘œ μ €μž₯ν•œ 것이라고 ν•œλ‹€.

링크λ₯Ό μœ„ν•œ 곡간을 μ ˆμ•½ν•œλ‹€λŠ” μž₯점이 μžˆλ‹€.
또 λ©”λͺ¨λ¦¬ 곡간 지역성이 λ†’μ•„μ§„λ‹€λŠ” μž₯점이 μžˆλ‹€.

μ‚½μž…κ³Ό μ‚­μ œκ°€ λΆˆνŽΈν•œ 것이 배열이기 λ•Œλ¬Έμ— κ·Έλž˜ν”„κ°€ ν•œ 번 λ§Œλ“€μ–΄ 진 후에 λ³€ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ— μ ν•©ν•˜λ‹€κ³  ν•œλ‹€.

λ°°μ—΄ λ‚΄μ—μ„œ 이진 탐색이 κ°€λŠ₯ν•œ ꡬ쑰이닀. ([log 2k] + 1 ) 번 λ‚΄λ‘œ μΈμ ‘ν•œμ§€ 확인 κ°€λŠ₯함.)

πŸ’‘ λ„€λ²ˆμ§Έ κ·Έλž˜ν”„ ν‘œν˜„ : 인접 ν•΄μ‹œ ν…Œμ΄λΈ”

점점 뒀에 λ­”κ°€ μΆ”κ°€λœλ‹€.

μ΄λ ‡κ²Œ 배열을 ν•΄μ‰¬λ‘œ λ§Œλ“€μ–΄ μ£ΌλŠ” 것이닀. μ΄λ ‡κ²Œ λ°”κΎΈμ–΄μ£Όλ©΄ λ‹Ήμ—°ν•˜κ²Œλ„ λΉ λ₯΄λ‹€. ν•˜μ§€λ§Œ 인접 λ¦¬μŠ€νŠΈμ— μ€€ν•˜λŠ” 크기가 λ˜μ–΄ 버린닀. 순차 νƒμƒ‰μ—λŠ” λΉ„νš¨μœ¨μ μ΄λΌκ³  ν•œλ‹€.

κ·Έλž˜ν”„μ˜ 순회

ν•œ μ •μ μ—μ„œ μ‹œμž‘ν•˜μ—¬ 도달 κ°€λŠ₯ν•œ λͺ¨λ“  정점을 λ°©λ¬Έν•˜λŠ” 것이닀.

λŒ€ν‘œμ μΈ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œλŠ” λ„ˆλΉ„ μš°μ„  탐색과 깊이 μš°μ„  탁색이 μžˆλ‹€. κ΅μˆ˜λ‹˜μ΄ κΉŠμ€ 직관이 ν•„μš”ν•˜λ‹€κ³  ν•œλ‹€.

πŸͺƒ 첫 번째 순회 방법 : BFS(λ„ˆλΉ„ μš°μ„  탐색)

그림을 보면 μƒμœ„ λ…Έλ“œμ—μ„œ ν•˜μœ„ λ…Έλ“œλ‘œ 갈 λ•Œ μƒμœ„ λ…Έλ“œμ™€ μ—°κ΄€λœ λͺ¨λ“  λ…Έλ“œλ‘œ κ°€λŠ” 것이닀.

μ•Œκ³ λ¦¬μ¦˜μ€ 큐 λ₯Ό μ‚¬μš©ν•΄μ„œ λ§Œλ“ λ‹€.

κ·Έλž˜ν”„κ°€ 2개 이상 끊겨 있으면 λͺ¨λ“  정점을 λ°©λ¬Έν•˜κΈ° μœ„ν•΄μ„œλŠ” μ—¬λŸ¬λ²ˆ BFSλ₯Ό μˆ˜ν–‰ν•  수 μžˆλ‹€.

πŸͺƒ 두 번째 순회 방법 : DFS (깊이 μš°μ„  탐색)


이건 κ³„μ†ν•΄μ„œ ν•˜μœ„λ‘œ λ‚΄λ € κ°€λŠ” 것이닀. 더이상 갈 수 μ—†μœΌλ©΄ κ·Έ λ‹€μŒ λ‚΄λ €κ°€λŠ” 길을 μ°Ύμ•„μ„œ λ‚΄λ €κ°„λ‹€. λ§ˆμ§€λ§‰μ— μ–΄λ–€ λͺ¨μ–‘μœΌλ‘œ λ˜λŠ”μ§€ κΈ°μ–΅ν•˜μž.

이건 μž¬κ·€μ μΈ ν˜•νƒœλ‘œ μ•Œκ³ λ¦¬μ¦˜μ„ λ§Œλ“œλ‚˜ 보닀.

μ΅œμ†Œ μ‹ μž₯ 트리

μ—°κ²° κ·Έλž˜ν”„ : κ°„μ„ μ˜ λ°©ν–₯이 μ—†λŠ” κ·Έλž˜ν”„μ—μ„œ λͺ¨λ“  정점듀 간에 간선을 따라 μ„œλ‘œ λ‹€λ‹€λ₯Ό 수 μžˆλŠ” κ·Έλž˜ν”„

μ‹ μž₯ 트리 : νŠΈλ¦¬λŠ” " 싸이클이 μ—†λŠ” μ—°κ²° κ·Έλž˜ν”„ "

μ΅œμ†Œν•œμ˜ 간선을 μ‚¬μš©ν•˜μ—¬ μ—°κ²°λœ κ·Έλž˜ν”„λ₯Ό μ‹ μž₯ 트리라고 함. μ—¬λŸ¬ λͺ¨μ–‘μ˜ μ‹ μž₯ νŠΈλ¦¬κ°€ 생김.

μ΅œμ†Œ μ‹ μž₯ 트리 : κ°„μ„ μ˜ κ°€μ€‘μΉ˜ 합이 μ΅œμ†Œκ°€ λ˜λ„λ‘ ν•˜λŠ” μ‹ μž₯ 트리

첫번째 : ν”„λ¦Ό μ•Œκ³ λ¦¬μ¦˜

μ–˜λ„ μž‘λ…„ 이산 μˆ˜ν•™ μ‹œκ°„μ— λ°°μ› λ‹€.

λ…Έλ“œμ—μ„œ κ°€μž₯ μž‘μ€ 간선을 선택해 λ‚˜κ°„λ‹€.

λ‘λ²ˆμ§Έ : 크루슀칼 μ•Œκ³ λ¦¬μ¦˜

μ—¬λŸ¬ 정점 μ§‘ν•©μœΌλ‘œ μ‹œμž‘ν•΄ 집합을 합쳐 λ‚˜κ°„λ‹€.

μ„Έλ²ˆμ§Έ : μœ„μƒ μ •λ ¬

상후 μ„ ν›„ 관계가 μ‘΄μž¬ν•˜λŠ” μž‘μ—… μ •λ ¬ν•˜κΈ°

profile
μ•ˆμ•Œλž΄μ€Œ

0개의 λŒ“κΈ€