2013-08-19 15 views
13

優先度キューを使用してdijkstraアルゴリズムを実装しようとしていますが、どのように動作するのか理解できません。私はウェブ上で多くのガイドを読んだが、私はこのアルゴリズムを全く理解できない。最小優先度キューを持つDijkstraアルゴリズム

私の質問は次のとおりです。各ノードの優先順位は何ですか?私はそれが最小値で入縁の重さだと思うが、私は確信していない。これは本当ですか?

2番目の質問では、キューのルートを抽出すると、このノードが訪問先ノードが1つも存在しない場合の動作はどうですか?

+0

あなたはダイクストラのように考えるならば、 "加重グラフの幅優先探索、" それがかなり容易になりますわかる。あなたの質問に答えるには:1.それほどではありません - それは遠くまで横切ったエッジ**の最小です。 2. BFSのように、訪問先ノードに隣接していない場合は、まだ訪問できません。訪れたノードから*到達可能でない場合、訪問されることはありません。 –

答えて

16

vertexから最短距離のvertexが最も優先されるpriority queueを使用してください。最初に、全てverticesは無限の最短距離を有し、出発vertexPQ内側グラフから(そのedgesで)すべてverticesを挿入することによって最短距離0

スタートを有するであろう。 PQからvertexを削除し、すべてedgesを探索してください。現在のvertexの最短距離より短い距離がある場合は、PQの中で最も近い距離をvertexに更新してください。 PQが空でない間続行します。 Verticesedgesを得ていないので、開始点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

+0

テキストには、「** PQが空でないうちに続行**」または「PQが空になるまで続行」のいずれかを読み込む必要があります。擬似コードは正しいです。 –

+0

@CorpusGigantusありがとう、固定 –

関連する問題