【问题标题】:How to limit the depth while using dijkstra algorithm in neo4j?在 Neo4j 中使用 dijkstra 算法时如何限制深度?
【发布时间】:2014-01-20 19:19:24
【问题描述】:

我在 neo4j 中应用 dijkstra 算法进行遍历,因为我想要从源到目的地成本最低的路径。是否有可能获得从源到目的地的最便宜的路径,具有最大“n”条边? 我当前的代码是:

public static PathFinder<WeightedPath> dijkstraTraverser = GraphAlgoFactory.dijkstra(expander, "cost");

在正常遍历中,我可以像这样在路径长度上设置一个上限:

public static final TraversalDescription allTraverser = baseTraverser.evaluator( Evaluators.toDepth( 3 ) );

在使用 dijkstra 算法遍历图时,有什么方法可以应用相同的上限?

我正在使用 neo4j v2.0

【问题讨论】:

    标签: java neo4j dijkstra


    【解决方案1】:

    听起来您需要一个单独的对象来跟踪某些状态,即给定路径的总成本;即在您的评估器中,您需要计算路径的成本,然后返回正确的评估。

    创建一个评估器来存储所见的最便宜的路径;以不切实际的高价值开始;每次遇到路径时,更新你见过的最便宜的成本,如果路径比你见过的最便宜,则返回 Evaluation.INCLUDE_AND_CONTINUE;否则返回 Evalution.EXCLUDE_AND_PRUNE

    如果您希望强制执行一些额外的上限,那只是评估器中的一个小额外条件;如果总路径成本 >= 您的限制,则排除并修剪。

    http://api.neo4j.org/2.0.0/org/neo4j/graphdb/traversal/Evaluator.html#evaluate%28org.neo4j.graphdb.Path%29

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      相关资源
      最近更新 更多