Dijkstra의 알고리즘이 음의 가중치로 작동하지 않는 이유를 이해하려고합니다. Shortest Paths 에 대한 예제를 읽고 다음 시나리오를 파악하려고합니다.
2
A-------B
\ /
3 \ / -2
\ /
C
웹 사이트에서 :
모서리가 모두 왼쪽에서 오른쪽으로 향한다고 가정하면 A로 시작하면 Dijkstra의 알고리즘은 d (A, A) + length (edge), 즉 (A, B)를 최소화하는 모서리 (A, x)를 선택합니다. 그런 다음 d (A, B) = 2를 설정하고 d (A, y) + d (y, C)를 최소화하는 다른 모서리 (y, C)를 선택합니다. 유일한 선택은 (A, C)이며 d (A, C) = 3으로 설정됩니다. 그러나 총 길이가 1 인 C를 통해 A에서 B까지의 최단 경로를 찾지 못합니다.
나는 익스트라의 다음 구현, D [B]를 사용하는 이유에 업데이트되지 않습니다 이해할 수없는 1
, C 정점 알고리즘에 도달, 그것은 A가 B에서 휴식을 실행하면 (는 D [B]가 일치 한 것을 볼 수 2
있으므로, 업데이트 및 값 1
).
Dijkstra(G, w, s) {
Initialize-Single-Source(G, s)
S ← Ø
Q ← V[G]//priority queue by d[v]
while Q ≠ Ø do
u ← Extract-Min(Q)
S ← S U {u}
for each vertex v in Adj[u] do
Relax(u, v)
}
Initialize-Single-Source(G, s) {
for each vertex v V(G)
d[v] ← ∞
π[v] ← NIL
d[s] ← 0
}
Relax(u, v) {
//update only if we found a strictly shortest path
if d[v] > d[u] + w(u,v)
d[v] ← d[u] + w(u,v)
π[v] ← u
Update(Q, v)
}
감사,
Meir