可以说,在我的图中,我已经有了一些叫做价值的字段。选择开始顶点后,我想通过始终选择具有最高值的边来找到路径。不幸的是我无法弄清楚如何编写正确的查询,在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. 边缘预算最大简单路径
- 2. ArangoDB中的边缘定义
- 3. 在Minimax路径寻找解决方案中寻找路径和最大称量的边缘?
- 4. 寻找具有最大价值
- 5. ArangoDB-重复边缘
- 6. ArangoDB边缘建模
- 7. 通过arangodb中的边缘定义查找聚类
- 8. 在边缘图像中查找最大轮廓的像素
- 9. 最有效的最短路径算法非负边缘图
- 10. 找到最大号码。图的边缘
- 11. 如何找到路径的最大边将所有对MST
- 12. 在OrientDB的最短路径中获取边缘()
- 13. Python - 如何在ArangoDB中创建边缘
- 14. 查找具有价值
- 15. 显示具有最大价值的DIV
- 16. 的最短路径上最重要的边缘
- 17. 具有彩色边缘的图形中具有最少改变次数的路径
- 18. 具有彩色边的加权图中的最短路径
- 19. 使用opencv查找道路边缘
- 20. 具有固定最大边缘长度的平面图
- 21. 以编程方式在ArangoDB中创建边缘
- 22. SQL帮助查找最大总价值
- 23. 检测边缘(连接的边缘)并查找边缘长度和连接的组件回转半径
- 24. 如何从一个顶点获得边缘属性的最大值的边缘
- 25. 如何选择具有最大价值
- 26. 基于多边形的路径查找
- 27. 查找矩阵中的最短路径
- 28. 查找DLV中的最短路径
- 29. MSBuild查找工具路径
- 30. 删除边缘后对最短路径的影响
感谢您的回复,但不幸的是您的解决方案不适合我的使用案例,请让我澄清一下。 – DegHueg
在你写的第二个场景中,对搜索期间所有将被视为边缘的边缘有一个限制。我想在每个关卡上获得一个最高的valye边缘。因此,应该在每个级别执行排序和限制,并且如果每个下一级别的边缘应该从前一个级别中具有最高值的顶点选择。 F.e.从图:A→B→C→B→D→C→E,其中A→B的值比A→CI的值要高A→B→D – DegHueg
有一个看看ArangoDB中的Foxx微服务,你可以在那里做,因为它可以让你进行多个单一的深度查询,并始终沿着具有最高“价值”的边缘进行查询。而且速度非常快:)如果你想停止在形成一个“圆”的边上循环,只保留你访问过的所有顶点的数组,如果你得到一个副本,停止迭代并返回结果。 –