優先度キューを使用してdijkstraアルゴリズムを実装しようとしていますが、どのように動作するのか理解できません。私はウェブ上で多くのガイドを読んだが、私はこのアルゴリズムを全く理解できない。最小優先度キューを持つDijkstraアルゴリズム
私の質問は次のとおりです。各ノードの優先順位は何ですか?私はそれが最小値で入縁の重さだと思うが、私は確信していない。これは本当ですか?
2番目の質問では、キューのルートを抽出すると、このノードが訪問先ノードが1つも存在しない場合の動作はどうですか?
優先度キューを使用してdijkstraアルゴリズムを実装しようとしていますが、どのように動作するのか理解できません。私はウェブ上で多くのガイドを読んだが、私はこのアルゴリズムを全く理解できない。最小優先度キューを持つDijkstraアルゴリズム
私の質問は次のとおりです。各ノードの優先順位は何ですか?私はそれが最小値で入縁の重さだと思うが、私は確信していない。これは本当ですか?
2番目の質問では、キューのルートを抽出すると、このノードが訪問先ノードが1つも存在しない場合の動作はどうですか?
vertex
から最短距離のvertex
が最も優先されるpriority queue
を使用してください。最初に、全てvertices
は無限の最短距離を有し、出発vertex
はPQ
内側グラフから(そのedges
で)すべてvertices
を挿入することによって最短距離0
スタートを有するであろう。 PQ
からvertex
を削除し、すべてedges
を探索してください。現在のvertex
の最短距離より短い距離がある場合は、PQ
の中で最も近い距離をvertex
に更新してください。 PQ
が空でない間続行します。 Vertices
はedges
を得ていないので、開始点vertex
から 'get to them'が可能でないため、無限遠の最短距離で終了します。ただし、それらはまだ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)
}
}
}
MITオープンコースウェアリンク:
Path problems overview
Dijkstra
テキストには、「** PQが空でないうちに続行**」または「PQが空になるまで続行」のいずれかを読み込む必要があります。擬似コードは正しいです。 –
@CorpusGigantusありがとう、固定 –
あなたはダイクストラのように考えるならば、 "加重グラフの幅優先探索、" それがかなり容易になりますわかる。あなたの質問に答えるには:1.それほどではありません - それは遠くまで横切ったエッジ**の最小です。 2. BFSのように、訪問先ノードに隣接していない場合は、まだ訪問できません。訪れたノードから*到達可能でない場合、訪問されることはありません。 –