【问题标题】:Bond two differents graphs algorithms using APOC in neo4J在 neo4J 中使用 APOC 绑定两种不同的图算法
【发布时间】:2017-05-02 15:25:13
【问题描述】:

我正在使用 Neo4J 存储网络拓扑并执行一些图形算法,例如 Dijkstra 和 allSimplePaths(使用 apoc 过程)。

我需要知道是否可以使用 allSimplePaths 的输出作为 Dijkstra 算法的输入。换句话说,对 allSimplePaths 过程返回的子图运行 Dijkstra 算法。

我的查询是:

1)

MATCH  (startNode:Hosts {IP:"10.0.0.1"}), (endNode:Hosts {IP:"10.0.0.4"})
CALL apoc.algo.allSimplePaths(startNode, endNode, 'Link2', 6 ) YIELD path
RETURN path

2)

MATCH  (startNode:Hosts {IP:"10.0.0.1"}), (endNode:Hosts {IP:"10.0.0.4"})
CALL apoc.algo.dijkstra(startNode, endNode, 'Link2', 'BANDOUT') YIELD path, weight
RETURN path, weight

那么,我如何将这两个查询合二为一呢?我正在使用 Neo4j 3.0.3 和 apoc 3.0.4。

【问题讨论】:

  • 如何使用 all_simple_paths 的输出作为 dijkstra 的输入?虽然 allSimplePaths 返回路径,但 dijkstra 需要输入开始和结束节点,所以我不确定你想要实现什么

标签: neo4j cypher neo4j-apoc


【解决方案1】:

原始的Dijkstra algorithm 没有将简单路径的集合(即没有重复顶点的路径)作为输入——它只是将开始和结束顶点(以及图形)作为输入。 APOC 过程是该算法的实现,因此无法按照您的要求进行操作。

事实上,如果你已经有了两个顶点之间简单路径的集合,那么无论如何都不需要使用 Dijkstra 算法。您只需将每条简单路径中的边权重相加——总和最小的路径就是您的结果。 (但是,我怀疑这种技术总体上会比仅使用 Dijkstra 算法来获得结果更昂贵。)

【讨论】:

    猜你喜欢
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    相关资源
    最近更新 更多