deo2kim
๋งž์™œํ‹€
deo2kim
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • CS
      • Algorithm
      • Data Structure
      • Network
      • DB
      • OS
    • Algorithm Problem
      • Python
      • JavaScript
    • Programming language
      • Python
      • JavaScript
    • Tool
      • Jquery
      • React
    • ๊ฐœ๋ฐœ
    • Infra

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
deo2kim
CS/Algorithm

๋‹ค์ต์ŠคํŠธ๋ผ(dijkstra)

๋‹ค์ต์ŠคํŠธ๋ผ(dijkstra)
CS/Algorithm

๋‹ค์ต์ŠคํŠธ๋ผ(dijkstra)

2020. 10. 2. 20:01
๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜: https://t1.daumcdn.net/cfile/tistory/277CC93A54C0ABE80A

๐Ÿ“” ๋‹ค์ต์ŠคํŠธ๋ผ(dijkstra) ๋ž€

  • ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—... ์ตœ๋‹จ ๊ฒฝ๋กœ๋ž€
    • ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ๋‘ ์ •์  ์‚ฌ์ด์˜ ๊ฒฝ๋กœ๋“ค ์ค‘ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์ตœ์†Œ์ธ ๊ฒฝ๋กœ
    • ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ๊ท ์ผ(1)ํ•  ๊ฒฝ์šฐ BFS๋ฅผ ์‚ฌ์šฉ
  • ์Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ
  • ํ•˜๋‚˜์˜ ์‹œ์ž‘ ์ •์ ์—์„œ ๋ ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฒฝ๋กœ
    • ์‹œ์ž‘ ์ •์ ์—์„œ ๊ฑฐ๋ฆฌ๊ฐ€ ์ตœ์†Œ์ธ ์ •์ ์„ ์„ ํƒํ•ด ๋‚˜๊ฐ€๋ฉด์„œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ์‹œ์ž‘ ์ •์ (s) ์—์„œ ๋ ์ •์ (t) ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ์— ์ •์  x ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    • ์ด๋•Œ, ์ตœ๋‹จ ๊ฒฝ๋กœ๋Š” s ์—์„œ  x ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฒฝ๋กœ์™€ x ์—์„œ t ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
    • ํƒ์š• ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ MST์˜ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
  • ์•„๋ž˜ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N^2) ์ด๋‹ค.
  • ๋งŒ์•ฝ ์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด O(NlogN) ์œผ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“” ๋‹ค์ต์ŠคํŠธ๋ผ(dijkstra) ๊ตฌํ˜„

V, E = 6, 11
edges = [
    [0, 1, 3],
    [0, 2, 5],
    [1, 2, 2],
    [1, 3, 6],
    [2, 1, 1],
    [2, 3, 4],
    [2, 4, 6],
    [3, 4, 2],
    [3, 5, 3],
    [4, 0, 3],
    [4, 5, 6]
]

# ์ธ์ ‘๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
adj = {x: [] for x in range(V)}
for edge in edges:
    s, e, c = edge
    adj[s].append([e, c])

# dist, visited
dist = [float('inf')] * V
visited = [False] * V

# ์‹œ์ž‘์  ์„ ํƒ, ๋ชจ๋“  ์ •์  ์„ ํƒ
dist[0] = 0
cnt = 0
while cnt < V:
    # dist๊ฐ€ ์ตœ์†Œ์ธ ์ •์  ์ฐพ๊ธฐ
    min_dist = float('inf')
    u = -1
    for i in range(V):
        if not visited[i] and dist[i] < min_dist:
            min_dist = dist[i]
            u = i

    # ์ •์ ์„ ํ•˜๋‚˜ ์„ ํƒ
    visited[u] = True

    # ๊ฐ„์„  ์™„ํ™”
    for w, cost in adj[u]:  # ๋„์ฐฉ์ •์ , ๊ฐ€์ค‘์น˜
        if dist[u] + cost < dist[w]:
            dist[w] = dist[u] + cost
    cnt += 1

print(dist)
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'CS > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ(Floyd Warshall)  (0) 2020.10.04
์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด(Sieve Of Eratosthenes)  (0) 2020.10.03
๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming)  (0) 2020.10.01
ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(kruskal)  (0) 2020.09.30
์„œ๋กœ์†Œ ์ง‘ํ•ฉ(Disjoint-set)  (0) 2020.09.29
  • ๐Ÿ“” ๋‹ค์ต์ŠคํŠธ๋ผ(dijkstra) ๋ž€
  • ๐Ÿ“” ๋‹ค์ต์ŠคํŠธ๋ผ(dijkstra) ๊ตฌํ˜„
'CS/Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ(Floyd Warshall)
  • ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด(Sieve Of Eratosthenes)
  • ๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming)
  • ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(kruskal)
deo2kim
deo2kim
์ฝ”๋”ฉ ๊ธฐ๋กํ•˜๊ธฐ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.