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