Tags
- OpenAPI
- ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ
- @CreatedDate
- DATABASE
- SSL
- Quick Sort
- MAKE US
- GIT
- C++
- Rp2๊ธฐ
- mysql
- aligoapi
- Java
- Data Structure
- Unity
- spring ์์ ๋ก๊ทธ์ธ
- spring ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ
- ์์คํ ์ํํธ์จ์ด
- ํจ์คํธ์บ ํผ์คX์ผ๋์
- SQL
- datagrip
- spring์ผ๋ก https ์ ์ฉ
- java error
- RP 2๊ธฐ
- node js
- Spring
- MethodArgumentNotValidException
- ๋ฆฌ๋ ์ค ๋ช ๋ น์ด
- docker
- merge sort
YS's develop story
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ ๋ณธ๋ฌธ
๐ฉ๐ป ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ with Python
๐ฅ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (Dijkstra Algorithm)์ด๋?
๋ ๋ ธ๋๋ฅผ ์๋ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ (๊ฐ์ค์น ํฉ์ด ์ต์๊ฐ ๋๋๋ก ํ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ )์์
ํ๋์ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊ฐ์ ๊ฐ๊ฐ ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์ฒซ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ ์ ๋ค์ ์ถ๊ฐํด ๊ฐ๋ฉฐ, ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์ ํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
์ฐ์ ์์ ํ๋ฅผ ํ์ฉํ์ฌ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค.
1. ์ด๊ธฐํ
- ์ฒซ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ์ ์ธํ์ฌ ์ฒซ ์ ์ ์์ ๊ฐ ์ ์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํฉ๋๋ค.
- ์ด๊ธฐ์๋ ์ฒซ ์ ์ ์ ๊ฑฐ๋ฆฌ๋ 0, ๋๋จธ์ง๋ ๋ฌดํ๋๋ก ์ ์ฅํฉ๋๋ค. (inf๋ผ๊ณ ํํํจ)
- ์ฐ์ ์์ ํ์ (์ฒซ ์ ์ , ๊ฑฐ๋ฆฌ 0)๋ง ๋จผ์ ๋ฃ์ต๋๋ค.
2. ์ฐ์ ์์ ํ์์ ์ถ์ถํ (A, 0) [๋ ธ๋, ์ฒซ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ]๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ ํ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- ์ฐ์ ์์ ํ์์ ๋
ธ๋๋ฅผ ๊บผ๋
๋๋ค.
- ์ฒ์์๋ ์ฒซ ์ ์ ๋ง ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก, ์ฒซ ์ ์ ์ด ๊บผ๋ด์ง๋๋ค.
- ์ฒซ ์ ์ ์ ์ธ์ ํ ๋ ธ๋๋ค ๊ฐ๊ฐ์ ๋ํด, ์ฒซ ์ ์ ์์ ๊ฐ ๋ ธ๋๋ก ๊ฐ๋ ๊ฑฐ๋ฆฌ์ ํ์ฌ ๋ฐฐ์ด์ ์ ์ฅ๋์ด ์๋ ์ฒซ ์ ์ ์์ ๊ฐ ์ ์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋น๊ตํฉ๋๋ค
- ๋ฐฐ์ด์ ์ ์ฅ๋์ด ์๋ ๊ฑฐ๋ฆฌ๋ณด๋ค, ์ฒซ ์ ์ ์์ ํด๋น ๋ ธ๋๋ก ๊ฐ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ ์งง์ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ํด๋น ๋ ธ๋์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค
- ๋ฐฐ์ด์ ํด๋น ๋
ธ๋์ ๊ฑฐ๋ฆฌ๊ฐ ์
๋ฐ์ดํธ๋ ๊ฒฝ์ฐ, ์ฐ์ ์์ ํ์ ๋ฃ์ต๋๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋๋น ์ฐ์ ํ์ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ, ์ฒซ ์ ์ ์ ์ธ์ ํ ๋ ธ๋๋ค์ ์์ฐจ์ ์ผ๋ก ๋ฐฉ๋ฌธํ๊ฒ ๋ฉ๋๋ค
- ๋ง์ฝ ๋ฐฐ์ด์ ๊ธฐ๋ก๋ ํ์ฌ๊น์ง ๋ฐ๊ฒฌ๋ ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ๋ณด๋ค, ๋ ๊ธด ๊ฑฐ๋ฆฌ(๋ฃจํธ)๋ฅผ ๊ฐ์ง (๋ ธ๋, ๊ฑฐ๋ฆฌ)์ ๊ฒฝ์ฐ์๋ ํด๋น ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋ ๊ฐ์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ํ์ง ์์ต๋๋ค.
3. ์ฐ์ ์์ ํ์์ (C, 1) [๋ ธ๋, ์ฒซ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ]๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ ํ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- ์ฐ์ ์์ ํ๊ฐ MinHeap(์ต์ ํ) ๋ฐฉ์์ด๋ฏ๋ก, ์ ํ์์ ๋ฃ์ด์ง (C, 1), (D, 2), (B, 8) ์ค (C, 1) ์ด ๋จผ์ ์ถ์ถ๋ฉ๋๋ค.
- ์ ํ์์ ๋ณด๋ฏ์ด 1๋จ๊ณ๊น์ง์ A - B ์ต๋จ ๊ฑฐ๋ฆฌ๋ 8 ์ธ ์ํฉ์
๋๋ค.
- A - C๊น์ง์ ๊ฑฐ๋ฆฌ๋ 1, C์ ์ธ์ ํ B, D์์ C - B๋ 5, ์ฆ A - C - B๋ 1 + 5 = 6 ์ด๋ฏ๋ก, A - B ์ต๋จ ๊ฑฐ๋ฆฌ 8๋ณด๋ค ๋ ์์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ๊ฒฌ, ์ด๋ฅผ ๋ฐฐ์ด์ ์
๋ฐ์ดํธํฉ๋๋ค.
- ๋ฐฐ์ด์ ์ ๋ฐ์ดํธํ์ผ๋ฏ๋ก B, 6 (์ฆ A์์ B๊น์ง์ ํ์ฌ๊น์ง ๋ฐ๊ฒฌํ ์ต๋จ ๊ฑฐ๋ฆฌ) ๊ฐ์ด ์ฐ์ ์์ ํ์ ๋ฃ์ด์ง๋๋ค.
- C - D์ ๊ฑฐ๋ฆฌ๋ 2, ์ฆ A - C - D๋ 1 + 2 = 3 ์ด๋ฏ๋ก, A - D์ ํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ์ธ 2 ๋ณด๋ค ๊ธด ๊ฑฐ๋ฆฌ, ๊ทธ๋์ D์ ๊ฑฐ๋ฆฌ๋ ์ ๋ฐ์ดํธ๋์ง ์์ต๋๋ค.
- A - C๊น์ง์ ๊ฑฐ๋ฆฌ๋ 1, C์ ์ธ์ ํ B, D์์ C - B๋ 5, ์ฆ A - C - B๋ 1 + 5 = 6 ์ด๋ฏ๋ก, A - B ์ต๋จ ๊ฑฐ๋ฆฌ 8๋ณด๋ค ๋ ์์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ๊ฒฌ, ์ด๋ฅผ ๋ฐฐ์ด์ ์
๋ฐ์ดํธํฉ๋๋ค.
4. ์ฐ์ ์์ ํ์์ (D, 2) [๋ ธ๋, ์ฒซ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ]๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ ํ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- ์ง๊ธ๊น์ง ์ ๊ทผํ์ง ๋ชปํ๋ E์ F ๊ฑฐ๋ฆฌ๊ฐ ๊ณ์ฐ๋ฉ๋๋ค.
- A - D๊น์ง์ ๊ฑฐ๋ฆฌ์ธ 2์ D - E ๊ฐ 3 ์ด๋ฏ๋ก ์ด๋ฅผ ๋ํด์ E, 5
- A - D๊น์ง์ ๊ฑฐ๋ฆฌ์ธ 2์ D - F ๊ฐ 5 ์ด๋ฏ๋ก ์ด๋ฅผ ๋ํด์ F, 7
5. ์ฐ์ ์์ ํ์์ (E, 5) [๋ ธ๋, ์ฒซ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ]๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ ํ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- A - E ๊ฑฐ๋ฆฌ๊ฐ 5์ธ ์ํ์์, E์ ์ธ์ ํ F๋ฅผ ๊ฐ๋ ๊ฑฐ๋ฆฌ๋ 1, ์ฆ A - E - F๋ 5 + 1 = 6, ํ์ฌ ๋ฐฐ์ด์ A - F ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ 7๋ก ๊ธฐ๋ก๋์ด ์์ผ๋ฏ๋ก, F, 6์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค.
- ์ฐ์ ์์ ํ์ F, 6 ์ถ๊ฐ
6. ์ฐ์ ์์ ํ์์ (B, 6), (F, 6)๋ฅผ ์์ฐจ์ ์ผ๋ก ์ถ์ถํด ๊ฐ ๋ ธ๋ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ ํ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- ์์ ์ ๋ฐฉํฅ ๊ทธ๋ํ์์ B ๋ ธ๋๋ ๋ค๋ฅธ ๋ ธ๋๋ก ๊ฐ๋ ๋ฃจํธ๊ฐ ์์ต๋๋ค.
- F ๋ ธ๋๋ A ๋ ธ๋๋ก ๊ฐ๋ ๋ฃจํธ๊ฐ ์์ผ๋, ํ์ฌ A - A ๊ฐ 0 ์ธ ๋ฐ๋ฉด์ A - F - A๋ 6 + 5 = 11, ์ฆ ๋ ๊ธด ๊ฑฐ๋ฆฌ์ด๋ฏ๋ก ์ ๋ฐ์ดํธ๋์ง ์์ต๋๋ค.
6. ์ฐ์ ์์ ํ์์ (F, 7), (B, 8)๋ฅผ ์์ฐจ์ ์ผ๋ก ์ถ์ถํด ๊ฐ ๋ ธ๋ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ ํ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- A - F๋ก ๊ฐ๋ ํ๋์ ๋ฃจํธ์ ๊ฑฐ๋ฆฌ๊ฐ 7 ์ธ ์ํฉ์ด๋, ๋ฐฐ์ด์์ ์ด๋ฏธ A - F๋ก ๊ฐ๋ ํ์ฌ์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ 6์ธ ๋ฃจํธ์ ๊ฐ์ด ์๋ ์ํฉ์ด๋ฏ๋ก, ๋ ๊ธด ๊ฑฐ๋ฆฌ์ธ F, 7 ๋ฃจํธ ๊ธฐ๋ฐ ์ธ์ ๋
ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ ๊ณ์ฐํ ํ์๊ฐ ์์, ๊ทธ๋์ ๊ณ์ฐ ์์ด ์คํตํฉ๋๋ค.
- ๊ณ์ฐํ๋๋ผ๋ A - F ๊ฑฐ๋ฆฌ๊ฐ 6์ธ ๋ฃจํธ๋ณด๋ค ๋ฌด์กฐ๊ฑด ๋ ๊ธด ๊ฑฐ๋ฆฌ๊ฐ ๋์ฌ ์๋ฐ์ ์์ต๋๋ค.
- B, 8 ๋ ํ์ฌ A - B ๊ฑฐ๋ฆฌ๊ฐ 6์ด๋ฏ๋ก, ์ธ์ ๋ ธ๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ด ํ์ ์์ต๋๋ค.
๐ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (Dijkstra Algorithm) ์ฝ๋
mygraph = {
'A': {'B': 8, 'C': 1, 'D': 2},
'B': {},
'C': {'B': 5, 'D': 2},
'D': {'E': 3, 'F': 5},
'E': {'F': 1},
'F': {'A': 5}
}
import heapq
def Dijkstra(graph, start):
distances = {node: float('inf') for node in graph}
distances[start] = 0
queue = []
heapq.heappush(queue, [distances[start], start])
while queue:
currentDistance, currentNode = heapq.heappop(queue)
if currentDistance > distances[currentNode]:
continue
for adjacent, weight in graph[currentNode].items():
distance = currentDistance + weight
if distance < distances[adjacent]:
distances[adjacent] = distance
heapq.heappush(queue, [distance, adjacent])
return distances
print(Dijkstra(mygraph, 'A'))
๐ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (Dijkstra Algorithm) ์๊ฐ ๋ณต์ก๋
- ๊ฐ ์ ์ ๋ง๋ค ์ธ์ ํ Edge๋ค์ ํ์ํ๋ ๊ณผ์
๊ฐ ๋ ธ๋๋ ์ต๋ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ํ์ ๋ชจ๋ ๊ฐ์ ์ ์ต๋ ํ ๋ฒ์ฉ ๊ฒ์ฌํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๊ณผ์ ์ ์๊ฐ ๋ณต์ก๋๋ - ์ฐ์ ์์ ํ์ [๊ฑฐ๋ฆฌ, ์ ์ ] ์ ๋ณด๋ฅผ ๋ฃ๊ณ ๋นผ๋ ๊ณผ์
์ต์ ์ ๊ฒฝ์ฐ๋ ๋ชจ๋ ๊ฐ์ ์ ๊ฒ์ฌํ ๋๋ง๋ค ๊ฑฐ๋ฆฌ ๊ฐ ๋ฆฌ์คํธ๊ฐ ๊ฐฑ์ ๋๊ณ , ์ฐ์ ์์ ํ์ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ ๊ฒฝ์ฐ์ ๋๋ค. E๊ฐ์ Edge๋ฅผ ๊ฒ์ฌํ ๋๋ง๋ค ์ฐ์ ์์ ํ๋ฅผ ์ ์งํด์ผ ํ๋ฏ๋ก ์ด ๊ณผ์ ์ ์๊ฐ ๋ณต์ก๋๋
์ ๋ ๊ณผ์ ์ ๊ฑฐ์น ๊ฒฝ์ฐ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ด ์๊ฐ ๋ณต์ก๋๋ ๋ฉ๋๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ (0) | 2021.08.13 |
---|---|
๋๋น ์ฐ์ ํ์ (BFS), ๊น์ด ์ฐ์ ํ์ (DFS) ์ ๋ฆฌ (0) | 2021.08.03 |
์์ฐจ ํ์, ์ด์ง ํ์ ์ ๋ฆฌ (2) | 2021.08.01 |
ํต ์ ๋ ฌ (Quick Sort) ์ ๋ฆฌ (0) | 2021.07.31 |
๋ณํฉ ์ ๋ ฌ (Merge Sort) ์ ๋ฆฌ (0) | 2021.07.31 |
Comments