0

プログラムでダイクストラアルゴリズムを使用しています。頂点とエッジのあるグラフがあるとします。ソース頂点「a」から始まるすべてのエッジを想像すると、次のようになります。

a-->b        
a-->c   and  
a-->d  

頂点「f」で終わるすべてのエッジは次のとおりです。

b-->f
m-->f
e-->f
w-->f

最初から知っておく必要があるのは、エッジa- > bを開始エッジ(開始点として「a」を想定)にしたいので、 「a」の他のネイバーを検索する必要がないということです。(a-->c and a-->d)

また、 m-> fで終わるパスのみが必要です(宛先として「f」を想定)。つまり、次のようなパスは必要ありません。b-->f,m-->f,e-->f,w-->f

それで、これらのエッジを含まないように最初のグラフをトリミングしてから、それにダイクストラを適用するのは良い考えですか?

実際にこれらのエッジを見つけるには、いくつかの検索が必要です。(時間やCPU使用率を考慮して)検索を実行してグラフをトリミングする価値があるのでしょうか、それとももっと良い方法があるのでしょうか。

4

1 に答える 1

1

それまでのパスを検索し、bその後mに必要なエッジを追加してみませんか?本当に必要な場合は、特別なケースを追加して、スタックを含むエッジを除外af、スタックに追加されないようにすることができます。これにより、全体的に高速になるかどうかを確認する必要があります。本当に巨大なもの(とにかく一定の係数で速度を変えるだけです)。

于 2010-08-23T21:14:36.327 に答える