是否有可能在ArangoDB中找到许多最短路径变体? 我需要找到很多变种,比如 第一条路径 - 距离2 第二路径距离3 等
OOB是否包括algrorithm? 我想指定在搜索结果中必须找到的节点。
是否支持矢量权重? 我的意思是权重的特征是一个数组,权重按优先顺序排列。
提前致谢。
答案 0 :(得分:1)
最短路径算法只能确定一条最短路径 例如,如果这是完整的图表:
...然后从A
到C
的最短路径查询可能会返回路径A -> B -> C
或A -> D -> C
,但是未定义哪一个(未将边缘权重转换为帐户)。
但是,您可以使用有效的最短路径算法来确定最短路径长度:
RETURN LENGTH(
FOR v IN OUTBOUND
SHORTEST_PATH "verts/A" TO "verts/C" edges
RETURN v
)
示例图的结果为3(包括起始顶点)。现在,减去1以获得边数/遍历深度。您可以运行匹配遍历的模式以查找具有此长度的所有路径(或通过增加最小和最大深度来查找更长的路径)。起点再次为A
,文档ID为v
(或p.vertices[-1]
)的过滤器可确保我们仅检索以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
和2..3
所有三条路径。
请注意,需要两个单独的查询来计算最短路径长度并根据最短路径长度(减1)进行模式匹配,因为最小和最大深度不能是表达式(它们必须在提前,所以要么是数字文字或绑定参数)。