对于一个不那么小的网络(5000 个节点和 25k 个无向边),我想在距离为 2 处找到所有节点的邻居。现在我正在使用:
ArrayList<Node> twoDistNei = new ArrayList<Node>();
Collection<Node> myThreads = g.getNeighbors(u);
for(Node t:myThreads){
Collection<Node> neighbors = g.getNeighbors(t);
for(Node uu:neighbors){
if(!twoDistNei.contains(uu)){
twoDistNei.add(uu);
}
}
}
但它真的很慢,我想知道是否有更有效和快速的方法来完成这个。
编辑:如前所述,我设法使用了 KNeighborhoodFilter,这就是我得出的结论:
KNeighborhoodFilter filter = new KNeighborhoodFilter(u, 2,KNeighborhoodFilter.EdgeType.IN_OUT);
Graph<Node, Edge> transform = filter.transform(zpa);
Collection<Node> vertices = transform.getVertices();
Set<Node> twoDistThreads = new HashSet<Node>();
for (Node v : vertices) {
if(v.getColor().equals("blue")){
twoDistThreads.add((Thread)v);
}
System.out.println("thread " + v.getName() + " has color " + v.getColor());
}
现在我看到过滤器只允许转换()原始网络并用所有选定的节点(加上链接到选定节点的节点......但是为什么呢?)。这意味着我必须过滤新的节点集合以仅捕获我感兴趣的 2-dist 顶点 - 我有一个二分图,其中一组节点是“蓝色”,另一个是“红色”。我在这里做事吗,@Joshua?谢谢您的帮助!
最好的问候,西蒙娜