【问题标题】:Neo4j simple paths between two nodes without specifying the maximum length两个节点之间的 Neo4j 简单路径,未指定最大长度
【发布时间】:2017-06-02 15:35:44
【问题描述】:

我们最近开始使用 Neo4j 数据库,我正在使用以下代码(使用 GraphAlgoFactory API)来查找从一个节点到另一个节点的所有可能路径:

Node node1 = db.getNodeById(startNodeId);
Node node2 = db.getNodeById(endNodeId);

PathExpander<Object> pathExpander = PathExpanders.allTypesAndDirections();
PathFinder<Path> pathsFinder = GraphAlgoFactory.allSimplePaths(pathExpander, 10);
Iterable<Path> paths = pathsFinder.findAllPaths(node1, node2);
//Iterate all paths

如您所见,在上面的代码中,对于allSimplePaths(),我们需要提供最大长度(我给出的10)作为输入,在找到路径之前我无法知道。

那么,我的问题是如何在不指定最大长度的情况下检索两个节点之间的所有简单路径?

【问题讨论】:

    标签: java graph neo4j


    【解决方案1】:

    您可以为最大深度使用一个非常高的值。

    但是,一般来说,最大深度越大,算法执行时间过长或内存不足的风险就越大。这是因为搜索区域随着深度呈指数增长。例如,如果您感兴趣的节点平均有 N 个邻居,那么在深度 x 处,您将必须评估 N^x 个相邻节点(并记住您迄今为止发现的内容)。

    【讨论】:

    • 我认为这是(使用高价值)第二个(但不是一个好的)选择。我正在寻找一种更好的方法来处理这个问题。还有其他选择吗?
    • 不确定您所说的“更好”替代方案是什么意思。任何寻找两个节点之间的所有“简单路径”(即所有没有重复节点的路径)的算法都必须尝试所有适用的路径,这些路径可以任意长。因此,除非您允许任何合适的算法使用较高的最大深度,否则您将无法获得完整的结果。
    猜你喜欢
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多