可以說,在我的圖中,我已經有了一些叫做價值的字段。選擇開始頂點後,我想通過始終選擇具有最高值的邊來找到路徑。不幸的是我無法弄清楚如何編寫正確的查詢,在ArangoDB中可能嗎?在ArangoDB中查找以下具有最大價值的邊緣的路徑
回答
你好我不確定你想實現什麼,有兩種可能的情況,我可以從你的描述想象:
第一:最短路徑
這裏的用例是你知道的起點頂點和目標頂點,並且您希望找到這兩者之間最短(或最便宜)的路徑。 在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
這會給你從開始的路徑上的所有頂點結束以來最低的一些價值屬性。如果你需要的「最高值」你可以複製的價值,並在不同的領域與1/value
再次保存,以找到在總具有values
二的最高金額邊最少的路徑:邊
的排序用例是你只有起始頂點,並希望獲得連接的頂點,按邊上的值排序。在那裏,您可以簡單地將遍歷語句與簡單的排序結合起來。 (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. 在Neo4j中找到具有直接邊緣的路徑
- 2. 邊緣預算最大簡單路徑
- 3. 在有向圖中尋找邊緣不相交路徑的最大數量
- 4. 查找矩陣路徑來獲得最大的價值
- 5. ArangoDB中的邊緣定義
- 6. 具有頂點和邊緣成本的最短路徑算法
- 7. 在Minimax路徑尋找解決方案中尋找路徑和最大稱量的邊緣?
- 8. 如何最大化路徑的價值?
- 9. 如何以快速方式查找邊緣序列中的所有路徑?
- 10. 尋找具有最大價值
- 11. ArangoDB邊緣建模
- 12. ArangoDB-重複邊緣
- 13. 通過arangodb中的邊緣定義查找聚類
- 14. 在邊緣圖像中查找最大輪廓的像素
- 15. 最有效的最短路徑算法非負邊緣圖
- 16. 尋找排除特定邊緣的最短路徑?
- 17. 找到最大號碼。圖的邊緣
- 18. K負邊緣 - 單源最短路徑
- 19. ArangoDB:找到條件的所有最短路徑
- 20. 如何找到路徑的最大邊將所有對MST
- 21. 在OrientDB的最短路徑中獲取邊緣()
- 22. Python - 如何在ArangoDB中創建邊緣
- 23. 查找具有價值
- 24. 顯示具有最大價值的DIV
- 25. 的最短路徑上最重要的邊緣
- 26. Tikz:兩個邊緣路徑
- 27. 具有彩色邊緣的圖形中具有最少改變次數的路徑
- 28. ArangoDB:遍歷其中邊緣連接到其他邊緣
- 29. 在Enumerable中查找具有最大屬性值的項目
- 30. 尋找最短路徑與無視1的可能性(最長)邊緣
感謝您的回覆,但不幸的是您的解決方案不適合我的使用案例,請讓我澄清一下。 – DegHueg
在你寫的第二個場景中,對搜索期間所有將被視爲邊緣的邊緣有一個限制。我想在每個關卡上獲得一個最高的valye邊緣。因此,應該在每個級別執行排序和限制,並且如果每個下一級別的邊緣應該從前一個級別中具有最高值的頂點選擇。 F.e.從圖:A→B→C→B→D→C→E,其中A→B的值比A→CI的值要高A→B→D – DegHueg
有一個看看ArangoDB中的Foxx微服務,你可以在那裏做,因爲它可以讓你進行多個單一的深度查詢,並始終沿着具有最高「價值」的邊緣進行查詢。而且速度非常快:)如果你想停止在形成一個「圓」的邊上循環,只保留你訪問過的所有頂點的數組,如果你得到一個副本,停止迭代並返回結果。 –