DijkstraとPrimのアルゴリズムは同じです。ウィキペディアの擬似コードはここにあります。私は私の混乱のポイントを説明します。DijkstraとPrimのアルゴリズム
1 function Dijkstra(Graph, source):
2 dist[source] ← 0 // Initialization
3
4 create vertex set Q
5
6 for each vertex v in Graph:
7 if v ≠ source
8 dist[v] ← INFINITY // Unknown distance from source to v
9 prev[v] ← UNDEFINED // Predecessor of v
10
11 Q.add_with_priority(v, dist[v])
12
13
14 while Q is not empty: // The main loop
15 u ← Q.extract_min() // Remove and return best vertex
16 for each neighbor v of u: // only v that is still in Q
17 alt ← dist[u] + length(u, v)
18 if alt < dist[v]
19 dist[v] ← alt
20 prev[v] ← u
21 Q.decrease_priority(v, alt)
22
23 return dist[], prev[]
プリム法ではほぼ同じ、便宜のために、私はちょうど14行目で開始したループを変更します
14 while Q is not empty:
15 u ← Q.extract_min()
16 for each neighbor v of u:
17 if v ∈ Q and length(u, v) < cost[v]
18 cost[v] ← length(u, v)
19 prev[v] ← u
20 Q.decrease_priority(v, length(u, v))
2つの変更が最初はcost[]
となどとdist[]
を交換され、ありますアルゴリズムがさまざまな問題を解決するという事実に関連していると私は理解しています。 2番目のものはわたしにとってはあいまいです。すなわち、ダイクストラのアルゴリズムでは、この条件がないのがif v ∈ Q
です。私は実際にプリムのアルゴリズムで訪れた頂点の集合に戻ることができない理由を実際には得ていません。これはダイクストラのアルゴリズムでは起こり得ません。
'if x∈Q'' x'とは何ですか? – DAle
ミスプリント、 'v'の代わりに' x' – Atin