2017-10-27 3 views
1

ArangoDBで最短パスの多くの亜種を見つける可能性はありますか? 私は 最初の道のように、多くの亜種を見つける必要がある - 距離を2 第2の経路距離3 などarangoDBでの複数パス検索

はありOOBはalgrorithmが含まれていますか? 検索結果に必須のノードを指定したいと思います。

ベクトル重みのサポートはありますか? 私は、体重は体重が優先順位の順に並んでいることを特徴としています。

ありがとうございます。

+0

これらは3つの異なる質問で、別々に投稿する必要があります。 2と3を追加の説明とともに投稿してください。データベースクエリーに関して何を求めているのか、そして期待される結果がどのようなものかはわかりません。 – CoDEmanX

答えて

1

最短パスアルゴリズムは、最短パスを1つしか決定できません。これは完全グラフであれば、例えば

example graph

...その後CからAから最短パスクエリーはパスA -> B -> C又はA -> D -> Cを返すことがあり、それはどちらの未定義'S(エッジを取っていませんここで重さを考慮する)。

あなたは最短経路長を決定するために、しかし効率的な最短経路アルゴリズムを使用することができます。

RETURN LENGTH(
    FOR v IN OUTBOUND 
    SHORTEST_PATH "verts/A" TO "verts/C" edges 
    RETURN v 
) 

結果は、例えば、グラフの3である(開始頂点を含みます)。さて、エッジカウント/トラバーサルの深さを得るために1を引いてください。パターンマッチングトラバーサルを実行して、この長さのパスをすべて見つけることができます(最小深度と最大深度を増やして長さを長くする)。出発点は、再びAで、v(またはp.vertices[-1])の文書IDのフィルタ我々は唯一Cで終わるパスを取得することを保証します:

FOR v, e, p IN 2..2 OUTBOUND "verts/A" edges 
    FILTER v._id == "verts/C" 
    RETURN CONCAT_SEPARATOR(" -> ", p.vertices[*]._key) 
[ 
    "A -> B -> C", 
    "A -> D -> C" 
] 

3..3のトラバース深さがA -> E -> F -> Cを返します、およびすべての3つのパス2..3

最短パス長を計算し、最短パス長(マイナス1)に基づいてパターンマッチングを行うには、minとmaxの深さを式にすることができないため、あらかじめ、数値リテラルまたはバインドパラメータのいずれかを指定してください)。