【问题标题】:Multiple path search in arangoDBarangoDB 中的多路径搜索
【发布时间】:2017-10-27 16:09:02
【问题描述】:

是否有可能在 ArangoDB 中找到许多最短路径的变体? 我需要找到很多变体,比如 第一条路径 - 距离 2 第二路径距离 3 等等

是否有 OOB 包含算法? 我想指定在搜索结果中必须找到的节点。

是否支持向量权重? 我的意思是,权重的特征是一个数组,其中权重按优先级排列。

提前致谢。

【问题讨论】:

  • 这是 3 个不同的问题,应单独发布。请发布 2 和 3 并附上额外的解释,因为我不清楚您在数据库查询方面的要求是什么以及预期的结果会是什么样子。

标签: arangodb


【解决方案1】:

最短路径算法只能确定一条最短路径。
例如,如果这是完整的图表:

...那么从AC 的最短路径查询可能会返回路径A -> B -> CA -> D -> C,但不确定是哪一个(此处不考虑边权重)。

但是,您可以使用有效的最短路径算法来确定最短路径长度:

RETURN LENGTH(
  FOR v IN OUTBOUND
    SHORTEST_PATH "verts/A" TO "verts/C" edges
    RETURN v
)

示例图的结果为 3(包括起始顶点)。现在,减 1 得到边数/遍历深度。您可以运行模式匹配遍历以查找具有此长度的所有路径(或通过增加最小和最大深度来查找更长的路径)。起点再次是A,对v(或p.vertices[-1])的文档ID 进行过滤可确保我们只检索以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 -> C2..3 所有三个路径。

请注意,需要两个单独的查询来计算最短路径长度并根据最短路径长度(减 1)进行模式匹配,因为 min 和 max depth 不能是表达式(它们必须在提前,所以要么是数字文字或绑定参数)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2011-03-26
    • 2013-11-07
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多