ArangoDB:最长最短路径-不仅仅是距离

ArangoDB:最长最短路径-不仅仅是距离,arangodb,Arangodb,我试图解决一个问题,即在我的图中找到实际的最长最短路径。我正在使用arangosh函数\u diameter,但它只会给出图形直径的数值。我需要知道实际的路径是什么。有可能吗?以下AQL查询返回最长最短路径 LET ids = UNION( (FOR x IN vertices1 RETURN x), (FOR x IN vertices2 RETURN x) ) FOR source IN ids FOR target IN ids FILTER source._id < t

我试图解决一个问题,即在我的图中找到实际的最长最短路径。我正在使用
arangosh
函数
\u diameter
,但它只会给出图形直径的数值。我需要知道实际的路径是什么。有可能吗?

以下AQL查询返回最长最短路径

LET ids = UNION(
(FOR x IN vertices1 RETURN x),
(FOR x IN vertices2 RETURN x)
)
FOR source IN ids
  FOR target IN ids
    FILTER source._id < target._id
      LET path = (FOR v, e IN ANY SHORTEST_PATH source TO target GRAPH @graphName RETURN [v, e]) 
      /* ==> [ [source, null], [v1, source->v1], .... [ target, vn -> target] ] */
  SORT LENGTH(path) DESC
  LIMIT 1
 RETURN path
LET id=UNION(
(对于垂直方向上的x,返回x),
(用于垂直方向上的x 2返回x)
)
用于ids中的源
用于ids中的目标
过滤源。\u id<目标。\u id
设path=(对于v,e,在源到目标图@graphName的任何最短路径中返回[v,e])
/*==>[[source,null],[v1,source->v1],…[target,vn->target]]*/
排序长度(路径)描述
限制1
返回路径
L.1-4通过迭代每个顶点集合,将所有顶点存储在一个数组中。如果只使用一个顶点集合,则可以删除这些线并用顶点集合替换“ID”

L.5-8计算列出的顶点之间的所有最短路径组合,并以
[[source,null],[v1,source->v1],…..[target,vn->target].
的形式提供路径输出

L.7<代码>过滤源。_id<目标。_id仅当您将无向边与
任何
一起使用时才应使用,因为在不使用方向时,路径vertex1->vertex2等于vertex2->vertex1。如果您使用的是入站/出站方向,请删除此行

L.10-11将所有路径按降序排序(最长路径在开头),并将结果集限制为1个对象

L.12最终返回最长最短路径的路径

但是,此查询的成本非常高,在所有顶点上迭代两次,并计算每个顶点对的最短路径,结果为O(n³logn)。因此,此查询只能用于较小的顶点集