我们最近开始使用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
)作为输入,在找到之前我将无法知道路径。
所以,我的问题是如何在不指定最大长度的情况下检索两个节点之间的所有简单路径?
答案 0 :(得分:0)
您可以使用非常高的值来获得最大深度。
但是,通常,最大深度越大,算法花费的时间越长或内存耗尽的风险就越大。这是因为搜索区域按深度呈指数增长。例如,如果您感兴趣的节点平均有N个邻居,那么在深度x,您将必须评估N ^ x个相邻节点(并且还记住您到目前为止发现的内容)。