プライオリティキューを使用してダイクストラアルゴリズムを実装しようとしていますが、それがどのように機能するか理解できません。私はウェブで多くのガイドを読みましたが、このアルゴリズムをまったく理解できません。
私の質問は、各ノードの優先順位は何ですか?それは最小の価値を持つ着信エッジの重みだと思いますが、私にはわかりません。これは本当ですか?
2番目の質問、キューのルートを抽出するときに、訪問したノードが1つもない隣接ノードでない場合、どのように機能しますか?
priority queue
を使用する必要があります。ここで、最初のvertex
からの距離が最も短いvertex
が最も優先されます。最初は、すべてのvertices
は無限の最短距離を持ち、最初のvertex
は最短距離0を持ちます。
vertices
内のグラフからすべてのedges
(およびPQ
)を挿入することから始めます。 vertex
からPQ
を削除し、edges
をすべて調べます。最短距離を隣接するすべてのvertices
と比較し、現在のvertex
の最短距離よりも短い距離がある場合は、vertex
内の隣接するPQ
最短距離を更新します。 PQ
が空でない間、続行します。 Vertices
を取得しなかったedges
は、最初のvertex
から「取得」できないため、無限の最短距離で終了します。ただし、PQ
からは削除されます。
疑似コード
initialize graph
initialize pq
pq.insertAll(graph.getVertices())
while (pq is not empty) {
vertex = pq.remove()
edges = vertex.getEdges()
for all edges {
destination = Edge.getDestination()
newDistance = Edge.getLength() + vertex.getDistance()
if (newDistance < destination.getDistance()) {
destination.setShortestDistance(newDistance)
pq.update(destination)
}
}
}