私は 2 部ネットワーク ジェネレーターを構築しており 、KNeighborhoodFilter の結果をフィルター処理する方法のコードを使用しています。私のネットワークが小さい場合(5000ノード)、完全に機能します。
現在、60.000 のノードと 250.000 のリンクを持つネットワークで作業しています。物事をスピードアップするために、ノードの2-distネイバーを抽出するときに、ノードのランダムサンプルを取得することが可能かどうか疑問に思っています.2-distネイバーの50%だけです...
これを達成する方法についても、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));
私の目標は、このコードをより高速に実行することです。どうぞよろしくお願いいたします。
よろしく、シモーネ