1

新しい質問があります。

グラフのエッジ用に事前計算されたデータを必要とするカスタム アルゴリズムを作成しています。私はこのように AllEdgesIterator を使用します:

AllEdgesIterator it = graph.getAllEdges();
int nbEdges = it.getCount();
int count = 0;

int[] myData = new int[nbEdges];

while (it.next())
{
    count++;
    ...
}

最初の奇妙な点は、nbEdges が 15565 エッジに等しいのに、count が 14417 しかないことです。

2 番目の奇妙な点は、カスタム A* を実行するときです。outEdgeExplorer を使用してノードを参照するだけですが、myData 配列のインデックス 15569 で IndexOutOfBound を取得します。[0 ; にはエッジ インデックスが含まれていると思いました。N-1] ここで、N はエッジの数ですが、本当にそうなのですか?

ここで何が起こっているのでしょうか? ところで、グラフ縮小階層を無効にしました。

毎回素早い回答ありがとうございます!

4

1 に答える 1

1

最初の奇妙な点は、nbEdges が 15565 エッジに等しいのに、count が 14417 しかないことです。

これは、到達不能なサブネットワークが削除される「圧縮」によるものですが、現在、ノードのみがグラフから削除され、エッジは切断され、エッジにとどまります。「アレイ」は削除済みとしてマークされています。これiter.getCountは単なる上限ですが、AllEdgeIterator反復時にそのような未使用のエッジが正しく除外され、正しいカウントが得られます。ただしiter.getCount、カスタム データ配列を割り当てるために使用するのは正しいことです。

2 番目の質問について: これはおそらくQueryGraph、 がより大きな edgeId を持つ新しい仮想エッジを導入したためiter.getCountです。正確なシナリオに応じて、代わりに元のエッジを除外または使用するなど、さまざまなソリューションがあります。

于 2015-06-23T20:37:31.483 に答える