我正在构建一个二分网络生成器,我正在使用 如何过滤 KNeighborhoodFilter 的结果中的代码?当我的网络很小(5000 个节点)时,它可以完美运行。
现在我正在使用具有 60.000 个节点和 250.000 个链接的网络。为了加快速度,我想知道在提取节点的 2-dist 邻居时是否可以随机抽取节点样本,比如 50% 的 2-dist 邻居......
我真的不知道如何实现这一点,也不知道如果不破解 KNeighborhoodFilter 类本身是否可行(我知道我将无法做到这一点......)。
现在我得到结果并随机选择一个样本,但我不知道我是否走在正确的道路上:
Predicate<Node> onlyUsers = new Predicate<Node>() {
@Override
public boolean apply(Node node) {
return node.getName().startsWith("u");
}
};
// find neighbors of nodes with degree i
Filter<Node, Edge> filter = new KNeighborhoodFilter<Node, Edge>(u, 2, KNeighborhoodFilter.EdgeType.IN_OUT);
// retrieve everything at distance 2 from node u
List<Node> twoDistNei = Lists.newArrayList(filter.transform(zpa).getVertices());
// sample the collection
List<Node> sampledUsers = Lists.newArrayList();
for (int i = 0; i < 2000; i++) {
sampledUsers.add(twoDistNei.get(context.getRNG().nextInt(twoDistNei.size())));
}
Set<Node> sampledNodesHashed = Sets.newHashSet(sampledNodes);
Set<Node> twoDistUsers = Sets.newHashSet(Collections2.filter(sampledNodesHashed, onlyUsers));
我的目标是让这段代码运行得更快。非常感谢您的宝贵时间。
最好的问候,西蒙娜