私のグラフでは、valueというフィールドを持つエッジがあると言います。開始頂点を選択した後、常に最も高い値を持つエッジを選択してパスを見つけたいと思います。不幸にも私は正しいクエリを書く方法を理解できません.ArangoDBで可能でしょうか?ArangoDBで最大の値を持つエッジに続くパスを見つける
答えて
こんにちは、私はあなたが達成したいものをわからないよ、私はあなたの説明から想像することができる2つのシナリオがあります。
最初に:ここに最短パス
ユースケースは、あなたが開始を知っています頂点とターゲット頂点の間にあり、それらの間の最短(または最も安い)パスを探したいとします。 機能は、このようなオプションで距離属性を定義することによって、それを提供することができますSHORTEST_PATH
(https://docs.arangodb.com/3.1/AQL/Graphs/ShortestPath.html#shortest-path-in-aql)に建て:
FOR v IN OUTBOUND @start TO @end @@edgeCollections OPTIONS {weightAttribute: "value", defaultWeight: 1}
RETURN v
これはあなたの価値の最低のいくつかを持って開始から終了までのパス上のすべての頂点を与えます属性。あなたが「最高値」を必要とする場合は、値をコピーでき、最少のエッジがvalues
第二の総最高の合計に持つパスを見つけるために、さまざまな分野で1/value
で再度保存:エッジ
ユースケースは、開始頂点のみを持ち、接続した頂点をエッジの値で並べ替えることです。そこでは単純にトラバーサル文を単純なソートと組み合わせることができます。 (https://docs.arangodb.com/3.1/AQL/Graphs/Traversals.html#graph-traversals-in-aql):
FOR v, e IN OUTBOUND @start @@edgeCollection
SORT e.value DESC
LIMIT 1 /* Only pick the highest one */
REUTRN {v: v, e: e}
第ユースケース:唯一のユースケース2にAQLがA-を知らなければならない任意の深さまで連鎖することができ
最高値を使用して複数の深さを反復先験的にだから、あなただけの最高値を持つエッジを使用して3つのステップを繰り返すしたいと言う:
FOR v1, e1 IN OUTBOUND @start @@edgeCollection
SORT e1.value DESC
LIMIT 1 /* Only pick the highest one */
/* Depth 1 done. now depth 2*/
FOR v2, e2 IN OUTBOUND v1 @@edgeCollection
SORT e2.value DESC
LIMIT 1 /* Only pick the highest one */
FOR v3, e3 IN OUTBOUND v2 @@edgeCollection
SORT e3.value DESC
LIMIT 1 /* Only pick the highest one */
RETURN [v1,v2,v3]
フォースユースケース:
深さは現在で純粋なAQLこの場合には、事前に知られていませんリリース版(3.1)はこれを公式化することはできません。 JavaScriptでトラバーサルモジュール(https://docs.arangodb.com/3.1/Manual/Graphs/Traversals/UsingTraversalObjects.html#getting-started)を使用してFoxxサービス(https://docs.arangodb.com/3.1/Manual/Foxx/#foxx)を使用する方が簡単ですが、これはもう少し柔軟性がありますが、Javascriptでしか実装できません。
- 1. ノードに接続されたエッジの数と最大接続エッジを持つノードを見つける
- 2. グルーピングで最大値を持つ行を見つけにくい
- 3. ディストリビューションの最大値を見つける
- 4. SQL:特定の値の最大値を持つ行を見つける方法
- 5. sql - 最大値を見つける
- 6. Javascriptが最大値を見つける
- 7. 最大数を見つけます。グラフ内のエッジの数
- 8. SQL 1つではなく5つの最大値を見つける
- 9. SVGパス内で最大の矩形を見つける
- 10. 辞書で最も大きな値を持つアイテムを見つける
- 11. CUBLASで最大値と最小値を見つける
- 12. Pythonで最小値と最大値を見つける
- 13. loadashで最小値と最大値を見つける方法
- 14. 最大の出現数を持つ文字を見つける
- 15. 最大の属性を持つノードを見つけるxpath
- 16. DFの各行で最大と最大の最大値を見つけるR
- 17. グラフ:n個のエッジで最小ウェイトのパスを見つけるか?
- 18. 最小限のエッジ交差を持つグラフを見つけるJava関数
- 19. VBA:重複エントリを持つ列の最大値を見つける
- 20. バイナリツリーを使って最大のパスを見つける - javascript
- 21. Matlabが関数の最小値/最大値を見つける
- 22. ファイル内の最小値/最大値を見つける方法
- 23. ユーザ入力の最小値と最大値を見つける
- 24. WPF DataGrid列の最大値と最小値を見つける
- 25. SUNOSで最も古く、最大サイズのファイルを見つける。
- 26. 2つのテーブルの最大値を見つける
- 27. 頂点 - 離散パスの最大カバーを見つける
- 28. 最大コストのパスを見つける方法
- 29. 最大のクラッシュレートを持つ年を見つけますか?
- 30. プロローグ:クエリのいくつかの結果間の最大値を見つける
再生いただきありがとうございますが、ご迷惑をおかけして申し訳ございませんが、ご使用のソリューションが私の使用例に合わないため、明確にしてください。 – DegHueg
2番目のシナリオでは、検索時に表示されるすべてのエッジ全体に制限があります。私は各レベルで最高のバレーエッジを取得したいと思います。ソートとリミットは、各レベルで実行し、各次レベルのエッジを前のレベルの最高値を持つ頂点から選択する必要があります。 F.e. A→BがA→B→Dよりも高い値を持つA→B、C→B→D、C→Eのグラフから – DegHueg
ArangoDBのFoxxマイクロサービスを見ると、複数の単一の深さのクエリを作成することができます。そしてそれは非常に速いです:)あなたが 'サークル'を形成するエッジでループするのを止めたいのであれば、あなたが訪れたすべての頂点の配列を保持し、重複を取得したら、反復を止めて結果を返します。 –