gpt4 book ai didi

java - neo4j 中的随机后序遍历

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:23:07 25 4
gpt4 key购买 nike

我正在尝试使用 Java API 在 Neo4j 中创建算法。该算法称为 GRAIL (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.169.1656&rep=rep1&type=pdf),它将标签分配给图形,以便稍后回答可达性查询。

该算法使用后序深度优先搜索,但每次都是随机遍历(在每次遍历中随机访问节点的每个子节点)。在 neo4j java api 中有一个算法在没有随机性的情况下执行此操作(https://github.com/neo4j/neo4j/blob/7f47df8b5d61b0437e39298cd15e840aa1bcfed8/community/kernel/src/main/java/org/neo4j/graphdb/traversal/PostorderDepthFirstSelector.java),我似乎无法找到执行此操作的方法。

我的代码有一个遍历描述,我想在其中添加一个自定义订单 (BranchOrderingPolicy) 以实现前面提到的算法。像这样:

 .order(**postorderDepthFirst()**)

最佳答案

我的问题的答案相当简单,但经过大量思考。我只需要更改路径扩展器(我创建了自己的),它返回遍历作为下一个的关系,并且有一行简单的代码来随机化关系。代码是:

公共(public)类 customExpander 实现 PathExpander {

private final RelationshipType relationshipType;
private final Direction direction;
private final Integer times;

public customExpander (RelationshipType relationshipType, Direction direction ,Integer times)
{
this.relationshipType = relationshipType;
this.direction = direction;
this.times=times;
}



@Override
public Iterable<Relationship> expand(Path path, BranchState state)
{
List<Relationship> results = new ArrayList<Relationship>();
for ( Relationship r : path.endNode().getRelationships( relationshipType, direction ) )
{
results.add( r );
}
Collections.shuffle(results);
}
return results;
}


@Override
public PathExpander<String> reverse()
{
return null;
}

关于java - neo4j 中的随机后序遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30186625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com